#! /usr/bin/env python3 # -*- coding: utf-8 -*- """ Copyright 2021, Nils Hilbricht, Germany ( https://www.hilbricht.net ) This file is part of the Laborejo Software Suite ( https://www.laborejo.org ), This application is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import logging; logging.info("import {}".format(__file__)) #Standard Library Modules import os.path #Third Party Modules from PyQt5 import QtWidgets, QtCore, QtGui #Template Modules from template.qtgui.mainwindow import MainWindow as TemplateMainWindow from template.qtgui.menu import Menu from template.qtgui.about import About #Our modules import engine.api as api from .instrument import InstrumentTreeController from .auditioner import AuditionerMidiInputComboController from .selectedinstrumentcontroller import SelectedInstrumentController class MainWindow(TemplateMainWindow): def __init__(self): """The order of calls is very important. The split ploint is calling the super.__init. Some functions need to be called before, some after. For example: The about dialog is created in the template main window init. So we need to set additional help texts before that init. """ #Inject more help texts in the templates About "Did You Know" field. #About.didYouKnow is a class variable. #Make the first three words matter! #Do not start them all with "You can..." or "...that you can", in response to the Did you know? title. #We use injection into the class and not a parameter because this dialog gets shown by creating an object. We can't give the parameters when this is shown via the mainWindow menu. About.didYouKnow = [ QtCore.QCoreApplication.translate("About", "Double click an instrument to load it into the special Auditioner slot."), QtCore.QCoreApplication.translate("About", "There is no way to load your own instruments into this program. If you create your own instruments and would like them to be included please contact the developers for a collaboration.") ] + About.didYouKnow super().__init__() #make the search bar smaller self.ui.search_groupBox.setMinimumSize(30, 1) self.ui.splitter_2.setSizes([1,1]) #just a forced update #Make the description field at least a bit visible self.ui.details_groupBox.setMinimumSize(1, 50) self.ui.splitter.setSizes([1,1]) #just a forced update self.auditionerMidiInputComboController = AuditionerMidiInputComboController(parentMainWindow=self) self.instrumentTreeController = InstrumentTreeController(parentMainWindow=self) self.selectedInstrumentController = SelectedInstrumentController(parentMainWindow=self) self.setupMenu() self.start() #This shows the GUI, or not, depends on the NSM gui save setting. We need to call that after the menu, otherwise the about dialog will block and then we get new menu entries, which looks strange. #Statusbar will show possible actions, such as "use scrollwheel to transpose" #self.statusBar().showMessage(QtCore.QCoreApplication.translate("Statusbar", "")) self.statusBar().showMessage("") def setupMenu(self): """In its own function purely for readability""" #New menu entries and template-menu overrides #self.menu.connectMenuEntry("actionAbout", lambda: print("About Dialog Menu deactivated")) #deactivates the original function #self.menu.addMenuEntry("menuEdit", "actionNils", "Nils", lambda: print("Merle")) self.menu.addMenuEntry("menuEdit", "actionLoadSamples", QtCore.QCoreApplication.translate("Menu", "Load all Instrument Samples (slow!)"), api.loadAllInstrumentSamples) #self.menu.connectMenuEntry("actionNils", lambda: print("Override")) self.menu.addSubmenu("menuView", QtCore.QCoreApplication.translate("Menu", "View")) self.menu.addMenuEntry("menuView", "actionExpandAll", QtCore.QCoreApplication.translate("Menu", "Expand all Libraries"), lambda: self.instrumentTreeController.setAllExpanded(True)) self.menu.addMenuEntry("menuView", "actionCollapseAll", QtCore.QCoreApplication.translate("Menu", "Collapse all Libraries"), lambda: self.instrumentTreeController.setAllExpanded(False)) if "nestedView" in api.session.guiSharedDataToSave: nested = api.session.guiSharedDataToSave["nestedView"] else: nested = True self.menu.addMenuEntry("menuView", "actionFlatNested", QtCore.QCoreApplication.translate("Menu", "Nested Instrument List"), self.instrumentTreeController.toggleNestedFlat, checkable=True, startChecked=nested) #function receives check state as automatic parameter self.menu.orderSubmenus(["menuFile", "menuEdit", "menuView", "menuHelp"]) def zoom(self, scaleFactor:float): pass def stretchXCoordinates(self, factor): pass