From e2d0e84992c539d0aa249483cad3ceca96bb03d9 Mon Sep 17 00:00:00 2001 From: Eddy Pedroni Date: Sun, 2 Jan 2022 16:06:31 +0100 Subject: Improved Qt GUI layout, added set A and set B buttons --- MainWindow.py | 99 ++++++++++++++++++------------- mainwindow.ui | 176 ++++++++++++++++++++++++++++++++------------------------ solo_tool_qt.py | 16 +++++- 3 files changed, 173 insertions(+), 118 deletions(-) diff --git a/MainWindow.py b/MainWindow.py index 0dde7f0..137bd33 100644 --- a/MainWindow.py +++ b/MainWindow.py @@ -14,68 +14,83 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") - MainWindow.resize(602, 424) + MainWindow.resize(971, 767) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") - self.centralWidgetLayout = QtWidgets.QHBoxLayout(self.centralwidget) - self.centralWidgetLayout.setObjectName("centralWidgetLayout") + self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) + self.verticalLayout.setObjectName("verticalLayout") + self.listsLayout = QtWidgets.QHBoxLayout() + self.listsLayout.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint) + self.listsLayout.setSpacing(6) + self.listsLayout.setObjectName("listsLayout") self.songListView = QtWidgets.QListView(self.centralwidget) - self.songListView.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.songListView.setObjectName("songListView") - self.centralWidgetLayout.addWidget(self.songListView) - self.verticalLayout = QtWidgets.QVBoxLayout() - self.verticalLayout.setObjectName("verticalLayout") + self.listsLayout.addWidget(self.songListView) + self.abListView = QtWidgets.QListView(self.centralwidget) + self.abListView.setObjectName("abListView") + self.listsLayout.addWidget(self.abListView) + self.verticalLayout.addLayout(self.listsLayout) + self.slidersLayout = QtWidgets.QVBoxLayout() + self.slidersLayout.setObjectName("slidersLayout") self.songSlider = QtWidgets.QSlider(self.centralwidget) self.songSlider.setMinimumSize(QtCore.QSize(0, 0)) self.songSlider.setOrientation(QtCore.Qt.Horizontal) self.songSlider.setObjectName("songSlider") - self.verticalLayout.addWidget(self.songSlider) + self.slidersLayout.addWidget(self.songSlider) self.aSlider = QtWidgets.QSlider(self.centralwidget) self.aSlider.setOrientation(QtCore.Qt.Horizontal) self.aSlider.setObjectName("aSlider") - self.verticalLayout.addWidget(self.aSlider) + self.slidersLayout.addWidget(self.aSlider) self.bSlider = QtWidgets.QSlider(self.centralwidget) self.bSlider.setOrientation(QtCore.Qt.Horizontal) self.bSlider.setObjectName("bSlider") - self.verticalLayout.addWidget(self.bSlider) - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") - self.abListView = QtWidgets.QListView(self.centralwidget) - self.abListView.setObjectName("abListView") - self.horizontalLayout.addWidget(self.abListView) - self.formLayout = QtWidgets.QFormLayout() - self.formLayout.setObjectName("formLayout") - self.playButton = QtWidgets.QPushButton(self.centralwidget) - self.playButton.setObjectName("playButton") - self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.playButton) + self.slidersLayout.addWidget(self.bSlider) + self.verticalLayout.addLayout(self.slidersLayout) + self.buttonsLayout = QtWidgets.QGridLayout() + self.buttonsLayout.setObjectName("buttonsLayout") self.pauseButton = QtWidgets.QPushButton(self.centralwidget) self.pauseButton.setObjectName("pauseButton") - self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.pauseButton) - self.saveAbButton = QtWidgets.QPushButton(self.centralwidget) - self.saveAbButton.setObjectName("saveAbButton") - self.formLayout.setWidget(9, QtWidgets.QFormLayout.FieldRole, self.saveAbButton) + self.buttonsLayout.addWidget(self.pauseButton, 0, 1, 1, 1) + self.initMidiButton = QtWidgets.QPushButton(self.centralwidget) + self.initMidiButton.setObjectName("initMidiButton") + self.buttonsLayout.addWidget(self.initMidiButton, 0, 4, 1, 1) + self.rateSlider = QtWidgets.QSlider(self.centralwidget) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.rateSlider.sizePolicy().hasHeightForWidth()) + self.rateSlider.setSizePolicy(sizePolicy) + self.rateSlider.setOrientation(QtCore.Qt.Horizontal) + self.rateSlider.setObjectName("rateSlider") + self.buttonsLayout.addWidget(self.rateSlider, 2, 0, 1, 1) + self.playButton = QtWidgets.QPushButton(self.centralwidget) + self.playButton.setObjectName("playButton") + self.buttonsLayout.addWidget(self.playButton, 0, 0, 1, 1) self.saveSessionButton = QtWidgets.QPushButton(self.centralwidget) self.saveSessionButton.setObjectName("saveSessionButton") - self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.saveSessionButton) + self.buttonsLayout.addWidget(self.saveSessionButton, 0, 2, 1, 1) + self.storeAbButton = QtWidgets.QPushButton(self.centralwidget) + self.storeAbButton.setObjectName("storeAbButton") + self.buttonsLayout.addWidget(self.storeAbButton, 2, 3, 1, 1) self.loadSessionButton = QtWidgets.QPushButton(self.centralwidget) self.loadSessionButton.setObjectName("loadSessionButton") - self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.loadSessionButton) + self.buttonsLayout.addWidget(self.loadSessionButton, 0, 3, 1, 1) self.abRepeatCheckBox = QtWidgets.QCheckBox(self.centralwidget) self.abRepeatCheckBox.setObjectName("abRepeatCheckBox") - self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.abRepeatCheckBox) - self.initMidiButton = QtWidgets.QPushButton(self.centralwidget) - self.initMidiButton.setObjectName("initMidiButton") - self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.initMidiButton) + self.buttonsLayout.addWidget(self.abRepeatCheckBox, 2, 1, 1, 1) self.addSongButton = QtWidgets.QPushButton(self.centralwidget) self.addSongButton.setObjectName("addSongButton") - self.formLayout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.addSongButton) - self.rateSlider = QtWidgets.QSlider(self.centralwidget) - self.rateSlider.setOrientation(QtCore.Qt.Horizontal) - self.rateSlider.setObjectName("rateSlider") - self.formLayout.setWidget(12, QtWidgets.QFormLayout.FieldRole, self.rateSlider) - self.horizontalLayout.addLayout(self.formLayout) - self.verticalLayout.addLayout(self.horizontalLayout) - self.centralWidgetLayout.addLayout(self.verticalLayout) + self.buttonsLayout.addWidget(self.addSongButton, 2, 4, 1, 1) + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.setAButton = QtWidgets.QPushButton(self.centralwidget) + self.setAButton.setObjectName("setAButton") + self.horizontalLayout.addWidget(self.setAButton) + self.setBButton = QtWidgets.QPushButton(self.centralwidget) + self.setBButton.setObjectName("setBButton") + self.horizontalLayout.addWidget(self.setBButton) + self.buttonsLayout.addLayout(self.horizontalLayout, 2, 2, 1, 1) + self.verticalLayout.addLayout(self.buttonsLayout) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) @@ -84,11 +99,13 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.playButton.setText(_translate("MainWindow", "Play")) self.pauseButton.setText(_translate("MainWindow", "Pause")) - self.saveAbButton.setText(_translate("MainWindow", "Save AB")) + self.initMidiButton.setText(_translate("MainWindow", "Connect MIDI")) + self.playButton.setText(_translate("MainWindow", "Play")) self.saveSessionButton.setText(_translate("MainWindow", "Save session")) + self.storeAbButton.setText(_translate("MainWindow", "Store AB")) self.loadSessionButton.setText(_translate("MainWindow", "Load session")) self.abRepeatCheckBox.setText(_translate("MainWindow", "AB repeat")) - self.initMidiButton.setText(_translate("MainWindow", "Connect MIDI")) self.addSongButton.setText(_translate("MainWindow", "Add song")) + self.setAButton.setText(_translate("MainWindow", "Set A")) + self.setBButton.setText(_translate("MainWindow", "Set B")) diff --git a/mainwindow.ui b/mainwindow.ui index 236460f..ac4d97b 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -6,24 +6,33 @@ 0 0 - 602 - 424 + 971 + 767 MainWindow - + - - - Qt::CustomContextMenu + + + 6 - + + QLayout::SetDefaultConstraint + + + + + + + + - + @@ -51,77 +60,94 @@ - + + + + + + + + Pause + + + + + + + Connect MIDI + + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + + + + + Play + + + + + + + Save session + + + + + + + Store AB + + + + + + + Load session + + + + + + + AB repeat + + + + + + + Add song + + + + - + + + Set A + + - - - - - Play - - - - - - - Pause - - - - - - - Save AB - - - - - - - Save session - - - - - - - Load session - - - - - - - AB repeat - - - - - - - Connect MIDI - - - - - - - Add song - - - - - - - Qt::Horizontal - - - - + + + Set B + + diff --git a/solo_tool_qt.py b/solo_tool_qt.py index 7bb3821..44f2ee4 100644 --- a/solo_tool_qt.py +++ b/solo_tool_qt.py @@ -73,7 +73,9 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.playButton.pressed.connect(self.soloTool.play) self.pauseButton.pressed.connect(self.soloTool.pause) - self.saveAbButton.pressed.connect(self.saveAbLimits) + self.storeAbButton.pressed.connect(self.storeAbLimits) + self.setAButton.pressed.connect(self.setA) + self.setBButton.pressed.connect(self.setB) self.saveSessionButton.pressed.connect(self.saveSession) self.loadSessionButton.pressed.connect(self.loadSession) self.addSongButton.pressed.connect(self.addSong) @@ -94,12 +96,22 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.soloTool.addSong(path) self.playlistModel.layoutChanged.emit() - def saveAbLimits(self): + def storeAbLimits(self): a = self.aSlider.value() / float(POSITION_FACTOR) b = self.bSlider.value() / float(POSITION_FACTOR) self.soloTool.storeAbLimits(a, b) self.abListModel.layoutChanged.emit() + def setA(self): + position = self.songSlider.value() + self.aSlider.setValue(position) + self.abSliderReleased() + + def setB(self): + position = self.songSlider.value() + self.bSlider.setValue(position) + self.abSliderReleased() + def toggleAbRepeat(self): enable = self.abRepeatCheckBox.isChecked() self.soloTool.setAbLimitEnable(enable) -- cgit v1.2.3