mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-07-01 12:26:26 +00:00
init
This commit is contained in:
91
ui/implements/components/fileSelector.py
Normal file
91
ui/implements/components/fileSelector.py
Normal file
@ -0,0 +1,91 @@
|
||||
from PySide6.QtCore import QDir, QFileInfo, QMetaObject, Qt, Signal, Slot
|
||||
from PySide6.QtWidgets import QFileDialog, QWidget
|
||||
|
||||
from ui.designer.components.fileSelector_ui import Ui_FileSelector
|
||||
|
||||
|
||||
class FileSelector(Ui_FileSelector, QWidget):
|
||||
accepted = Signal()
|
||||
filesSelected = Signal()
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.setupUi(self)
|
||||
self.reset()
|
||||
|
||||
self.elidedLabel.setElideMode(Qt.TextElideMode.ElideMiddle)
|
||||
|
||||
self.accepted.connect(self.filesSelected)
|
||||
self.accepted.connect(self.updateLabel)
|
||||
self.filesSelected.connect(self.updateLabel)
|
||||
|
||||
self.__mode = self.getOpenFileNames
|
||||
|
||||
def getOpenFileNames(self):
|
||||
selectedFiles, filter = QFileDialog.getOpenFileNames(
|
||||
self,
|
||||
self.__caption,
|
||||
self.__startDirectory,
|
||||
self.__filter,
|
||||
"",
|
||||
options=self.__options,
|
||||
)
|
||||
if selectedFiles:
|
||||
self.__selectedFiles = selectedFiles
|
||||
self.accepted.emit()
|
||||
|
||||
def getExistingDirectory(self):
|
||||
selectedDir = QFileDialog.getExistingDirectory(
|
||||
self,
|
||||
self.__caption,
|
||||
self.__startDirectory,
|
||||
QFileDialog.Option.ShowDirsOnly | self.__options,
|
||||
)
|
||||
if selectedDir:
|
||||
self.__selectedFiles = [selectedDir]
|
||||
self.accepted.emit()
|
||||
|
||||
def selectFile(self, filename: str):
|
||||
fileInfo = QFileInfo(filename)
|
||||
if not fileInfo.exists():
|
||||
return
|
||||
|
||||
self.__selectedFiles = [fileInfo.absoluteFilePath()]
|
||||
self.__startDirectory = fileInfo.dir().absolutePath()
|
||||
self.filesSelected.emit()
|
||||
|
||||
def selectedFiles(self):
|
||||
return self.__selectedFiles
|
||||
|
||||
def setNameFilters(self, filters: list[str]):
|
||||
self.__filter = ";;".join(filters) if filters else ""
|
||||
|
||||
def setOptions(self, options: QFileDialog.Option):
|
||||
self.__options = options
|
||||
|
||||
def setMode(self, mode):
|
||||
if mode in [self.getOpenFileNames, self.getExistingDirectory]:
|
||||
self.__mode = mode
|
||||
else:
|
||||
raise ValueError("Invalid mode")
|
||||
|
||||
def reset(self):
|
||||
self.__selectedFiles = []
|
||||
self.__caption = None
|
||||
self.__startDirectory = QDir.currentPath()
|
||||
self.__filter = ""
|
||||
self.__options = QFileDialog.Option(0)
|
||||
|
||||
self.updateLabel()
|
||||
|
||||
def updateLabel(self):
|
||||
selectedFiles = self.selectedFiles()
|
||||
|
||||
if not selectedFiles:
|
||||
self.elidedLabel.setText("...")
|
||||
else:
|
||||
self.elidedLabel.setText("<br>".join(selectedFiles))
|
||||
|
||||
@Slot()
|
||||
def on_selectButton_clicked(self):
|
||||
self.__mode()
|
Reference in New Issue
Block a user