diff --git a/qtgui/designer/tickWidget.py b/qtgui/designer/tickWidget.py
index 71bf41d..b927f07 100644
--- a/qtgui/designer/tickWidget.py
+++ b/qtgui/designer/tickWidget.py
@@ -2,16 +2,19 @@
# Form implementation generated from reading ui file 'tickWidget.ui'
#
-# Created by: PyQt5 UI code generator 5.7
+# Created by: PyQt5 UI code generator 5.15.6
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
+
from PyQt5 import QtCore, QtGui, QtWidgets
+
class Ui_tickWidget(object):
def setupUi(self, tickWidget):
tickWidget.setObjectName("tickWidget")
- tickWidget.resize(453, 229)
+ tickWidget.resize(453, 328)
self.D1 = QtWidgets.QPushButton(tickWidget)
self.D1.setGeometry(QtCore.QRect(10, 40, 80, 22))
self.D1.setObjectName("D1")
@@ -43,7 +46,7 @@ class Ui_tickWidget(object):
self.D128.setGeometry(QtCore.QRect(370, 80, 80, 22))
self.D128.setObjectName("D128")
self.ticks = QtWidgets.QSpinBox(tickWidget)
- self.ticks.setGeometry(QtCore.QRect(160, 190, 161, 23))
+ self.ticks.setGeometry(QtCore.QRect(160, 280, 161, 23))
self.ticks.setReadOnly(True)
self.ticks.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
self.ticks.setPrefix("")
@@ -51,21 +54,33 @@ class Ui_tickWidget(object):
self.ticks.setMaximum(999999999)
self.ticks.setObjectName("ticks")
self.ok = QtWidgets.QPushButton(tickWidget)
- self.ok.setGeometry(QtCore.QRect(60, 190, 80, 22))
+ self.ok.setGeometry(QtCore.QRect(60, 280, 80, 22))
self.ok.setObjectName("ok")
self.cancel = QtWidgets.QPushButton(tickWidget)
- self.cancel.setGeometry(QtCore.QRect(340, 190, 80, 22))
+ self.cancel.setGeometry(QtCore.QRect(340, 280, 80, 22))
self.cancel.setObjectName("cancel")
self.durationLabel = QtWidgets.QLabel(tickWidget)
- self.durationLabel.setGeometry(QtCore.QRect(30, 150, 401, 31))
+ self.durationLabel.setGeometry(QtCore.QRect(30, 240, 401, 31))
self.durationLabel.setAlignment(QtCore.Qt.AlignCenter)
self.durationLabel.setObjectName("durationLabel")
self.reset = QtWidgets.QPushButton(tickWidget)
- self.reset.setGeometry(QtCore.QRect(190, 120, 80, 22))
+ self.reset.setGeometry(QtCore.QRect(190, 210, 80, 22))
self.reset.setObjectName("reset")
self.label = QtWidgets.QLabel(tickWidget)
self.label.setGeometry(QtCore.QRect(120, 10, 241, 20))
self.label.setObjectName("label")
+ self.x2 = QtWidgets.QPushButton(tickWidget)
+ self.x2.setGeometry(QtCore.QRect(50, 140, 80, 23))
+ self.x2.setObjectName("x2")
+ self.x3 = QtWidgets.QPushButton(tickWidget)
+ self.x3.setGeometry(QtCore.QRect(140, 140, 80, 23))
+ self.x3.setObjectName("x3")
+ self.x5 = QtWidgets.QPushButton(tickWidget)
+ self.x5.setGeometry(QtCore.QRect(230, 140, 80, 23))
+ self.x5.setObjectName("x5")
+ self.x7 = QtWidgets.QPushButton(tickWidget)
+ self.x7.setGeometry(QtCore.QRect(320, 140, 80, 23))
+ self.x7.setObjectName("x7")
self.retranslateUi(tickWidget)
QtCore.QMetaObject.connectSlotsByName(tickWidget)
@@ -96,4 +111,7 @@ class Ui_tickWidget(object):
self.durationLabel.setText(_translate("tickWidget", "Simplest Duration"))
self.reset.setText(_translate("tickWidget", "Reset"))
self.label.setText(_translate("tickWidget", "Use buttons to add to total tick duration"))
-
+ self.x2.setText(_translate("tickWidget", "x2"))
+ self.x3.setText(_translate("tickWidget", "x3"))
+ self.x5.setText(_translate("tickWidget", "x5"))
+ self.x7.setText(_translate("tickWidget", "x7"))
diff --git a/qtgui/designer/tickWidget.ui b/qtgui/designer/tickWidget.ui
index 23702f0..313a258 100644
--- a/qtgui/designer/tickWidget.ui
+++ b/qtgui/designer/tickWidget.ui
@@ -7,7 +7,7 @@
0
0
453
- 229
+ 328
@@ -162,7 +162,7 @@
160
- 190
+ 280
161
23
@@ -190,7 +190,7 @@
60
- 190
+ 280
80
22
@@ -206,7 +206,7 @@
340
- 190
+ 280
80
22
@@ -222,7 +222,7 @@
30
- 150
+ 240
401
31
@@ -238,7 +238,7 @@
190
- 120
+ 210
80
22
@@ -260,6 +260,58 @@
Use buttons to add to total tick duration
+
+
+
+ 50
+ 140
+ 80
+ 23
+
+
+
+ x2
+
+
+
+
+
+ 140
+ 140
+ 80
+ 23
+
+
+
+ x3
+
+
+
+
+
+ 230
+ 140
+ 80
+ 23
+
+
+
+ x5
+
+
+
+
+
+ 320
+ 140
+ 80
+ 23
+
+
+
+ x7
+
+
diff --git a/qtgui/submenus.py b/qtgui/submenus.py
index 6719ebc..5790bc8 100644
--- a/qtgui/submenus.py
+++ b/qtgui/submenus.py
@@ -49,8 +49,9 @@ def wrapCallDeactivateMidIn(self):
Submenu.__call__ = wrapCallDeactivateMidIn
class CombinedTickWidget(QtWidgets.QFrame):
- def __init__(self):
- super().__init__()
+ def __init__(self, mainWindow):
+ super().__init__(mainWindow)
+ self.mainWindow = mainWindow
self.setFrameShape(QtWidgets.QFrame.Box)
self.setFrameShadow(QtWidgets.QFrame.Sunken)
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self)
@@ -96,17 +97,28 @@ class CombinedTickWidget(QtWidgets.QFrame):
return self.upbeatSpinBox.value()
def callClickWidgetForUpbeat(self):
- dialog = TickWidget(self, initValue = self.upbeatSpinBox.value())
+ dialog = TickWidget(self.mainWindow, initValue = self.upbeatSpinBox.value())
self.upbeatSpinBox.setValue(int(dialog.ui.ticks.value()))
class TickWidget(QtWidgets.QDialog):
- def __init__(self, mainWindow, initValue = 0):
- super().__init__(mainWindow)
+ def __init__(self, parentWindow, initValue = 0):
+ super().__init__()
#Set up the user interface from Designer.
self.ui = Ui_tickWidget()
self.ui.setupUi(self)
+ #This without init(parentWindow) will result in a nicely positioned window, that is not accesible :(
+ """
+ self.setParent(parentWindow)
+ self.setAutoFillBackground(True)
+ self.setModal(False)
+ self.raise_()
+ self.activateWindow()
+ """
+
+
+
#self.ui.ticks.setValue(initValue)
self.ui.ticks.setValue(0) #TODO: easier to drawLabel this way. change back to given value when drawLabel is autogenerated and does not work by keeping track anymore.
@@ -116,7 +128,8 @@ class TickWidget(QtWidgets.QDialog):
self.ui.durationLabel.setText("")
- self.clickedSoFar = [] #keep track
+ self.clickedSoFar = [] #keep track. This is purely cosmetical to remember the click history.
+ self.multipliers = [] #keep track. This is purely cosmetical to remember the click history.
self.ui.D1.clicked.connect(lambda: self.addDuration(api.D1))
self.ui.D2.clicked.connect(lambda: self.addDuration(api.D2))
@@ -130,6 +143,12 @@ class TickWidget(QtWidgets.QDialog):
self.ui.DB.clicked.connect(lambda: self.addDuration(api.DB))
self.ui.DL.clicked.connect(lambda: self.addDuration(api.DL))
+
+ self.ui.x2.clicked.connect(lambda: self.multiply(2))
+ self.ui.x3.clicked.connect(lambda: self.multiply(3))
+ self.ui.x5.clicked.connect(lambda: self.multiply(5))
+ self.ui.x7.clicked.connect(lambda: self.multiply(7))
+
self.ui.ticks.valueChanged.connect(self.drawLabel)
self.exec() #blocks until the dialog gets closed
@@ -139,14 +158,23 @@ class TickWidget(QtWidgets.QDialog):
def reset(self):
self.ui.ticks.setValue(0)
self.clickedSoFar = []
+ self.multipliers = []
self.ui.durationLabel.setText("")
- def addDuration(self, duration):
+ def addDuration(self, duration:int):
self.clickedSoFar.append(duration)
nowTicks = self.ui.ticks.value()
self.ui.ticks.setValue(nowTicks + duration)
+ def multiply(self, times:int):
+ self.multipliers.append("x" + str(times))
+ nowTicks = self.ui.ticks.value()
+ self.ui.ticks.setValue(nowTicks * times)
+
+
def drawLabel(self):
+ """This is purely cosmetical"""
+
#TODO: with nice partitions of real note icons.
#Error handling. A too complex or wrong duration (off by one, not equal to a partition etc.) blocks the "OK" button. No, just gives a warning.
#backendDurationInstance = api.items.Duration.createByGuessing(self.ui.ticks.value())
@@ -159,7 +187,7 @@ class TickWidget(QtWidgets.QDialog):
part = str(times) + "x" + symbol
text.append(part)
- self.ui.durationLabel.setText(" + ".join(text))
+ self.ui.durationLabel.setText("( " + " + ".join(text) + " ) " + " ".join(self.multipliers))
class SecondaryClefMenu(Submenu):
@@ -345,7 +373,7 @@ class BlockPropertiesEdit(Submenu):
self.layout.addRow(translate("submenus", "name"), self.name)
#self.minimumInTicks = QtWidgets.QSpinBox()
- self.minimumInTicks = CombinedTickWidget()
+ self.minimumInTicks = CombinedTickWidget(mainWindow)
self.minimumInTicks.setValue(self.staticExportItem["minimumInTicks"])
self.layout.addRow(translate("submenus", "minimum in ticks"), self.minimumInTicks)
@@ -372,7 +400,7 @@ class TempoBlockPropertiesEdit(Submenu):
self.name.selectAll()
self.layout.addRow(translate("submenus", "name"), self.name)
- self.duration = CombinedTickWidget()
+ self.duration = CombinedTickWidget(mainWindow)
self.duration.setValue(self.staticExportItem["duration"])
self.layout.addRow(translate("submenus", "duration in ticks"), self.duration)
@@ -514,7 +542,7 @@ class GridRhytmEdit(Submenu):
self.mainWindow = mainWindow
self.layout.insertRow(0, QtWidgets.QLabel(translate("submenus", "Edit Grid")))
- self.duration = CombinedTickWidget()
+ self.duration = CombinedTickWidget(mainWindow)
self.duration.setValue(constantsAndConfigs.gridRhythm)
self.layout.addRow(translate("submenus", "duration in ticks"), self.duration)
diff --git a/qtgui/trackEditor.py b/qtgui/trackEditor.py
index 90bf261..bf4beff 100644
--- a/qtgui/trackEditor.py
+++ b/qtgui/trackEditor.py
@@ -325,7 +325,7 @@ class TrackEditor(QtWidgets.QWidget):
allUpbeats.setLayout(allUpbeatsLayout)
self.layout.addWidget(allUpbeats)
- self.allUpbeatsCombinedTickWidget = CombinedTickWidget()
+ self.allUpbeatsCombinedTickWidget = CombinedTickWidget(mainWindow)
allUpbeatsPushButton = QtWidgets.QPushButton(translate("trackEditorPythonFile", "set all upbeats"))
allUpbeatsPushButton.clicked.connect(self.setAllUpbeats) #gets the value itself