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