mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-03 05:29:12 +00:00
- Convert Input Fields into PlainTextEdit - Display Each Selected File on a Separate Line in Field - Set Height of FileBrowser Input Field based on Number of Lines/Files
77 lines
2.9 KiB
Python
77 lines
2.9 KiB
Python
# External Packages
|
|
from PyQt6 import QtWidgets
|
|
from PyQt6.QtCore import QDir
|
|
|
|
# Internal Packages
|
|
from src.utils.config import SearchType
|
|
|
|
|
|
class FileBrowser(QtWidgets.QWidget):
|
|
def __init__(self, title, search_type: SearchType=None, default_files=[]):
|
|
QtWidgets.QWidget.__init__(self)
|
|
layout = QtWidgets.QHBoxLayout()
|
|
self.setLayout(layout)
|
|
self.search_type = search_type
|
|
|
|
self.filter_name = self.getFileFilter(search_type)
|
|
self.dirpath = QDir.homePath()
|
|
|
|
self.label = QtWidgets.QLabel()
|
|
self.label.setText(title)
|
|
self.label.setFixedWidth(95)
|
|
self.label.setWordWrap(True)
|
|
layout.addWidget(self.label)
|
|
|
|
self.lineEdit = QtWidgets.QPlainTextEdit(self)
|
|
self.lineEdit.setFixedWidth(180)
|
|
self.setFiles(default_files)
|
|
self.lineEdit.setFixedHeight(min(7+20*len(self.lineEdit.toPlainText().split('\n')),90))
|
|
self.lineEdit.textChanged.connect(self.updateFieldHeight)
|
|
layout.addWidget(self.lineEdit)
|
|
|
|
self.button = QtWidgets.QPushButton('Select')
|
|
self.button.clicked.connect(self.storeFilesSelectedInFileDialog)
|
|
layout.addWidget(self.button)
|
|
layout.addStretch()
|
|
|
|
def getFileFilter(self, search_type):
|
|
if search_type == SearchType.Org:
|
|
return 'Org-Mode Files (*.org)'
|
|
elif search_type == SearchType.Ledger:
|
|
return 'Beancount Files (*.bean *.beancount)'
|
|
elif search_type == SearchType.Markdown:
|
|
return 'Markdown Files (*.md *.markdown)'
|
|
elif search_type == SearchType.Music:
|
|
return 'Org-Music Files (*.org)'
|
|
elif search_type == SearchType.Image:
|
|
return 'Images (*.jp[e]g)'
|
|
|
|
def storeFilesSelectedInFileDialog(self):
|
|
filepaths = []
|
|
if self.search_type == SearchType.Image:
|
|
filepaths.append(QtWidgets.QFileDialog.getExistingDirectory(self, caption='Choose Folder',
|
|
directory=self.dirpath))
|
|
else:
|
|
filepaths.extend(QtWidgets.QFileDialog.getOpenFileNames(self, caption='Choose Files',
|
|
directory=self.dirpath,
|
|
filter=self.filter_name)[0])
|
|
self.setFiles(filepaths)
|
|
|
|
def setFiles(self, paths):
|
|
self.filepaths = paths
|
|
if not self.filepaths or len(self.filepaths) == 0:
|
|
return
|
|
elif len(self.filepaths) == 1:
|
|
self.lineEdit.setPlainText(self.filepaths[0])
|
|
else:
|
|
self.lineEdit.setPlainText("\n".join(self.filepaths))
|
|
|
|
def getPaths(self):
|
|
if self.lineEdit.toPlainText() == '':
|
|
return []
|
|
else:
|
|
return self.lineEdit.toPlainText().split('\n')
|
|
|
|
def updateFieldHeight(self):
|
|
self.lineEdit.setFixedHeight(min(7+20*len(self.lineEdit.toPlainText().split('\n')),90))
|