Remove solo buttons, hide mute on mics, fix master volume, add mic_on MIDI, resize fonts
- Removed solo buttons from all mixer channels - Mute button hidden on mic channels (0,1) — mic_on toggle replaces it - Fixed master volume fader not being applied in audio _process() - Added mixer_mic_on MIDI signal and learnable action - Added CLEAR MIDI button to settings popup - Increased settings popup fonts 7pt→9pt, popup size 460→620px - Reduced deck fonts (header 24→16, elapsed 32→22, etc.) and spacing - Increased mixer fonts (names 8→9, headers 9→11, etc.) - Added missing MIDI learn entries (mute ch3-8, pfl ch3-8, mic_on ch1-2)
This commit is contained in:
+72
-32
@@ -198,7 +198,7 @@ POPUP_STYLE = """
|
||||
border: 1px solid #3a3c44;
|
||||
border-radius: 3px;
|
||||
padding: 3px 8px;
|
||||
font-size: 7pt;
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
QPushButton#popupBtn:hover {
|
||||
@@ -211,7 +211,7 @@ POPUP_STYLE = """
|
||||
border: 1px solid #3a3c44;
|
||||
border-radius: 12px;
|
||||
padding: 2px 10px;
|
||||
font-size: 7pt;
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
QPushButton#ratioBtn:hover {
|
||||
@@ -224,8 +224,8 @@ POPUP_STYLE = """
|
||||
border: 1px solid #3a3c44;
|
||||
border-radius: 3px;
|
||||
padding: 2px 4px;
|
||||
font-size: 7pt;
|
||||
min-height: 20px;
|
||||
font-size: 9pt;
|
||||
min-height: 24px;
|
||||
}
|
||||
QComboBox#portCombo:hover { border-color: #5a5c64; }
|
||||
QComboBox#portCombo::drop-down { border: none; width: 14px; }
|
||||
@@ -253,65 +253,85 @@ class SettingsPopup(QFrame):
|
||||
self.setWindowFlags(Qt.Popup | Qt.FramelessWindowHint)
|
||||
self.setObjectName("settingsPopup")
|
||||
self.setStyleSheet(POPUP_STYLE)
|
||||
self.setFixedWidth(400)
|
||||
self.setFixedWidth(620)
|
||||
|
||||
self._build_ui()
|
||||
|
||||
def _build_ui(self):
|
||||
root = QVBoxLayout(self)
|
||||
root.setContentsMargins(12, 10, 12, 10)
|
||||
root.setSpacing(6)
|
||||
root.setContentsMargins(14, 12, 14, 12)
|
||||
root.setSpacing(8)
|
||||
|
||||
# Row 1: Save/Load
|
||||
# Row 1: Save/Load / Clear MIDI
|
||||
row1 = QHBoxLayout()
|
||||
row1.setSpacing(6)
|
||||
row1.setSpacing(8)
|
||||
save_btn = QPushButton("SAVE")
|
||||
save_btn.setObjectName("popupBtn")
|
||||
save_btn.setFixedHeight(24)
|
||||
save_btn.setFixedHeight(30)
|
||||
save_btn.clicked.connect(self.save_session.emit)
|
||||
row1.addWidget(save_btn)
|
||||
|
||||
load_btn = QPushButton("LOAD")
|
||||
load_btn.setObjectName("popupBtn")
|
||||
load_btn.setFixedHeight(24)
|
||||
load_btn.setFixedHeight(30)
|
||||
load_btn.clicked.connect(self.load_session.emit)
|
||||
row1.addWidget(load_btn)
|
||||
|
||||
row1.addStretch()
|
||||
|
||||
clear_midi_btn = QPushButton("CLEAR MIDI")
|
||||
clear_midi_btn.setObjectName("popupBtn")
|
||||
clear_midi_btn.setFixedHeight(30)
|
||||
clear_midi_btn.setStyleSheet("""
|
||||
QPushButton {
|
||||
background-color: #3a1a1a;
|
||||
color: #ff6666;
|
||||
border: 1px solid #5a2a2a;
|
||||
border-radius: 3px;
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
padding: 3px 8px;
|
||||
}
|
||||
QPushButton:hover { background-color: #5a2a2a; }
|
||||
""")
|
||||
clear_midi_btn.clicked.connect(self._clear_all_midi)
|
||||
row1.addWidget(clear_midi_btn)
|
||||
|
||||
root.addLayout(row1)
|
||||
|
||||
# Row 2: MIDI port
|
||||
row2 = QHBoxLayout()
|
||||
row2.setSpacing(4)
|
||||
row2.setSpacing(6)
|
||||
self._port_combo = QComboBox()
|
||||
self._port_combo.setObjectName("portCombo")
|
||||
self._port_combo.setMinimumWidth(160)
|
||||
self._port_combo.setMinimumWidth(200)
|
||||
row2.addWidget(self._port_combo)
|
||||
|
||||
refresh_btn = QPushButton("⟳")
|
||||
refresh_btn.setObjectName("popupBtn")
|
||||
refresh_btn.setFixedSize(26, 22)
|
||||
refresh_btn.setFixedSize(30, 26)
|
||||
refresh_btn.clicked.connect(self._refresh_ports)
|
||||
row2.addWidget(refresh_btn)
|
||||
|
||||
self._connect_btn = QPushButton("CONNECT")
|
||||
self._connect_btn.setObjectName("popupBtn")
|
||||
self._connect_btn.setFixedHeight(22)
|
||||
self._connect_btn.setFixedHeight(26)
|
||||
self._connect_btn.clicked.connect(self._connect_midi)
|
||||
row2.addWidget(self._connect_btn)
|
||||
|
||||
self._midi_status = QLabel("")
|
||||
self._midi_status.setStyleSheet("color: #888; background: transparent; border: none; font-size: 7pt;")
|
||||
self._midi_status.setStyleSheet("color: #888; background: transparent; border: none; font-size: 9pt;")
|
||||
row2.addWidget(self._midi_status, stretch=1)
|
||||
root.addLayout(row2)
|
||||
|
||||
# Row 3: MIDI learn scroll
|
||||
learn_label = QLabel("MIDI LEARN")
|
||||
learn_label.setStyleSheet("color: #00b894; background: transparent; border: none; font-size: 7pt; font-weight: bold; padding-top: 2px;")
|
||||
learn_label.setStyleSheet("color: #00b894; background: transparent; border: none; font-size: 10pt; font-weight: bold; padding-top: 4px;")
|
||||
root.addWidget(learn_label)
|
||||
|
||||
scroll = QScrollArea()
|
||||
scroll.setWidgetResizable(True)
|
||||
scroll.setFixedHeight(200)
|
||||
scroll.setFixedHeight(400)
|
||||
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||
scroll.setStyleSheet(POPUP_STYLE)
|
||||
|
||||
@@ -319,7 +339,7 @@ class SettingsPopup(QFrame):
|
||||
content.setStyleSheet("background: transparent;")
|
||||
grid = QVBoxLayout(content)
|
||||
grid.setContentsMargins(0, 0, 0, 0)
|
||||
grid.setSpacing(2)
|
||||
grid.setSpacing(4)
|
||||
|
||||
learn_actions = [
|
||||
("Deck 1 Play/Pause", "deck_play_pause", "deck1"),
|
||||
@@ -340,14 +360,22 @@ class SettingsPopup(QFrame):
|
||||
("Ch 6 Volume", "mixer_volume", 5),
|
||||
("Ch 7 Volume", "mixer_volume", 6),
|
||||
("Ch 8 Volume", "mixer_volume", 7),
|
||||
("Ch 1 Solo", "mixer_solo", 0),
|
||||
("Ch 1 Mic On", "mixer_mic_on", 0),
|
||||
("Ch 2 Mic On", "mixer_mic_on", 1),
|
||||
("Ch 1 PFL", "mixer_pfl", 0),
|
||||
("Ch 2 Solo", "mixer_solo", 1),
|
||||
("Ch 2 PFL", "mixer_pfl", 1),
|
||||
("Ch 3 Solo", "mixer_solo", 2),
|
||||
("Ch 3 PFL", "mixer_pfl", 2),
|
||||
("Ch 4 Solo", "mixer_solo", 3),
|
||||
("Ch 4 PFL", "mixer_pfl", 3),
|
||||
("Ch 5 PFL", "mixer_pfl", 4),
|
||||
("Ch 6 PFL", "mixer_pfl", 5),
|
||||
("Ch 7 PFL", "mixer_pfl", 6),
|
||||
("Ch 8 PFL", "mixer_pfl", 7),
|
||||
("Ch 3 Mute", "mixer_mute", 2),
|
||||
("Ch 4 Mute", "mixer_mute", 3),
|
||||
("Ch 5 Mute", "mixer_mute", 4),
|
||||
("Ch 6 Mute", "mixer_mute", 5),
|
||||
("Ch 7 Mute", "mixer_mute", 6),
|
||||
("Ch 8 Mute", "mixer_mute", 7),
|
||||
("Master THR", "master_control", "threshold_db"),
|
||||
("Master RAT", "master_control", "ratio"),
|
||||
("Master ATK", "master_control", "attack_ms"),
|
||||
@@ -363,12 +391,12 @@ class SettingsPopup(QFrame):
|
||||
row.setSpacing(3)
|
||||
|
||||
lbl = QLabel(label)
|
||||
lbl.setStyleSheet("color: #d0d4dc; background: transparent; border: none; font-size: 7pt;")
|
||||
lbl.setStyleSheet("color: #d0d4dc; background: transparent; border: none; font-size: 9pt;")
|
||||
row.addWidget(lbl, stretch=1)
|
||||
|
||||
btn = QPushButton("LEARN")
|
||||
btn.setObjectName("popupBtn")
|
||||
btn.setFixedSize(52, 20)
|
||||
btn.setFixedSize(64, 24)
|
||||
btn.setCheckable(True)
|
||||
btn.toggled.connect(partial(self._toggle_learn, btn, action, target_id))
|
||||
row.addWidget(btn)
|
||||
@@ -382,13 +410,13 @@ class SettingsPopup(QFrame):
|
||||
color: #ff6666;
|
||||
border: 1px solid #5a2a2a;
|
||||
border-radius: 3px;
|
||||
font-size: 7pt;
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
QPushButton:hover { background-color: #5a2a2a; }
|
||||
""")
|
||||
clear_btn.setFixedSize(20, 20)
|
||||
clear_btn.setFixedSize(28, 24)
|
||||
clear_btn.clicked.connect(partial(self._clear_mapping, action, target_id))
|
||||
row.addWidget(clear_btn)
|
||||
|
||||
@@ -398,18 +426,18 @@ QPushButton:hover { background-color: #5a2a2a; }
|
||||
root.addWidget(scroll)
|
||||
|
||||
monitor_label = QLabel("MIDI MONITOR")
|
||||
monitor_label.setStyleSheet("color: #556670; background: transparent; border: none; font-size: 7pt; font-weight: bold;")
|
||||
monitor_label.setStyleSheet("color: #556670; background: transparent; border: none; font-size: 9pt; font-weight: bold;")
|
||||
root.addWidget(monitor_label)
|
||||
|
||||
self._midi_monitor = QListWidget()
|
||||
self._midi_monitor.setFixedHeight(80)
|
||||
self._midi_monitor.setFixedHeight(120)
|
||||
self._midi_monitor.setStyleSheet("""
|
||||
QListWidget {
|
||||
background-color: #0d0e12;
|
||||
border: 1px solid #22242a;
|
||||
border-radius: 3px;
|
||||
color: #8890a0;
|
||||
font-size: 7pt;
|
||||
font-size: 9pt;
|
||||
font-family: monospace;
|
||||
}
|
||||
""")
|
||||
@@ -453,10 +481,10 @@ QPushButton:hover { background-color: #5a2a2a; }
|
||||
success = self._midi_engine.start(port_index=idx)
|
||||
if success:
|
||||
self._midi_status.setText(f"Connected")
|
||||
self._midi_status.setStyleSheet("color: #00b894; background: transparent; border: none; font-size: 7pt;")
|
||||
self._midi_status.setStyleSheet("color: #00b894; background: transparent; border: none; font-size: 9pt;")
|
||||
else:
|
||||
self._midi_status.setText("Failed")
|
||||
self._midi_status.setStyleSheet("color: #ff6666; background: transparent; border: none; font-size: 7pt;")
|
||||
self._midi_status.setStyleSheet("color: #ff6666; background: transparent; border: none; font-size: 9pt;")
|
||||
|
||||
# ── MIDI learn ─────────────────────────────────────────────────
|
||||
|
||||
@@ -485,6 +513,18 @@ QPushButton:hover { background-color: #5a2a2a; }
|
||||
del self._midi_engine.mapping.bindings[key]
|
||||
self._midi_engine.mapping.save()
|
||||
|
||||
def _clear_all_midi(self):
|
||||
if not self._midi_engine:
|
||||
return
|
||||
self._midi_engine.mapping.bindings.clear()
|
||||
self._midi_engine.mapping.save()
|
||||
|
||||
def _clear_all_midi(self):
|
||||
if not self._midi_engine:
|
||||
return
|
||||
self._midi_engine.mapping.bindings.clear()
|
||||
self._midi_engine.mapping.save()
|
||||
|
||||
def _on_mapping_learned(self, action, target_id, midi_type, channel, note, value):
|
||||
btn = self._learn_btns.get((action, target_id))
|
||||
if btn and btn.isChecked():
|
||||
|
||||
Reference in New Issue
Block a user