aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortassaron2017-06-17 11:15:24 -0400
committertassaron2017-06-17 11:15:24 -0400
commitffc5966042e1490930396dd541e4c9497a6b7a73 (patch)
tree149ef1341ec1407ce81d5e9377814e721dfe3bc7
parentaa9926590b6fce4099eb75c0c84b4fd886dce0d9 (diff)
ask to save changes before changing current project
also limited total # of components to 50
-rw-r--r--components/color.py2
-rw-r--r--core.py19
-rw-r--r--mainwindow.py88
3 files changed, 75 insertions, 34 deletions
diff --git a/components/color.py b/components/color.py
index 22b57c0..cb75839 100644
--- a/components/color.py
+++ b/components/color.py
@@ -96,11 +96,13 @@ class Component(__base__.Component):
self.page.pushButton_color2.setEnabled(False)
self.page.checkBox_trans.setEnabled(False)
self.page.checkBox_stretch.setEnabled(False)
+ self.page.comboBox_spread.setEnabled(False)
else:
self.page.lineEdit_color2.setEnabled(True)
self.page.pushButton_color2.setEnabled(True)
self.page.checkBox_trans.setEnabled(True)
self.page.checkBox_stretch.setEnabled(True)
+ self.page.comboBox_spread.setEnabled(True)
self.page.fillWidget.setCurrentIndex(self.fillType)
self.parent.drawPreview()
diff --git a/core.py b/core.py
index dcea783..e4a7a6c 100644
--- a/core.py
+++ b/core.py
@@ -79,6 +79,8 @@ class Core():
def insertComponent(self, compPos, moduleIndex):
if compPos < 0:
compPos = len(self.selectedComponents) -1
+ if len(self.selectedComponents) > 50:
+ return None
component = self.modules[moduleIndex].Component(
moduleIndex, compPos)
@@ -100,6 +102,10 @@ class Core():
self.selectedComponents.pop(i)
self.componentListChanged()
+ def clearComponents(self):
+ self.selectedComponents = list()
+ self.componentListChanged()
+
def updateComponent(self, i):
# print('updating %s' % self.selectedComponents[i])
self.selectedComponents[i].update()
@@ -164,24 +170,27 @@ class Core():
clearThis = True
# insert component into the loader
- loader.insertComponent(
+ i = loader.insertComponent(
self.moduleIndexFor(name), -1)
+ if i == None:
+ break
+
try:
if 'preset' in preset and preset['preset'] != None:
- self.selectedComponents[-1].loadPreset(
+ self.selectedComponents[i].loadPreset(
preset
)
else:
- self.selectedComponents[-1].loadPreset(
+ self.selectedComponents[i].loadPreset(
preset,
preset['preset']
)
except KeyError as e:
print('%s missing value %s' %
- (self.selectedComponents[-1], e))
+ (self.selectedComponents[i], e))
if clearThis:
- self.clearPreset(-1, loader)
+ self.clearPreset(i, loader)
except:
errcode = 1
data = sys.exc_info()
diff --git a/mainwindow.py b/mainwindow.py
index 0d6b130..78a54be 100644
--- a/mainwindow.py
+++ b/mainwindow.py
@@ -102,7 +102,6 @@ class MainWindow(QtCore.QObject):
self.createAudioVisualisation)
window.pushButton_Cancel.clicked.connect(self.stopVideo)
- window.setWindowTitle("Audio Visualizer")
for i, container in enumerate(self.core.encoder_options['containers']):
window.comboBox_videoContainer.addItem(container['name'])
@@ -212,7 +211,7 @@ class MainWindow(QtCore.QObject):
# Show the window and load current project
window.show()
self.currentProject = self.settings.value("currentProject")
- if self.autosaveExists():
+ if self.autosaveExists(identical=True):
# delete autosave if it's identical to the project
os.remove(self.autosavePath)
@@ -222,12 +221,10 @@ class MainWindow(QtCore.QObject):
% os.path.basename(self.currentProject)[:-4],
showCancel=True)
if ch:
- os.remove(self.currentProject)
- os.rename(self.autosavePath, self.currentProject)
+ self.saveProjectChanges()
else:
os.remove(self.autosavePath)
-
- self.openProject(self.currentProject)
+ self.openProject(self.currentProject, prompt=False)
self.drawPreview()
def cleanUp(self):
@@ -236,6 +233,13 @@ class MainWindow(QtCore.QObject):
self.previewThread.wait()
self.autosave()
+ def updateWindowTitle(self):
+ appName = 'Audio Visualizer'
+ if self.currentProject:
+ appName += ' - %s' % \
+ os.path.basename(self.currentProject)[:-4]
+ self.window.setWindowTitle(appName)
+
@QtCore.pyqtSlot(int, dict)
def updateComponentTitle(self, pos, presetStore=False):
if type(presetStore) == dict:
@@ -290,22 +294,24 @@ class MainWindow(QtCore.QObject):
self.settings.setValue('outputVideoBitrate', currentVideoBitrate)
self.settings.setValue('outputAudioBitrate', currentAudioBitrate)
- def autosave(self):
+ def autosave(self, force=False):
if not self.currentProject:
if os.path.exists(self.autosavePath):
os.remove(self.autosavePath)
- elif time.time() - self.lastAutosave >= 2.0:
+ elif force or time.time() - self.lastAutosave >= 2.0:
self.core.createProjectFile(self.autosavePath)
self.lastAutosave = time.time()
- def autosaveExists(self):
+ def autosaveExists(self, identical=True):
if self.currentProject and os.path.exists(self.autosavePath) \
- and filecmp.cmp(self.autosavePath, self.currentProject):
- with open(self.autosavePath, 'r') as f:
- p = [line for line in f]
- return True if len(p) > 1 else False
- else:
- return False
+ and filecmp.cmp(
+ self.autosavePath, self.currentProject) == identical:
+ return True
+ return False
+
+ def saveProjectChanges(self):
+ os.remove(self.currentProject)
+ os.rename(self.autosavePath, self.currentProject)
def openInputFileDialog(self):
inputDir = self.settings.value("inputDir", expanduser("~"))
@@ -417,10 +423,10 @@ class MainWindow(QtCore.QObject):
self.settings.setValue('outputHeight', res[1])
self.drawPreview()
- def drawPreview(self):
+ def drawPreview(self, force=False):
self.newTask.emit(self.core.selectedComponents)
# self.processTask.emit()
- self.autosave()
+ self.autosave(force)
def showPreviewImage(self, image):
self.previewWindow.changePixmap(image)
@@ -433,6 +439,10 @@ class MainWindow(QtCore.QObject):
index = self.core.insertComponent(
compPos, moduleIndex)
+ if index == None:
+ self.showMessage(msg="Too many components!")
+ return None
+
row = componentList.insertItem(
index,
self.core.selectedComponents[index].__doc__)
@@ -447,6 +457,7 @@ class MainWindow(QtCore.QObject):
stackedWidget.setCurrentIndex(index)
self.core.updateComponent(index)
+ return index
def removeComponent(self):
componentList = self.window.listWidget_componentList
@@ -514,26 +525,20 @@ class MainWindow(QtCore.QObject):
def clear(self):
'''Get a blank slate'''
- self.core.selectedComponents = []
+ self.core.clearComponents()
self.window.listWidget_componentList.clear()
for widget in self.pages:
self.window.stackedWidget.removeWidget(widget)
self.pages = []
def createNewProject(self):
- if self.autosaveExists():
- ch = self.showMessage(
- msg="You have unsaved changes in project '%s'. "
- "Save before starting a new project?"
- % os.path.basename(self.currentProject)[:-4],
- showCancel=True)
- if ch:
- self.saveCurrentProject()
+ self.openSaveChangesDialog('starting a new project')
self.clear()
self.currentProject = None
self.settings.setValue("currentProject", None)
- self.drawPreview()
+ self.drawPreview(True)
+ self.updateWindowTitle()
def saveCurrentProject(self):
if self.currentProject:
@@ -541,6 +546,20 @@ class MainWindow(QtCore.QObject):
else:
self.openSaveProjectDialog()
+ def openSaveChangesDialog(self, phrase):
+ if self.autosaveExists(identical=False):
+ ch = self.showMessage(
+ msg="You have unsaved changes in project '%s'. "
+ "Save before %s?" % \
+ (os.path.basename(self.currentProject)[:-4],
+ phrase),
+ showCancel=True)
+ if ch:
+ self.saveProjectChanges()
+
+ if os.path.exists(self.autosavePath):
+ os.remove(self.autosavePath)
+
def openSaveProjectDialog(self):
filename = QtGui.QFileDialog.getSaveFileName(
self.window, "Create Project File",
@@ -553,7 +572,7 @@ class MainWindow(QtCore.QObject):
self.settings.setValue("projectDir", os.path.dirname(filename))
self.settings.setValue("currentProject", filename)
self.currentProject = filename
-
+ self.updateWindowTitle()
self.core.createProjectFile(filename)
def openOpenProjectDialog(self):
@@ -563,16 +582,27 @@ class MainWindow(QtCore.QObject):
"Project Files (*.avp)")
self.openProject(filename)
- def openProject(self, filepath):
+ def openProject(self, filepath, prompt=True):
+ print('opening', filepath)
if not filepath or not os.path.exists(filepath) \
or not filepath.endswith('.avp'):
+ self.updateWindowTitle()
return
+
self.clear()
+ # ask to save any changes that are about to get deleted
+ if prompt:
+ self.openSaveChangesDialog('opening another project')
+
self.currentProject = filepath
+ self.updateWindowTitle()
self.settings.setValue("currentProject", filepath)
self.settings.setValue("projectDir", os.path.dirname(filepath))
# actually load the project using core method
self.core.openProject(self, filepath)
+ if self.window.listWidget_componentList.count() == 0:
+ self.drawPreview()
+ self.autosave(True)
def showMessage(self, **kwargs):
parent = kwargs['parent'] if 'parent' in kwargs else self.window