From 9e388fcbd5cd4ebbc08c4f79b8bfdc1cfaedebbb Mon Sep 17 00:00:00 2001
From: Nils <>
Date: Wed, 1 May 2019 15:27:04 +0200
Subject: [PATCH] Add audible to track properties
---
engine/api.py | 11 ++++++++++-
engine/track.py | 1 +
qtgui/designer/trackWidget.py | 9 ++++++++-
qtgui/designer/trackWidget.ui | 10 ++++++++++
qtgui/trackEditor.py | 6 ++++++
5 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/engine/api.py b/engine/api.py
index 0700bc8..8822243 100644
--- a/engine/api.py
+++ b/engine/api.py
@@ -176,7 +176,7 @@ class ClientCallbacks(Callbacks): #inherits from the templates api callbacks
self._dataChanged()
def _tracksChanged(self):
- """Track deleted, added or moved. Or toggled double/non-double.
+ """Track deleted, added or moved. Or toggled double/non-double, visible, eudible etc.
This callback is relatively cheap because it does not generate
any item data."""
#TODO: does NOT call template.api._numberOfTracksChanged
@@ -583,6 +583,15 @@ def unhideTrack(trId):
callbacks._updateTrack(trId)
#the cursor is uneffected
+def trackAudible(trId, state:bool):
+ """
+ Send midi notes or not. CCs and instrument changes are unaffected.
+ Not managed by undo/redo.
+ Does not need updateTrack. There is no new midi data to generate. cbox handles mute on its own"""
+ trackObject = session.data.trackById(trId)
+ trackObject.sequencerInterface.enable(state)
+ callbacks._tracksChanged() #even if there is no change the GUI needs to be notified to redraw its checkboxes that may have been enabled GUI-side.
+
def listOfTrackIds():
return session.data.listOfTrackIds()
diff --git a/engine/track.py b/engine/track.py
index 0d37584..1f3d12e 100644
--- a/engine/track.py
+++ b/engine/track.py
@@ -903,6 +903,7 @@ class Track(object):
"index" : self.state.index(),
"upbeatInTicks": int(self.upbeatInTicks),
"double" : self.double,
+ "audible" : self.sequencerInterface.enabled,
"initialMidiChannel" : self.initialMidiChannel,
"initialMidiProgram" : self.initialMidiProgram,
"initialMidiBankMsb" : self.initialMidiBankMsb,
diff --git a/qtgui/designer/trackWidget.py b/qtgui/designer/trackWidget.py
index 81efd30..96683b8 100644
--- a/qtgui/designer/trackWidget.py
+++ b/qtgui/designer/trackWidget.py
@@ -2,12 +2,13 @@
# Form implementation generated from reading ui file 'trackWidget.ui'
#
-# Created by: PyQt5 UI code generator 5.9.2
+# Created by: PyQt5 UI code generator 5.12.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
+
class Ui_trackGroupWidget(object):
def setupUi(self, trackGroupWidget):
trackGroupWidget.setObjectName("trackGroupWidget")
@@ -66,6 +67,10 @@ class Ui_trackGroupWidget(object):
self.doubleTrackCheckbox = QtWidgets.QCheckBox(self.track)
self.doubleTrackCheckbox.setObjectName("doubleTrackCheckbox")
self.horizontalLayout.addWidget(self.doubleTrackCheckbox)
+ self.audibleCheckbox = QtWidgets.QCheckBox(self.track)
+ self.audibleCheckbox.setChecked(True)
+ self.audibleCheckbox.setObjectName("audibleCheckbox")
+ self.horizontalLayout.addWidget(self.audibleCheckbox)
self.visibleCheckbox = QtWidgets.QCheckBox(self.track)
self.visibleCheckbox.setChecked(True)
self.visibleCheckbox.setObjectName("visibleCheckbox")
@@ -446,6 +451,7 @@ class Ui_trackGroupWidget(object):
self.upbeatSpinBox.setSuffix(_translate("trackGroupWidget", " Upbeat Ticks"))
self.callTickWidget.setText(_translate("trackGroupWidget", "𝅘𝅥𝅮 "))
self.doubleTrackCheckbox.setText(_translate("trackGroupWidget", "Double Track"))
+ self.audibleCheckbox.setText(_translate("trackGroupWidget", "Audible"))
self.visibleCheckbox.setText(_translate("trackGroupWidget", "Visible"))
self.midiChannelSpinBox.setPrefix(_translate("trackGroupWidget", "Channel "))
self.ccChannelsPushButton.setText(_translate("trackGroupWidget", "CC Channels"))
@@ -489,3 +495,4 @@ class Ui_trackGroupWidget(object):
self.buttonResetDynamics.setText(_translate("trackGroupWidget", "Reset to Default Dynamic Values"))
self.advancedContent.setTabText(self.advancedContent.indexOf(self.tab_2), _translate("trackGroupWidget", "Dynamic Signature Definitions"))
+
diff --git a/qtgui/designer/trackWidget.ui b/qtgui/designer/trackWidget.ui
index 64fc241..67b5ddb 100644
--- a/qtgui/designer/trackWidget.ui
+++ b/qtgui/designer/trackWidget.ui
@@ -156,6 +156,16 @@
+ -
+
+
+ Audible
+
+
+ true
+
+
+
-
diff --git a/qtgui/trackEditor.py b/qtgui/trackEditor.py
index 2e3d19b..0e9cfe1 100644
--- a/qtgui/trackEditor.py
+++ b/qtgui/trackEditor.py
@@ -44,6 +44,7 @@ class TrackWidget(QtWidgets.QGroupBox):
self.trackExportObject = trackExportObject #updated on every self.updateData
self.ui.visibleCheckbox.clicked.connect(self.visibleToggled) #only user changes, not through setChecked()
+ self.ui.audibleCheckbox.clicked.connect(self.audibleToggled) #only user changes, not through setChecked()
self.ui.doubleTrackCheckbox.clicked.connect(self.doubleTrackToggled) #only user changes, not through setChecked()
#self.ui.upbeatSpinBox.editingFinished.connect(self.upbeatChanged) #only user changes, not through setText() etc.
self.ui.upbeatSpinBox.valueChanged.connect(self.upbeatChanged) #also through the tickWidget
@@ -130,6 +131,10 @@ class TrackWidget(QtWidgets.QGroupBox):
api.unhideTrack(self.trackExportObject["id"])
else:
api.hideTrack(self.trackExportObject["id"])
+
+ def audibleToggled(self, signal):
+ assert signal == bool(self.ui.audibleCheckbox.checkState())
+ api.trackAudible(self.trackExportObject["id"], signal)
def doubleTrackToggled(self, signal):
api.setDoubleTrack(self.trackExportObject["id"], signal)
@@ -284,6 +289,7 @@ class TrackWidget(QtWidgets.QGroupBox):
self.ui.deleteButton.setEnabled(False) #You cannot delete hidden tracks. see api.deleteTrack
self.ui.doubleTrackCheckbox.setChecked(trackExportObject["double"])
+ self.ui.audibleCheckbox.setChecked(trackExportObject["audible"])
for i in range(0,16): #without 16
self.ccChannels[i].setChecked(i in trackExportObject["ccChannels"]) #a checkbox widget