From 8a044f9d0411933a9c1bce8687644b21097c9926 Mon Sep 17 00:00:00 2001 From: Nils <> Date: Sun, 6 Oct 2019 00:31:27 +0200 Subject: [PATCH] Move most pattern tool buttons to a real toolbar and activate most opengl viewports. However, not the pattern one because pitches are still proxy widgets --- qtgui/designer/mainwindow.py | 7 +++--- qtgui/designer/mainwindow.ui | 2 +- qtgui/mainwindow.py | 43 +++++++++++++++++++++++++++++++----- qtgui/pattern_grid.py | 26 +++++++++------------- 4 files changed, 53 insertions(+), 25 deletions(-) diff --git a/qtgui/designer/mainwindow.py b/qtgui/designer/mainwindow.py index ba8e194..526865b 100644 --- a/qtgui/designer/mainwindow.py +++ b/qtgui/designer/mainwindow.py @@ -2,16 +2,18 @@ # Form implementation generated from reading ui file 'mainwindow.ui' # -# Created by: PyQt5 UI code generator 5.11.3 +# Created by: PyQt5 UI code generator 5.13.1 # # WARNING! All changes made in this file will be lost! + from PyQt5 import QtCore, QtGui, QtWidgets + class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") - MainWindow.resize(800, 600) + MainWindow.resize(800, 619) MainWindow.setWindowTitle("Patroneo") self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") @@ -189,4 +191,3 @@ class Ui_MainWindow(object): _translate = QtCore.QCoreApplication.translate self.actionAddTrack.setIconText(_translate("MainWindow", "Add Track")) self.actionClone_Selected_Track.setIconText(_translate("MainWindow", "Clone selected Track")) - diff --git a/qtgui/designer/mainwindow.ui b/qtgui/designer/mainwindow.ui index d2c2355..0a47b2a 100644 --- a/qtgui/designer/mainwindow.ui +++ b/qtgui/designer/mainwindow.ui @@ -7,7 +7,7 @@ 0 0 800 - 600 + 619 diff --git a/qtgui/mainwindow.py b/qtgui/mainwindow.py index cd055cf..11e819b 100644 --- a/qtgui/mainwindow.py +++ b/qtgui/mainwindow.py @@ -36,7 +36,7 @@ from template.qtgui.about import About import engine.api as api from .songeditor import SongEditor, TrackLabelEditor from .timeline import Timeline -from .pattern_grid import PatternGrid +from .pattern_grid import PatternGrid, VelocityControls, TransposeControls from .resources import * class MainWindow(TemplateMainWindow): @@ -117,17 +117,17 @@ class MainWindow(TemplateMainWindow): self.ui.songEditorView.parentMainWindow = self self.songEditor = SongEditor(parentView=self.ui.songEditorView) self.ui.songEditorView.setScene(self.songEditor) - #self.ui.songEditorView.setViewport(QtWidgets.QOpenGLWidget()) + self.ui.songEditorView.setViewport(QtWidgets.QOpenGLWidget()) self.ui.trackEditorView.parentMainWindow = self self.trackLabelEditor = TrackLabelEditor(parentView=self.ui.trackEditorView) self.ui.trackEditorView.setScene(self.trackLabelEditor) - #self.ui.trackEditorView.setViewport(QtWidgets.QOpenGLWidget()) + self.ui.trackEditorView.setViewport(QtWidgets.QOpenGLWidget()) self.ui.timelineView.parentMainWindow = self self.timeline = Timeline(parentView=self.ui.timelineView) self.ui.timelineView.setScene(self.timeline) - #self.ui.timelineView.setViewport(QtWidgets.QOpenGLWidget()) + self.ui.timelineView.setViewport(QtWidgets.QOpenGLWidget()) #Sync the vertical trackEditorView scrollbar (which is never shown) with the songEditorView scrollbar. self.ui.songEditorView.setVerticalScrollBar(self.ui.trackEditorView.verticalScrollBar()) #this seems backwards, but it is correct :) @@ -135,13 +135,18 @@ class MainWindow(TemplateMainWindow): #Sync the horizontal timelineView scrollbar (which is never shown) with the songEditorView scrollbar. self.ui.songEditorView.setHorizontalScrollBar(self.ui.timelineView.horizontalScrollBar()) #this seems backwards, but it is correct :) - ##Pattern Editor + ##Pattern Editor self.ui.gridView.parentMainWindow = self + self.patternGrid = PatternGrid(parentView=self.ui.gridView) self.ui.gridView.setScene(self.patternGrid) self.ui.gridView.setRenderHints(QtGui.QPainter.TextAntialiasing) #self.ui.gridView.setViewport(QtWidgets.QOpenGLWidget()) + self.patternToolbar = QtWidgets.QToolBar() + self.ui.patternArea.layout().insertWidget(0, self.patternToolbar) + self._populatePatternToolbar() + #Toolbar, which needs the widgets above already established self._populateToolbar() @@ -205,6 +210,28 @@ class MainWindow(TemplateMainWindow): newTrackExporDict = api.createSiblingTrack(self.currentTrackId) self.chooseCurrentTrack(newTrackExporDict) + def _populatePatternToolbar(self): + self.patternToolbar.contextMenuEvent = api.nothing #remove that annoying Checkbox context menu + + spacerItemLeft = QtWidgets.QWidget() + spacerItemLeft.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) + spacerItemRight = QtWidgets.QWidget() + spacerItemRight.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) + + self.patternToolbar.addWidget(spacerItemLeft) + #spacerItemRight is added as last widget + + #Actual widgets + velocityControls = VelocityControls(mainWindow=self, patternScene=self.patternGrid) + self.patternToolbar.addWidget(velocityControls) + + transposeControls = TransposeControls(parentScene=self.patternGrid) + self.patternToolbar.addWidget(transposeControls) + + #Finally add a spacer to center all widgets + self.patternToolbar.addWidget(spacerItemRight) + + def _populateToolbar(self): self.ui.toolBar.contextMenuEvent = api.nothing #remove that annoying Checkbox context menu @@ -450,3 +477,9 @@ class MainWindow(TemplateMainWindow): value = s.numberOfSubdivisions.value() error= ("fail", "delete", "merge")[s.errorHandling.currentIndex()] api.convert_subdivisions(value, error) + + + #Override template functions + def _stretchXCoordinates(*args): pass + + diff --git a/qtgui/pattern_grid.py b/qtgui/pattern_grid.py index 3ec308e..8e2f8c5 100644 --- a/qtgui/pattern_grid.py +++ b/qtgui/pattern_grid.py @@ -24,7 +24,7 @@ from template.engine import pitch from PyQt5 import QtCore, QtGui, QtWidgets, QtOpenGL SIZE_UNIT = 40 -SIZE_TOP_OFFSET = 75 +SIZE_TOP_OFFSET = 40 SIZE_BOTTOM_OFFSET = 35 SIZE_RIGHT_OFFSET = 80 @@ -69,21 +69,13 @@ class PatternGrid(QtWidgets.QGraphicsScene): self.trackName = QtWidgets.QGraphicsSimpleTextItem("") self.trackName.setBrush(self.textColor) - self.addItem(self.trackName) + #self.addItem(self.trackName) self.trackName.setPos(0,0) self.scale = Scale(parentScene=self) self.addItem(self.scale) self.scale.setPos(-20, SIZE_TOP_OFFSET) - velocityControlsProxy = self.addWidget(VelocityControls(parentScene=self)) - velocityControlsProxy.setPos(0, 25) #we can't get the height of the track name properly. So it was trial and error... - velocityControlsProxy.setZValue(_zValuesRelativeToScene["scale"]) #so the drop down menu is above the steps - - tranposeControlsProxy = self.addWidget(TransposeControls(parentScene=self)) - tranposeControlsProxy.setPos(velocityControlsProxy.geometry().width() + 10, 25) #we can't get the height of the track name properly. So it was trial and error... - tranposeControlsProxy.setZValue(_zValuesRelativeToScene["scale"]) #so the drop down menu is above the steps - self._middleMouseDown = False #self.ticksToPixelRatio set by callback_timeSignatureChanged @@ -885,9 +877,11 @@ class Playhead(QtWidgets.QGraphicsLineItem): self.hide() class VelocityControls(QtWidgets.QWidget): - def __init__(self, parentScene): - self.parentScene = parentScene + def __init__(self, mainWindow, patternScene): super().__init__() + + self.parentScene = patternScene + self.mainWindow = mainWindow layout = QtWidgets.QHBoxLayout() layout.setSpacing(0) @@ -909,9 +903,9 @@ class VelocityControls(QtWidgets.QWidget): def _mouseWheelEvent(self, event): event.accept() if event.angleDelta().y() > 0: #up - api.changePatternVelocity(trackId=self.parentScene.parentView.parentMainWindow.currentTrackId, steps=10) + api.changePatternVelocity(trackId=self.mainWindow.currentTrackId, steps=10) else: #down - api.changePatternVelocity(trackId=self.parentScene.parentView.parentMainWindow.currentTrackId, steps=-10) + api.changePatternVelocity(trackId=self.mainWindow.currentTrackId, steps=-10) #The steps got redrawn, therefore their velocity numbers are now invislbe again. We are still in hover modus: self.parentScene.showVelocities() @@ -922,12 +916,12 @@ class VelocityControls(QtWidgets.QWidget): self.parentScene.hideVelocities() def velocityUp(self): - api.changePatternVelocity(trackId=self.parentScene.parentView.parentMainWindow.currentTrackId, steps=1) + api.changePatternVelocity(trackId=self.mainWindow.currentTrackId, steps=1) #The steps got redrawn, therefore their velocity numbers are now invislbe again. We are still in hover modus: self.parentScene.showVelocities() def velocityDown(self): - api.changePatternVelocity(trackId=self.parentScene.parentView.parentMainWindow.currentTrackId, steps=-1) + api.changePatternVelocity(trackId=self.mainWindow.currentTrackId, steps=-1) #The steps got redrawn, therefore their velocity numbers are now invislbe again. We are still in hover modus: self.parentScene.showVelocities()