diff --git a/app.py b/app.py index f864584..8bc1522 100644 --- a/app.py +++ b/app.py @@ -6,7 +6,7 @@ import mapper import extract from PyQt5 import uic from PyQt5.QtGui import QTextCursor, QStandardItemModel, QStandardItem -from PyQt5.QtWidgets import QMessageBox, QMainWindow, QApplication, QFileDialog, QHeaderView +from PyQt5.QtWidgets import QMessageBox, QMainWindow, QApplication, QFileDialog, QHeaderView, QAbstractItemView, QTreeWidgetItem from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, QThread, QMetaType, Qt QMetaType.type('QTextCursor') @@ -45,7 +45,7 @@ class BackgroundWorker(QObject): def run(self): if self.action == "load": print("Loading files and mapping if necessary...") - fileStructure = extract.WwiseExtract(self.map, "mp3", *self.folders, progress=self.progress.emit).load_folder() + fileStructure = extract.WwiseExtract(self.map, "mp3", *self.folders.values(), progress=self.progress.emit).load_folder() print("Done !") self.finished.emit({"action": "load", "content": fileStructure}) @@ -83,7 +83,7 @@ class AnimeWwise(QMainWindow): self.loadFilesButton.clicked.connect(lambda: self.start()) - self.actionClearTreeView.triggered.connect(lambda: self.resetTreeView()) + self.actionClearTreeView.triggered.connect(lambda: self.resetTreeWidget()) self.actionExit.triggered.connect(lambda: self.close()) def getMaps(self): @@ -112,7 +112,7 @@ class AnimeWwise(QMainWindow): _map = None self.tabs.setTabEnabled(0, False) - self.resetTreeView() + self.resetTreeWidget() self.extractThread = QThread() self.extractWorker = BackgroundWorker("load", self.folders, _map, self.outputFormat.currentText()) @@ -130,7 +130,7 @@ class AnimeWwise(QMainWindow): def handleFinished(self, data): if data["action"] == "load": self.fileStructure = data["content"] - self.updateTreeView() + self.updateTreeWidget() self.tabs.setTabEnabled(0, True) self.tabs.setTabEnabled(1, True) self.tabs.setCurrentIndex(1) @@ -142,39 +142,46 @@ class AnimeWwise(QMainWindow): self.console.setTextCursor(cursor) self.console.ensureCursorVisible() - def resetTreeView(self): - model = QStandardItemModel() - self.treeView.setModel(model) + def resetTreeWidget(self): + self.treeWidget.clear() self.tabs.setTabEnabled(1, False) - def updateTreeView(self): - model = QStandardItemModel() - model.setHorizontalHeaderLabels(["Name", "Offset", "Size"]) - # TODO: non swappable columns + def updateTreeWidget(self): + self.treeWidget.clear() + self.treeWidget.setColumnCount(3) + self.treeWidget.setHeaderLabels(["Name", "Offset", "Size"]) + + self.addItems(None, self.fileStructure) - root_item = model.invisibleRootItem() - self.addItems(root_item, self.fileStructure) + self.treeWidget.expandAll() + self.treeWidget.header().setSectionResizeMode(0, QHeaderView.Stretch) + self.treeWidget.header().setSectionResizeMode(1, QHeaderView.ResizeToContents) + self.treeWidget.header().setSectionResizeMode(2, QHeaderView.ResizeToContents) + self.treeWidget.setHeaderHidden(False) - self.treeView.setModel(model) - self.treeView.expandAll() - - self.treeView.header().setSectionResizeMode(0, QHeaderView.Stretch) - self.treeView.header().setSectionResizeMode(1, QHeaderView.ResizeToContents) - self.treeView.header().setSectionResizeMode(2, QHeaderView.ResizeToContents) + self.treeWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) + self.treeWidget.setDragDropMode(QAbstractItemView.NoDragDrop) def addItems(self, parent, element): for folder_name in sorted(element.get("folders", {}).keys()): folder_content = element["folders"][folder_name] - folder_item = QStandardItem(folder_name) - folder_item.setCheckable(True) - # folder_item.setTristate(True) - parent.appendRow([folder_item, QStandardItem(""), QStandardItem("")]) + folder_item = QTreeWidgetItem([folder_name, "", ""]) + folder_item.setFlags(folder_item.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) + folder_item.setCheckState(0, Qt.Unchecked) + if parent is None: + self.treeWidget.addTopLevelItem(folder_item) + else: + parent.addChild(folder_item) self.addItems(folder_item, folder_content) for file in sorted(element.get("files", [])): - file_item = QStandardItem(str(file[0])) - file_item.setCheckable(True) - parent.appendRow([file_item, QStandardItem(str(file[1])), QStandardItem(str(file[2]))]) + file_item = QTreeWidgetItem([str(file[0]), str(file[1]), str(file[2])]) + file_item.setFlags(file_item.flags() | Qt.ItemIsUserCheckable) + file_item.setCheckState(0, Qt.Unchecked) + if parent is None: + self.treeWidget.addTopLevelItem(file_item) + else: + parent.addChild(file_item) if __name__ == "__main__": app = QApplication(sys.argv) diff --git a/gui.ui b/gui.ui index 91da4e8..844a1ac 100644 --- a/gui.ui +++ b/gui.ui @@ -208,7 +208,7 @@ Browse - + 0 @@ -217,6 +217,14 @@ 611 + + 1 + + + + 1 + +