From acf22900256d75c469c78efbd98139e3bfab0e93 Mon Sep 17 00:00:00 2001 From: DH4 Date: Wed, 7 Jun 2017 14:32:05 -0500 Subject: Created projects and presets button. FIXME: Hookup New Project menu item. Hookup preset manager. --- presetmanager.ui | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 presetmanager.ui (limited to 'presetmanager.ui') diff --git a/presetmanager.ui b/presetmanager.ui new file mode 100644 index 0000000..7496169 --- /dev/null +++ b/presetmanager.ui @@ -0,0 +1,104 @@ + + + presetmanager + + + + 0 + 0 + 542 + 360 + + + + Preset Manager + + + + + + + + Search + + + + + + + + 200 + 0 + + + + + + + + + + + + + 0 + 0 + + + + + + + + + + QLayout::SetMinimumSize + + + + + Import + + + + + + + Export + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Rename + + + + + + + Delete + + + + + + + + + + -- cgit v1.2.3 From 6093e701e151af96464b564e275db4664d828a82 Mon Sep 17 00:00:00 2001 From: tassaron Date: Wed, 7 Jun 2017 20:30:37 -0400 Subject: laying some foundations for new preset implementation --- mainwindow.py | 88 +++++++++++++++++++++++++++++++++----------------------- presetmanager.py | 70 ++++++++++++++++++++++++++++++++++++++++++++ presetmanager.ui | 17 ++++++----- 3 files changed, 132 insertions(+), 43 deletions(-) create mode 100644 presetmanager.py (limited to 'presetmanager.ui') diff --git a/mainwindow.py b/mainwindow.py index 7ea1410..2c1a95a 100644 --- a/mainwindow.py +++ b/mainwindow.py @@ -2,7 +2,7 @@ from os.path import expanduser from queue import Queue from importlib import import_module from collections import OrderedDict -from PyQt4 import QtCore, QtGui +from PyQt4 import QtCore, QtGui, uic from PyQt4.QtCore import QSettings, Qt from PyQt4.QtGui import QDesktopServices, QMenu import sys @@ -16,6 +16,7 @@ import time import core import preview_thread import video_thread +from presetmanager import PresetManager from main import LoadDefaultSettings @@ -59,7 +60,7 @@ class MainWindow(QtCore.QObject): self.selectedComponents = [] self.lastAutosave = time.time() - # create data directory, load/create settings + # Create data directory, load/create settings self.dataDir = QDesktopServices.storageLocation( QDesktopServices.DataLocation) self.autosavePath = os.path.join(self.dataDir, 'autosave.avp') @@ -74,7 +75,13 @@ class MainWindow(QtCore.QObject): if not os.path.exists(neededDirectory): os.mkdir(neededDirectory) - # + self.presetManager = PresetManager( + uic.loadUi( + os.path.join(os.path.dirname(os.path.realpath(__file__)), + 'presetmanager.ui')), + self) + + # Make queues/timers for the preview thread self.previewQueue = Queue() self.previewThread = QtCore.QThread(self) self.previewWorker = preview_thread.Worker(self, self.previewQueue) @@ -86,7 +93,7 @@ class MainWindow(QtCore.QObject): self.timer.timeout.connect(self.processTask.emit) self.timer.start(500) - # begin decorating the window and connecting events + # Begin decorating the window and connecting events window.toolButton_selectAudioFile.clicked.connect( self.openInputFileDialog) @@ -145,6 +152,7 @@ class MainWindow(QtCore.QObject): os.path.dirname(os.path.realpath(__file__)), "background.png")) window.verticalLayout_previewWrapper.addWidget(self.previewWindow) + # Make component buttons self.modules = self.findComponents() self.compMenu = QMenu() for i, comp in enumerate(self.modules): @@ -153,12 +161,20 @@ class MainWindow(QtCore.QObject): lambda item=i: self.insertComponent(item)) self.window.pushButton_addComponent.setMenu(self.compMenu) + window.listWidget_componentList.clicked.connect( lambda _: self.changeComponentWidget()) self.window.pushButton_removeComponent.clicked.connect( lambda _: self.removeComponent()) + self.window.listWidget_componentList.setContextMenuPolicy( + QtCore.Qt.CustomContextMenu) + self.window.listWidget_componentList.connect( + self.window.listWidget_componentList, + QtCore.SIGNAL("customContextMenuRequested(QPoint)"), + self.componentContextMenu) + currentRes = str(self.settings.value('outputWidth'))+'x' + \ str(self.settings.value('outputHeight')) for i, res in enumerate(self.resolutions): @@ -174,11 +190,6 @@ class MainWindow(QtCore.QObject): self.window.pushButton_listMoveDown.clicked.connect( self.moveComponentDown) - '''self.window.pushButton_savePreset.clicked.connect( - self.openSavePresetDialog) - self.window.comboBox_openPreset.currentIndexChanged.connect( - self.openPreset)''' - # Configure the Projects Menu self.projectMenu = QMenu() action = self.projectMenu.addAction("New Project") @@ -200,14 +211,7 @@ class MainWindow(QtCore.QObject): self.openPresetManager ) - '''self.window.pushButton_saveAs.clicked.connect( - self.openSaveProjectDialog) - self.window.pushButton_saveProject.clicked.connect( - self.saveCurrentProject) - self.window.pushButton_openProject.clicked.connect( - self.openOpenProjectDialog)''' - - # show the window and load current project + # Show the window and load current project window.show() self.currentProject = self.settings.value("currentProject") if self.currentProject and os.path.exists(self.autosavePath) \ @@ -217,8 +221,9 @@ class MainWindow(QtCore.QObject): if self.currentProject and os.path.exists(self.autosavePath): ch = self.showMessage( - "Restore unsaved changes in project '%s'?" - % os.path.basename(self.currentProject)[:-4], True) + msg="Restore unsaved changes in project '%s'?" + % os.path.basename(self.currentProject)[:-4], + showCancel=True) if ch: os.remove(self.currentProject) os.rename(self.autosavePath, self.currentProject) @@ -325,7 +330,7 @@ class MainWindow(QtCore.QObject): self.selectedComponents) else: self.showMessage( - "You must select an audio file and output filename.") + msg="You must select an audio file and output filename.") def progressBarUpdated(self, value): self.window.progressBar_createVideo.setValue(value) @@ -480,10 +485,9 @@ class MainWindow(QtCore.QObject): self.window.stackedWidget.setCurrentIndex(row + 1) self.drawPreview() - # Preset manager for importing, exporting, renaming, - # and deleting presets. def openPresetManager(self): - return + '''Preset manager for importing, exporting, renaming, deleting''' + self.presetManager.show() def updateOpenPresetComboBox(self, component): self.window.comboBox_openPreset.clear() @@ -507,8 +511,8 @@ class MainWindow(QtCore.QObject): badName = True if badName: # some filesystems don't like bizarre characters - self.showMessage("Preset names must contain only letters, \ - numbers, and spaces.") + self.showMessage(msg="Preset names must contain only \ + letters, numbers, and spaces.") continue if OK and newName: index = self.window.listWidget_componentList.currentRow() @@ -529,8 +533,8 @@ class MainWindow(QtCore.QObject): filepath = os.path.join(dirname, filename) if os.path.exists(filepath): ch = self.showMessage( - "%s already exists! Overwrite it?" % filename, - True, QtGui.QMessageBox.Warning) + msg="%s already exists! Overwrite it?" % filename, + showCancel=True, icon=QtGui.QMessageBox.Warning) if not ch: return # remove old copies of the preset @@ -663,20 +667,20 @@ class MainWindow(QtCore.QObject): typ, value, _ = sys.exc_info() msg = '%s: %s' % (typ.__name__, value) self.showMessage( - "Project file '%s' is corrupted." % filepath, False, - QtGui.QMessageBox.Warning, msg) + msg="Project file '%s' is corrupted." % filepath, + showCancel=False, + icon=QtGui.QMessageBox.Warning, + detail=msg) except KeyError as e: # probably just an old version, still loadable print('project file missing value: %s' % e) - def showMessage( - self, string, showCancel=False, - icon=QtGui.QMessageBox.Information, detail=None): + def showMessage(self, **kwargs): msg = QtGui.QMessageBox() - msg.setIcon(icon) - msg.setText(string) - msg.setDetailedText(detail) - if showCancel: + msg.setText(kwargs['msg']) + msg.setIcon(kwargs['icon'] if 'icon' in kwargs else QtGui.QMessageBox.Information) + msg.setDetailedText(kwargs['detail'] if 'detail' in kwargs else None) + if 'showCancel'in kwargs and kwargs['showCancel']: msg.setStandardButtons( QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel) else: @@ -685,3 +689,15 @@ class MainWindow(QtCore.QObject): if ch == 1024: return True return False + + def componentContextMenu(self, QPos): + self.menu = QtGui.QMenu() + menuItem = self.menu.addAction("Save Preset") + self.connect(menuItem, QtCore.SIGNAL("triggered()"), self.openSavePresetDialog) + parentPosition = self.window.listWidget_componentList.mapToGlobal(QtCore.QPoint(0, 0)) + self.menu.move(parentPosition + QPos) + self.menu.show() + + def menuItemClicked(self): + currentItemName=str(self.window.listWidget_componentList.currentItem().text() ) + print(currentItemName) diff --git a/presetmanager.py b/presetmanager.py new file mode 100644 index 0000000..cc6c482 --- /dev/null +++ b/presetmanager.py @@ -0,0 +1,70 @@ +from PyQt4 import QtGui +#import sys +import os + +class PresetManager(QtGui.QDialog): + def __init__(self, window, parent): + super().__init__() + self.parent = parent + self.presetDir = parent.presetDir + self.window = window + self.presets = self.findPresets() + + # create filter box and preset list + self.drawFilterList() + self.window.comboBox_filter.currentIndexChanged.connect( + lambda: self.drawPresetList(self.window.comboBox_filter.currentText()) + ) + self.drawPresetList('*') + + # make auto-completion for search bar + self.autocomplete = QtGui.QStringListModel() + completer = QtGui.QCompleter() + completer.setModel(self.autocomplete) + self.window.lineEdit_search.setCompleter(completer) + + def show(self): + presetNames = [] + for presetList in self.presets.values(): + for preset in presetList: + presetNames.append(preset[1]) + self.autocomplete.setStringList(presetNames) + self.presets = self.findPresets() + self.drawFilterList() + self.drawPresetList('*') + self.window.show() + + def findPresets(self): + parseList = [] + for dirpath, dirnames, filenames in os.walk(self.presetDir): + # anything without a subdirectory must be a preset folder + if dirnames: + continue + for preset in filenames: + compName = os.path.basename(os.path.dirname(dirpath)) + compVers = os.path.basename(dirpath) + try: + parseList.append((compName, int(compVers), preset)) + except ValueError: + continue + return { compName : \ + [ (vers, preset) \ + for name, vers, preset in parseList \ + if name == compName \ + ] \ + for compName, _, __ in parseList \ + } + + def drawPresetList(self, filter): + self.window.listWidget_presets.clear() + for component, presets in self.presets.items(): + if filter != '*' and component != filter: + continue + for vers, preset in presets: + self.window.listWidget_presets.addItem('%s: %s' % (component, preset)) + + def drawFilterList(self): + self.window.comboBox_filter.clear() + self.window.comboBox_filter.addItem('*') + for component in self.presets: + self.window.comboBox_filter.addItem(component) diff --git a/presetmanager.ui b/presetmanager.ui index 7496169..610de91 100644 --- a/presetmanager.ui +++ b/presetmanager.ui @@ -17,14 +17,17 @@ - + + + + Search - + 200 @@ -38,7 +41,7 @@ - + 0 @@ -55,14 +58,14 @@ QLayout::SetMinimumSize - + Import - + Export @@ -82,14 +85,14 @@ - + Rename - + Delete -- cgit v1.2.3 From c51d86dd74c0548a0e81725534b78e23f6b6acaa Mon Sep 17 00:00:00 2001 From: tassaron Date: Thu, 8 Jun 2017 22:31:02 -0400 Subject: preset searchbar works, ui experimentally changed closebutton where I keep expecting it to be --- presetmanager.py | 53 ++++++++++++++++++++++------------------------------- presetmanager.ui | 26 +++++++++++++++++++++++++- video_thread.py | 2 +- 3 files changed, 48 insertions(+), 33 deletions(-) (limited to 'presetmanager.ui') diff --git a/presetmanager.py b/presetmanager.py index d7189b1..ff50444 100644 --- a/presetmanager.py +++ b/presetmanager.py @@ -8,7 +8,7 @@ import core class PresetManager(QtGui.QDialog): def __init__(self, window, parent): - super().__init__() + super().__init__(parent.window) self.parent = parent self.core = self.parent.core self.presetDir = self.core.presetDir @@ -20,27 +20,30 @@ class PresetManager(QtGui.QDialog): # connect button signals self.window.pushButton_delete.clicked.connect(self.openDeletePresetDialog) self.window.pushButton_rename.clicked.connect(self.openRenamePresetDialog) + self.window.pushButton_close.clicked.connect(self.close) # create filter box and preset list self.drawFilterList() self.window.comboBox_filter.currentIndexChanged.connect( - lambda: self.drawPresetList(self.window.comboBox_filter.currentText()) + lambda: self.drawPresetList( + self.window.comboBox_filter.currentText(), self.window.lineEdit_search.text() + ) ) - self.drawPresetList('*') # make auto-completion for search bar self.autocomplete = QtGui.QStringListModel() completer = QtGui.QCompleter() completer.setModel(self.autocomplete) self.window.lineEdit_search.setCompleter(completer) + self.window.lineEdit_search.textChanged.connect( + lambda: self.drawPresetList( + self.window.comboBox_filter.currentText(), self.window.lineEdit_search.text() + ) + ) + self.drawPresetList('*') def show(self): '''Open a new preset manager window from the mainwindow''' - presetNames = [] - for presetList in self.presets.values(): - for preset in presetList: - presetNames.append(preset[1]) - self.autocomplete.setStringList(presetNames) self.findPresets() self.drawFilterList() self.drawPresetList('*') @@ -70,19 +73,23 @@ class PresetManager(QtGui.QDialog): for compName, _, __ in parseList \ } - def drawPresetList(self, filter=None): + def drawPresetList(self, compFilter=None, presetFilter=''): self.window.listWidget_presets.clear() - if filter: - self.lastFilter = str(filter) + if compFilter: + self.lastFilter = str(compFilter) else: - filter = str(self.lastFilter) + compFilter = str(self.lastFilter) self.presetRows = [] + presetNames = [] for component, presets in self.presets.items(): - if filter != '*' and component != filter: + if compFilter != '*' and component != compFilter: continue for vers, preset in presets: - self.window.listWidget_presets.addItem('%s: %s' % (component, preset)) - self.presetRows.append((component, vers, preset)) + if not presetFilter or presetFilter in preset: + self.window.listWidget_presets.addItem('%s: %s' % (component, preset)) + self.presetRows.append((component, vers, preset)) + presetNames.append(preset) + self.autocomplete.setStringList(presetNames) def drawFilterList(self): self.window.comboBox_filter.clear() @@ -224,19 +231,3 @@ class PresetManager(QtGui.QDialog): self.findPresets() self.drawPresetList() break - - - - - - - - - - - - - - - - diff --git a/presetmanager.ui b/presetmanager.ui index 610de91..a7ef15f 100644 --- a/presetmanager.ui +++ b/presetmanager.ui @@ -2,6 +2,9 @@ presetmanager + + Qt::ApplicationModal + 0 @@ -22,7 +25,7 @@ - Search + Filter by name @@ -48,6 +51,9 @@ 0 + + true + @@ -98,6 +104,24 @@ + + + + Close + + + + + + + + + + + <html><head/><body><p><span style=" font-style:italic;">Right-click components in the list to create presets.</span></p></body></html> + + + diff --git a/video_thread.py b/video_thread.py index f5354be..fc877bd 100644 --- a/video_thread.py +++ b/video_thread.py @@ -26,7 +26,7 @@ class Worker(QtCore.QObject): QtCore.QObject.__init__(self) self.core = core.Core() self.core.settings = parent.settings - self.modules = parent.modules + self.modules = parent.core.modules self.stackedWidget = parent.window.stackedWidget self.parent = parent parent.videoTask.connect(self.createVideo) -- cgit v1.2.3 From d3f979ef2461a3de701df0d5add545b80dfe23ad Mon Sep 17 00:00:00 2001 From: tassaron Date: Thu, 8 Jun 2017 22:56:33 -0400 Subject: start connecting import/export buttons --- core.py | 6 ++++++ mainwindow.py | 8 ++++---- presetmanager.py | 23 ++++++++++++++++++++++- presetmanager.ui | 29 +++++++++++++++++++++-------- 4 files changed, 53 insertions(+), 13 deletions(-) (limited to 'presetmanager.ui') diff --git a/core.py b/core.py index 06367cf..776af55 100644 --- a/core.py +++ b/core.py @@ -85,6 +85,12 @@ class Core(): with open(filepath, 'w') as f: f.write(Core.stringOrderedDict(saveValueStore)) + def importPreset(self, filepath): + print(filepath) + + def exportPreset(self, exportName, compName, vers, origName): + pass + def loadEncoderOptions(self): file_path = os.path.join(self.wd, 'encoder-options.json') with open(file_path) as json_file: diff --git a/mainwindow.py b/mainwindow.py index 8812e7f..45262f7 100644 --- a/mainwindow.py +++ b/mainwindow.py @@ -60,15 +60,15 @@ class MainWindow(QtCore.QObject): # Create data directory, load/create settings self.dataDir = self.core.dataDir + self.autosavePath = os.path.join(self.dataDir, 'autosave.avp') + self.settings = QSettings( + os.path.join(self.dataDir, 'settings.ini'), QSettings.IniFormat) + LoadDefaultSettings(self) self.presetManager = PresetManager( uic.loadUi( os.path.join(os.path.dirname(os.path.realpath(__file__)), 'presetmanager.ui')), self) - self.autosavePath = os.path.join(self.dataDir, 'autosave.avp') - self.settings = QSettings( - os.path.join(self.dataDir, 'settings.ini'), QSettings.IniFormat) - LoadDefaultSettings(self) if not os.path.exists(self.dataDir): os.makedirs(self.dataDir) for neededDirectory in ( diff --git a/presetmanager.py b/presetmanager.py index ff50444..73a2431 100644 --- a/presetmanager.py +++ b/presetmanager.py @@ -10,7 +10,8 @@ class PresetManager(QtGui.QDialog): def __init__(self, window, parent): super().__init__(parent.window) self.parent = parent - self.core = self.parent.core + self.core = parent.core + self.settings = parent.settings self.presetDir = self.core.presetDir self.window = window self.findPresets() @@ -21,6 +22,8 @@ class PresetManager(QtGui.QDialog): self.window.pushButton_delete.clicked.connect(self.openDeletePresetDialog) self.window.pushButton_rename.clicked.connect(self.openRenamePresetDialog) self.window.pushButton_close.clicked.connect(self.close) + self.window.pushButton_import.clicked.connect(self.openImportDialog) + self.window.pushButton_export.clicked.connect(self.openExportDialog) # create filter box and preset list self.drawFilterList() @@ -231,3 +234,21 @@ class PresetManager(QtGui.QDialog): self.findPresets() self.drawPresetList() break + + def openImportDialog(self): + filename = QtGui.QFileDialog.getOpenFileName( + self.window, "Import Preset File", + self.settings.value("projectDir"), + "Preset Files (*.avl)") + if filename: + self.core.importPreset(filename) + + def openExportDialog(self): + filename = QtGui.QFileDialog.getSaveFileName( + self.window, "Export Preset", + self.settings.value("projectDir"), + "Preset Files (*.avl)") + if filename: + index = self.window.listWidget_presets.currentRow() + comp, vers, name = self.presetRows[index] + self.core.exportPreset(filename, comp, vers, name) diff --git a/presetmanager.ui b/presetmanager.ui index a7ef15f..47568fb 100644 --- a/presetmanager.ui +++ b/presetmanager.ui @@ -9,7 +9,7 @@ 0 0 - 542 + 475 360 @@ -104,13 +104,6 @@ - - - - Close - - - @@ -122,6 +115,26 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + -- cgit v1.2.3 From b048312882f80d43e3d8b1573814badf70fe3b92 Mon Sep 17 00:00:00 2001 From: tassaron Date: Sat, 10 Jun 2017 12:10:05 -0400 Subject: close button works, dialogs properly parented hint text wording changed by IamDH4's suggestion --- mainwindow.py | 4 +++- presetmanager.py | 18 ++++++++++++------ presetmanager.ui | 6 +++--- 3 files changed, 18 insertions(+), 10 deletions(-) (limited to 'presetmanager.ui') diff --git a/mainwindow.py b/mainwindow.py index 45262f7..3e49ab2 100644 --- a/mainwindow.py +++ b/mainwindow.py @@ -601,7 +601,9 @@ class MainWindow(QtCore.QObject): print('project file missing value: %s' % e) def showMessage(self, **kwargs): - msg = QtGui.QMessageBox() + parent = kwargs['parent'] if 'parent' in kwargs else self.window + msg = QtGui.QMessageBox(parent) + msg.setModal(True) msg.setText(kwargs['msg']) msg.setIcon( kwargs['icon'] if 'icon' in kwargs else QtGui.QMessageBox.Information) diff --git a/presetmanager.py b/presetmanager.py index 73a2431..04a9042 100644 --- a/presetmanager.py +++ b/presetmanager.py @@ -21,9 +21,9 @@ class PresetManager(QtGui.QDialog): # connect button signals self.window.pushButton_delete.clicked.connect(self.openDeletePresetDialog) self.window.pushButton_rename.clicked.connect(self.openRenamePresetDialog) - self.window.pushButton_close.clicked.connect(self.close) self.window.pushButton_import.clicked.connect(self.openImportDialog) self.window.pushButton_export.clicked.connect(self.openExportDialog) + self.window.pushButton_close.clicked.connect(self.window.close) # create filter box and preset list self.drawFilterList() @@ -91,7 +91,8 @@ class PresetManager(QtGui.QDialog): if not presetFilter or presetFilter in preset: self.window.listWidget_presets.addItem('%s: %s' % (component, preset)) self.presetRows.append((component, vers, preset)) - presetNames.append(preset) + if preset not in presetNames: + presetNames.append(preset) self.autocomplete.setStringList(presetNames) def drawFilterList(self): @@ -120,7 +121,7 @@ class PresetManager(QtGui.QDialog): ) if OK: if core.Core.badName(newName): - self.warnMessage() + self.warnMessage(self.parent.window) continue if newName: if index != -1: @@ -185,7 +186,9 @@ class PresetManager(QtGui.QDialog): comp, vers, name = self.presetRows[row] ch = self.parent.showMessage( msg='Really delete %s?' % name, - showCancel=True, icon=QtGui.QMessageBox.Warning + showCancel=True, + icon=QtGui.QMessageBox.Warning, + parent=self.window ) if not ch: return @@ -197,10 +200,11 @@ class PresetManager(QtGui.QDialog): filepath = os.path.join(self.presetDir, comp, str(vers), name) os.remove(filepath) - def warnMessage(self): + def warnMessage(self, window=None): self.parent.showMessage( msg='Preset names must contain only letters, ' - 'numbers, and spaces.') + 'numbers, and spaces.', + parent=window if window else self.window) def openRenamePresetDialog(self): presetList = self.window.listWidget_presets @@ -242,6 +246,8 @@ class PresetManager(QtGui.QDialog): "Preset Files (*.avl)") if filename: self.core.importPreset(filename) + self.findPresets() + self.drawPresetList() def openExportDialog(self): filename = QtGui.QFileDialog.getSaveFileName( diff --git a/presetmanager.ui b/presetmanager.ui index 47568fb..b3c25fe 100644 --- a/presetmanager.ui +++ b/presetmanager.ui @@ -9,8 +9,8 @@ 0 0 - 475 - 360 + 497 + 377 @@ -111,7 +111,7 @@ - <html><head/><body><p><span style=" font-style:italic;">Right-click components in the list to create presets.</span></p></body></html> + <html><head/><body><p><span style=" font-size:10pt; font-style:italic;">Right-click components in the main window to create presets</span></p></body></html> -- cgit v1.2.3 From 59c2c090ab9275bc1146329536d43855a46d34f4 Mon Sep 17 00:00:00 2001 From: tassaron Date: Sat, 10 Jun 2017 14:52:01 -0400 Subject: made basic export function, moved more code into core --- core.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++++-------- mainwindow.py | 28 ++++++----------------- presetmanager.py | 12 ++++++---- presetmanager.ui | 8 ++++++- 4 files changed, 81 insertions(+), 37 deletions(-) (limited to 'presetmanager.ui') diff --git a/core.py b/core.py index 776af55..c50918f 100644 --- a/core.py +++ b/core.py @@ -77,19 +77,69 @@ class Core(): def moduleIndexFor(self, compIndex): return self.selectedModules[compIndex] - def createPresetFile(self, compName, vers, saveValueStore, filename): - dirname = os.path.join(self.presetDir, compName, str(vers)) - if not os.path.exists(dirname): - os.makedirs(dirname) - filepath = os.path.join(dirname, filename) - with open(filepath, 'w') as f: - f.write(Core.stringOrderedDict(saveValueStore)) - def importPreset(self, filepath): print(filepath) - def exportPreset(self, exportName, compName, vers, origName): - pass + def exportPreset(self, exportPath, compName, vers, origName): + internalPath = os.path.join(self.presetDir, compName, str(vers), origName) + if not os.path.exists(internalPath): + return + if os.path.exists(exportPath): + os.remove(exportPath) + with open(internalPath, 'r') as f: + internalData = [line for line in f] + try: + saveValueStore = dict(eval(internalData[0].strip())) + self.createPresetFile( + compName, vers, + origName, saveValueStore, + exportPath + ) + except: + # TODO: add proper warning message + print('couldn\'t export %s' % exportPath) + + def createPresetFile( + self, compName, vers, presetName, saveValueStore, filepath=''): + '''Create a preset file (.avl) at filepath using args. + Or if filepath is empty, create an internal preset using + the args for the filepath.''' + if not filepath: + dirname = os.path.join(self.presetDir, compName, str(vers)) + if not os.path.exists(dirname): + os.makedirs(dirname) + filepath = os.path.join(dirname, presetName) + internal = True + else: + if not filepath.endswith('.avl'): + filepath += '.avl' + internal = False + + with open(filepath, 'w') as f: + if not internal: + f.write('[Components]\n') + f.write('%s\n' % compName) + f.write('%s\n' % str(vers)) + f.write(Core.stringOrderedDict(saveValueStore)) + + def createProjectFile(self, filepath): + '''Create a project file (.avp) using the current program state''' + try: + if not filepath.endswith(".avp"): + filepath += '.avp' + if os.path.exists(filepath): + os.remove(filepath) + with open(filepath, 'w') as f: + print('creating %s' % filepath) + f.write('[Components]\n') + for comp in self.selectedComponents: + saveValueStore = comp.savePreset() + f.write('%s\n' % str(comp)) + f.write('%s\n' % str(comp.version())) + f.write('%s\n' % Core.stringOrderedDict(saveValueStore)) + return True + except: + return False def loadEncoderOptions(self): file_path = os.path.join(self.wd, 'encoder-options.json') diff --git a/mainwindow.py b/mainwindow.py index 3e49ab2..5c929c3 100644 --- a/mainwindow.py +++ b/mainwindow.py @@ -284,7 +284,7 @@ class MainWindow(QtCore.QObject): if os.path.exists(self.autosavePath): os.remove(self.autosavePath) elif time.time() - self.lastAutosave >= 2.0: - self.createProjectFile(self.autosavePath) + self.core.createProjectFile(self.autosavePath) self.lastAutosave = time.time() def autosaveExists(self): @@ -504,7 +504,7 @@ class MainWindow(QtCore.QObject): def saveCurrentProject(self): if self.currentProject: - self.createProjectFile(self.currentProject) + self.core.createProjectFile(self.currentProject) else: self.openSaveProjectDialog() @@ -515,25 +515,11 @@ class MainWindow(QtCore.QObject): "Project Files (*.avp)") if not filename: return - self.createProjectFile(filename) - - def createProjectFile(self, filepath): - if not filepath.endswith(".avp"): - filepath += '.avp' - if os.path.exists(filepath): - os.remove(filepath) - with open(filepath, 'w') as f: - print('creating %s' % filepath) - f.write('[Components]\n') - for comp in self.core.selectedComponents: - saveValueStore = comp.savePreset() - f.write('%s\n' % str(comp)) - f.write('%s\n' % str(comp.version())) - f.write('%s\n' % core.Core.stringOrderedDict(saveValueStore)) - if filepath != self.autosavePath: - self.settings.setValue("projectDir", os.path.dirname(filepath)) - self.settings.setValue("currentProject", filepath) - self.currentProject = filepath + self.settings.setValue("projectDir", os.path.dirname(filename)) + self.settings.setValue("currentProject", filename) + self.currentProject = filename + + self.core.createProjectFile(filename) def openOpenProjectDialog(self): filename = QtGui.QFileDialog.getOpenFileName( diff --git a/presetmanager.py b/presetmanager.py index 04a9042..7e4efbb 100644 --- a/presetmanager.py +++ b/presetmanager.py @@ -1,4 +1,4 @@ -from PyQt4 import QtGui +from PyQt4 import QtGui, QtCore from collections import OrderedDict import string import os @@ -13,10 +13,12 @@ class PresetManager(QtGui.QDialog): self.core = parent.core self.settings = parent.settings self.presetDir = self.core.presetDir - self.window = window self.findPresets() + self.lastFilter = '*' self.presetRows = [] # list of (comp, vers, name) tuples + self.window = window + self.window.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) # connect button signals self.window.pushButton_delete.clicked.connect(self.openDeletePresetDialog) @@ -130,17 +132,17 @@ class PresetManager(QtGui.QDialog): componentName = str(self.selectedComponents[index]).strip() vers = self.selectedComponents[index].version() self.createNewPreset( - componentName, vers, saveValueStore, newName) + componentName, vers, newName, saveValueStore) self.selectedComponents[index].currentPreset = newName self.findPresets() self.drawPresetList() break - def createNewPreset(self, compName, vers, saveValueStore, filename): + def createNewPreset(self, compName, vers, filename, saveValueStore): path = os.path.join(self.presetDir, compName, str(vers), filename) if self.presetExists(path): return - self.core.createPresetFile(compName, vers, saveValueStore, filename) + self.core.createPresetFile(compName, vers, filename, saveValueStore) def presetExists(self, path): if os.path.exists(path): diff --git a/presetmanager.ui b/presetmanager.ui index b3c25fe..5257b1c 100644 --- a/presetmanager.ui +++ b/presetmanager.ui @@ -3,7 +3,10 @@ presetmanager - Qt::ApplicationModal + Qt::NonModal + + + true @@ -92,6 +95,9 @@ + + true + Rename -- cgit v1.2.3