diff --git a/core.py b/core.py index ba71b82..de6ed99 100644 --- a/core.py +++ b/core.py @@ -22,7 +22,13 @@ class Core(): self.dataDir = QDesktopServices.storageLocation( QDesktopServices.DataLocation) 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.videoFormats = Core.appendUppercase([ '*.mp4', diff --git a/main.py b/main.py index 3fd4234..106bd29 100644 --- a/main.py +++ b/main.py @@ -63,8 +63,14 @@ if __name__ == "__main__": import atexit import signal - window = uic.loadUi(os.path.join( - os.path.dirname(os.path.realpath(__file__)), "mainwindow.ui")) + if getattr(sys, 'frozen', False): + # 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() desc = QtGui.QDesktopWidget() dpi = desc.physicalDpiX() diff --git a/mainwindow.py b/mainwindow.py index 6023831..f3d45e6 100644 --- a/mainwindow.py +++ b/mainwindow.py @@ -1,7 +1,7 @@ from queue import Queue from PyQt4 import QtCore, QtGui, uic from PyQt4.QtCore import QSettings, Qt -from PyQt4.QtGui import QMenu +from PyQt4.QtGui import QMenu, QShortcut import sys import os import signal @@ -39,14 +39,14 @@ class PreviewWindow(QtGui.QLabel): self.repaint() -class MainWindow(QtCore.QObject): +class MainWindow(QtGui.QMainWindow): newTask = QtCore.pyqtSignal(list) processTask = QtCore.pyqtSignal() videoTask = QtCore.pyqtSignal(str, str, list) def __init__(self, window, project): - QtCore.QObject.__init__(self) + QtGui.QMainWindow.__init__(self) # print('main thread id: {}'.format(QtCore.QThread.currentThreadId())) self.window = window @@ -63,9 +63,7 @@ class MainWindow(QtCore.QObject): LoadDefaultSettings(self) self.presetManager = PresetManager( uic.loadUi( - os.path.join(os.path.dirname(os.path.realpath(__file__)), - 'presetmanager.ui')), - self) + os.path.join(self.core.wd, 'presetmanager.ui')), self) if not os.path.exists(self.dataDir): os.makedirs(self.dataDir) @@ -143,7 +141,7 @@ class MainWindow(QtCore.QObject): window.spinBox_aBitrate.valueChanged.connect(self.updateCodecSettings) 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) # Make component buttons @@ -242,6 +240,29 @@ class MainWindow(QtCore.QObject): self.openProject(self.currentProject, prompt=False) 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): self.timer.stop() self.previewThread.quit() @@ -506,6 +527,16 @@ class MainWindow(QtCore.QObject): stackedWidget.setCurrentIndex(newRow) 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): '''Drop event for the component listwidget''' componentList = self.window.listWidget_componentList diff --git a/preview_thread.py b/preview_thread.py index e3e8279..eabf715 100644 --- a/preview_thread.py +++ b/preview_thread.py @@ -23,7 +23,7 @@ class Worker(QtCore.QObject): self.stackedWidget = parent.window.stackedWidget self.background = Image.new("RGBA", (1920, 1080), (0, 0, 0, 0)) 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) def createPreviewImage(self, components): diff --git a/setup.py b/setup.py index 0d9cbc4..48034dc 100644 --- a/setup.py +++ b/setup.py @@ -1,30 +1,51 @@ from cx_Freeze import setup, Executable +import sys # Dependencies are automatically detected, but it might need # fine tuning. -buildOptions = dict(packages = [], excludes = [ - "apport", - "apt", - "ctypes", - "curses", - "distutils", - "email", - "html", - "http", - "json", - "xmlrpc", - "nose" - ], include_files = ["main.ui"]) -import sys -base = 'Win32GUI' if sys.platform=='win32' else None +buildOptions = dict( + 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 = [ - 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', - description = 'a little GUI tool to render visualization videos of audio files', - options = dict(build_exe = buildOptions), - executables = executables) + +setup( + name='audio-visualizer-python', + version='1.0', + description='GUI tool to render visualization videos of audio files', + options=dict(build_exe=buildOptions), + executables=executables +) diff --git a/video_thread.py b/video_thread.py index e6c6531..265feee 100644 --- a/video_thread.py +++ b/video_thread.py @@ -68,7 +68,7 @@ class Worker(QtCore.QObject): def previewDispatch(self): background = Image.new("RGBA", (1920, 1080), (0, 0, 0, 0)) 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)) while not self.stopped: