aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mainwindow.py88
-rw-r--r--presetmanager.py70
-rw-r--r--presetmanager.ui17
3 files changed, 132 insertions, 43 deletions
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 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
- <widget class="QLineEdit" name="lineEdit">
+ <widget class="QLineEdit" name="lineEdit_search">
<property name="text">
+ <string/>
+ </property>
+ <property name="placeholderText">
<string>Search</string>
</property>
</widget>
</item>
<item>
- <widget class="QComboBox" name="comboBox">
+ <widget class="QComboBox" name="comboBox_filter">
<property name="minimumSize">
<size>
<width>200</width>
@@ -38,7 +41,7 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
- <widget class="QListWidget" name="listWidget_2">
+ <widget class="QListWidget" name="listWidget_presets">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
@@ -55,14 +58,14 @@
<enum>QLayout::SetMinimumSize</enum>
</property>
<item>
- <widget class="QPushButton" name="pushButton">
+ <widget class="QPushButton" name="pushButton_import">
<property name="text">
<string>Import</string>
</property>
</widget>
</item>
<item>
- <widget class="QPushButton" name="pushButton_2">
+ <widget class="QPushButton" name="pushButton_export">
<property name="text">
<string>Export</string>
</property>
@@ -82,14 +85,14 @@
</spacer>
</item>
<item>
- <widget class="QPushButton" name="pushButton_3">
+ <widget class="QPushButton" name="pushButton_rename">
<property name="text">
<string>Rename</string>
</property>
</widget>
</item>
<item>
- <widget class="QPushButton" name="pushButton_4">
+ <widget class="QPushButton" name="pushButton_delete">
<property name="text">
<string>Delete</string>
</property>