From 85d3b779d07ad92b0f540ea52185777c3c3f5e48 Mon Sep 17 00:00:00 2001
From: tassaron
Date: Sat, 26 Aug 2017 21:23:44 -0400
Subject: fixed too-large Color sizes, fixed a redoing bug, rm pointless things
and now Ctrl+Alt+Shift+A gives a bunch of debug info
---
src/component.py | 30 +++++++++++------------
src/components/color.py | 2 +-
src/components/color.ui | 4 ++--
src/components/text.py | 13 ++++++----
src/core.py | 8 +++++--
src/gui/mainwindow.py | 63 +++++++++++++++++++++++++++++--------------------
src/gui/preview_win.py | 1 +
src/main.py | 5 ----
src/toolkit/ffmpeg.py | 2 +-
src/toolkit/frame.py | 3 ---
10 files changed, 72 insertions(+), 59 deletions(-)
(limited to 'src')
diff --git a/src/component.py b/src/component.py
index 35fc717..de4b6a7 100644
--- a/src/component.py
+++ b/src/component.py
@@ -41,10 +41,8 @@ class ComponentMetaclass(type(QtCore.QObject)):
def renderWrapper(self, *args, **kwargs):
try:
log.verbose(
- '### %s #%s renders%s frame %s###',
+ '### %s #%s renders a preview frame ###',
self.__class__.name, str(self.compPos),
- '' if args else ' a preview',
- '' if not args else '%s ' % args[0],
)
return func(self, *args, **kwargs)
except Exception as e:
@@ -198,8 +196,8 @@ class ComponentMetaclass(type(QtCore.QObject)):
'names', # Class methods
'error', 'audio', 'properties', # Properties
'preFrameRender', 'previewRender',
- 'frameRender', 'command',
- 'loadPreset', 'update', 'widget',
+ 'loadPreset', 'command',
+ 'update', 'widget',
)
# Auto-decorate methods
@@ -212,7 +210,7 @@ class ComponentMetaclass(type(QtCore.QObject)):
attrs[key] = property(attrs[key])
elif key == 'command':
attrs[key] = cls.commandWrapper(attrs[key])
- elif key in ('previewRender', 'frameRender'):
+ elif key == 'previewRender':
attrs[key] = cls.renderWrapper(attrs[key])
elif key == 'preFrameRender':
attrs[key] = cls.initializationWrapper(attrs[key])
@@ -298,16 +296,19 @@ class Component(QtCore.QObject, metaclass=ComponentMetaclass):
return self.__class__.name
def __repr__(self):
+ import pprint
try:
preset = self.savePreset()
except Exception as e:
preset = '%s occurred while saving preset' % str(e)
return (
- 'Component(%s, %s, Core)\n'
- 'Name: %s v%s\n Preset: %s' % (
+ 'Component(module %s, pos %s) (%s)\n'
+ 'Name: %s v%s\nPreset: %s' % (
self.moduleIndex, self.compPos,
- self.__class__.name, str(self.__class__.version), preset
+ object.__repr__(self),
+ self.__class__.name, str(self.__class__.version),
+ pprint.pformat(preset)
)
)
@@ -886,12 +887,11 @@ class ComponentUpdate(QtWidgets.QUndoCommand):
def redo(self):
if self.undone:
log.debug('Redoing component update')
- self.parent.oldAttrs = self.relativeWidgetValsAfterUndo
- self.setWidgetValues(self.modifiedVals)
- self.parent.update(auto=True)
- self.parent.oldAttrs = None
- else:
- self.parent.setAttrs(self.modifiedVals)
+ self.parent.oldAttrs = self.relativeWidgetValsAfterUndo
+ self.setWidgetValues(self.modifiedVals)
+ self.parent.update(auto=True)
+ self.parent.oldAttrs = None
+ if not self.undone:
self.relativeWidgetValsAfterRedo = {
attr: copy(getattr(self.parent, attr))
for attr in self.parent._relativeWidgets
diff --git a/src/components/color.py b/src/components/color.py
index a55aa10..7d4f86d 100644
--- a/src/components/color.py
+++ b/src/components/color.py
@@ -102,7 +102,7 @@ class Component(Component):
# Return a solid image at x, y
if self.fillType == 0:
frame = BlankFrame(width, height)
- image = Image.new("RGBA", shapeSize, (r, g, b, 255))
+ image = FloodFrame(self.sizeWidth, self.sizeHeight, (r, g, b, 255))
frame.paste(image, box=(self.x, self.y))
return frame
diff --git a/src/components/color.ui b/src/components/color.ui
index 1865e60..c1713fb 100644
--- a/src/components/color.ui
+++ b/src/components/color.ui
@@ -204,7 +204,7 @@
0
- 999999999
+ 19200
0
@@ -239,7 +239,7 @@
- 999999999
+ 10800
diff --git a/src/components/text.py b/src/components/text.py
index 92f0599..32a108e 100644
--- a/src/components/text.py
+++ b/src/components/text.py
@@ -2,10 +2,13 @@ from PIL import ImageEnhance, ImageFilter, ImageChops
from PyQt5.QtGui import QColor, QFont
from PyQt5 import QtGui, QtCore, QtWidgets
import os
+import logging
from component import Component
from toolkit.frame import FramePainter, PaintColor
+log = logging.getLogger('AVP.Components.Text')
+
class Component(Component):
name = 'Title Text'
@@ -76,16 +79,15 @@ class Component(Component):
def getXY(self):
'''Returns true x, y after considering alignment settings'''
fm = QtGui.QFontMetrics(self.titleFont)
- if self.alignment == 0: # Left
- x = int(self.xPosition)
+ x = self.pixelValForAttr('xPosition')
if self.alignment == 1: # Middle
offset = int(fm.width(self.title)/2)
- x = self.xPosition - offset
-
+ x -= offset
if self.alignment == 2: # Right
offset = fm.width(self.title)
- x = self.xPosition - offset
+ x -= offset
+
return x, self.yPosition
def loadPreset(self, pr, *args):
@@ -137,6 +139,7 @@ class Component(Component):
image = FramePainter(width, height)
x, y = self.getXY()
+ log.debug('Text position translates to %s, %s', x, y)
if self.stroke > 0:
outliner = QtGui.QPainterPathStroker()
outliner.setWidth(self.stroke)
diff --git a/src/core.py b/src/core.py
index 784f3b8..b9e2335 100644
--- a/src/core.py
+++ b/src/core.py
@@ -14,7 +14,7 @@ import toolkit
log = logging.getLogger('AVP.Core')
STDOUT_LOGLVL = logging.VERBOSE
-FILE_LOGLVL = logging.VERBOSE
+FILE_LOGLVL = logging.DEBUG
class Core:
@@ -32,6 +32,11 @@ class Core:
self.savedPresets = {} # copies of presets to detect modification
self.openingProject = False
+ def __repr__(self):
+ return "\n=~=~=~=\n".join(
+ [repr(comp) for comp in self.selectedComponents]
+ )
+
def importComponents(self):
def findComponents():
for f in os.listdir(Core.componentsPath):
@@ -482,7 +487,6 @@ class Core:
'854x480',
],
'FFMPEG_BIN': findFfmpeg(),
- 'windowHasFocus': False,
'canceled': False,
}
diff --git a/src/gui/mainwindow.py b/src/gui/mainwindow.py
index 3b204b7..d7fde5c 100644
--- a/src/gui/mainwindow.py
+++ b/src/gui/mainwindow.py
@@ -11,6 +11,7 @@ from queue import Queue
import sys
import os
import signal
+import atexit
import filecmp
import time
import logging
@@ -49,6 +50,13 @@ class MainWindow(QtWidgets.QMainWindow):
self.window = window
self.core = Core()
Core.mode = 'GUI'
+ # widgets of component settings
+ self.pages = []
+ self.lastAutosave = time.time()
+ # list of previous five autosave times, used to reduce update spam
+ self.autosaveTimes = []
+ self.autosaveCooldown = 0.2
+ self.encoding = False
# Find settings created by Core object
self.dataDir = Core.dataDir
@@ -56,19 +64,16 @@ class MainWindow(QtWidgets.QMainWindow):
self.autosavePath = os.path.join(self.dataDir, 'autosave.avp')
self.settings = Core.settings
+ # Register clean-up functions
+ signal.signal(signal.SIGINT, self.terminate)
+ atexit.register(self.cleanUp)
+
# Create stack of undoable user actions
self.undoStack = QtWidgets.QUndoStack(self)
undoLimit = self.settings.value("pref_undoLimit")
self.undoStack.setUndoLimit(undoLimit)
- # widgets of component settings
- self.pages = []
- self.lastAutosave = time.time()
- # list of previous five autosave times, used to reduce update spam
- self.autosaveTimes = []
- self.autosaveCooldown = 0.2
- self.encoding = False
-
+ # Create Preset Manager
self.presetManager = PresetManager(
uic.loadUi(
os.path.join(Core.wd, 'gui', 'presetmanager.ui')), self)
@@ -97,7 +102,6 @@ class MainWindow(QtWidgets.QMainWindow):
self.timer.start(timeout)
# Begin decorating the window and connecting events
- self.window.installEventFilter(self)
componentList = self.window.listWidget_componentList
style = window.pushButton_undo.style()
@@ -391,24 +395,41 @@ class MainWindow(QtWidgets.QMainWindow):
activated=lambda: self.moveComponent('bottom')
)
- # Debug Hotkeys
QtWidgets.QShortcut(
- "Ctrl+Alt+Shift+R", self.window, self.drawPreview
+ "Ctrl+Shift+F", self.window, self.showFfmpegCommand
)
QtWidgets.QShortcut(
- "Ctrl+Alt+Shift+F", self.window, self.showFfmpegCommand
+ "Ctrl+Shift+U", self.window, self.showUndoStack
)
- QtWidgets.QShortcut(
- "Ctrl+Alt+Shift+U", self.window, self.showUndoStack
+
+ if log.isEnabledFor(logging.DEBUG):
+ QtWidgets.QShortcut(
+ "Ctrl+Alt+Shift+R", self.window, self.drawPreview
+ )
+ QtWidgets.QShortcut(
+ "Ctrl+Alt+Shift+A", self.window, lambda: log.debug(repr(self))
+ )
+
+ def __repr__(self):
+ return (
+ '\n%s\n'
+ '#####\n'
+ 'Preview thread is %s\n' % (
+ repr(self.core),
+ 'live' if self.previewThread.isRunning() else 'dead',
+ )
)
- @QtCore.pyqtSlot()
def cleanUp(self, *args):
log.info('Ending the preview thread')
self.timer.stop()
self.previewThread.quit()
self.previewThread.wait()
+ def terminate(self, *args):
+ self.cleanUp()
+ sys.exit(0)
+
@disableWhenOpeningProject
def updateWindowTitle(self):
appName = 'Audio Visualizer'
@@ -542,7 +563,7 @@ class MainWindow(QtWidgets.QMainWindow):
return True
except FileNotFoundError:
log.error(
- 'Project file couldn\'t be located:', self.currentProject)
+ 'Project file couldn\'t be located: %s', self.currentProject)
return identical
return False
@@ -639,6 +660,7 @@ class MainWindow(QtWidgets.QMainWindow):
detail=detail,
icon='Critical',
)
+ log.info('%s', repr(self))
def changeEncodingStatus(self, status):
self.encoding = status
@@ -1017,12 +1039,3 @@ class MainWindow(QtWidgets.QMainWindow):
self.menu.move(parentPosition + QPos)
self.menu.show()
-
- def eventFilter(self, object, event):
- if event.type() == QtCore.QEvent.WindowActivate \
- or event.type() == QtCore.QEvent.FocusIn:
- Core.windowHasFocus = True
- elif event.type() == QtCore.QEvent.WindowDeactivate \
- or event.type() == QtCore.QEvent.FocusOut:
- Core.windowHasFocus = False
- return False
diff --git a/src/gui/preview_win.py b/src/gui/preview_win.py
index c6b9a32..49a22eb 100644
--- a/src/gui/preview_win.py
+++ b/src/gui/preview_win.py
@@ -60,3 +60,4 @@ class PreviewWindow(QtWidgets.QLabel):
icon='Critical',
parent=self
)
+ log.info('%', repr(self.parent))
diff --git a/src/main.py b/src/main.py
index 6d18af3..f767de1 100644
--- a/src/main.py
+++ b/src/main.py
@@ -36,8 +36,6 @@ def main():
elif mode == 'GUI':
from gui.mainwindow import MainWindow
- import atexit
- import signal
window = uic.loadUi(os.path.join(wd, "gui", "mainwindow.ui"))
# window.adjustSize()
@@ -56,9 +54,6 @@ def main():
log.debug("Finished creating main window")
window.raise_()
- signal.signal(signal.SIGINT, main.cleanUp)
- atexit.register(main.cleanUp)
-
sys.exit(app.exec_())
if __name__ == "__main__":
diff --git a/src/toolkit/ffmpeg.py b/src/toolkit/ffmpeg.py
index f007f90..a77831e 100644
--- a/src/toolkit/ffmpeg.py
+++ b/src/toolkit/ffmpeg.py
@@ -157,7 +157,7 @@ def findFfmpeg():
['ffmpeg', '-version'], stderr=f
)
return "ffmpeg"
- except subprocess.CalledProcessError:
+ except (subprocess.CalledProcessError, FileNotFoundError):
return "avconv"
diff --git a/src/toolkit/frame.py b/src/toolkit/frame.py
index 2104978..aefb55f 100644
--- a/src/toolkit/frame.py
+++ b/src/toolkit/frame.py
@@ -21,7 +21,6 @@ class FramePainter(QtGui.QPainter):
Pillow image with finalize()
'''
def __init__(self, width, height):
- log.verbose('Creating new FramePainter')
image = BlankFrame(width, height)
self.image = QtGui.QImage(ImageQt(image))
super().__init__(self.image)
@@ -78,8 +77,6 @@ def defaultSize(framefunc):
def FloodFrame(width, height, RgbaTuple):
- log.verbose('Creating new %s*%s %s flood frame' % (
- width, height, RgbaTuple))
return Image.new("RGBA", (width, height), RgbaTuple)
--
cgit v1.2.3