summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Holthuis <jholthuis@mixxx.org>2021-12-20 18:51:23 +0100
committerJan Holthuis <jholthuis@mixxx.org>2022-01-11 19:53:42 +0100
commitffa89953da15f723c03afb35b719d5d161ab4173 (patch)
tree95e0d16b963498dc578cd31b9d5286868c74b529
parent5f49f762e0328412292cae375b2f0d7f3240d002 (diff)
QML: Implement LibraryControl for QML library
-rw-r--r--res/qml/Library.qml80
-rw-r--r--res/qml/LibraryControl.qml134
-rw-r--r--res/qml/LibraryControlLoadSelectedTrackHandler.qml34
3 files changed, 184 insertions, 64 deletions
diff --git a/res/qml/Library.qml b/res/qml/Library.qml
index 8311c2ee47..547a9c4b4d 100644
--- a/res/qml/Library.qml
+++ b/res/qml/Library.qml
@@ -1,5 +1,6 @@
import "." as Skin
import Mixxx 0.1 as Mixxx
+import QtQml.Models 2.12
import QtQuick 2.12
import "Theme"
@@ -8,70 +9,9 @@ Item {
color: Theme.deckBackgroundColor
anchors.fill: parent
- Mixxx.ControlProxy {
- id: focusedWidgetControl
-
- group: "[Library]"
- key: "focused_widget"
- Component.onCompleted: value = 3
- }
-
- Mixxx.ControlProxy {
- group: "[Playlist]"
- key: "SelectTrackKnob"
- onValueChanged: {
- listView.moveSelection(value);
- }
- }
-
- Mixxx.ControlProxy {
- group: "[Playlist]"
- key: "SelectPrevTrack"
- onValueChanged: {
- if (value != 0)
- listView.moveSelection(-1);
-
- }
- }
-
- Mixxx.ControlProxy {
- group: "[Playlist]"
- key: "SelectNextTrack"
- onValueChanged: {
- if (value != 0)
- listView.moveSelection(1);
-
- }
- }
-
- Mixxx.ControlProxy {
- group: "[Library]"
- key: "MoveVertical"
- onValueChanged: {
- if (focusedWidgetControl.value == 3)
- listView.moveSelection(value);
-
- }
- }
-
- Mixxx.ControlProxy {
- group: "[Library]"
- key: "MoveUp"
- onValueChanged: {
- if (value != 0 && focusedWidgetControl.value == 3)
- listView.moveSelection(-1);
-
- }
- }
-
- Mixxx.ControlProxy {
- group: "[Library]"
- key: "MoveDown"
- onValueChanged: {
- if (value != 0 && focusedWidgetControl.value == 3)
- listView.moveSelection(1);
-
- }
+ LibraryControl {
+ onMoveSelection: listView.moveSelection(offset)
+ onLoadSelectedTrack: listView.loadSelectedTrack(group, play)
}
ListView {
@@ -90,6 +30,18 @@ Item {
currentIndex = newIndex;
}
+ function loadSelectedTrack(group, play) {
+ const url = model.get(currentIndex).fileUrl;
+ if (!url)
+ return ;
+
+ const player = Mixxx.PlayerManager.getPlayer(group);
+ if (!player)
+ return ;
+
+ player.loadTrackFromLocationUrl(url, play);
+ }
+
anchors.fill: parent
anchors.margins: 10
clip: true
diff --git a/res/qml/LibraryControl.qml b/res/qml/LibraryControl.qml
new file mode 100644
index 0000000000..64cea6dacc
--- /dev/null
+++ b/res/qml/LibraryControl.qml
@@ -0,0 +1,134 @@
+import Mixxx 0.1 as Mixxx
+import QtQuick 2.12
+
+Item {
+ id: root
+
+ property bool focused: focusedWidgetControl.value == 3
+
+ signal moveSelection(int offset)
+ signal loadSelectedTrack(string group, bool play)
+
+ Mixxx.ControlProxy {
+ id: focusedWidgetControl
+
+ group: "[Library]"
+ key: "focused_widget"
+ Component.onCompleted: value = 3
+ }
+
+ Mixxx.ControlProxy {
+ group: "[Playlist]"
+ key: "SelectTrackKnob"
+ onValueChanged: {
+ if (value != 0)
+ root.moveSelection(value);
+
+ }
+ }
+
+ Mixxx.ControlProxy {
+ group: "[Playlist]"
+ key: "SelectPrevTrack"
+ onValueChanged: {
+ if (value != 0)
+ root.moveSelection(-1);
+
+ }
+ }
+
+ Mixxx.ControlProxy {
+ group: "[Playlist]"
+ key: "SelectNextTrack"
+ onValueChanged: {
+ if (value != 0)
+ root.moveSelection(1);
+
+ }
+ }
+
+ Mixxx.ControlProxy {
+ group: "[Library]"
+ key: "MoveVertical"
+ onValueChanged: {
+ if (root.focused && value != 0)
+ root.moveSelection(value);
+
+ }
+ }
+
+ Mixxx.ControlProxy {
+ group: "[Library]"
+ key: "MoveUp"
+ onValueChanged: {
+ if (root.focused && value != 0)
+ root.moveSelection(-1);
+
+ }
+ }
+
+ Mixxx.ControlProxy {
+ group: "[Library]"
+ key: "MoveDown"
+ onValueChanged: {
+ if (root.focused && value != 0)
+ root.moveSelection(1);
+
+ }
+ }
+
+ Mixxx.ControlProxy {
+ id: numDecksControl
+
+ group: "[Master]"
+ key: "num_decks"
+ }
+
+ Instantiator {
+ model: numDecksControl.value
+
+ delegate: LibraryControlLoadSelectedTrackHandler {
+ group: "[Channel" + (index + 1) + "]"
+ enabled: root.focused
+ onLoadTrackRequested: root.loadSelectedTrack(group, play)
+ }
+
+ }
+
+ Mixxx.ControlProxy {
+ id: numPreviewDecksControl
+
+ group: "[Master]"
+ key: "num_preview_decks"
+ }
+
+ Instantiator {
+ model: numPreviewDecksControl.value
+
+ delegate: LibraryControlLoadSelectedTrackHandler {
+ group: "[PreviewDeck" + (index + 1) + "]"
+ enabled: root.focused
+ onLoadTrackRequested: root.loadSelectedTrack(group, play)
+ }
+
+ }
+
+ Mixxx.ControlProxy {
+ id: numSamplersControl
+
+ group: "[Master]"
+ key: "num_samplers"
+ }
+
+ Instantiator {
+ model: numSamplersControl.value
+
+ delegate: LibraryControlLoadSelectedTrackHandler {
+ group: "[Sampler" + (index + 1) + "]"
+ enabled: root.focused
+ onLoadTrackRequested: root.loadSelectedTrack(group, play)
+ }
+
+ }
+
+}
diff --git a/res/qml/LibraryControlLoadSelectedTrackHandler.qml b/res/qml/LibraryControlLoadSelectedTrackHandler.qml
new file mode 100644
index 0000000000..7c90f8428b
--- /dev/null
+++ b/res/qml/LibraryControlLoadSelectedTrackHandler.qml
@@ -0,0 +1,34 @@
+import Mixxx 0.1 as Mixxx
+import QtQuick 2.12
+
+Item {
+ id: root
+
+ property string group // required
+ property bool enabled: true
+
+ signal loadTrackRequested(bool play)
+
+ Mixxx.ControlProxy {
+ group: root.group
+ key: "LoadSelectedTrack"
+ onValueChanged: {
+ if (value == 0 || !root.enabled)
+ return ;
+
+ root.loadTrackRequested(false);
+ }
+ }
+
+ Mixxx.ControlProxy {
+ group: root.group
+ key: "LoadSelectedTrackAndPlay"
+ onValueChanged: {
+ if (value == 0 || !root.enabled)
+ return ;
+
+ root.loadTrackRequested(true);
+ }
+ }
+
+}