diff --git a/data/locale/ar.ts b/data/locale/ar.ts
index 0d44c22bf5c..4aca06e5149 100644
--- a/data/locale/ar.ts
+++ b/data/locale/ar.ts
@@ -5334,62 +5334,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/bs.ts b/data/locale/bs.ts
index 7abf0baf1e1..8050af8c246 100644
--- a/data/locale/bs.ts
+++ b/data/locale/bs.ts
@@ -2698,14 +2698,14 @@ Please make sure you have write-permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2789,12 +2789,12 @@ You can remove and move mixer channels in the context menu, which is accessed by
-
+
-
+
@@ -9752,7 +9752,7 @@ Please make sure you have read-permission to the file and the directory containi
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
diff --git a/data/locale/ca.ts b/data/locale/ca.ts
index 0e27c39db80..2b06d075423 100644
--- a/data/locale/ca.ts
+++ b/data/locale/ca.ts
@@ -5333,62 +5333,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/cs.ts b/data/locale/cs.ts
index 022f554592a..16982e4aee4 100644
--- a/data/locale/cs.ts
+++ b/data/locale/cs.ts
@@ -5334,62 +5334,62 @@ Ověřte si prosím, zda máte povolen zápis do souboru a do složky, ve které
- MixerLine
+ MixerChannelView
-
+
Množství odeslaného kanálu
-
+
Přesunout do&leva
-
+
Přesun dop&rava
-
+
Přejmenovat &kanál
-
+
Př&esunout kanál
-
+
Odstranit nepo&užívané kanály
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Přiřadit k:
-
+
Nový efektový kanál
diff --git a/data/locale/de.ts b/data/locale/de.ts
index 7817857fdff..d5d0625c269 100644
--- a/data/locale/de.ts
+++ b/data/locale/de.ts
@@ -5334,62 +5334,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
Kanal Sendemenge
-
+
Nach &links verschieben
-
+
Nach &rechts verschieben
-
+
&Kanal umbenennen
-
+
Kanal &Entfernen
-
+
Entferne &unbenutzte Kanäle
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Weise hinzu:
-
+
Neuer FX-Kanal
diff --git a/data/locale/el.ts b/data/locale/el.ts
index 07e61778f1e..130d5c63efb 100644
--- a/data/locale/el.ts
+++ b/data/locale/el.ts
@@ -5333,62 +5333,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/en.ts b/data/locale/en.ts
index 15c3ab1f07c..246311921af 100644
--- a/data/locale/en.ts
+++ b/data/locale/en.ts
@@ -5335,62 +5335,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/eo.ts b/data/locale/eo.ts
index 0dd9c405f67..88e92cda859 100644
--- a/data/locale/eo.ts
+++ b/data/locale/eo.ts
@@ -5333,62 +5333,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/es.ts b/data/locale/es.ts
index 3953ddc11bf..26c7437842b 100644
--- a/data/locale/es.ts
+++ b/data/locale/es.ts
@@ -5334,62 +5334,62 @@ Asegúrate de tener permisos de escritura tanto del archivo como del directorio
- MixerLine
+ MixerChannelView
-
+
Cantidad de envío del canal
-
+
Mover a la Izquierda (&L)
-
+
Mover a la Derecha (&R)
-
+
Renombrar &Canal
-
+
Borrar canal (&E)
-
+
Quitar los canales que no esten en &uso
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Asignar a:
-
+
Nuevo Canal FX
diff --git a/data/locale/eu.ts b/data/locale/eu.ts
index fe6495c0a65..7e815a26180 100644
--- a/data/locale/eu.ts
+++ b/data/locale/eu.ts
@@ -5614,62 +5614,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/fa.ts b/data/locale/fa.ts
index b376a8424f8..b167716fd84 100644
--- a/data/locale/fa.ts
+++ b/data/locale/fa.ts
@@ -5333,62 +5333,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/fr.ts b/data/locale/fr.ts
index 4862f4263ce..0386fb4c614 100644
--- a/data/locale/fr.ts
+++ b/data/locale/fr.ts
@@ -5618,62 +5618,62 @@ Veuillez vous assurez que vous avez les droits d'écriture sur le fichier e
- MixerLine
+ MixerChannelView
-
+
Quantité de signal envoyé du canal
-
+
Déplacer à &gauche
-
+
Déplacer à &droite
-
+
&Renommer le canal
-
+
&Supprimer le canal
-
+
Supprimer les canaux &inutilisés
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Assigner à :
-
+
Nouveau canal d'effet
diff --git a/data/locale/gl.ts b/data/locale/gl.ts
index a1a9e6bf1a4..01cd543227c 100644
--- a/data/locale/gl.ts
+++ b/data/locale/gl.ts
@@ -5333,62 +5333,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/he.ts b/data/locale/he.ts
index fef0caa9178..2699b7e1abd 100644
--- a/data/locale/he.ts
+++ b/data/locale/he.ts
@@ -5334,62 +5334,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/hi_IN.ts b/data/locale/hi_IN.ts
index 82cf364e332..5b2eeebf5b3 100644
--- a/data/locale/hi_IN.ts
+++ b/data/locale/hi_IN.ts
@@ -5335,62 +5335,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/hu_HU.ts b/data/locale/hu_HU.ts
index a0f1e4d4542..88ef6a43155 100644
--- a/data/locale/hu_HU.ts
+++ b/data/locale/hu_HU.ts
@@ -5339,62 +5339,62 @@ Ellenőrizd, hogy rendelkezel-e a szükséges engedélyekkel és próbáld újra
- MixerLine
+ MixerChannelView
-
+
-
+
Mozgatás &balra
-
+
Mozgatás &jobbra
-
+
Csatorna át&nevezése
-
+
Csatorna &eltávolítása
-
+
&Nem használt csatornák eltávolítása
-
+
Szín módosítása
-
+
Szín eltávolítása
-
+
Véletlenszerű szín
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Hozzárendelés:
-
+
Új csatorna
diff --git a/data/locale/id.ts b/data/locale/id.ts
index c504740e936..4adeb9b229e 100644
--- a/data/locale/id.ts
+++ b/data/locale/id.ts
@@ -5335,62 +5335,62 @@ Pastikan Anda memiliki izin menulis ke file dan direktori yang berisi berkas ter
- MixerLine
+ MixerChannelView
-
+
Jumlah kirim saluran
-
+
Pindah ke &kiri
-
+
Pindah ke &kanan
-
+
Ganti nama &saluran
-
+
H&apus saluran
-
+
Hapus &saluran yang tak terpakai
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
Saluran FX Baru
diff --git a/data/locale/it.ts b/data/locale/it.ts
index d5a68e6e7c3..104a3bdbc4a 100644
--- a/data/locale/it.ts
+++ b/data/locale/it.ts
@@ -5339,62 +5339,62 @@ Si prega di controllare i permessi di scrittura sul file e la cartella che lo co
- MixerLine
+ MixerChannelView
-
+
Quantità di segnale inviata dal canale
-
+
Sposta a &sinistra
-
+
Sposta a $destra
-
+
Rinomina &canale
-
+
R&imuovi canale
-
+
Rimuovi canali in&utilizzati
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Assegna a:
-
+
Nuovo canale FX
diff --git a/data/locale/ja.ts b/data/locale/ja.ts
index 14b38c6984f..84c5c8a6a83 100644
--- a/data/locale/ja.ts
+++ b/data/locale/ja.ts
@@ -5335,62 +5335,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
一つ左へ (&l)
-
+
一つ右へ (&r)
-
+
チャンネル名を変更 (&c)
-
+
チャンネルを削除 (&e)
-
+
使用していないチャンネルを削除 (&u)
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/ka.ts b/data/locale/ka.ts
index 51eededf26b..bd789045749 100644
--- a/data/locale/ka.ts
+++ b/data/locale/ka.ts
@@ -5333,62 +5333,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/ko.ts b/data/locale/ko.ts
index 43b99e7f437..036c7323130 100644
--- a/data/locale/ko.ts
+++ b/data/locale/ko.ts
@@ -5337,62 +5337,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
왼쪽으로 이동(&L)
-
+
오른쪽으로 이동(&R)
-
+
채널 이름 바꾸기(&C)
-
+
채널 제거(&R)
-
+
사용하지 않는 채널 제거(&U)
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
채널 할당:
-
+
새 FX 채널
diff --git a/data/locale/ms_MY.ts b/data/locale/ms_MY.ts
index ff34784219a..dc3561ea248 100644
--- a/data/locale/ms_MY.ts
+++ b/data/locale/ms_MY.ts
@@ -5333,62 +5333,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/nb.ts b/data/locale/nb.ts
index 659344d64de..adfc6d8566a 100644
--- a/data/locale/nb.ts
+++ b/data/locale/nb.ts
@@ -5333,62 +5333,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/nl.ts b/data/locale/nl.ts
index 7ff3e8735a8..8d13041357f 100644
--- a/data/locale/nl.ts
+++ b/data/locale/nl.ts
@@ -5335,62 +5335,62 @@ Zorg ervoor dat u schrijfbevoegdheid heeft voor het bestand en voor de map die h
- MixerLine
+ MixerChannelView
-
+
Hoeveelheid kanaal-send
-
+
&Links verplaatsen
-
+
&Rechts verplaatsen
-
+
&Kanaal hernoemen
-
+
Kanaal v&erwijderen
-
+
Ongebr&uikte kanalen verwijderen
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Toewijzen aan:
-
+
Nieuw FX-kanaal
diff --git a/data/locale/oc.ts b/data/locale/oc.ts
index 045eaf3ad69..be804cfca2b 100644
--- a/data/locale/oc.ts
+++ b/data/locale/oc.ts
@@ -5333,62 +5333,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/pl.ts b/data/locale/pl.ts
index ff36a8daca6..3a12f08152f 100644
--- a/data/locale/pl.ts
+++ b/data/locale/pl.ts
@@ -5619,62 +5619,62 @@ Upewnij się, że masz uprawnienia do zapisu do pliku i katalogu zawierającego
- MixerLine
+ MixerChannelView
-
+
Ilość wysyłania kanału
-
+
Przesuń w &lewo
-
+
Przesuń w p&rawo
-
+
Zmień nazwę &kanału
-
+
Usuń k&anał
-
+
&Usuń nieużywane kanały
-
+
Ustaw kolor kanału
-
+
Usuń kolor kanału
-
+
Ustaw losowy kolor kanału
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Przypisz do:
-
+
Nowy kanał efektów
diff --git a/data/locale/pt.ts b/data/locale/pt.ts
index f8cfe76181c..d88d0fa242f 100644
--- a/data/locale/pt.ts
+++ b/data/locale/pt.ts
@@ -5336,62 +5336,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
Quantidade de envio de canal
-
+
-
+
-
+
Renomear canal
-
+
Remover canal
-
+
Remover canais não utilizados
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Atribuir a:
-
+
Novo Canal FX
diff --git a/data/locale/ro.ts b/data/locale/ro.ts
index 58abbba9959..4823ca57ed4 100644
--- a/data/locale/ro.ts
+++ b/data/locale/ro.ts
@@ -5334,62 +5334,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/ru.ts b/data/locale/ru.ts
index 73b7e06ad2e..dee2b848246 100644
--- a/data/locale/ru.ts
+++ b/data/locale/ru.ts
@@ -5348,62 +5348,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
Величина отправки канала
-
+
Подвинуть в&лево
-
+
Подвинуть в&право
-
+
Пере&именовать канал
-
+
&Удалить канал
-
+
Удалить &неиспользуемые каналы
-
+
Установить цвет канала
-
+
Удалить цвет канала
-
+
Выбрать случайный цвет канала
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Назначить на:
-
+
Новый канал ЭФ
diff --git a/data/locale/sl.ts b/data/locale/sl.ts
index e7bfbc3081c..1aa67d54d6b 100644
--- a/data/locale/sl.ts
+++ b/data/locale/sl.ts
@@ -5333,62 +5333,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
-
+
diff --git a/data/locale/sr.ts b/data/locale/sr.ts
index 183936bc74c..557890f3596 100644
--- a/data/locale/sr.ts
+++ b/data/locale/sr.ts
@@ -2178,7 +2178,7 @@ Please make sure you have write-permission to the file and the directory contain
- MixerLine
+ MixerChannelView
@@ -7752,7 +7752,7 @@ Please make sure you have read-permission to the file and the directory containi
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
diff --git a/data/locale/sv.ts b/data/locale/sv.ts
index f5d4e0fb496..b40306cac9d 100644
--- a/data/locale/sv.ts
+++ b/data/locale/sv.ts
@@ -5617,62 +5617,62 @@ Se till att du har skrivbehörighet till filen och mappen som innehåller filen
- MixerLine
+ MixerChannelView
-
+
Kanalsändningsbelopp
-
+
Flytta &vänster
-
+
Flytta &höger
-
+
Byt namn på &kanal
-
+
T&a bort kanal
-
+
Ta bort &oanvända kanaler
-
+
Ställ in kanalfärg
-
+
Ta bort kanalfärg
-
+
Välj slumpmässig kanalfärg
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Tilldela till:
-
+
Ny FX-kanal
diff --git a/data/locale/tr.ts b/data/locale/tr.ts
index b899337a543..bd469667f40 100644
--- a/data/locale/tr.ts
+++ b/data/locale/tr.ts
@@ -5619,62 +5619,62 @@ Lütfen dosyaya ve dosyayı içeren dizine yazma izniniz olduğundan emin olun v
- MixerLine
+ MixerChannelView
-
+
Kanal gönderme miktarı
-
+
Sol&a taşı
-
+
&Sağa taşı
-
+
&Kanalı yeniden adlandır
-
+
Kanalı k&aldır
-
+
&Kullanılmayan kanalları kaldırın
-
+
Kanal rengini ayarla
-
+
Kanal rengini kaldır
-
+
Rastgele kanal rengi seçin
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Ata:
-
+
Yeni FX Kanalı
diff --git a/data/locale/uk.ts b/data/locale/uk.ts
index 9fb6389c956..245c433a1b1 100644
--- a/data/locale/uk.ts
+++ b/data/locale/uk.ts
@@ -5334,62 +5334,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
Величина відправки каналу
-
+
Рухати вліво &L
-
+
Рухати вправо &R
-
+
Перейменувати канал &C
-
+
Видалити канал &e
-
+
Видалити канали які &не використовуються
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
Призначити до:
-
+
Новий ефект каналу
diff --git a/data/locale/zh_CN.ts b/data/locale/zh_CN.ts
index 9b783b963dd..57c08034156 100644
--- a/data/locale/zh_CN.ts
+++ b/data/locale/zh_CN.ts
@@ -5343,62 +5343,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
通道发送的数量
-
+
向左移(&L)
-
+
向右移(&R)
-
+
重命名通道(&C)
-
+
删除通道(&E)
-
+
移除所有未用通道(&U)
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
分配给:
-
+
新的效果通道
diff --git a/data/locale/zh_TW.ts b/data/locale/zh_TW.ts
index a3a727edb0b..9348dfb3252 100644
--- a/data/locale/zh_TW.ts
+++ b/data/locale/zh_TW.ts
@@ -5334,62 +5334,62 @@ Please make sure you have write permission to the file and the directory contain
- MixerLine
+ MixerChannelView
-
+
通道發送的數量
-
+
向左移(&L)
-
+
向右移(&R)
-
+
重命名通道(&C)
-
+
刪除通道(&E)
-
+
移除所有未用通道(&U)
-
+
-
+
-
+
- MixerLineLcdSpinBox
+ MixerChannelLcdSpinBox
-
+
分配給:
-
+
新的效果通道
diff --git a/data/themes/classic/style.css b/data/themes/classic/style.css
index 9eeb41993be..3ef39765122 100644
--- a/data/themes/classic/style.css
+++ b/data/themes/classic/style.css
@@ -632,7 +632,7 @@ lmms--gui--ControllerRackView QPushButton {
font-size: 10px;
}
-lmms--gui--MixerLine {
+lmms--gui--MixerChannelView {
background: #5b6571;
color: #e0e0e0;
qproperty-backgroundActive: qlineargradient(spread:reflect, x1:0, y1:0, x2:1, y2:0,
@@ -643,6 +643,11 @@ lmms--gui--MixerLine {
qproperty-strokeInnerInactive: rgba( 255, 255, 255, 50 );
}
+lmms--gui--MixerChannelView QGraphicsView {
+ background: transparent;
+ border-style: none;
+}
+
/* persistent peak markers for fx peak meters */
lmms--gui--Fader {
qproperty-peakGreen: rgb( 74, 253, 133);
diff --git a/data/themes/default/receive_bg_arrow.png b/data/themes/default/receive_bg_arrow.png
index d4961540ad0..368a1bf15a9 100644
Binary files a/data/themes/default/receive_bg_arrow.png and b/data/themes/default/receive_bg_arrow.png differ
diff --git a/data/themes/default/send_bg_arrow.png b/data/themes/default/send_bg_arrow.png
index 05a8c7366b4..311505b6850 100644
Binary files a/data/themes/default/send_bg_arrow.png and b/data/themes/default/send_bg_arrow.png differ
diff --git a/data/themes/default/style.css b/data/themes/default/style.css
index 7963f51a417..3a8f411de78 100644
--- a/data/themes/default/style.css
+++ b/data/themes/default/style.css
@@ -674,7 +674,7 @@ lmms--gui--ControllerRackView QPushButton {
font-size: 10px;
}
-lmms--gui--MixerLine {
+lmms--gui--MixerChannelView {
background: #14161A;
color: #d1d8e4;
qproperty-backgroundActive: #3B424A;
@@ -684,6 +684,11 @@ lmms--gui--MixerLine {
qproperty-strokeInnerInactive: #0C0D0F;
}
+lmms--gui--MixerChannelView QGraphicsView {
+ background: transparent;
+ border-style: none;
+}
+
/* persistent peak markers for fx peak meters */
lmms--gui--Fader {
qproperty-peakGreen: #0ad45c;
diff --git a/include/InstrumentTrackView.h b/include/InstrumentTrackView.h
index d7d5fb83a39..e89a576e916 100644
--- a/include/InstrumentTrackView.h
+++ b/include/InstrumentTrackView.h
@@ -25,7 +25,7 @@
#ifndef LMMS_GUI_INSTRUMENT_TRACK_VIEW_H
#define LMMS_GUI_INSTRUMENT_TRACK_VIEW_H
-#include "MixerLineLcdSpinBox.h"
+#include "MixerChannelLcdSpinBox.h"
#include "TrackView.h"
#include "InstrumentTrack.h"
@@ -99,7 +99,7 @@ private slots:
// widgets in track-settings-widget
TrackLabelButton * m_tlb;
- MixerLineLcdSpinBox* m_mixerChannelNumber;
+ MixerChannelLcdSpinBox* m_mixerChannelNumber;
Knob * m_volumeKnob;
Knob * m_panningKnob;
FadeButton * m_activityIndicator;
diff --git a/include/InstrumentTrackWindow.h b/include/InstrumentTrackWindow.h
index 971c63899c3..48a352cbd30 100644
--- a/include/InstrumentTrackWindow.h
+++ b/include/InstrumentTrackWindow.h
@@ -43,7 +43,7 @@ namespace gui
{
class EffectRackView;
-class MixerLineLcdSpinBox;
+class MixerChannelLcdSpinBox;
class InstrumentFunctionArpeggioView;
class InstrumentFunctionNoteStackingView;
class InstrumentMidiIOView;
@@ -142,7 +142,7 @@ protected slots:
QLabel * m_pitchLabel;
LcdSpinBox* m_pitchRangeSpinBox;
QLabel * m_pitchRangeLabel;
- MixerLineLcdSpinBox * m_mixerChannelNumber;
+ MixerChannelLcdSpinBox * m_mixerChannelNumber;
diff --git a/include/MixerLineLcdSpinBox.h b/include/MixerChannelLcdSpinBox.h
similarity index 74%
rename from include/MixerLineLcdSpinBox.h
rename to include/MixerChannelLcdSpinBox.h
index 1ae2813f292..0abd9f100f1 100644
--- a/include/MixerLineLcdSpinBox.h
+++ b/include/MixerChannelLcdSpinBox.h
@@ -1,5 +1,5 @@
/*
- * MixerLineLcdSpinBox.h - a specialization of LcdSpnBox for setting mixer channels
+ * MixerChannelLcdSpinBox.h - a specialization of LcdSpnBox for setting mixer channels
*
* Copyright (c) 2004-2014 Tobias Doerffel
*
@@ -22,8 +22,8 @@
*
*/
-#ifndef LMMS_GUI_MIXER_LINE_LCD_SPIN_BOX_H
-#define LMMS_GUI_MIXER_LINE_LCD_SPIN_BOX_H
+#ifndef LMMS_GUI_MIXER_CHANNEL_LCD_SPIN_BOX_H
+#define LMMS_GUI_MIXER_CHANNEL_LCD_SPIN_BOX_H
#include "LcdSpinBox.h"
@@ -34,14 +34,14 @@ namespace lmms::gui
class TrackView;
-class MixerLineLcdSpinBox : public LcdSpinBox
+class MixerChannelLcdSpinBox : public LcdSpinBox
{
Q_OBJECT
public:
- MixerLineLcdSpinBox(int numDigits, QWidget * parent, const QString& name, TrackView * tv = nullptr) :
+ MixerChannelLcdSpinBox(int numDigits, QWidget * parent, const QString& name, TrackView * tv = nullptr) :
LcdSpinBox(numDigits, parent, name), m_tv(tv)
{}
- ~MixerLineLcdSpinBox() override = default;
+ ~MixerChannelLcdSpinBox() override = default;
void setTrackView(TrackView * tv);
@@ -56,4 +56,4 @@ class MixerLineLcdSpinBox : public LcdSpinBox
} // namespace lmms::gui
-#endif // LMMS_GUI_MIXER_LINE_LCD_SPIN_BOX_H
+#endif // LMMS_GUI_MIXER_CHANNEL_LCD_SPIN_BOX_H
diff --git a/include/MixerChannelView.h b/include/MixerChannelView.h
new file mode 100644
index 00000000000..8d2306f919f
--- /dev/null
+++ b/include/MixerChannelView.h
@@ -0,0 +1,131 @@
+/*
+ * MixerChannelView.h - the mixer channel view
+ *
+ * Copyright (c) 2022 saker
+ *
+ * This file is part of LMMS - https://lmms.io
+ *
+ * This program 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 2 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef MIXER_CHANNEL_VIEW_H
+#define MIXER_CHANNEL_VIEW_H
+
+#include "EffectRackView.h"
+#include "Fader.h"
+#include "Knob.h"
+#include "LcdWidget.h"
+#include "PixmapButton.h"
+#include "SendButtonIndicator.h"
+
+#include
+#include
+#include
+#include
+#include
+
+namespace lmms::gui
+{
+ constexpr int MIXER_CHANNEL_INNER_BORDER_SIZE = 3;
+ constexpr int MIXER_CHANNEL_OUTER_BORDER_SIZE = 1;
+
+ class MixerChannelView : public QWidget
+ {
+ Q_OBJECT
+ Q_PROPERTY(QBrush backgroundActive READ backgroundActive WRITE setBackgroundActive)
+ Q_PROPERTY(QColor strokeOuterActive READ strokeOuterActive WRITE setStrokeOuterActive)
+ Q_PROPERTY(QColor strokeOuterInactive READ strokeOuterInactive WRITE setStrokeOuterInactive)
+ Q_PROPERTY(QColor strokeInnerActive READ strokeInnerActive WRITE setStrokeInnerActive)
+ Q_PROPERTY(QColor strokeInnerInactive READ strokeInnerInactive WRITE setStrokeInnerInactive)
+ public:
+ enum class SendReceiveState
+ {
+ None, SendToThis, ReceiveFromThis
+ };
+
+ MixerChannelView(QWidget* parent, MixerView* mixerView, int channelIndex);
+ void paintEvent(QPaintEvent* event) override;
+ void contextMenuEvent(QContextMenuEvent*) override;
+ void mousePressEvent(QMouseEvent*) override;
+ void mouseDoubleClickEvent(QMouseEvent*) override;
+ bool eventFilter(QObject* dist, QEvent* event) override;
+
+ int channelIndex() const;
+ void setChannelIndex(int index);
+
+ SendReceiveState sendReceiveState() const;
+ void setSendReceiveState(const SendReceiveState& state);
+
+ QBrush backgroundActive() const;
+ void setBackgroundActive(const QBrush& c);
+
+ QColor strokeOuterActive() const;
+ void setStrokeOuterActive(const QColor& c);
+
+ QColor strokeOuterInactive() const;
+ void setStrokeOuterInactive(const QColor& c);
+
+ QColor strokeInnerActive() const;
+ void setStrokeInnerActive(const QColor& c);
+
+ QColor strokeInnerInactive() const;
+ void setStrokeInnerInactive(const QColor& c);
+
+ public slots:
+ void renameChannel();
+ void resetColor();
+ void selectColor();
+ void randomizeColor();
+
+ private slots:
+ void renameFinished();
+ void removeChannel();
+ void removeUnusedChannels();
+ void moveChannelLeft();
+ void moveChannelRight();
+
+ private:
+ QString elideName(const QString& name);
+
+ private:
+ SendButtonIndicator* m_sendButton;
+ Knob* m_sendKnob;
+ LcdWidget* m_channelNumberLcd;
+ QLineEdit* m_renameLineEdit;
+ QGraphicsView* m_renameLineEditView;
+ QLabel* m_sendArrow;
+ QLabel* m_receiveArrow;
+ PixmapButton* m_muteButton;
+ PixmapButton* m_soloButton;
+ Fader* m_fader;
+ EffectRackView* m_effectRackView;
+ MixerView* m_mixerView;
+ SendReceiveState m_sendReceiveState = SendReceiveState::None;
+ int m_channelIndex = 0;
+ bool m_inRename = false;
+
+ QBrush m_backgroundActive;
+ QColor m_strokeOuterActive;
+ QColor m_strokeOuterInactive;
+ QColor m_strokeInnerActive;
+ QColor m_strokeInnerInactive;
+
+ friend class MixerView;
+ };
+} // namespace lmms::gui
+
+#endif
\ No newline at end of file
diff --git a/include/MixerLine.h b/include/MixerLine.h
deleted file mode 100644
index 655b30ec371..00000000000
--- a/include/MixerLine.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * MixerLine.h - Mixer line widget
- *
- * Copyright (c) 2009 Andrew Kelley
- * Copyright (c) 2014 Tobias Doerffel
- *
- * This file is part of LMMS - https://lmms.io
- *
- * This program 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 2 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
-
-#ifndef LMMS_GUI_MIXER_LINE_H
-#define LMMS_GUI_MIXER_LINE_H
-
-#include
-
-class QGraphicsView;
-class QLineEdit;
-
-namespace lmms::gui
-{
-
-
-class Knob;
-class LcdWidget;
-class MixerView;
-class SendButtonIndicator;
-
-class MixerLine : public QWidget
-{
- Q_OBJECT
-public:
- Q_PROPERTY( QBrush backgroundActive READ backgroundActive WRITE setBackgroundActive )
- Q_PROPERTY( QColor strokeOuterActive READ strokeOuterActive WRITE setStrokeOuterActive )
- Q_PROPERTY( QColor strokeOuterInactive READ strokeOuterInactive WRITE setStrokeOuterInactive )
- Q_PROPERTY( QColor strokeInnerActive READ strokeInnerActive WRITE setStrokeInnerActive )
- Q_PROPERTY( QColor strokeInnerInactive READ strokeInnerInactive WRITE setStrokeInnerInactive )
- MixerLine( QWidget * _parent, MixerView * _mv, int _channelIndex);
- ~MixerLine() override;
-
- void paintEvent( QPaintEvent * ) override;
- void mousePressEvent( QMouseEvent * ) override;
- void mouseDoubleClickEvent( QMouseEvent * ) override;
- void contextMenuEvent( QContextMenuEvent * ) override;
-
- inline int channelIndex() { return m_channelIndex; }
- void setChannelIndex(int index);
-
- Knob * m_sendKnob;
- SendButtonIndicator * m_sendBtn;
-
- QBrush backgroundActive() const;
- void setBackgroundActive( const QBrush & c );
-
- QColor strokeOuterActive() const;
- void setStrokeOuterActive( const QColor & c );
-
- QColor strokeOuterInactive() const;
- void setStrokeOuterInactive( const QColor & c );
-
- QColor strokeInnerActive() const;
- void setStrokeInnerActive( const QColor & c );
-
- QColor strokeInnerInactive() const;
- void setStrokeInnerInactive( const QColor & c );
-
- static const int MixerLineHeight;
-
- bool eventFilter (QObject *dist, QEvent *event) override;
-
-private:
- void drawMixerLine( QPainter* p, const MixerLine *mixerLine, bool isActive, bool sendToThis, bool receiveFromThis );
- QString elideName( const QString & name );
-
- MixerView * m_mv;
- LcdWidget* m_lcd;
- int m_channelIndex;
- QBrush m_backgroundActive;
- QColor m_strokeOuterActive;
- QColor m_strokeOuterInactive;
- QColor m_strokeInnerActive;
- QColor m_strokeInnerInactive;
- bool m_inRename;
- QLineEdit * m_renameLineEdit;
- QGraphicsView * m_view;
-
-public slots:
- void renameChannel();
- void resetColor();
- void selectColor();
- void randomizeColor();
-
-private slots:
- void renameFinished();
- void removeChannel();
- void removeUnusedChannels();
- void moveChannelLeft();
- void moveChannelRight();
-};
-
-
-} // namespace lmms::gui
-
-#endif // LMMS_GUI_MIXER_LINE_H
diff --git a/include/MixerView.h b/include/MixerView.h
index 2bb5ed4170f..a477864810e 100644
--- a/include/MixerView.h
+++ b/include/MixerView.h
@@ -2,7 +2,7 @@
* MixerView.h - effect-mixer-view for LMMS
*
* Copyright (c) 2008-2014 Tobias Doerffel
- *
+ *
* This file is part of LMMS - https://lmms.io
*
* This program is free software; you can redistribute it and/or
@@ -30,6 +30,7 @@
#include
#include
+#include "MixerChannelView.h"
#include "ModelView.h"
#include "Engine.h"
#include "Fader.h"
@@ -37,61 +38,38 @@
#include "embed.h"
#include "EffectRackView.h"
-class QButtonGroup;
-
-
namespace lmms::gui
{
-
-class MixerLine;
-
class LMMS_EXPORT MixerView : public QWidget, public ModelView,
public SerializingObjectHook
{
Q_OBJECT
public:
- class MixerChannelView
- {
- public:
- MixerChannelView(QWidget * _parent, MixerView * _mv, int _chIndex );
-
- void setChannelIndex( int index );
-
- MixerLine * m_mixerLine;
- PixmapButton * m_muteBtn;
- PixmapButton * m_soloBtn;
- Fader * m_fader;
- EffectRackView * m_rackView;
- };
-
-
MixerView();
- ~MixerView() override;
-
- void keyPressEvent(QKeyEvent * e) override;
+ void keyPressEvent(QKeyEvent* e) override;
- void saveSettings( QDomDocument & _doc, QDomElement & _this ) override;
- void loadSettings( const QDomElement & _this ) override;
+ void saveSettings(QDomDocument& doc, QDomElement& domElement) override;
+ void loadSettings(const QDomElement& domElement) override;
- inline MixerLine * currentMixerLine()
+ inline MixerChannelView* currentMixerChannel()
{
- return m_currentMixerLine;
+ return m_currentMixerChannel;
}
- inline MixerChannelView * channelView(int index)
+ inline MixerChannelView* channelView(int index)
{
return m_mixerChannelViews[index];
}
- void setCurrentMixerLine( MixerLine * _line );
- void setCurrentMixerLine( int _line );
+ void setCurrentMixerChannel(MixerChannelView* channel);
+ void setCurrentMixerChannel(int channel);
void clear();
// display the send button and knob correctly
- void updateMixerLine(int index);
+ void updateMixerChannel(int index);
// notify the view that a mixer channel was deleted
void deleteChannel(int index);
@@ -115,22 +93,22 @@ public slots:
int addNewChannel();
protected:
- void closeEvent( QCloseEvent * _ce ) override;
-
+ void closeEvent(QCloseEvent* ce) override;
+
private slots:
void updateFaders();
void toggledSolo();
private:
- QVector m_mixerChannelViews;
+ QVector m_mixerChannelViews;
- MixerLine * m_currentMixerLine;
+ MixerChannelView* m_currentMixerChannel;
- QScrollArea * channelArea;
- QHBoxLayout * chLayout;
- QWidget * m_channelAreaWidget;
- QStackedLayout * m_racksLayout;
- QWidget * m_racksWidget;
+ QScrollArea* channelArea;
+ QHBoxLayout* chLayout;
+ QWidget* m_channelAreaWidget;
+ QStackedLayout* m_racksLayout;
+ QWidget* m_racksWidget;
void updateMaxChannelSelector();
diff --git a/include/SampleTrackView.h b/include/SampleTrackView.h
index 3ccb97aeaa9..2f94bfb5630 100644
--- a/include/SampleTrackView.h
+++ b/include/SampleTrackView.h
@@ -26,7 +26,7 @@
#define LMMS_GUI_SAMPLE_TRACK_VIEW_H
-#include "MixerLineLcdSpinBox.h"
+#include "MixerChannelLcdSpinBox.h"
#include "TrackView.h"
namespace lmms
@@ -91,7 +91,7 @@ private slots:
private:
SampleTrackWindow * m_window;
- MixerLineLcdSpinBox* m_mixerChannelNumber;
+ MixerChannelLcdSpinBox* m_mixerChannelNumber;
Knob * m_volumeKnob;
Knob * m_panningKnob;
FadeButton * m_activityIndicator;
diff --git a/include/SampleTrackWindow.h b/include/SampleTrackWindow.h
index c2a722d53ab..4d535bfe529 100644
--- a/include/SampleTrackWindow.h
+++ b/include/SampleTrackWindow.h
@@ -38,7 +38,7 @@ namespace lmms::gui
class EffectRackView;
class Knob;
-class MixerLineLcdSpinBox;
+class MixerChannelLcdSpinBox;
class SampleTrackView;
@@ -90,7 +90,7 @@ public slots:
QLineEdit * m_nameLineEdit;
Knob * m_volumeKnob;
Knob * m_panningKnob;
- MixerLineLcdSpinBox * m_mixerChannelNumber;
+ MixerChannelLcdSpinBox * m_mixerChannelNumber;
EffectRackView * m_effectRack;
} ;
diff --git a/include/SendButtonIndicator.h b/include/SendButtonIndicator.h
index 86f38318feb..9e941792648 100644
--- a/include/SendButtonIndicator.h
+++ b/include/SendButtonIndicator.h
@@ -37,27 +37,25 @@ class FloatModel;
namespace gui
{
-class MixerLine;
+class MixerChannelView;
class MixerView;
-
-class SendButtonIndicator : public QLabel
+class SendButtonIndicator : public QLabel
{
public:
- SendButtonIndicator( QWidget * _parent, MixerLine * _owner,
- MixerView * _mv);
+ SendButtonIndicator(QWidget* parent, MixerChannelView* owner, MixerView* mv);
- void mousePressEvent( QMouseEvent * e ) override;
+ void mousePressEvent(QMouseEvent* e) override;
void updateLightStatus();
private:
- MixerLine * m_parent;
- MixerView * m_mv;
+ MixerChannelView* m_parent;
+ MixerView* m_mv;
QPixmap m_qpmOff = embed::getIconPixmap("mixer_send_off", 29, 20);
QPixmap m_qpmOn = embed::getIconPixmap("mixer_send_on", 29, 20);
- FloatModel * getSendModel();
+ FloatModel* getSendModel();
};
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index ac010f4f4fa..001c92c79a6 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -27,7 +27,7 @@ SET(LMMS_SRCS
gui/MicrotunerConfig.cpp
gui/MidiCCRackView.cpp
gui/MidiSetupWidget.cpp
- gui/MixerLine.cpp
+ gui/MixerChannelView.cpp
gui/MixerView.cpp
gui/ModelView.cpp
gui/PeakControllerDialog.cpp
@@ -113,7 +113,7 @@ SET(LMMS_SRCS
gui/widgets/LedCheckBox.cpp
gui/widgets/LeftRightNav.cpp
gui/widgets/MeterDialog.cpp
- gui/widgets/MixerLineLcdSpinBox.cpp
+ gui/widgets/MixerChannelLcdSpinBox.cpp
gui/widgets/NStateButton.cpp
gui/widgets/Oscilloscope.cpp
gui/widgets/PixmapButton.cpp
diff --git a/src/gui/MixerChannelView.cpp b/src/gui/MixerChannelView.cpp
new file mode 100644
index 00000000000..0f8ccedeac8
--- /dev/null
+++ b/src/gui/MixerChannelView.cpp
@@ -0,0 +1,447 @@
+/*
+ * MixerChannelView.h - the mixer channel view
+ *
+ * Copyright (c) 2022 saker
+ *
+ * This file is part of LMMS - https://lmms.io
+ *
+ * This program 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 2 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "CaptionMenu.h"
+#include "ColorChooser.h"
+#include "GuiApplication.h"
+#include "Mixer.h"
+#include "MixerChannelView.h"
+#include "MixerView.h"
+#include "Song.h"
+
+#include "gui_templates.h"
+#include "lmms_math.h"
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+namespace lmms::gui
+{
+ MixerChannelView::MixerChannelView(QWidget* parent, MixerView* mixerView, int channelIndex) :
+ QWidget(parent),
+ m_mixerView(mixerView),
+ m_channelIndex(channelIndex)
+ {
+ setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum);
+
+ auto retainSizeWhenHidden = [](QWidget* widget)
+ {
+ auto sizePolicy = widget->sizePolicy();
+ sizePolicy.setRetainSizeWhenHidden(true);
+ widget->setSizePolicy(sizePolicy);
+ };
+
+ m_sendButton = new SendButtonIndicator{this, this, mixerView};
+ retainSizeWhenHidden(m_sendButton);
+
+ m_sendKnob = new Knob{KnobType::Bright26, this, tr("Channel send amount")};
+ retainSizeWhenHidden(m_sendKnob);
+
+ m_channelNumberLcd = new LcdWidget{2, this};
+ m_channelNumberLcd->setValue(channelIndex);
+ retainSizeWhenHidden(m_channelNumberLcd);
+
+ const auto mixerChannel = Engine::mixer()->mixerChannel(channelIndex);
+ const auto mixerName = mixerChannel->m_name;
+ setToolTip(mixerName);
+
+ m_renameLineEdit = new QLineEdit{mixerName, nullptr};
+ m_renameLineEdit->setFixedWidth(65);
+ m_renameLineEdit->setFont(pointSizeF(font(), 7.5f));
+ m_renameLineEdit->setReadOnly(true);
+ m_renameLineEdit->installEventFilter(this);
+
+ auto renameLineEditScene = new QGraphicsScene{};
+ m_renameLineEditView = new QGraphicsView{};
+ m_renameLineEditView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ m_renameLineEditView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ m_renameLineEditView->setAttribute(Qt::WA_TransparentForMouseEvents, true);
+ m_renameLineEditView->setScene(renameLineEditScene);
+
+ auto renameLineEditProxy = renameLineEditScene->addWidget(m_renameLineEdit);
+ renameLineEditProxy->setRotation(-90);
+ m_renameLineEditView->setFixedSize(m_renameLineEdit->height() + 5, m_renameLineEdit->width() + 5);
+
+ m_sendArrow = new QLabel{};
+ m_sendArrow->setPixmap(embed::getIconPixmap("send_bg_arrow"));
+ retainSizeWhenHidden(m_sendArrow);
+ m_sendArrow->setVisible(m_sendReceiveState == SendReceiveState::SendToThis);
+
+ m_receiveArrow = new QLabel{};
+ m_receiveArrow->setPixmap(embed::getIconPixmap("receive_bg_arrow"));
+ retainSizeWhenHidden(m_receiveArrow);
+ m_receiveArrow->setVisible(m_sendReceiveState == SendReceiveState::ReceiveFromThis);
+
+ m_muteButton = new PixmapButton(this, tr("Mute"));
+ m_muteButton->setModel(&mixerChannel->m_muteModel);
+ m_muteButton->setActiveGraphic(embed::getIconPixmap("led_off"));
+ m_muteButton->setInactiveGraphic(embed::getIconPixmap("led_green"));
+ m_muteButton->setCheckable(true);
+ m_muteButton->setToolTip(tr("Mute this channel"));
+
+ m_soloButton = new PixmapButton(this, tr("Solo"));
+ m_soloButton->setModel(&mixerChannel->m_soloModel);
+ m_soloButton->setActiveGraphic(embed::getIconPixmap("led_red"));
+ m_soloButton->setInactiveGraphic(embed::getIconPixmap("led_off"));
+ m_soloButton->setCheckable(true);
+ m_soloButton->setToolTip(tr("Solo this channel"));
+ connect(&mixerChannel->m_soloModel, &BoolModel::dataChanged, mixerView, &MixerView::toggledSolo, Qt::DirectConnection);
+
+ QVBoxLayout* soloMuteLayout = new QVBoxLayout();
+ soloMuteLayout->setContentsMargins(0, 0, 0, 0);
+ soloMuteLayout->setSpacing(0);
+ soloMuteLayout->addWidget(m_soloButton, 0, Qt::AlignHCenter);
+ soloMuteLayout->addWidget(m_muteButton, 0, Qt::AlignHCenter);
+
+ m_fader = new Fader{&mixerChannel->m_volumeModel, tr("Fader %1").arg(channelIndex), this};
+ m_fader->setLevelsDisplayedInDBFS();
+ m_fader->setMinPeak(dbfsToAmp(-42));
+ m_fader->setMaxPeak(dbfsToAmp(9));
+
+ m_effectRackView = new EffectRackView{&mixerChannel->m_fxChain, mixerView->m_racksWidget};
+ m_effectRackView->setFixedWidth(EffectRackView::DEFAULT_WIDTH);
+
+ auto mainLayout = new QVBoxLayout{this};
+ mainLayout->setContentsMargins(4, 4, 4, 4);
+ mainLayout->addWidget(m_receiveArrow, 0, Qt::AlignHCenter);
+ mainLayout->addWidget(m_sendButton, 0, Qt::AlignHCenter);
+ mainLayout->addWidget(m_sendKnob, 0, Qt::AlignHCenter);
+ mainLayout->addWidget(m_sendArrow, 0, Qt::AlignHCenter);
+ mainLayout->addWidget(m_channelNumberLcd, 0, Qt::AlignHCenter);
+ mainLayout->addStretch();
+ mainLayout->addWidget(m_renameLineEditView, 0, Qt::AlignHCenter);
+ mainLayout->addLayout(soloMuteLayout, 0);
+ mainLayout->addWidget(m_fader, 0, Qt::AlignHCenter);
+
+ connect(m_renameLineEdit, &QLineEdit::editingFinished, this, &MixerChannelView::renameFinished);
+ }
+
+ void MixerChannelView::contextMenuEvent(QContextMenuEvent*)
+ {
+ auto contextMenu = new CaptionMenu(Engine::mixer()->mixerChannel(m_channelIndex)->m_name, this);
+
+ if (m_channelIndex != 0) // no move-options in master
+ {
+ contextMenu->addAction(tr("Move &left"), this, &MixerChannelView::moveChannelLeft);
+ contextMenu->addAction(tr("Move &right"), this, &MixerChannelView::moveChannelRight);
+ }
+
+ contextMenu->addAction(tr("Rename &channel"), this, &MixerChannelView::renameChannel);
+ contextMenu->addSeparator();
+
+ if (m_channelIndex != 0) // no remove-option in master
+ {
+ contextMenu->addAction(embed::getIconPixmap("cancel"), tr("R&emove channel"), this, &MixerChannelView::removeChannel);
+ contextMenu->addSeparator();
+ }
+
+ contextMenu->addAction(embed::getIconPixmap("cancel"), tr("Remove &unused channels"), this, &MixerChannelView::removeUnusedChannels);
+ contextMenu->addSeparator();
+
+ auto colorMenu = QMenu{tr("Color"), this};
+ colorMenu.setIcon(embed::getIconPixmap("colorize"));
+ colorMenu.addAction(tr("Change"), this, &MixerChannelView::selectColor);
+ colorMenu.addAction(tr("Reset"), this, &MixerChannelView::resetColor);
+ colorMenu.addAction(tr("Pick random"), this, &MixerChannelView::randomizeColor);
+ contextMenu->addMenu(&colorMenu);
+
+ contextMenu->exec(QCursor::pos());
+ delete contextMenu;
+ }
+
+ void MixerChannelView::paintEvent(QPaintEvent* event)
+ {
+ auto * mixer = Engine::mixer();
+ const auto channel = mixer->mixerChannel(m_channelIndex);
+ const bool muted = channel->m_muteModel.value();
+ const auto name = channel->m_name;
+ const auto elidedName = elideName(name);
+ const auto * mixerChannelView = m_mixerView->currentMixerChannel();
+ const auto isActive = mixerChannelView == this;
+
+ if (!m_inRename && m_renameLineEdit->text() != elidedName)
+ {
+ m_renameLineEdit->setText(elidedName);
+ }
+
+ const auto width = rect().width();
+ const auto height = rect().height();
+ auto painter = QPainter{this};
+
+ if (channel->color().has_value() && !muted)
+ {
+ painter.fillRect(rect(), channel->color()->darker(isActive ? 120 : 150));
+ }
+ else
+ {
+ painter.fillRect(rect(), isActive ? backgroundActive().color() : painter.background().color());
+ }
+
+ // inner border
+ painter.setPen(isActive ? strokeInnerActive() : strokeInnerInactive());
+ painter.drawRect(1, 1, width - MIXER_CHANNEL_INNER_BORDER_SIZE, height - MIXER_CHANNEL_INNER_BORDER_SIZE);
+
+ // outer border
+ painter.setPen(isActive ? strokeOuterActive() : strokeOuterInactive());
+ painter.drawRect(0, 0, width - MIXER_CHANNEL_OUTER_BORDER_SIZE, height - MIXER_CHANNEL_OUTER_BORDER_SIZE);
+
+ const auto & currentMixerChannelIndex = mixerChannelView->m_channelIndex;
+ const auto sendToThis = mixer->channelSendModel(currentMixerChannelIndex, m_channelIndex) != nullptr;
+ const auto receiveFromThis = mixer->channelSendModel(m_channelIndex, currentMixerChannelIndex) != nullptr;
+ const auto sendReceiveStateNone = !sendToThis && !receiveFromThis;
+
+ // Only one or none of them can be on
+ assert(sendToThis ^ receiveFromThis || sendReceiveStateNone);
+
+ m_sendArrow->setVisible(sendToThis);
+ m_receiveArrow->setVisible(receiveFromThis);
+
+ if (sendReceiveStateNone)
+ {
+ setSendReceiveState(SendReceiveState::None);
+ }
+ else
+ {
+ setSendReceiveState(sendToThis ? SendReceiveState::SendToThis : SendReceiveState::ReceiveFromThis);
+ }
+
+ QWidget::paintEvent(event);
+ }
+
+ void MixerChannelView::mousePressEvent(QMouseEvent*)
+ {
+ if (m_mixerView->currentMixerChannel() != this)
+ {
+ m_mixerView->setCurrentMixerChannel(this);
+ }
+ }
+
+ void MixerChannelView::mouseDoubleClickEvent(QMouseEvent*)
+ {
+ renameChannel();
+ }
+
+ bool MixerChannelView::eventFilter(QObject* dist, QEvent* event)
+ {
+ // If we are in a rename, capture the enter/return events and handle them
+ if (event->type() == QEvent::KeyPress)
+ {
+ auto keyEvent = static_cast(event);
+ if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return)
+ {
+ if (m_inRename)
+ {
+ renameFinished();
+ event->accept(); // Stop the event from propagating
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ int MixerChannelView::channelIndex() const
+ {
+ return m_channelIndex;
+ }
+
+ void MixerChannelView::setChannelIndex(int index)
+ {
+ MixerChannel* mixerChannel = Engine::mixer()->mixerChannel(index);
+ m_fader->setModel(&mixerChannel->m_volumeModel);
+ m_muteButton->setModel(&mixerChannel->m_muteModel);
+ m_soloButton->setModel(&mixerChannel->m_soloModel);
+ m_effectRackView->setModel(&mixerChannel->m_fxChain);
+ m_channelIndex = index;
+ }
+
+ MixerChannelView::SendReceiveState MixerChannelView::sendReceiveState() const
+ {
+ return m_sendReceiveState;
+ }
+
+ void MixerChannelView::setSendReceiveState(const SendReceiveState& state)
+ {
+ m_sendReceiveState = state;
+ m_sendArrow->setVisible(state == SendReceiveState::SendToThis);
+ m_receiveArrow->setVisible(state == SendReceiveState::ReceiveFromThis);
+ }
+
+ QBrush MixerChannelView::backgroundActive() const
+ {
+ return m_backgroundActive;
+ }
+
+ void MixerChannelView::setBackgroundActive(const QBrush& c)
+ {
+ m_backgroundActive = c;
+ }
+
+ QColor MixerChannelView::strokeOuterActive() const
+ {
+ return m_strokeOuterActive;
+ }
+
+ void MixerChannelView::setStrokeOuterActive(const QColor& c)
+ {
+ m_strokeOuterActive = c;
+ }
+
+ QColor MixerChannelView::strokeOuterInactive() const
+ {
+ return m_strokeOuterInactive;
+ }
+
+ void MixerChannelView::setStrokeOuterInactive(const QColor& c)
+ {
+ m_strokeOuterInactive = c;
+ }
+
+ QColor MixerChannelView::strokeInnerActive() const
+ {
+ return m_strokeInnerActive;
+ }
+
+ void MixerChannelView::setStrokeInnerActive(const QColor& c)
+ {
+ m_strokeInnerActive = c;
+ }
+
+ QColor MixerChannelView::strokeInnerInactive() const
+ {
+ return m_strokeInnerInactive;
+ }
+
+ void MixerChannelView::setStrokeInnerInactive(const QColor& c)
+ {
+ m_strokeInnerInactive = c;
+ }
+
+ void MixerChannelView::renameChannel()
+ {
+ m_inRename = true;
+ setToolTip("");
+ m_renameLineEdit->setReadOnly(false);
+
+ m_channelNumberLcd->hide();
+ m_renameLineEdit->setFixedWidth(m_renameLineEdit->width());
+ m_renameLineEdit->setText(Engine::mixer()->mixerChannel(m_channelIndex)->m_name);
+
+ m_renameLineEditView->setFocus();
+ m_renameLineEdit->selectAll();
+ m_renameLineEdit->setFocus();
+ }
+
+ void MixerChannelView::renameFinished()
+ {
+ m_inRename = false;
+
+ m_renameLineEdit->deselect();
+ m_renameLineEdit->setReadOnly(true);
+ m_renameLineEdit->setFixedWidth(m_renameLineEdit->width());
+ m_channelNumberLcd->show();
+
+ auto newName = m_renameLineEdit->text();
+ setFocus();
+
+ const auto mixerChannel = Engine::mixer()->mixerChannel(m_channelIndex);
+ if (!newName.isEmpty() && mixerChannel->m_name != newName)
+ {
+ mixerChannel->m_name = newName;
+ m_renameLineEdit->setText(elideName(newName));
+ Engine::getSong()->setModified();
+ }
+
+ setToolTip(mixerChannel->m_name);
+ }
+
+ void MixerChannelView::resetColor()
+ {
+ Engine::mixer()->mixerChannel(m_channelIndex)->setColor(std::nullopt);
+ Engine::getSong()->setModified();
+ update();
+ }
+
+ void MixerChannelView::selectColor()
+ {
+ const auto channel = Engine::mixer()->mixerChannel(m_channelIndex);
+
+ const auto initialColor = channel->color().value_or(backgroundActive().color());
+ const auto * colorChooser = ColorChooser{this}.withPalette(ColorChooser::Palette::Mixer);
+ const auto newColor = colorChooser->getColor(initialColor);
+
+ if (!newColor.isValid()) { return; }
+
+ channel->setColor(newColor);
+
+ Engine::getSong()->setModified();
+ update();
+ }
+
+ void MixerChannelView::randomizeColor()
+ {
+ auto channel = Engine::mixer()->mixerChannel(m_channelIndex);
+ channel->setColor(ColorChooser::getPalette(ColorChooser::Palette::Mixer)[rand() % 48]);
+ Engine::getSong()->setModified();
+ update();
+ }
+
+ void MixerChannelView::removeChannel()
+ {
+ auto mix = getGUI()->mixerView();
+ mix->deleteChannel(m_channelIndex);
+ }
+
+ void MixerChannelView::removeUnusedChannels()
+ {
+ auto mix = getGUI()->mixerView();
+ mix->deleteUnusedChannels();
+ }
+
+ void MixerChannelView::moveChannelLeft()
+ {
+ auto mix = getGUI()->mixerView();
+ mix->moveChannelLeft(m_channelIndex);
+ }
+
+ void MixerChannelView::moveChannelRight()
+ {
+ auto mix = getGUI()->mixerView();
+ mix->moveChannelRight(m_channelIndex);
+ }
+
+ QString MixerChannelView::elideName(const QString& name)
+ {
+ const auto maxTextHeight = m_renameLineEdit->width();
+ const auto metrics = QFontMetrics{m_renameLineEdit->font()};
+ const auto elidedName = metrics.elidedText(name, Qt::ElideRight, maxTextHeight);
+ return elidedName;
+ }
+
+} // namespace lmms::gui
\ No newline at end of file
diff --git a/src/gui/MixerLine.cpp b/src/gui/MixerLine.cpp
deleted file mode 100644
index 182e131d3b8..00000000000
--- a/src/gui/MixerLine.cpp
+++ /dev/null
@@ -1,448 +0,0 @@
-/*
- * MixerLine.cpp - Mixer line widget
- *
- * Copyright (c) 2009 Andrew Kelley
- * Copyright (c) 2014 Tobias Doerffel
- *
- * This file is part of LMMS - https://lmms.io
- *
- * This program 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 2 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
-
-#include "MixerLine.h"
-
-#include
-
-#include
-#include
-#include
-#include
-
-#include "CaptionMenu.h"
-#include "ColorChooser.h"
-#include "embed.h"
-#include "Knob.h"
-#include "LcdWidget.h"
-#include "Mixer.h"
-#include "MixerView.h"
-#include "gui_templates.h"
-#include "GuiApplication.h"
-#include "SendButtonIndicator.h"
-#include "Song.h"
-
-namespace lmms::gui
-{
-
-
-bool MixerLine::eventFilter( QObject *dist, QEvent *event )
-{
- // If we are in a rename, capture the enter/return events and handle them
- if ( event->type() == QEvent::KeyPress )
- {
- auto keyEvent = static_cast(event);
- if( keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return )
- {
- if( m_inRename )
- {
- renameFinished();
- event->accept(); // Stop the event from propagating
- return true;
- }
- }
- }
- return false;
-}
-
-const int MixerLine::MixerLineHeight = 287;
-
-MixerLine::MixerLine( QWidget * _parent, MixerView * _mv, int _channelIndex ) :
- QWidget( _parent ),
- m_mv( _mv ),
- m_channelIndex( _channelIndex ),
- m_backgroundActive( Qt::SolidPattern ),
- m_strokeOuterActive( 0, 0, 0 ),
- m_strokeOuterInactive( 0, 0, 0 ),
- m_strokeInnerActive( 0, 0, 0 ),
- m_strokeInnerInactive( 0, 0, 0 ),
- m_inRename( false )
-{
- setFixedSize( 33, MixerLineHeight );
- setAttribute( Qt::WA_OpaquePaintEvent, true );
- setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) );
-
- // mixer sends knob
- m_sendKnob = new Knob( KnobType::Bright26, this, tr( "Channel send amount" ) );
- m_sendKnob->move( 3, 22 );
- m_sendKnob->setVisible( false );
-
- // send button indicator
- m_sendBtn = new SendButtonIndicator( this, this, m_mv );
- m_sendBtn->move( 2, 2 );
-
- // channel number
- m_lcd = new LcdWidget( 2, this );
- m_lcd->setValue( m_channelIndex );
- m_lcd->move( 4, 58 );
- m_lcd->setMarginWidth( 1 );
-
- QString name = Engine::mixer()->mixerChannel( m_channelIndex )->m_name;
- setToolTip( name );
-
- m_renameLineEdit = new QLineEdit();
- m_renameLineEdit->setText( name );
- m_renameLineEdit->setFixedWidth( 65 );
- m_renameLineEdit->setFont( pointSizeF( font(), 7.5f ) );
- m_renameLineEdit->setReadOnly( true );
- m_renameLineEdit->installEventFilter( this );
-
- auto scene = new QGraphicsScene();
- scene->setSceneRect( 0, 0, 33, MixerLineHeight );
-
- m_view = new QGraphicsView( this );
- m_view->setStyleSheet( "border-style: none; background: transparent;" );
- m_view->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
- m_view->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
- m_view->setAttribute( Qt::WA_TransparentForMouseEvents, true );
- m_view->setScene( scene );
-
- QGraphicsProxyWidget * proxyWidget = scene->addWidget( m_renameLineEdit );
- proxyWidget->setRotation( -90 );
- proxyWidget->setPos( 8, 145 );
-
- connect( m_renameLineEdit, SIGNAL(editingFinished()), this, SLOT(renameFinished()));
- connect( &Engine::mixer()->mixerChannel( m_channelIndex )->m_muteModel, SIGNAL(dataChanged()), this, SLOT(update()));
-}
-
-
-
-
-MixerLine::~MixerLine()
-{
- delete m_sendKnob;
- delete m_sendBtn;
- delete m_lcd;
-}
-
-
-
-
-void MixerLine::setChannelIndex( int index )
-{
- m_channelIndex = index;
- m_lcd->setValue( m_channelIndex );
- m_lcd->update();
-}
-
-
-
-void MixerLine::drawMixerLine( QPainter* p, const MixerLine *mixerLine, bool isActive, bool sendToThis, bool receiveFromThis )
-{
- auto channel = Engine::mixer()->mixerChannel( m_channelIndex );
- bool muted = channel->m_muteModel.value();
- QString name = channel->m_name;
- QString elidedName = elideName( name );
- if( !m_inRename && m_renameLineEdit->text() != elidedName )
- {
- m_renameLineEdit->setText( elidedName );
- }
-
- int width = mixerLine->rect().width();
- int height = mixerLine->rect().height();
-
- if (channel->color().has_value() && !muted)
- {
- p->fillRect(mixerLine->rect(), channel->color()->darker(isActive ? 120 : 150));
- }
- else
- {
- p->fillRect( mixerLine->rect(),
- isActive ? mixerLine->backgroundActive().color() : p->background().color() );
- }
-
- // inner border
- p->setPen( isActive ? mixerLine->strokeInnerActive() : mixerLine->strokeInnerInactive() );
- p->drawRect( 1, 1, width-3, height-3 );
-
- // outer border
- p->setPen( isActive ? mixerLine->strokeOuterActive() : mixerLine->strokeOuterInactive() );
- p->drawRect( 0, 0, width-1, height-1 );
-
- // draw the mixer send background
-
- static auto s_sendBgArrow = embed::getIconPixmap("send_bg_arrow", 29, 56);
- static auto s_receiveBgArrow = embed::getIconPixmap("receive_bg_arrow", 29, 56);
- p->drawPixmap(2, 0, 29, 56, sendToThis ? s_sendBgArrow : s_receiveBgArrow);
-}
-
-
-
-
-QString MixerLine::elideName( const QString & name )
-{
- const int maxTextHeight = 60;
- QFontMetrics metrics( m_renameLineEdit->font() );
- QString elidedName = metrics.elidedText( name, Qt::ElideRight, maxTextHeight );
- return elidedName;
-}
-
-
-
-
-void MixerLine::paintEvent( QPaintEvent * )
-{
- bool sendToThis = Engine::mixer()->channelSendModel( m_mv->currentMixerLine()->m_channelIndex, m_channelIndex ) != nullptr;
- bool receiveFromThis = Engine::mixer()->channelSendModel( m_channelIndex, m_mv->currentMixerLine()->m_channelIndex ) != nullptr;
- QPainter painter;
- painter.begin( this );
- drawMixerLine( &painter, this, m_mv->currentMixerLine() == this, sendToThis, receiveFromThis );
- painter.end();
-}
-
-
-
-
-void MixerLine::mousePressEvent( QMouseEvent * )
-{
- m_mv->setCurrentMixerLine( this );
-}
-
-
-
-
-void MixerLine::mouseDoubleClickEvent( QMouseEvent * )
-{
- renameChannel();
-}
-
-
-
-
-void MixerLine::contextMenuEvent( QContextMenuEvent * )
-{
- QPointer contextMenu = new CaptionMenu( Engine::mixer()->mixerChannel( m_channelIndex )->m_name, this );
- if( m_channelIndex != 0 ) // no move-options in master
- {
- contextMenu->addAction( tr( "Move &left" ), this, SLOT(moveChannelLeft()));
- contextMenu->addAction( tr( "Move &right" ), this, SLOT(moveChannelRight()));
- }
- contextMenu->addAction( tr( "Rename &channel" ), this, SLOT(renameChannel()));
- contextMenu->addSeparator();
-
- if( m_channelIndex != 0 ) // no remove-option in master
- {
- contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "R&emove channel" ), this, SLOT(removeChannel()));
- contextMenu->addSeparator();
- }
- contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "Remove &unused channels" ), this, SLOT(removeUnusedChannels()));
- contextMenu->addSeparator();
-
- QMenu colorMenu(tr("Color"), this);
- colorMenu.setIcon(embed::getIconPixmap("colorize"));
- colorMenu.addAction(tr("Change"), this, SLOT(selectColor()));
- colorMenu.addAction(tr("Reset"), this, SLOT(resetColor()));
- colorMenu.addAction(tr("Pick random"), this, SLOT(randomizeColor()));
- contextMenu->addMenu(&colorMenu);
-
- contextMenu->exec( QCursor::pos() );
- delete contextMenu;
-}
-
-
-
-
-void MixerLine::renameChannel()
-{
- m_inRename = true;
- setToolTip( "" );
- m_renameLineEdit->setReadOnly( false );
- m_lcd->hide();
- m_renameLineEdit->setFixedWidth( 135 );
- m_renameLineEdit->setText( Engine::mixer()->mixerChannel( m_channelIndex )->m_name );
- m_view->setFocus();
- m_renameLineEdit->selectAll();
- m_renameLineEdit->setFocus();
-}
-
-
-
-
-void MixerLine::renameFinished()
-{
- m_inRename = false;
- m_renameLineEdit->deselect();
- m_renameLineEdit->setReadOnly( true );
- m_renameLineEdit->setFixedWidth( 65 );
- m_lcd->show();
- QString newName = m_renameLineEdit->text();
- setFocus();
- if( !newName.isEmpty() && Engine::mixer()->mixerChannel( m_channelIndex )->m_name != newName )
- {
- Engine::mixer()->mixerChannel( m_channelIndex )->m_name = newName;
- m_renameLineEdit->setText( elideName( newName ) );
- Engine::getSong()->setModified();
- }
- QString name = Engine::mixer()->mixerChannel( m_channelIndex )->m_name;
- setToolTip( name );
-}
-
-
-
-
-void MixerLine::removeChannel()
-{
- MixerView * mix = getGUI()->mixerView();
- mix->deleteChannel( m_channelIndex );
-}
-
-
-
-
-void MixerLine::removeUnusedChannels()
-{
- MixerView * mix = getGUI()->mixerView();
- mix->deleteUnusedChannels();
-}
-
-
-
-
-void MixerLine::moveChannelLeft()
-{
- MixerView * mix = getGUI()->mixerView();
- mix->moveChannelLeft( m_channelIndex );
-}
-
-
-
-
-void MixerLine::moveChannelRight()
-{
- MixerView * mix = getGUI()->mixerView();
- mix->moveChannelRight( m_channelIndex );
-}
-
-
-
-
-QBrush MixerLine::backgroundActive() const
-{
- return m_backgroundActive;
-}
-
-
-
-
-void MixerLine::setBackgroundActive( const QBrush & c )
-{
- m_backgroundActive = c;
-}
-
-
-
-
-QColor MixerLine::strokeOuterActive() const
-{
- return m_strokeOuterActive;
-}
-
-
-
-
-void MixerLine::setStrokeOuterActive( const QColor & c )
-{
- m_strokeOuterActive = c;
-}
-
-
-
-
-QColor MixerLine::strokeOuterInactive() const
-{
- return m_strokeOuterInactive;
-}
-
-
-
-
-void MixerLine::setStrokeOuterInactive( const QColor & c )
-{
- m_strokeOuterInactive = c;
-}
-
-
-
-
-QColor MixerLine::strokeInnerActive() const
-{
- return m_strokeInnerActive;
-}
-
-
-
-
-void MixerLine::setStrokeInnerActive( const QColor & c )
-{
- m_strokeInnerActive = c;
-}
-
-
-
-
-QColor MixerLine::strokeInnerInactive() const
-{
- return m_strokeInnerInactive;
-}
-
-
-
-
-void MixerLine::setStrokeInnerInactive( const QColor & c )
-{
- m_strokeInnerInactive = c;
-}
-
-// Ask user for a color, and set it as the mixer line color
-void MixerLine::selectColor()
-{
- const auto channel = Engine::mixer()->mixerChannel(m_channelIndex);
- const auto newColor = ColorChooser{this}
- .withPalette(ColorChooser::Palette::Mixer)
- ->getColor(channel->color().value_or(backgroundActive().color()));
- if (!newColor.isValid()) { return; }
- channel->setColor(newColor);
- Engine::getSong()->setModified();
- update();
-}
-
-// Disable the usage of color on this mixer line
-void MixerLine::resetColor()
-{
- Engine::mixer()->mixerChannel(m_channelIndex)->setColor(std::nullopt);
- Engine::getSong()->setModified();
- update();
-}
-
-// Pick a random color from the mixer palette and set it as our color
-void MixerLine::randomizeColor()
-{
- const auto channel = Engine::mixer()->mixerChannel(m_channelIndex);
- channel->setColor(ColorChooser::getPalette(ColorChooser::Palette::Mixer)[std::rand() % 48]);
- Engine::getSong()->setModified();
- update();
-}
-
-} // namespace lmms::gui
diff --git a/src/gui/MixerView.cpp b/src/gui/MixerView.cpp
index 018e72c2b20..f20b60a3842 100644
--- a/src/gui/MixerView.cpp
+++ b/src/gui/MixerView.cpp
@@ -33,9 +33,9 @@
#include "lmms_math.h"
+#include "MixerChannelView.h"
#include "MixerView.h"
#include "Knob.h"
-#include "MixerLine.h"
#include "Mixer.h"
#include "GuiApplication.h"
#include "MainWindow.h"
@@ -54,7 +54,7 @@ namespace lmms::gui
MixerView::MixerView() :
QWidget(),
- ModelView( nullptr, this ),
+ ModelView(nullptr, this),
SerializingObjectHook()
{
#if QT_VERSION < 0x50C00
@@ -68,54 +68,54 @@ MixerView::MixerView() :
#endif
Mixer * m = Engine::mixer();
- m->setHook( this );
+ m->setHook(this);
//QPalette pal = palette();
- //pal.setColor( QPalette::Window, QColor( 72, 76, 88 ) );
- //setPalette( pal );
+ //pal.setColor(QPalette::Window, QColor(72, 76, 88));
+ //setPalette(pal);
- setAutoFillBackground( true );
- setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed );
+ setAutoFillBackground(true);
+ setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
- setWindowTitle( tr( "Mixer" ) );
- setWindowIcon( embed::getIconPixmap( "mixer" ) );
+ setWindowTitle(tr("Mixer"));
+ setWindowIcon(embed::getIconPixmap("mixer"));
// main-layout
- auto ml = new QHBoxLayout;
+ auto ml = new QHBoxLayout{this};
// Set margins
- ml->setContentsMargins( 0, 4, 0, 0 );
+ ml->setContentsMargins(0, 4, 0, 0);
// Channel area
m_channelAreaWidget = new QWidget;
- chLayout = new QHBoxLayout( m_channelAreaWidget );
- chLayout->setSizeConstraint( QLayout::SetMinimumSize );
- chLayout->setSpacing( 0 );
+ chLayout = new QHBoxLayout(m_channelAreaWidget);
+ chLayout->setSizeConstraint(QLayout::SetMinimumSize);
+ chLayout->setSpacing(0);
chLayout->setContentsMargins(0, 0, 0, 0);
m_channelAreaWidget->setLayout(chLayout);
// create rack layout before creating the first channel
m_racksWidget = new QWidget;
- m_racksLayout = new QStackedLayout( m_racksWidget );
- m_racksLayout->setContentsMargins( 0, 0, 0, 0 );
- m_racksWidget->setLayout( m_racksLayout );
+ m_racksLayout = new QStackedLayout(m_racksWidget);
+ m_racksLayout->setContentsMargins(0, 0, 0, 0);
+ m_racksWidget->setLayout(m_racksLayout);
// add master channel
- m_mixerChannelViews.resize( m->numChannels() );
- m_mixerChannelViews[0] = new MixerChannelView( this, this, 0 );
+ m_mixerChannelViews.resize(m->numChannels());
+ m_mixerChannelViews[0] = new MixerChannelView(this, this, 0);
- m_racksLayout->addWidget( m_mixerChannelViews[0]->m_rackView );
+ m_racksLayout->addWidget(m_mixerChannelViews[0]->m_effectRackView);
MixerChannelView * masterView = m_mixerChannelViews[0];
- ml->addWidget( masterView->m_mixerLine, 0, Qt::AlignTop );
+ ml->addWidget(masterView, 0, Qt::AlignTop);
- QSize mixerLineSize = masterView->m_mixerLine->size();
+ auto mixerChannelSize = masterView->sizeHint();
// add mixer channels
- for( int i = 1; i < m_mixerChannelViews.size(); ++i )
+ for (int i = 1; i < m_mixerChannelViews.size(); ++i)
{
m_mixerChannelViews[i] = new MixerChannelView(m_channelAreaWidget, this, i);
- chLayout->addWidget( m_mixerChannelViews[i]->m_mixerLine );
+ chLayout->addWidget(m_mixerChannelViews[i]);
}
// add the scrolling section to the main layout
@@ -123,68 +123,63 @@ MixerView::MixerView() :
class ChannelArea : public QScrollArea
{
public:
- ChannelArea( QWidget * parent, MixerView * mv ) :
- QScrollArea( parent ), m_mv( mv ) {}
+ ChannelArea(QWidget* parent, MixerView* mv) :
+ QScrollArea(parent), m_mv(mv) {}
~ChannelArea() override = default;
- void keyPressEvent( QKeyEvent * e ) override
+ void keyPressEvent(QKeyEvent* e) override
{
- m_mv->keyPressEvent( e );
+ m_mv->keyPressEvent(e);
}
private:
- MixerView * m_mv;
+ MixerView* m_mv;
};
- channelArea = new ChannelArea( this, this );
- channelArea->setWidget( m_channelAreaWidget );
- channelArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
- channelArea->setFrameStyle( QFrame::NoFrame );
- channelArea->setMinimumWidth( mixerLineSize.width() * 6 );
- channelArea->setFixedHeight( mixerLineSize.height() +
- style()->pixelMetric( QStyle::PM_ScrollBarExtent ) );
- ml->addWidget( channelArea, 1, Qt::AlignTop );
+ channelArea = new ChannelArea(this, this);
+ channelArea->setWidget(m_channelAreaWidget);
+ channelArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ channelArea->setFrameStyle(QFrame::NoFrame);
+ channelArea->setMinimumWidth(mixerChannelSize.width() * 6);
+
+ int const scrollBarExtent = style()->pixelMetric(QStyle::PM_ScrollBarExtent);
+ channelArea->setFixedHeight(mixerChannelSize.height() + scrollBarExtent);
+
+ ml->addWidget(channelArea, 1, Qt::AlignTop);
// show the add new mixer channel button
auto newChannelBtn = new QPushButton(embed::getIconPixmap("new_channel"), QString(), this);
- newChannelBtn->setObjectName( "newChannelBtn" );
- newChannelBtn->setFixedSize( mixerLineSize );
- connect( newChannelBtn, SIGNAL(clicked()), this, SLOT(addNewChannel()));
- ml->addWidget( newChannelBtn, 0, Qt::AlignTop );
+ newChannelBtn->setObjectName("newChannelBtn");
+ newChannelBtn->setFixedSize(mixerChannelSize);
+ connect(newChannelBtn, SIGNAL(clicked()), this, SLOT(addNewChannel()));
+ ml->addWidget(newChannelBtn, 0, Qt::AlignTop);
// add the stacked layout for the effect racks of mixer channels
- ml->addWidget( m_racksWidget, 0, Qt::AlignTop | Qt::AlignRight );
+ m_racksWidget->setFixedHeight(mixerChannelSize.height());
+ ml->addWidget(m_racksWidget);
- setCurrentMixerLine( m_mixerChannelViews[0]->m_mixerLine );
+ setCurrentMixerChannel(m_mixerChannelViews[0]);
- setLayout( ml );
updateGeometry();
- // timer for updating faders
- connect( getGUI()->mainWindow(), SIGNAL(periodicUpdate()),
- this, SLOT(updateFaders()));
+ auto* mainWindow = getGUI()->mainWindow();
+ // timer for updating faders
+ connect(mainWindow, &MainWindow::periodicUpdate, this, &MixerView::updateFaders);
// add ourself to workspace
- QMdiSubWindow * subWin = getGUI()->mainWindow()->addWindowedWidget( this );
+ QMdiSubWindow* subWin = mainWindow->addWindowedWidget(this);
Qt::WindowFlags flags = subWin->windowFlags();
flags &= ~Qt::WindowMaximizeButtonHint;
- subWin->setWindowFlags( flags );
- layout()->setSizeConstraint( QLayout::SetMinimumSize );
- subWin->layout()->setSizeConstraint( QLayout::SetMinAndMaxSize );
+ subWin->setWindowFlags(flags);
+ layout()->setSizeConstraint(QLayout::SetMinimumSize);
+ subWin->layout()->setSizeConstraint(QLayout::SetMinAndMaxSize);
- parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false );
- parentWidget()->move( 5, 310 );
+ parentWidget()->setAttribute(Qt::WA_DeleteOnClose, false);
+ parentWidget()->move(5, 310);
// we want to receive dataChanged-signals in order to update
- setModel( m );
+ setModel(m);
}
-MixerView::~MixerView()
-{
- for (auto mixerChannelView : m_mixerChannelViews)
- {
- delete mixerChannelView;
- }
-}
@@ -194,12 +189,11 @@ int MixerView::addNewChannel()
Mixer * mix = Engine::mixer();
int newChannelIndex = mix->createChannel();
- m_mixerChannelViews.push_back(new MixerChannelView(m_channelAreaWidget, this,
- newChannelIndex));
- chLayout->addWidget( m_mixerChannelViews[newChannelIndex]->m_mixerLine );
- m_racksLayout->addWidget( m_mixerChannelViews[newChannelIndex]->m_rackView );
+ m_mixerChannelViews.push_back(new MixerChannelView(m_channelAreaWidget, this, newChannelIndex));
+ chLayout->addWidget(m_mixerChannelViews[newChannelIndex]);
+ m_racksLayout->addWidget(m_mixerChannelViews[newChannelIndex]->m_effectRackView);
- updateMixerLine(newChannelIndex);
+ updateMixerChannel(newChannelIndex);
updateMaxChannelSelector();
@@ -210,35 +204,29 @@ int MixerView::addNewChannel()
void MixerView::refreshDisplay()
{
// delete all views and re-add them
- for( int i = 1; iremoveWidget(m_mixerChannelViews[i]->m_mixerLine);
- m_racksLayout->removeWidget( m_mixerChannelViews[i]->m_rackView );
- delete m_mixerChannelViews[i]->m_fader;
- delete m_mixerChannelViews[i]->m_muteBtn;
- delete m_mixerChannelViews[i]->m_soloBtn;
- delete m_mixerChannelViews[i]->m_mixerLine;
- delete m_mixerChannelViews[i]->m_rackView;
- delete m_mixerChannelViews[i];
+ chLayout->removeWidget(m_mixerChannelViews[i]);
+ m_racksLayout->removeWidget(m_mixerChannelViews[i]->m_effectRackView);
}
m_channelAreaWidget->adjustSize();
// re-add the views
m_mixerChannelViews.resize(Engine::mixer()->numChannels());
- for( int i = 1; i < m_mixerChannelViews.size(); ++i )
+ for (int i = 1; i < m_mixerChannelViews.size(); ++i)
{
m_mixerChannelViews[i] = new MixerChannelView(m_channelAreaWidget, this, i);
- chLayout->addWidget(m_mixerChannelViews[i]->m_mixerLine);
- m_racksLayout->addWidget( m_mixerChannelViews[i]->m_rackView );
+ chLayout->addWidget(m_mixerChannelViews[i]);
+ m_racksLayout->addWidget(m_mixerChannelViews[i]->m_effectRackView);
}
- // set selected mixer line to 0
- setCurrentMixerLine( 0 );
+ // set selected mixer channel to 0
+ setCurrentMixerChannel(0);
// update all mixer lines
- for( int i = 0; i < m_mixerChannelViews.size(); ++i )
+ for (int i = 0; i < m_mixerChannelViews.size(); ++i)
{
- updateMixerLine( i );
+ updateMixerChannel(i);
}
updateMaxChannelSelector();
@@ -272,74 +260,21 @@ void MixerView::updateMaxChannelSelector()
}
-void MixerView::saveSettings( QDomDocument & _doc, QDomElement & _this )
+void MixerView::saveSettings(QDomDocument& doc, QDomElement& domElement)
{
- MainWindow::saveWidgetState( this, _this );
+ MainWindow::saveWidgetState(this, domElement);
}
-void MixerView::loadSettings( const QDomElement & _this )
+void MixerView::loadSettings(const QDomElement& domElement)
{
- MainWindow::restoreWidgetState( this, _this );
+ MainWindow::restoreWidgetState(this, domElement);
}
-MixerView::MixerChannelView::MixerChannelView(QWidget * _parent, MixerView * _mv,
- int channelIndex )
-{
- m_mixerLine = new MixerLine(_parent, _mv, channelIndex);
-
- MixerChannel *mixerChannel = Engine::mixer()->mixerChannel(channelIndex);
-
- m_fader = new Fader( &mixerChannel->m_volumeModel,
- tr( "Fader %1" ).arg( channelIndex ), m_mixerLine );
- m_fader->setLevelsDisplayedInDBFS();
- m_fader->setMinPeak(dbfsToAmp(-42));
- m_fader->setMaxPeak(dbfsToAmp(9));
-
- m_fader->move( 16-m_fader->width()/2,
- m_mixerLine->height()-
- m_fader->height()-5 );
-
- m_muteBtn = new PixmapButton( m_mixerLine, tr( "Mute" ) );
- m_muteBtn->setModel( &mixerChannel->m_muteModel );
- m_muteBtn->setActiveGraphic(
- embed::getIconPixmap( "led_off" ) );
- m_muteBtn->setInactiveGraphic(
- embed::getIconPixmap( "led_green" ) );
- m_muteBtn->setCheckable( true );
- m_muteBtn->move( 9, m_fader->y()-11);
- m_muteBtn->setToolTip(tr("Mute this channel"));
-
- m_soloBtn = new PixmapButton( m_mixerLine, tr( "Solo" ) );
- m_soloBtn->setModel( &mixerChannel->m_soloModel );
- m_soloBtn->setActiveGraphic(
- embed::getIconPixmap( "led_red" ) );
- m_soloBtn->setInactiveGraphic(
- embed::getIconPixmap( "led_off" ) );
- m_soloBtn->setCheckable( true );
- m_soloBtn->move( 9, m_fader->y()-21);
- connect(&mixerChannel->m_soloModel, SIGNAL(dataChanged()),
- _mv, SLOT ( toggledSolo() ), Qt::DirectConnection );
- m_soloBtn->setToolTip(tr("Solo this channel"));
-
- // Create EffectRack for the channel
- m_rackView = new EffectRackView( &mixerChannel->m_fxChain, _mv->m_racksWidget );
- m_rackView->setFixedSize( EffectRackView::DEFAULT_WIDTH, MixerLine::MixerLineHeight );
-}
-
-void MixerView::MixerChannelView::setChannelIndex( int index )
-{
- MixerChannel* mixerChannel = Engine::mixer()->mixerChannel( index );
-
- m_fader->setModel( &mixerChannel->m_volumeModel );
- m_muteBtn->setModel( &mixerChannel->m_muteModel );
- m_soloBtn->setModel( &mixerChannel->m_soloModel );
- m_rackView->setModel( &mixerChannel->m_fxChain );
-}
void MixerView::toggledSolo()
@@ -349,31 +284,31 @@ void MixerView::toggledSolo()
-void MixerView::setCurrentMixerLine( MixerLine * _line )
+void MixerView::setCurrentMixerChannel(MixerChannelView* channel)
{
// select
- m_currentMixerLine = _line;
- m_racksLayout->setCurrentWidget( m_mixerChannelViews[ _line->channelIndex() ]->m_rackView );
+ m_currentMixerChannel = channel;
+ m_racksLayout->setCurrentWidget(m_mixerChannelViews[channel->channelIndex()]->m_effectRackView);
// set up send knob
- for(int i = 0; i < m_mixerChannelViews.size(); ++i)
+ for (int i = 0; i < m_mixerChannelViews.size(); ++i)
{
- updateMixerLine(i);
+ updateMixerChannel(i);
}
}
-void MixerView::updateMixerLine(int index)
+void MixerView::updateMixerChannel(int index)
{
Mixer * mix = Engine::mixer();
// does current channel send to this channel?
- int selIndex = m_currentMixerLine->channelIndex();
- MixerLine * thisLine = m_mixerChannelViews[index]->m_mixerLine;
- thisLine->setToolTip( Engine::mixer()->mixerChannel( index )->m_name );
+ int selIndex = m_currentMixerChannel->channelIndex();
+ auto thisLine = m_mixerChannelViews[index];
+ thisLine->setToolTip(Engine::mixer()->mixerChannel(index)->m_name);
FloatModel * sendModel = mix->channelSendModel(selIndex, index);
- if( sendModel == nullptr )
+ if (sendModel == nullptr)
{
// does not send, hide send knob
thisLine->m_sendKnob->setVisible(false);
@@ -386,8 +321,8 @@ void MixerView::updateMixerLine(int index)
}
// disable the send button if it would cause an infinite loop
- thisLine->m_sendBtn->setVisible(! mix->isInfiniteLoop(selIndex, index));
- thisLine->m_sendBtn->updateLightStatus();
+ thisLine->m_sendButton->setVisible(!mix->isInfiniteLoop(selIndex, index));
+ thisLine->m_sendButton->updateLightStatus();
thisLine->update();
}
@@ -395,7 +330,7 @@ void MixerView::updateMixerLine(int index)
void MixerView::deleteChannel(int index)
{
// can't delete master
- if( index == 0 ) return;
+ if (index == 0) return;
// if there is no user confirmation, do nothing
if (!confirmRemoval(index))
@@ -404,7 +339,7 @@ void MixerView::deleteChannel(int index)
}
// remember selected line
- int selLine = m_currentMixerLine->channelIndex();
+ int selLine = m_currentMixerChannel->channelIndex();
// in case the deleted channel is soloed or the remaining
// channels will be left in a muted state
@@ -413,23 +348,17 @@ void MixerView::deleteChannel(int index)
// delete the real channel
Engine::mixer()->deleteChannel(index);
- // delete the view
- chLayout->removeWidget(m_mixerChannelViews[index]->m_mixerLine);
- m_racksLayout->removeWidget(m_mixerChannelViews[index]->m_rackView);
- delete m_mixerChannelViews[index]->m_fader;
- delete m_mixerChannelViews[index]->m_muteBtn;
- delete m_mixerChannelViews[index]->m_soloBtn;
- // delete mixerLine later to prevent a crash when deleting from context menu
- m_mixerChannelViews[index]->m_mixerLine->hide();
- m_mixerChannelViews[index]->m_mixerLine->deleteLater();
- delete m_mixerChannelViews[index]->m_rackView;
- delete m_mixerChannelViews[index];
+ chLayout->removeWidget(m_mixerChannelViews[index]);
+ m_racksLayout->removeWidget(m_mixerChannelViews[index]);
+ // delete MixerChannelView later to prevent a crash when deleting from context menu
+ m_mixerChannelViews[index]->hide();
+ m_mixerChannelViews[index]->deleteLater();
m_channelAreaWidget->adjustSize();
// make sure every channel knows what index it is
for (int i = index + 1; i < m_mixerChannelViews.size(); ++i)
{
- m_mixerChannelViews[i]->m_mixerLine->setChannelIndex(i - 1);
+ m_mixerChannelViews[i]->setChannelIndex(i - 1);
}
m_mixerChannelViews.remove(index);
@@ -438,7 +367,7 @@ void MixerView::deleteChannel(int index)
{
selLine = m_mixerChannelViews.size() - 1;
}
- setCurrentMixerLine(selLine);
+ setCurrentMixerChannel(selLine);
updateMaxChannelSelector();
}
@@ -503,39 +432,39 @@ void MixerView::deleteUnusedChannels()
void MixerView::moveChannelLeft(int index, int focusIndex)
{
// can't move master or first channel left or last channel right
- if( index <= 1 || index >= m_mixerChannelViews.size() ) return;
+ if (index <= 1 || index >= m_mixerChannelViews.size()) return;
Mixer *m = Engine::mixer();
// Move instruments channels
- m->moveChannelLeft( index );
+ m->moveChannelLeft(index);
// Update widgets models
- m_mixerChannelViews[index]->setChannelIndex( index );
- m_mixerChannelViews[index - 1]->setChannelIndex( index - 1 );
+ m_mixerChannelViews[index]->setChannelIndex(index);
+ m_mixerChannelViews[index - 1]->setChannelIndex(index - 1);
// Focus on new position
- setCurrentMixerLine( focusIndex );
+ setCurrentMixerChannel(focusIndex);
}
void MixerView::moveChannelLeft(int index)
{
- moveChannelLeft( index, index - 1 );
+ moveChannelLeft(index, index - 1);
}
void MixerView::moveChannelRight(int index)
{
- moveChannelLeft( index + 1, index + 1 );
+ moveChannelLeft(index + 1, index + 1);
}
void MixerView::renameChannel(int index)
{
- m_mixerChannelViews[index]->m_mixerLine->renameChannel();
+ m_mixerChannelViews[index]->renameChannel();
}
@@ -545,32 +474,32 @@ void MixerView::keyPressEvent(QKeyEvent * e)
switch(e->key())
{
case Qt::Key_Delete:
- deleteChannel(m_currentMixerLine->channelIndex());
+ deleteChannel(m_currentMixerChannel->channelIndex());
break;
case Qt::Key_Left:
- if( e->modifiers() & Qt::AltModifier )
+ if (e->modifiers() & Qt::AltModifier)
{
- moveChannelLeft( m_currentMixerLine->channelIndex() );
+ moveChannelLeft(m_currentMixerChannel->channelIndex());
}
else
{
// select channel to the left
- setCurrentMixerLine( m_currentMixerLine->channelIndex()-1 );
+ setCurrentMixerChannel(m_currentMixerChannel->channelIndex() - 1);
}
break;
case Qt::Key_Right:
- if( e->modifiers() & Qt::AltModifier )
+ if (e->modifiers() & Qt::AltModifier)
{
- moveChannelRight( m_currentMixerLine->channelIndex() );
+ moveChannelRight(m_currentMixerChannel->channelIndex());
}
else
{
// select channel to the right
- setCurrentMixerLine( m_currentMixerLine->channelIndex()+1 );
+ setCurrentMixerChannel(m_currentMixerChannel->channelIndex() + 1);
}
break;
case Qt::Key_Insert:
- if ( e->modifiers() & Qt::ShiftModifier )
+ if (e->modifiers() & Qt::ShiftModifier)
{
addNewChannel();
}
@@ -578,16 +507,16 @@ void MixerView::keyPressEvent(QKeyEvent * e)
case Qt::Key_Enter:
case Qt::Key_Return:
case Qt::Key_F2:
- renameChannel( m_currentMixerLine->channelIndex() );
+ renameChannel(m_currentMixerChannel->channelIndex());
break;
}
}
-void MixerView::closeEvent( QCloseEvent * _ce )
+void MixerView::closeEvent(QCloseEvent * ce)
{
- if( parentWidget() )
+ if (parentWidget())
{
parentWidget()->hide();
}
@@ -595,16 +524,16 @@ void MixerView::closeEvent( QCloseEvent * _ce )
{
hide();
}
- _ce->ignore();
+ ce->ignore();
}
-void MixerView::setCurrentMixerLine( int _line )
+void MixerView::setCurrentMixerChannel(int channel)
{
- if( _line >= 0 && _line < m_mixerChannelViews.size() )
+ if (channel >= 0 && channel < m_mixerChannelViews.size())
{
- setCurrentMixerLine( m_mixerChannelViews[_line]->m_mixerLine );
+ setCurrentMixerChannel(m_mixerChannelViews[channel]);
}
}
@@ -628,31 +557,31 @@ void MixerView::updateFaders()
m->mixerChannel(0)->m_peakLeft *= Engine::audioEngine()->masterGain();
m->mixerChannel(0)->m_peakRight *= Engine::audioEngine()->masterGain();
- for( int i = 0; i < m_mixerChannelViews.size(); ++i )
+ for (int i = 0; i < m_mixerChannelViews.size(); ++i)
{
const float opl = m_mixerChannelViews[i]->m_fader->getPeak_L();
const float opr = m_mixerChannelViews[i]->m_fader->getPeak_R();
const float fallOff = 1.25;
- if( m->mixerChannel(i)->m_peakLeft >= opl/fallOff )
+ if (m->mixerChannel(i)->m_peakLeft >= opl/fallOff)
{
- m_mixerChannelViews[i]->m_fader->setPeak_L( m->mixerChannel(i)->m_peakLeft );
+ m_mixerChannelViews[i]->m_fader->setPeak_L(m->mixerChannel(i)->m_peakLeft);
// Set to -1 so later we'll know if this value has been refreshed yet.
m->mixerChannel(i)->m_peakLeft = -1;
}
- else if( m->mixerChannel(i)->m_peakLeft != -1 )
+ else if (m->mixerChannel(i)->m_peakLeft != -1)
{
- m_mixerChannelViews[i]->m_fader->setPeak_L( opl/fallOff );
+ m_mixerChannelViews[i]->m_fader->setPeak_L(opl/fallOff);
}
- if( m->mixerChannel(i)->m_peakRight >= opr/fallOff )
+ if (m->mixerChannel(i)->m_peakRight >= opr/fallOff)
{
- m_mixerChannelViews[i]->m_fader->setPeak_R( m->mixerChannel(i)->m_peakRight );
+ m_mixerChannelViews[i]->m_fader->setPeak_R(m->mixerChannel(i)->m_peakRight);
// Set to -1 so later we'll know if this value has been refreshed yet.
m->mixerChannel(i)->m_peakRight = -1;
}
- else if( m->mixerChannel(i)->m_peakRight != -1 )
+ else if (m->mixerChannel(i)->m_peakRight != -1)
{
- m_mixerChannelViews[i]->m_fader->setPeak_R( opr/fallOff );
+ m_mixerChannelViews[i]->m_fader->setPeak_R(opr/fallOff);
}
}
}
diff --git a/src/gui/SampleTrackWindow.cpp b/src/gui/SampleTrackWindow.cpp
index f6d7f9ea1d9..c0dd8e04e6a 100644
--- a/src/gui/SampleTrackWindow.cpp
+++ b/src/gui/SampleTrackWindow.cpp
@@ -21,7 +21,7 @@
* Boston, MA 02110-1301 USA.
*
*/
-
+
#include "SampleTrackWindow.h"
#include
@@ -37,7 +37,7 @@
#include "GuiApplication.h"
#include "Knob.h"
#include "MainWindow.h"
-#include "MixerLineLcdSpinBox.h"
+#include "MixerChannelLcdSpinBox.h"
#include "SampleTrackView.h"
#include "Song.h"
#include "SubWindow.h"
@@ -133,7 +133,7 @@ SampleTrackWindow::SampleTrackWindow(SampleTrackView * tv) :
// setup spinbox for selecting Mixer-channel
- m_mixerChannelNumber = new MixerLineLcdSpinBox(2, nullptr, tr("Mixer channel"), m_stv);
+ m_mixerChannelNumber = new MixerChannelLcdSpinBox(2, nullptr, tr("Mixer channel"), m_stv);
basicControlsLayout->addWidget(m_mixerChannelNumber, 0, 3);
basicControlsLayout->setAlignment(m_mixerChannelNumber, widgetAlignment);
diff --git a/src/gui/SendButtonIndicator.cpp b/src/gui/SendButtonIndicator.cpp
index d6f8a832778..4fb20cc315e 100644
--- a/src/gui/SendButtonIndicator.cpp
+++ b/src/gui/SendButtonIndicator.cpp
@@ -2,51 +2,48 @@
#include "embed.h"
#include "Mixer.h"
-#include "MixerLine.h"
+#include "MixerChannelView.h"
#include "MixerView.h"
namespace lmms::gui
{
-SendButtonIndicator:: SendButtonIndicator( QWidget * _parent, MixerLine * _owner,
- MixerView * _mv) :
- QLabel( _parent ),
- m_parent( _owner ),
- m_mv( _mv )
+SendButtonIndicator:: SendButtonIndicator(QWidget* parent, MixerChannelView* owner, MixerView* mv) :
+ QLabel(parent),
+ m_parent(owner),
+ m_mv(mv)
{
-
- // don't do any initializing yet, because the MixerView and MixerLine
+ // don't do any initializing yet, because the MixerView and MixerChannelView
// that were passed to this constructor are not done with their constructors
// yet.
setPixmap(m_qpmOff);
}
-void SendButtonIndicator::mousePressEvent( QMouseEvent * e )
+void SendButtonIndicator::mousePressEvent(QMouseEvent* e)
{
- Mixer * mix = Engine::mixer();
- int from = m_mv->currentMixerLine()->channelIndex();
+ Mixer* mix = Engine::mixer();
+ int from = m_mv->currentMixerChannel()->channelIndex();
int to = m_parent->channelIndex();
- FloatModel * sendModel = mix->channelSendModel(from, to);
- if( sendModel == nullptr )
+ FloatModel* sendModel = mix->channelSendModel(from, to);
+ if (sendModel == nullptr)
{
// not sending. create a mixer send.
- mix->createChannelSend( from, to );
+ mix->createChannelSend(from, to);
}
else
{
// sending. delete the mixer send.
- mix->deleteChannelSend( from, to );
+ mix->deleteChannelSend(from, to);
}
- m_mv->updateMixerLine(m_parent->channelIndex());
+ m_mv->updateMixerChannel(m_parent->channelIndex());
updateLightStatus();
}
-FloatModel * SendButtonIndicator::getSendModel()
+FloatModel* SendButtonIndicator::getSendModel()
{
- Mixer * mix = Engine::mixer();
- return mix->channelSendModel(
- m_mv->currentMixerLine()->channelIndex(), m_parent->channelIndex());
+ Mixer* mix = Engine::mixer();
+ return mix->channelSendModel(m_mv->currentMixerChannel()->channelIndex(), m_parent->channelIndex());
}
void SendButtonIndicator::updateLightStatus()
diff --git a/src/gui/instrument/InstrumentTrackWindow.cpp b/src/gui/instrument/InstrumentTrackWindow.cpp
index 28cd8c6c8aa..fa9be2a5055 100644
--- a/src/gui/instrument/InstrumentTrackWindow.cpp
+++ b/src/gui/instrument/InstrumentTrackWindow.cpp
@@ -42,7 +42,7 @@
#include "FileBrowser.h"
#include "FileDialog.h"
#include "GroupBox.h"
-#include "MixerLineLcdSpinBox.h"
+#include "MixerChannelLcdSpinBox.h"
#include "GuiApplication.h"
#include "gui_templates.h"
#include "Instrument.h"
@@ -206,7 +206,7 @@ InstrumentTrackWindow::InstrumentTrackWindow( InstrumentTrackView * _itv ) :
// setup spinbox for selecting Mixer-channel
- m_mixerChannelNumber = new MixerLineLcdSpinBox( 2, nullptr, tr( "Mixer channel" ), m_itv );
+ m_mixerChannelNumber = new MixerChannelLcdSpinBox(2, nullptr, tr("Mixer channel"), m_itv);
basicControlsLayout->addWidget( m_mixerChannelNumber, 0, 6 );
basicControlsLayout->setAlignment( m_mixerChannelNumber, widgetAlignment );
diff --git a/src/gui/tracks/InstrumentTrackView.cpp b/src/gui/tracks/InstrumentTrackView.cpp
index 8087af42335..12b6227ca78 100644
--- a/src/gui/tracks/InstrumentTrackView.cpp
+++ b/src/gui/tracks/InstrumentTrackView.cpp
@@ -74,7 +74,7 @@ InstrumentTrackView::InstrumentTrackView( InstrumentTrack * _it, TrackContainerV
connect(ConfigManager::inst(), SIGNAL(valueChanged(QString,QString,QString)),
this, SLOT(handleConfigChange(QString,QString,QString)));
- m_mixerChannelNumber = new MixerLineLcdSpinBox(2, getTrackSettingsWidget(), tr("Mixer channel"), this);
+ m_mixerChannelNumber = new MixerChannelLcdSpinBox(2, getTrackSettingsWidget(), tr("Mixer channel"), this);
m_mixerChannelNumber->show();
m_volumeKnob = new Knob( KnobType::Small17, getTrackSettingsWidget(),
@@ -240,7 +240,7 @@ void InstrumentTrackView::assignMixerLine(int channelIndex)
{
model()->mixerChannelModel()->setValue( channelIndex );
- getGUI()->mixerView()->setCurrentMixerLine( channelIndex );
+ getGUI()->mixerView()->setCurrentMixerChannel(channelIndex);
}
diff --git a/src/gui/tracks/SampleTrackView.cpp b/src/gui/tracks/SampleTrackView.cpp
index ddb68ee998e..45a695d11da 100644
--- a/src/gui/tracks/SampleTrackView.cpp
+++ b/src/gui/tracks/SampleTrackView.cpp
@@ -21,7 +21,7 @@
* Boston, MA 02110-1301 USA.
*
*/
-
+
#include "SampleTrackView.h"
#include
@@ -58,7 +58,7 @@ SampleTrackView::SampleTrackView( SampleTrack * _t, TrackContainerView* tcv ) :
m_tlb->setIcon(embed::getIconPixmap("sample_track"));
m_tlb->show();
- m_mixerChannelNumber = new MixerLineLcdSpinBox(2, getTrackSettingsWidget(), tr("Mixer channel"), this);
+ m_mixerChannelNumber = new MixerChannelLcdSpinBox(2, getTrackSettingsWidget(), tr("Mixer channel"), this);
m_mixerChannelNumber->show();
m_volumeKnob = new Knob( KnobType::Small17, getTrackSettingsWidget(),
@@ -241,7 +241,7 @@ void SampleTrackView::assignMixerLine(int channelIndex)
{
model()->mixerChannelModel()->setValue(channelIndex);
- getGUI()->mixerView()->setCurrentMixerLine(channelIndex);
+ getGUI()->mixerView()->setCurrentMixerChannel(channelIndex);
}
diff --git a/src/gui/widgets/MixerLineLcdSpinBox.cpp b/src/gui/widgets/MixerChannelLcdSpinBox.cpp
similarity index 82%
rename from src/gui/widgets/MixerLineLcdSpinBox.cpp
rename to src/gui/widgets/MixerChannelLcdSpinBox.cpp
index 06eb823c01c..8a67394de91 100644
--- a/src/gui/widgets/MixerLineLcdSpinBox.cpp
+++ b/src/gui/widgets/MixerChannelLcdSpinBox.cpp
@@ -1,5 +1,5 @@
/*
- * MixerLineLcdSpinBox.cpp - a specialization of LcdSpnBox for setting mixer channels
+ * MixerChannelLcdSpinBox.cpp - a specialization of LcdSpnBox for setting mixer channels
*
* Copyright (c) 2004-2014 Tobias Doerffel
*
@@ -22,7 +22,7 @@
*
*/
-#include "MixerLineLcdSpinBox.h"
+#include "MixerChannelLcdSpinBox.h"
#include "CaptionMenu.h"
#include "MixerView.h"
@@ -33,14 +33,14 @@ namespace lmms::gui
{
-void MixerLineLcdSpinBox::setTrackView(TrackView * tv)
+void MixerChannelLcdSpinBox::setTrackView(TrackView * tv)
{
m_tv = tv;
}
-void MixerLineLcdSpinBox::mouseDoubleClickEvent(QMouseEvent* event)
+void MixerChannelLcdSpinBox::mouseDoubleClickEvent(QMouseEvent* event)
{
- getGUI()->mixerView()->setCurrentMixerLine(model()->value());
+ getGUI()->mixerView()->setCurrentMixerChannel(model()->value());
getGUI()->mixerView()->parentWidget()->show();
getGUI()->mixerView()->show();// show Mixer window
@@ -48,7 +48,7 @@ void MixerLineLcdSpinBox::mouseDoubleClickEvent(QMouseEvent* event)
//engine::getMixerView()->raise();
}
-void MixerLineLcdSpinBox::contextMenuEvent(QContextMenuEvent* event)
+void MixerChannelLcdSpinBox::contextMenuEvent(QContextMenuEvent* event)
{
// for the case, the user clicked right while pressing left mouse-
// button, the context-menu appears while mouse-cursor is still hidden