laying some foundations for new preset implementation

This commit is contained in:
tassaron 2017-06-07 20:30:37 -04:00
parent 6f2f02b709
commit 6093e701e1
3 changed files with 132 additions and 43 deletions

View File

@ -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)

70
presetmanager.py Normal file
View File

@ -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)

View File

@ -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>