parent
e92e9d79f9
commit
680214f518
|
@ -22,9 +22,9 @@ class Command(QtCore.QObject):
|
|||
self.parser = argparse.ArgumentParser(
|
||||
description='Create a visualization for an audio file',
|
||||
epilog='EXAMPLE COMMAND: main.py myvideotemplate.avp '
|
||||
'-i ~/Music/song.mp3 -o ~/video.mp4 '
|
||||
'-c 0 image path=~/Pictures/thisWeeksPicture.jpg '
|
||||
'-c 1 video "preset=My Logo" -c 2 vis layout=classic')
|
||||
'-i ~/Music/song.mp3 -o ~/video.mp4 '
|
||||
'-c 0 image path=~/Pictures/thisWeeksPicture.jpg '
|
||||
'-c 1 video "preset=My Logo" -c 2 vis layout=classic')
|
||||
self.parser.add_argument(
|
||||
'-i', '--input', metavar='SOUND',
|
||||
help='input audio file')
|
||||
|
@ -113,10 +113,11 @@ class Command(QtCore.QObject):
|
|||
if name.capitalize() in compName:
|
||||
return compName
|
||||
|
||||
compFileNames = [ \
|
||||
os.path.splitext(os.path.basename(
|
||||
mod.__file__))[0] \
|
||||
for mod in self.core.modules \
|
||||
compFileNames = [
|
||||
os.path.splitext(
|
||||
os.path.basename(mod.__file__)
|
||||
)[0]
|
||||
for mod in self.core.modules
|
||||
]
|
||||
for i, compFileName in enumerate(compFileNames):
|
||||
if name.lower() in compFileName:
|
||||
|
|
|
@ -39,7 +39,7 @@ class Component(QtCore.QObject):
|
|||
then update self.page widgets using the preset dict.
|
||||
'''
|
||||
self.currentPreset = presetName \
|
||||
if presetName != None else presetDict['preset']
|
||||
if presetName is not None else presetDict['preset']
|
||||
|
||||
def preFrameRender(self, **kwargs):
|
||||
'''Triggered only before a video is exported (video_thread.py)
|
||||
|
@ -66,8 +66,8 @@ class Component(QtCore.QObject):
|
|||
print('Couldn\'t locate preset "%s"' % preset)
|
||||
quit(1)
|
||||
else:
|
||||
print('Opening "%s" preset on layer %s' % \
|
||||
(preset, self.compPos))
|
||||
print('Opening "%s" preset on layer %s' % (
|
||||
preset, self.compPos))
|
||||
self.core.openPreset(path, self.compPos, preset)
|
||||
else:
|
||||
print(
|
||||
|
@ -88,8 +88,8 @@ class Component(QtCore.QObject):
|
|||
and return this as an RGB string and QPushButton stylesheet.
|
||||
In a subclass apply stylesheet to any color selection widgets
|
||||
'''
|
||||
dialog = QtGui.QColorDialog()
|
||||
dialog.setOption(QtGui.QColorDialog.ShowAlphaChannel, True)
|
||||
dialog = QtWidgets.QColorDialog()
|
||||
dialog.setOption(QtWidgets.QColorDialog.ShowAlphaChannel, True)
|
||||
color = dialog.getColor()
|
||||
if color.isValid():
|
||||
RGBstring = '%s,%s,%s' % (
|
||||
|
@ -142,10 +142,10 @@ class Component(QtCore.QObject):
|
|||
return image
|
||||
'''
|
||||
|
||||
|
||||
class BadComponentInit(Exception):
|
||||
def __init__(self, arg, name):
|
||||
string = \
|
||||
'''################################
|
||||
string = '''################################
|
||||
Mandatory argument "%s" not specified
|
||||
in %s instance initialization
|
||||
###################################'''
|
||||
|
|
|
@ -53,7 +53,7 @@ class Component(__base__.Component):
|
|||
page.spinBox_height.valueChanged.connect(self.update)
|
||||
page.checkBox_trans.stateChanged.connect(self.update)
|
||||
|
||||
self.fillLabels = [ \
|
||||
self.fillLabels = [
|
||||
'Solid',
|
||||
'Linear Gradient',
|
||||
'Radial Gradient',
|
||||
|
@ -126,8 +126,8 @@ class Component(__base__.Component):
|
|||
r, g, b = self.color1
|
||||
shapeSize = (self.sizeWidth, self.sizeHeight)
|
||||
# in default state, skip all this logic and return a plain fill
|
||||
if self.fillType==0 and shapeSize == (width, height) \
|
||||
and self.x == 0 and self.y == 0:
|
||||
if self.fillType == 0 and shapeSize == (width, height) \
|
||||
and self.x == 0 and self.y == 0:
|
||||
return Image.new("RGBA", (width, height), (r, g, b, 255))
|
||||
|
||||
frame = self.blankFrame(width, height)
|
||||
|
@ -143,9 +143,11 @@ class Component(__base__.Component):
|
|||
image = ImageQt(frame)
|
||||
painter = QtGui.QPainter(image)
|
||||
if self.stretch:
|
||||
w = width; h = height
|
||||
w = width
|
||||
h = height
|
||||
else:
|
||||
w = self.sizeWidth; h = self.sizeWidth
|
||||
w = self.sizeWidth
|
||||
h = self.sizeWidth
|
||||
|
||||
if self.fillType == 1: # Linear Gradient
|
||||
brush = QtGui.QLinearGradient(
|
||||
|
@ -170,7 +172,8 @@ class Component(__base__.Component):
|
|||
else:
|
||||
brush.setColorAt(1.0, QColor(*self.color2))
|
||||
painter.setBrush(brush)
|
||||
painter.drawRect(self.x, self.y,
|
||||
painter.drawRect(
|
||||
self.x, self.y,
|
||||
self.sizeWidth, self.sizeHeight)
|
||||
painter.end()
|
||||
imBytes = image.bits().asstring(image.numBytes())
|
||||
|
|
|
@ -85,7 +85,7 @@ class Component(__base__.Component):
|
|||
|
||||
def pickImage(self):
|
||||
imgDir = self.settings.value("backgroundDir", os.path.expanduser("~"))
|
||||
filename = QtGui.QFileDialog.getOpenFileName(
|
||||
filename, _ = QtWidgets.QFileDialog.getOpenFileName(
|
||||
self.page, "Choose Image", imgDir,
|
||||
"Image Files (%s)" % " ".join(self.imageFormats))
|
||||
if filename:
|
||||
|
|
|
@ -41,8 +41,8 @@ class Video:
|
|||
'-i', self.videoPath,
|
||||
'-f', 'image2pipe',
|
||||
'-pix_fmt', 'rgba',
|
||||
'-filter:v', 'scale=%s:%s' %
|
||||
scale(self.scale, self.width, self.height, str),
|
||||
'-filter:v', 'scale=%s:%s' % scale(
|
||||
self.scale, self.width, self.height, str),
|
||||
'-vcodec', 'rawvideo', '-',
|
||||
]
|
||||
|
||||
|
@ -180,7 +180,7 @@ class Component(__base__.Component):
|
|||
|
||||
def pickVideo(self):
|
||||
imgDir = self.settings.value("backgroundDir", os.path.expanduser("~"))
|
||||
filename = QtGui.QFileDialog.getOpenFileName(
|
||||
filename, _ = QtWidgets.QFileDialog.getOpenFileName(
|
||||
self.page, "Choose Video",
|
||||
imgDir, "Video Files (%s)" % " ".join(self.videoFormats)
|
||||
)
|
||||
|
@ -199,8 +199,8 @@ class Component(__base__.Component):
|
|||
'-i', self.videoPath,
|
||||
'-f', 'image2pipe',
|
||||
'-pix_fmt', 'rgba',
|
||||
'-filter:v', 'scale=%s:%s' %
|
||||
scale(self.scale, width, height, str),
|
||||
'-filter:v', 'scale=%s:%s' % scale(
|
||||
self.scale, width, height, str),
|
||||
'-vcodec', 'rawvideo', '-',
|
||||
'-ss', '90',
|
||||
'-vframes', '1',
|
||||
|
@ -238,6 +238,7 @@ class Component(__base__.Component):
|
|||
def commandHelp(self):
|
||||
print('Load a video:\n path=/filepath/to/video.mp4')
|
||||
|
||||
|
||||
def scale(scale, width, height, returntype=None):
|
||||
width = (float(width) / 100.0) * float(scale)
|
||||
height = (float(height) / 100.0) * float(scale)
|
||||
|
@ -248,6 +249,7 @@ def scale(scale, width, height, returntype=None):
|
|||
else:
|
||||
return (width, height)
|
||||
|
||||
|
||||
def finalizeFrame(self, imageData, width, height):
|
||||
if self.distort:
|
||||
try:
|
||||
|
@ -265,7 +267,7 @@ def finalizeFrame(self, imageData, width, height):
|
|||
imageData)
|
||||
|
||||
if self.scale != 100 \
|
||||
or self.xPosition != 0 or self.yPosition != 0:
|
||||
or self.xPosition != 0 or self.yPosition != 0:
|
||||
frame = self.blankFrame(width, height)
|
||||
frame.paste(image, box=(self.xPosition, self.yPosition))
|
||||
else:
|
||||
|
|
28
src/core.py
28
src/core.py
|
@ -179,7 +179,7 @@ class Core():
|
|||
clearThis = False
|
||||
|
||||
# add loaded named presets to savedPresets dict
|
||||
if 'preset' in preset and preset['preset'] != None:
|
||||
if 'preset' in preset and preset['preset'] is not None:
|
||||
nam = preset['preset']
|
||||
filepath2 = os.path.join(
|
||||
self.presetDir, name, str(vers), nam)
|
||||
|
@ -195,12 +195,12 @@ class Core():
|
|||
-1,
|
||||
self.moduleIndexFor(name),
|
||||
loader)
|
||||
if i == None:
|
||||
if i is None:
|
||||
loader.showMessage(msg="Too many components!")
|
||||
break
|
||||
|
||||
try:
|
||||
if 'preset' in preset and preset['preset'] != None:
|
||||
if 'preset' in preset and preset['preset'] is not None:
|
||||
self.selectedComponents[i].loadPreset(
|
||||
preset
|
||||
)
|
||||
|
@ -210,8 +210,8 @@ class Core():
|
|||
preset['preset']
|
||||
)
|
||||
except KeyError as e:
|
||||
print('%s missing value %s' %
|
||||
(self.selectedComponents[i], e))
|
||||
print('%s missing value %s' % (
|
||||
self.selectedComponents[i], e))
|
||||
|
||||
if clearThis:
|
||||
self.clearPreset(i)
|
||||
|
@ -221,7 +221,6 @@ class Core():
|
|||
errcode = 1
|
||||
data = sys.exc_info()
|
||||
|
||||
|
||||
if errcode == 1:
|
||||
typ, value, _ = data
|
||||
if typ.__name__ == KeyError:
|
||||
|
@ -274,11 +273,11 @@ class Core():
|
|||
i += 1
|
||||
elif i == 2:
|
||||
lastCompPreset = Core.presetFromString(line)
|
||||
data[section].append(
|
||||
(lastCompName,
|
||||
data[section].append((
|
||||
lastCompName,
|
||||
lastCompVers,
|
||||
lastCompPreset)
|
||||
)
|
||||
lastCompPreset
|
||||
))
|
||||
i = 0
|
||||
return 0, data
|
||||
except:
|
||||
|
@ -309,7 +308,9 @@ class Core():
|
|||
return False, ''
|
||||
|
||||
def exportPreset(self, exportPath, compName, vers, origName):
|
||||
internalPath = os.path.join(self.presetDir, compName, str(vers), origName)
|
||||
internalPath = os.path.join(
|
||||
self.presetDir, compName, str(vers), origName
|
||||
)
|
||||
if not os.path.exists(internalPath):
|
||||
return
|
||||
if os.path.exists(exportPath):
|
||||
|
@ -328,7 +329,7 @@ class Core():
|
|||
return False
|
||||
|
||||
def createPresetFile(
|
||||
self, compName, vers, presetName, saveValueStore, filepath=''):
|
||||
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 args'''
|
||||
if not filepath:
|
||||
|
@ -463,7 +464,8 @@ class Core():
|
|||
@staticmethod
|
||||
def presetToString(dictionary):
|
||||
'''Alphabetizes a dict into OrderedDict & returns string repr'''
|
||||
return repr(OrderedDict(sorted(dictionary.items(), key=lambda t: t[0])))
|
||||
return repr(
|
||||
OrderedDict(sorted(dictionary.items(), key=lambda t: t[0])))
|
||||
|
||||
@staticmethod
|
||||
def presetFromString(string):
|
||||
|
|
|
@ -30,7 +30,6 @@ def LoadDefaultSettings(self):
|
|||
}
|
||||
|
||||
for parm, value in default.items():
|
||||
#print(parm, self.settings.value(parm))
|
||||
if self.settings.value(parm) is None:
|
||||
self.settings.setValue(parm, value)
|
||||
|
||||
|
@ -51,7 +50,7 @@ if __name__ == "__main__":
|
|||
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
app.setApplicationName("audio-visualizer")
|
||||
app.setOrganizationName("audio-visualizer")
|
||||
# app.setOrganizationName("audio-visualizer")
|
||||
|
||||
if mode == 'cmd':
|
||||
from command import *
|
||||
|
@ -76,7 +75,8 @@ if __name__ == "__main__":
|
|||
dpi = desc.physicalDpiX()
|
||||
|
||||
topMargin = 0 if (dpi == 96) else int(10 * (dpi / 96))
|
||||
window.resize(window.width() * (dpi / 96), window.height() * (dpi / 96))
|
||||
window.resize(
|
||||
window.width() * (dpi / 96), window.height() * (dpi / 96))
|
||||
# window.verticalLayout_2.setContentsMargins(0, topMargin, 0, 0)
|
||||
|
||||
main = MainWindow(window, proj)
|
||||
|
|
|
@ -116,7 +116,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
codec = window.comboBox_videoCodec.itemText(i)
|
||||
if codec == self.settings.value('outputVideoCodec'):
|
||||
window.comboBox_videoCodec.setCurrentIndex(i)
|
||||
#print(codec)
|
||||
|
||||
for i in range(window.comboBox_audioCodec.count()):
|
||||
codec = window.comboBox_audioCodec.itemText(i)
|
||||
|
@ -146,10 +145,11 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
|
||||
# Make component buttons
|
||||
self.compMenu = QMenu()
|
||||
self.compActions = []
|
||||
for i, comp in enumerate(self.core.modules):
|
||||
action = self.compMenu.addAction(comp.Component.__doc__)
|
||||
action.triggered.connect(
|
||||
lambda item=i: self.core.insertComponent(0, item, self))
|
||||
lambda _, item=i: self.core.insertComponent(0, item, self))
|
||||
|
||||
self.window.pushButton_addComponent.setMenu(self.compMenu)
|
||||
|
||||
|
@ -160,9 +160,10 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
self.window.pushButton_removeComponent.clicked.connect(
|
||||
lambda _: self.removeComponent())
|
||||
|
||||
componentList.setContextMenuPolicy(
|
||||
QtCore.Qt.CustomContextMenu)
|
||||
componentList.customContextMenuRequested.connect(self.componentContextMenu)
|
||||
componentList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
||||
componentList.customContextMenuRequested.connect(
|
||||
self.componentContextMenu
|
||||
)
|
||||
|
||||
currentRes = str(self.settings.value('outputWidth'))+'x' + \
|
||||
str(self.settings.value('outputHeight'))
|
||||
|
@ -245,19 +246,30 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
QtWidgets.QShortcut("Ctrl+O", self.window, self.openOpenProjectDialog)
|
||||
QtWidgets.QShortcut("Ctrl+N", self.window, self.createNewProject)
|
||||
|
||||
QtWidgets.QShortcut("Ctrl+T", self.window, activated=lambda:
|
||||
self.window.pushButton_addComponent.click())
|
||||
QtWidgets.QShortcut("Ctrl+Space", self.window, activated=lambda:
|
||||
self.window.listWidget_componentList.setFocus())
|
||||
QtWidgets.QShortcut("Ctrl+Shift+S", self.window,
|
||||
self.presetManager.openSavePresetDialog)
|
||||
QtWidgets.QShortcut("Ctrl+Shift+C", self.window,
|
||||
self.presetManager.clearPreset)
|
||||
QtWidgets.QShortcut(
|
||||
"Ctrl+T", self.window,
|
||||
activated=lambda: self.window.pushButton_addComponent.click()
|
||||
)
|
||||
QtWidgets.QShortcut(
|
||||
"Ctrl+Space", self.window,
|
||||
activated=lambda: self.window.listWidget_componentList.setFocus()
|
||||
)
|
||||
QtWidgets.QShortcut(
|
||||
"Ctrl+Shift+S", self.window,
|
||||
self.presetManager.openSavePresetDialog
|
||||
)
|
||||
QtWidgets.QShortcut(
|
||||
"Ctrl+Shift+C", self.window, self.presetManager.clearPreset
|
||||
)
|
||||
|
||||
QtWidgets.QShortcut("Ctrl+Up", self.window,
|
||||
activated=lambda: self.moveComponent(-1))
|
||||
QtWidgets.QShortcut("Ctrl+Down", self.window,
|
||||
activated=lambda: self.moveComponent(1))
|
||||
QtWidgets.QShortcut(
|
||||
"Ctrl+Up", self.window,
|
||||
activated=lambda: self.moveComponent(-1)
|
||||
)
|
||||
QtWidgets.QShortcut(
|
||||
"Ctrl+Down", self.window,
|
||||
activated=lambda: self.moveComponent(1)
|
||||
)
|
||||
QtWidgets.QShortcut("Ctrl+Home", self.window, self.moveComponentTop)
|
||||
QtWidgets.QShortcut("Ctrl+End", self.window, self.moveComponentBottom)
|
||||
QtWidgets.QShortcut("Ctrl+r", self.window, self.removeComponent)
|
||||
|
@ -280,7 +292,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
def updateComponentTitle(self, pos, presetStore=False):
|
||||
if type(presetStore) == dict:
|
||||
name = presetStore['preset']
|
||||
if name == None or name not in self.core.savedPresets:
|
||||
if name is None or name not in self.core.savedPresets:
|
||||
modified = False
|
||||
else:
|
||||
modified = (presetStore != self.core.savedPresets[name])
|
||||
|
@ -362,21 +374,22 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
def openInputFileDialog(self):
|
||||
inputDir = self.settings.value("inputDir", os.path.expanduser("~"))
|
||||
|
||||
fileName = QtGui.QFileDialog.getOpenFileName(
|
||||
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(
|
||||
self.window, "Open Audio File",
|
||||
inputDir, "Audio Files (%s)" % " ".join(self.core.audioFormats))
|
||||
|
||||
if not fileName == "":
|
||||
if fileName:
|
||||
self.settings.setValue("inputDir", os.path.dirname(fileName))
|
||||
self.window.lineEdit_audioFile.setText(fileName)
|
||||
|
||||
def openOutputFileDialog(self):
|
||||
outputDir = self.settings.value("outputDir", os.path.expanduser("~"))
|
||||
|
||||
fileName = QtGui.QFileDialog.getSaveFileName(
|
||||
fileName, _ = QtWidgets.QFileDialog.getSaveFileName(
|
||||
self.window, "Set Output Video File",
|
||||
outputDir,
|
||||
"Video Files (%s);; All Files (*)" % " ".join(self.core.videoFormats))
|
||||
"Video Files (%s);; All Files (*)" % " ".join(
|
||||
self.core.videoFormats))
|
||||
|
||||
if not fileName == "":
|
||||
self.settings.setValue("outputDir", os.path.dirname(fileName))
|
||||
|
@ -547,13 +560,13 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
'''Drop event for the component listwidget'''
|
||||
componentList = self.window.listWidget_componentList
|
||||
|
||||
modelIndexes = [ \
|
||||
componentList.model().index(i) \
|
||||
for i in range(componentList.count()) \
|
||||
modelIndexes = [
|
||||
componentList.model().index(i)
|
||||
for i in range(componentList.count())
|
||||
]
|
||||
rects = [ \
|
||||
componentList.visualRect(modelIndex) \
|
||||
for modelIndex in modelIndexes \
|
||||
rects = [
|
||||
componentList.visualRect(modelIndex)
|
||||
for modelIndex in modelIndexes
|
||||
]
|
||||
|
||||
rowPos = [rect.contains(event.pos()) for rect in rects]
|
||||
|
@ -602,9 +615,10 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
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),
|
||||
"Save before %s?" % (
|
||||
os.path.basename(self.currentProject)[:-4],
|
||||
phrase
|
||||
),
|
||||
showCancel=True)
|
||||
if ch:
|
||||
success = self.saveProjectChanges()
|
||||
|
@ -613,7 +627,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
os.remove(self.autosavePath)
|
||||
|
||||
def openSaveProjectDialog(self):
|
||||
filename = QtGui.QFileDialog.getSaveFileName(
|
||||
filename, _ = QtWidgets.QFileDialog.getSaveFileName(
|
||||
self.window, "Create Project File",
|
||||
self.settings.value("projectDir"),
|
||||
"Project Files (*.avp)")
|
||||
|
@ -628,7 +642,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
self.core.createProjectFile(filename)
|
||||
|
||||
def openOpenProjectDialog(self):
|
||||
filename = QtGui.QFileDialog.getOpenFileName(
|
||||
filename, _ = QtWidgets.QFileDialog.getOpenFileName(
|
||||
self.window, "Open Project File",
|
||||
self.settings.value("projectDir"),
|
||||
"Project Files (*.avp)")
|
||||
|
@ -657,17 +671,19 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
|
||||
def showMessage(self, **kwargs):
|
||||
parent = kwargs['parent'] if 'parent' in kwargs else self.window
|
||||
msg = QtGui.QMessageBox(parent)
|
||||
msg = QtWidgets.QMessageBox(parent)
|
||||
msg.setModal(True)
|
||||
msg.setText(kwargs['msg'])
|
||||
msg.setIcon(
|
||||
kwargs['icon'] if 'icon' in kwargs else QtGui.QMessageBox.Information)
|
||||
kwargs['icon']
|
||||
if 'icon' in kwargs else QtWidgets.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)
|
||||
QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel)
|
||||
else:
|
||||
msg.setStandardButtons(QtGui.QMessageBox.Ok)
|
||||
msg.setStandardButtons(QtWidgets.QMessageBox.Ok)
|
||||
ch = msg.exec_()
|
||||
if ch == 1024:
|
||||
return True
|
||||
|
@ -687,7 +703,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
return
|
||||
|
||||
self.presetManager.findPresets()
|
||||
self.menu = QtGui.QMenu()
|
||||
self.menu = QMenu()
|
||||
menuItem = self.menu.addAction("Save Preset")
|
||||
menuItem.triggered.connect(
|
||||
self.presetManager.openSavePresetDialog
|
||||
|
@ -695,8 +711,10 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
|
||||
# submenu for opening presets
|
||||
try:
|
||||
presets = self.presetManager.presets[str(self.core.selectedComponents[index])]
|
||||
self.submenu = QtGui.QMenu("Open Preset")
|
||||
presets = self.presetManager.presets[
|
||||
str(self.core.selectedComponents[index])
|
||||
]
|
||||
self.submenu = QMenu("Open Preset")
|
||||
self.menu.addMenu(self.submenu)
|
||||
|
||||
for version, presetName in presets:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from PyQt5 import QtGui, QtCore, QtWidgets
|
||||
from PyQt5 import QtCore, QtWidgets
|
||||
import string
|
||||
import os
|
||||
|
||||
|
@ -21,13 +21,15 @@ class PresetManager(QtWidgets.QDialog):
|
|||
|
||||
# window
|
||||
self.lastFilter = '*'
|
||||
self.presetRows = [] # list of (comp, vers, name) tuples
|
||||
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)
|
||||
self.window.pushButton_rename.clicked.connect(self.openRenamePresetDialog)
|
||||
self.window.pushButton_delete.clicked.connect(
|
||||
self.openDeletePresetDialog)
|
||||
self.window.pushButton_rename.clicked.connect(
|
||||
self.openRenamePresetDialog)
|
||||
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)
|
||||
|
@ -36,7 +38,8 @@ class PresetManager(QtWidgets.QDialog):
|
|||
self.drawFilterList()
|
||||
self.window.comboBox_filter.currentIndexChanged.connect(
|
||||
lambda: self.drawPresetList(
|
||||
self.window.comboBox_filter.currentText(), self.window.lineEdit_search.text()
|
||||
self.window.comboBox_filter.currentText(),
|
||||
self.window.lineEdit_search.text()
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -47,7 +50,8 @@ class PresetManager(QtWidgets.QDialog):
|
|||
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.window.comboBox_filter.currentText(),
|
||||
self.window.lineEdit_search.text()
|
||||
)
|
||||
)
|
||||
self.drawPresetList('*')
|
||||
|
@ -72,16 +76,14 @@ class PresetManager(QtWidgets.QDialog):
|
|||
parseList.append((compName, int(compVers), preset))
|
||||
except ValueError:
|
||||
continue
|
||||
self.presets =\
|
||||
{
|
||||
compName : \
|
||||
[
|
||||
(vers, preset) \
|
||||
for name, vers, preset in parseList \
|
||||
if name == compName \
|
||||
] \
|
||||
for compName, _, __ in parseList \
|
||||
}
|
||||
self.presets = {
|
||||
compName: [
|
||||
(vers, preset)
|
||||
for name, vers, preset in parseList
|
||||
if name == compName
|
||||
]
|
||||
for compName, _, __ in parseList
|
||||
}
|
||||
|
||||
def drawPresetList(self, compFilter=None, presetFilter=''):
|
||||
self.window.listWidget_presets.clear()
|
||||
|
@ -96,7 +98,8 @@ class PresetManager(QtWidgets.QDialog):
|
|||
continue
|
||||
for vers, preset in presets:
|
||||
if not presetFilter or presetFilter in preset:
|
||||
self.window.listWidget_presets.addItem('%s: %s' % (component, preset))
|
||||
self.window.listWidget_presets.addItem(
|
||||
'%s: %s' % (component, preset))
|
||||
self.presetRows.append((component, vers, preset))
|
||||
if preset not in presetNames:
|
||||
presetNames.append(preset)
|
||||
|
@ -124,11 +127,11 @@ class PresetManager(QtWidgets.QDialog):
|
|||
while True:
|
||||
index = componentList.currentRow()
|
||||
currentPreset = selectedComponents[index].currentPreset
|
||||
newName, OK = QtGui.QInputDialog.getText(
|
||||
newName, OK = QtWidgets.QInputDialog.getText(
|
||||
self.parent.window,
|
||||
'Audio Visualizer',
|
||||
'New Preset Name:',
|
||||
QtGui.QLineEdit.Normal,
|
||||
QtWidgets.QLineEdit.Normal,
|
||||
currentPreset
|
||||
)
|
||||
if OK:
|
||||
|
@ -149,7 +152,7 @@ class PresetManager(QtWidgets.QDialog):
|
|||
break
|
||||
|
||||
def createNewPreset(
|
||||
self, compName, vers, filename, saveValueStore, **kwargs):
|
||||
self, compName, vers, filename, saveValueStore, **kwargs):
|
||||
path = os.path.join(self.presetDir, compName, str(vers), filename)
|
||||
if self.presetExists(path, **kwargs):
|
||||
return
|
||||
|
@ -163,7 +166,7 @@ class PresetManager(QtWidgets.QDialog):
|
|||
msg="%s already exists! Overwrite it?" %
|
||||
os.path.basename(path),
|
||||
showCancel=True,
|
||||
icon=QtGui.QMessageBox.Warning,
|
||||
icon=QtWidgets.QMessageBox.Warning,
|
||||
parent=window)
|
||||
if not ch:
|
||||
# user clicked cancel
|
||||
|
@ -196,7 +199,7 @@ class PresetManager(QtWidgets.QDialog):
|
|||
ch = self.parent.showMessage(
|
||||
msg='Really delete %s?' % name,
|
||||
showCancel=True,
|
||||
icon=QtGui.QMessageBox.Warning,
|
||||
icon=QtWidgets.QMessageBox.Warning,
|
||||
parent=self.window
|
||||
)
|
||||
if not ch:
|
||||
|
@ -223,11 +226,11 @@ class PresetManager(QtWidgets.QDialog):
|
|||
|
||||
while True:
|
||||
index = presetList.currentRow()
|
||||
newName, OK = QtGui.QInputDialog.getText(
|
||||
newName, OK = QtWidgets.QInputDialog.getText(
|
||||
self.window,
|
||||
'Preset Manager',
|
||||
'Rename Preset:',
|
||||
QtGui.QLineEdit.Normal,
|
||||
QtWidgets.QLineEdit.Normal,
|
||||
self.presetRows[index][2]
|
||||
)
|
||||
if OK:
|
||||
|
@ -250,7 +253,7 @@ class PresetManager(QtWidgets.QDialog):
|
|||
break
|
||||
|
||||
def openImportDialog(self):
|
||||
filename = QtGui.QFileDialog.getOpenFileName(
|
||||
filename, _ = QtWidgets.QFileDialog.getOpenFileName(
|
||||
self.window, "Import Preset File",
|
||||
self.settings.value("presetDir"),
|
||||
"Preset Files (*.avl)")
|
||||
|
@ -275,7 +278,7 @@ class PresetManager(QtWidgets.QDialog):
|
|||
def openExportDialog(self):
|
||||
if not self.window.listWidget_presets.selectedItems():
|
||||
return
|
||||
filename = QtGui.QFileDialog.getSaveFileName(
|
||||
filename, _ = QtWidgets.QFileDialog.getSaveFileName(
|
||||
self.window, "Export Preset",
|
||||
self.settings.value("presetDir"),
|
||||
"Preset Files (*.avl)")
|
||||
|
|
|
@ -121,15 +121,12 @@ class Worker(QtCore.QObject):
|
|||
vencoders = options['video-codecs'][vcodec]
|
||||
aencoders = options['audio-codecs'][acodec]
|
||||
|
||||
#print(encoders)
|
||||
for encoder in vencoders:
|
||||
#print(encoder)
|
||||
if encoder in encoders:
|
||||
vencoder = encoder
|
||||
break
|
||||
|
||||
for encoder in aencoders:
|
||||
#print(encoder)
|
||||
if encoder in encoders:
|
||||
aencoder = encoder
|
||||
break
|
||||
|
@ -167,10 +164,10 @@ class Worker(QtCore.QObject):
|
|||
numpy.seterr(divide='ignore')
|
||||
|
||||
# Call preFrameRender on all components
|
||||
print('Loaded Components:', ", ".join(
|
||||
["%s) %s" % (num, str(component)) \
|
||||
for num, component in enumerate(reversed(self.components))
|
||||
]))
|
||||
print('Loaded Components:', ", ".join([
|
||||
"%s) %s" % (num, str(component))
|
||||
for num, component in enumerate(reversed(self.components))
|
||||
]))
|
||||
self.staticComponents = {}
|
||||
numComps = len(self.components)
|
||||
for compNo, comp in enumerate(self.components):
|
||||
|
|
Reference in New Issue