Merge branch 'feature-newgui' into newgui-commandline
This commit is contained in:
commit
7d4fb78438
8
core.py
8
core.py
|
@ -22,7 +22,13 @@ class Core():
|
||||||
self.dataDir = QDesktopServices.storageLocation(
|
self.dataDir = QDesktopServices.storageLocation(
|
||||||
QDesktopServices.DataLocation)
|
QDesktopServices.DataLocation)
|
||||||
self.presetDir = os.path.join(self.dataDir, 'presets')
|
self.presetDir = os.path.join(self.dataDir, 'presets')
|
||||||
self.wd = os.path.dirname(os.path.realpath(__file__))
|
if getattr(sys, 'frozen', False):
|
||||||
|
# frozen
|
||||||
|
self.wd = os.path.dirname(sys.executable)
|
||||||
|
else:
|
||||||
|
# unfrozen
|
||||||
|
self.wd = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
self.loadEncoderOptions()
|
self.loadEncoderOptions()
|
||||||
self.videoFormats = Core.appendUppercase([
|
self.videoFormats = Core.appendUppercase([
|
||||||
'*.mp4',
|
'*.mp4',
|
||||||
|
|
10
main.py
10
main.py
|
@ -63,8 +63,14 @@ if __name__ == "__main__":
|
||||||
import atexit
|
import atexit
|
||||||
import signal
|
import signal
|
||||||
|
|
||||||
window = uic.loadUi(os.path.join(
|
if getattr(sys, 'frozen', False):
|
||||||
os.path.dirname(os.path.realpath(__file__)), "mainwindow.ui"))
|
# frozen
|
||||||
|
wd = os.path.dirname(sys.executable)
|
||||||
|
else:
|
||||||
|
# unfrozen
|
||||||
|
wd = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
window = uic.loadUi(os.path.join(wd, "mainwindow.ui"))
|
||||||
# window.adjustSize()
|
# window.adjustSize()
|
||||||
desc = QtGui.QDesktopWidget()
|
desc = QtGui.QDesktopWidget()
|
||||||
dpi = desc.physicalDpiX()
|
dpi = desc.physicalDpiX()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from queue import Queue
|
from queue import Queue
|
||||||
from PyQt4 import QtCore, QtGui, uic
|
from PyQt4 import QtCore, QtGui, uic
|
||||||
from PyQt4.QtCore import QSettings, Qt
|
from PyQt4.QtCore import QSettings, Qt
|
||||||
from PyQt4.QtGui import QMenu
|
from PyQt4.QtGui import QMenu, QShortcut
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
|
@ -39,14 +39,14 @@ class PreviewWindow(QtGui.QLabel):
|
||||||
self.repaint()
|
self.repaint()
|
||||||
|
|
||||||
|
|
||||||
class MainWindow(QtCore.QObject):
|
class MainWindow(QtGui.QMainWindow):
|
||||||
|
|
||||||
newTask = QtCore.pyqtSignal(list)
|
newTask = QtCore.pyqtSignal(list)
|
||||||
processTask = QtCore.pyqtSignal()
|
processTask = QtCore.pyqtSignal()
|
||||||
videoTask = QtCore.pyqtSignal(str, str, list)
|
videoTask = QtCore.pyqtSignal(str, str, list)
|
||||||
|
|
||||||
def __init__(self, window, project):
|
def __init__(self, window, project):
|
||||||
QtCore.QObject.__init__(self)
|
QtGui.QMainWindow.__init__(self)
|
||||||
|
|
||||||
# print('main thread id: {}'.format(QtCore.QThread.currentThreadId()))
|
# print('main thread id: {}'.format(QtCore.QThread.currentThreadId()))
|
||||||
self.window = window
|
self.window = window
|
||||||
|
@ -63,9 +63,7 @@ class MainWindow(QtCore.QObject):
|
||||||
LoadDefaultSettings(self)
|
LoadDefaultSettings(self)
|
||||||
self.presetManager = PresetManager(
|
self.presetManager = PresetManager(
|
||||||
uic.loadUi(
|
uic.loadUi(
|
||||||
os.path.join(os.path.dirname(os.path.realpath(__file__)),
|
os.path.join(self.core.wd, 'presetmanager.ui')), self)
|
||||||
'presetmanager.ui')),
|
|
||||||
self)
|
|
||||||
|
|
||||||
if not os.path.exists(self.dataDir):
|
if not os.path.exists(self.dataDir):
|
||||||
os.makedirs(self.dataDir)
|
os.makedirs(self.dataDir)
|
||||||
|
@ -143,7 +141,7 @@ class MainWindow(QtCore.QObject):
|
||||||
window.spinBox_aBitrate.valueChanged.connect(self.updateCodecSettings)
|
window.spinBox_aBitrate.valueChanged.connect(self.updateCodecSettings)
|
||||||
|
|
||||||
self.previewWindow = PreviewWindow(self, os.path.join(
|
self.previewWindow = PreviewWindow(self, os.path.join(
|
||||||
os.path.dirname(os.path.realpath(__file__)), "background.png"))
|
self.core.wd, "background.png"))
|
||||||
window.verticalLayout_previewWrapper.addWidget(self.previewWindow)
|
window.verticalLayout_previewWrapper.addWidget(self.previewWindow)
|
||||||
|
|
||||||
# Make component buttons
|
# Make component buttons
|
||||||
|
@ -242,6 +240,29 @@ class MainWindow(QtCore.QObject):
|
||||||
self.openProject(self.currentProject, prompt=False)
|
self.openProject(self.currentProject, prompt=False)
|
||||||
self.drawPreview(True)
|
self.drawPreview(True)
|
||||||
|
|
||||||
|
# Setup Hotkeys
|
||||||
|
QtGui.QShortcut("Ctrl+S", self.window, self.saveCurrentProject)
|
||||||
|
QtGui.QShortcut("Ctrl+A", self.window, self.openSaveProjectDialog)
|
||||||
|
QtGui.QShortcut("Ctrl+O", self.window, self.openOpenProjectDialog)
|
||||||
|
QtGui.QShortcut("Ctrl+N", self.window, self.createNewProject)
|
||||||
|
|
||||||
|
QtGui.QShortcut("Ctrl+T", self.window, activated=lambda:
|
||||||
|
self.window.pushButton_addComponent.click())
|
||||||
|
QtGui.QShortcut("Ctrl+Space", self.window, activated=lambda:
|
||||||
|
self.window.listWidget_componentList.setFocus())
|
||||||
|
QtGui.QShortcut("Ctrl+Shift+S", self.window,
|
||||||
|
self.presetManager.openSavePresetDialog)
|
||||||
|
QtGui.QShortcut("Ctrl+Shift+C", self.window,
|
||||||
|
self.presetManager.clearPreset)
|
||||||
|
|
||||||
|
QtGui.QShortcut("Ctrl+Up", self.window,
|
||||||
|
activated=lambda: self.moveComponent(-1))
|
||||||
|
QtGui.QShortcut("Ctrl+Down", self.window,
|
||||||
|
activated=lambda: self.moveComponent(1))
|
||||||
|
QtGui.QShortcut("Ctrl+Home", self.window, self.moveComponentTop)
|
||||||
|
QtGui.QShortcut("Ctrl+End", self.window, self.moveComponentBottom)
|
||||||
|
QtGui.QShortcut("Ctrl+r", self.window, self.removeComponent)
|
||||||
|
|
||||||
def cleanUp(self):
|
def cleanUp(self):
|
||||||
self.timer.stop()
|
self.timer.stop()
|
||||||
self.previewThread.quit()
|
self.previewThread.quit()
|
||||||
|
@ -506,6 +527,16 @@ class MainWindow(QtCore.QObject):
|
||||||
stackedWidget.setCurrentIndex(newRow)
|
stackedWidget.setCurrentIndex(newRow)
|
||||||
self.drawPreview()
|
self.drawPreview()
|
||||||
|
|
||||||
|
def moveComponentTop(self):
|
||||||
|
componentList = self.window.listWidget_componentList
|
||||||
|
row = -componentList.currentRow()
|
||||||
|
self.moveComponent(row)
|
||||||
|
|
||||||
|
def moveComponentBottom(self):
|
||||||
|
componentList = self.window.listWidget_componentList
|
||||||
|
row = len(componentList)-1
|
||||||
|
self.moveComponent(row)
|
||||||
|
|
||||||
def dragComponent(self, event):
|
def dragComponent(self, event):
|
||||||
'''Drop event for the component listwidget'''
|
'''Drop event for the component listwidget'''
|
||||||
componentList = self.window.listWidget_componentList
|
componentList = self.window.listWidget_componentList
|
||||||
|
|
|
@ -23,7 +23,7 @@ class Worker(QtCore.QObject):
|
||||||
self.stackedWidget = parent.window.stackedWidget
|
self.stackedWidget = parent.window.stackedWidget
|
||||||
self.background = Image.new("RGBA", (1920, 1080), (0, 0, 0, 0))
|
self.background = Image.new("RGBA", (1920, 1080), (0, 0, 0, 0))
|
||||||
self.background.paste(Image.open(os.path.join(
|
self.background.paste(Image.open(os.path.join(
|
||||||
os.path.dirname(os.path.realpath(__file__)), "background.png")))
|
self.core.wd, "background.png")))
|
||||||
|
|
||||||
@pyqtSlot(str, list)
|
@pyqtSlot(str, list)
|
||||||
def createPreviewImage(self, components):
|
def createPreviewImage(self, components):
|
||||||
|
|
63
setup.py
63
setup.py
|
@ -1,30 +1,51 @@
|
||||||
from cx_Freeze import setup, Executable
|
from cx_Freeze import setup, Executable
|
||||||
|
import sys
|
||||||
|
|
||||||
# Dependencies are automatically detected, but it might need
|
# Dependencies are automatically detected, but it might need
|
||||||
# fine tuning.
|
# fine tuning.
|
||||||
buildOptions = dict(packages = [], excludes = [
|
|
||||||
"apport",
|
|
||||||
"apt",
|
|
||||||
"ctypes",
|
|
||||||
"curses",
|
|
||||||
"distutils",
|
|
||||||
"email",
|
|
||||||
"html",
|
|
||||||
"http",
|
|
||||||
"json",
|
|
||||||
"xmlrpc",
|
|
||||||
"nose"
|
|
||||||
], include_files = ["main.ui"])
|
|
||||||
|
|
||||||
import sys
|
buildOptions = dict(
|
||||||
base = 'Win32GUI' if sys.platform=='win32' else None
|
packages=[],
|
||||||
|
excludes=[
|
||||||
|
"apport",
|
||||||
|
"apt",
|
||||||
|
"curses",
|
||||||
|
"distutils",
|
||||||
|
"email",
|
||||||
|
"html",
|
||||||
|
"http",
|
||||||
|
"xmlrpc",
|
||||||
|
"nose"
|
||||||
|
],
|
||||||
|
include_files=[
|
||||||
|
"mainwindow.ui",
|
||||||
|
"presetmanager.ui",
|
||||||
|
"background.png",
|
||||||
|
"encoder-options.json",
|
||||||
|
"components/"
|
||||||
|
],
|
||||||
|
includes=[
|
||||||
|
'numpy.core._methods',
|
||||||
|
'numpy.lib.format'
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
base = 'Win32GUI' if sys.platform == 'win32' else None
|
||||||
|
|
||||||
executables = [
|
executables = [
|
||||||
Executable('main.py', base=base, targetName = 'audio-visualizer-python')
|
Executable(
|
||||||
|
'main.py',
|
||||||
|
base=base,
|
||||||
|
targetName='audio-visualizer-python'
|
||||||
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
setup(name='audio-visualizer-python',
|
|
||||||
version = '1.0',
|
setup(
|
||||||
description = 'a little GUI tool to render visualization videos of audio files',
|
name='audio-visualizer-python',
|
||||||
options = dict(build_exe = buildOptions),
|
version='1.0',
|
||||||
executables = executables)
|
description='GUI tool to render visualization videos of audio files',
|
||||||
|
options=dict(build_exe=buildOptions),
|
||||||
|
executables=executables
|
||||||
|
)
|
||||||
|
|
|
@ -68,7 +68,7 @@ class Worker(QtCore.QObject):
|
||||||
def previewDispatch(self):
|
def previewDispatch(self):
|
||||||
background = Image.new("RGBA", (1920, 1080), (0, 0, 0, 0))
|
background = Image.new("RGBA", (1920, 1080), (0, 0, 0, 0))
|
||||||
background.paste(Image.open(os.path.join(
|
background.paste(Image.open(os.path.join(
|
||||||
os.path.dirname(os.path.realpath(__file__)), "background.png")))
|
self.core.wd, "background.png")))
|
||||||
background = background.resize((self.width, self.height))
|
background = background.resize((self.width, self.height))
|
||||||
|
|
||||||
while not self.stopped:
|
while not self.stopped:
|
||||||
|
|
Reference in New Issue