Skip to content

feat(QML): add basic DnD Deck interface#14849

Merged
JoergAtGithub merged 3 commits into
mixxxdj:mainfrom
acolombier:feat/qml-interface
Jan 12, 2026
Merged

feat(QML): add basic DnD Deck interface#14849
JoergAtGithub merged 3 commits into
mixxxdj:mainfrom
acolombier:feat/qml-interface

Conversation

@acolombier
Copy link
Copy Markdown
Member

Partially addresses #14523 and #14524. Serialisation of edited decks to come in #14539

Screencast.From.2025-05-26.03-52-57.mp4

Notes:

  • The ability to remove elements from the deck will come in follow up PR. This will allow better experience on smaller screen
  • The bouncing animation won't be kept long term, but for now it help assessing the well functioning resizing/position

@acolombier acolombier added this to the 3.0-beta milestone May 31, 2025
@github-project-automation github-project-automation Bot moved this to In progress in QML GUI May 31, 2025
@acolombier acolombier self-assigned this Jun 18, 2025
@github-actions github-actions Bot added library ui code quality preferences waveform developer experience Issues, bugs and PRs related to the development process, development environment & developer docs labels Sep 15, 2025
@acolombier acolombier force-pushed the feat/qml-interface branch 2 times, most recently from afe82d9 to dd94653 Compare September 20, 2025 00:39
@acolombier
Copy link
Copy Markdown
Member Author

This PR is a little bit large as it adds all the basic deck component, but doesn't bring any new C++ code so hopefully won't be too hard to review!

Comment thread res/qml/Button.qml Outdated
Comment thread res/qml/Deck/BeatJump.qml
Comment thread res/qml/Deck/Loop.qml Outdated
Comment thread res/qml/Deck/WaveformOverview.qml Outdated
Comment thread res/qml/Deck/BeatJump.qml Outdated
@JoergAtGithub
Copy link
Copy Markdown
Member

I just tested this an noticed that I can move decks/deck elements when Edit is not active.

@JoergAtGithub
Copy link
Copy Markdown
Member

I do not see the blue higlighting of the selected elements as in the video above.
How do I select multiple elements at once as in the video?

@acolombier
Copy link
Copy Markdown
Member Author

I just tested this an noticed that I can move decks/deck elements when Edit is not active.

I do not see the blue higlighting of the selected elements as in the video above.

Likely related to the Qt version difference... Could you share a screencast for reference?

How do I select multiple elements at once as in the video?

You need to press CTRL while clicking. There is some bugs tho (as you can see in the video, sometime even if you've selected multiple elements, only one moves)

@acolombier acolombier mentioned this pull request Nov 28, 2025
12 tasks
@ywwg ywwg requested a review from Copilot December 7, 2025 18:52
@ywwg
Copy link
Copy Markdown
Member

ywwg commented Dec 7, 2025

I'm adding copilot as a reviewer -- I've had decent success with it but by no means will it be necessary to do everything it says.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request adds a basic drag-and-drop deck interface for the QML skin, representing a significant UI/UX enhancement. The changes include a complete refactoring of the deck layout system to support customizable, draggable components with an edit mode.

Key changes:

  • New draggable deck component system with edit mode support
  • Refactored Mixer to support 4-deck configuration with integrated crossfader
  • Introduction of new deck sub-components (Spinny, Loop, BeatJump, HotcueAndStem, etc.)

Reviewed changes

Copilot reviewed 35 out of 37 changed files in this pull request and generated 14 comments.

Show a summary per file
File Description
res/qml/main.qml Major layout restructure using SplitView; added Edit and Aux buttons; restructured waveform displays and deck arrangement
res/qml/Deck.qml Complete refactor to support drag-and-drop interface with serializable layout models and edit mode
res/qml/Mixer.qml Rebuilt for 4-deck support with integrated crossfader and deck assignment buttons
res/qml/Deck/*.qml New modular deck components (InfoBar, Toolbar, TempoColumn, Spinny, PlayButton, Loop, HotcueAndStem, FXAssign, CueButton, BeatJump, WaveformOverview)
res/qml/ControlFader.qml New fader control component replacing ControlSlider in several places
res/qml/Mixxx/Controls/Fader.qml New base fader control with bar visualization
res/qml/RangeButton.qml New button for cycling through tempo range values
res/qml/EqKnob.qml Updated to use double-tap for mute toggle; removed separate status button
res/qml/QuickFxKnob.qml Simplified interface; removed effect selector dropdown
res/qml/EqColumn.qml Removed stem support UI (stems moved to HotcueAndStem)
res/qml/Theme/Theme.qml Added multiple new theme colors for deck components
res/qml/Library/*.qml Minor color adjustments to match new theme
res/qml/DeckInfoBar.qml Deleted - replaced by Deck/InfoBar.qml
res/qml/InfoBarButton.qml Deleted - no longer needed
res/qml/DeckRow.qml Deleted - deck layout now handled in main.qml
CMakeLists.txt Updated to reference new Fader.qml instead of Slider.qml

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread res/qml/Deck/BeatJump.qml Outdated
Comment thread res/qml/Deck.qml Outdated
Comment thread res/qml/Deck.qml Outdated
Comment thread res/qml/main.qml Outdated
Comment thread res/qml/main.qml Outdated
Comment thread res/qml/MicrophoneDuckingPanel.qml Outdated
Comment thread res/qml/Deck/HotcueAndStem.qml Outdated
Comment thread res/qml/Deck/Spinny.qml Outdated
Comment thread res/qml/Deck/InfoBar.qml Outdated
Comment thread res/qml/Deck/BeatJump.qml Outdated
Copy link
Copy Markdown
Member

@ywwg ywwg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is very cool and I love seeing how QML is coming along. Most of my comments are questions and clarifications.

I think my primary concern as we forge ahead is that the QML code mixes together logic and style in a way that will make it very hard to debug and/or review and/or support multiple themes or color schemes. My second concern is constant values that are shared between engine code and QML code. Let's figure out a way to keep those in sync, whether it's through some sort of QML->C++ callout or shared header files or something.

I will approve merging this in, but we need to address these questions and I understand it may result in a lot of refactoring and work. But that's something that's a lot easier to do now, and we want to get it right so that QML provides a solid technical foundation for the next 20 years of Mixxx!

Comment thread res/qml/Deck/HotcueAndStem.qml
Comment thread res/qml/Deck/TempoColumn.qml
Comment thread res/qml/Theme/Theme.qml
Comment thread res/qml/Deck.qml Outdated
Comment thread res/qml/Deck.qml Outdated
Comment thread res/qml/Deck.qml Outdated
Comment thread res/qml/Deck.qml Outdated
Comment thread res/qml/Deck.qml Outdated
Comment thread res/qml/EqColumn.qml Outdated
Comment thread res/qml/EqColumn.qml
@acolombier acolombier requested a review from ywwg December 12, 2025 00:32
@acolombier
Copy link
Copy Markdown
Member Author

Note that the current failing CI is unrelated and also happening on main - root cause here

Copy link
Copy Markdown
Member

@ywwg ywwg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

obviously I can't review every line but the form is looking good, thank you for finding the formatter and doing the cleanups. Can we find someone to do a quick functionality pass (maybe one of our testers?), and if it's working all right, we can merge.

Comment on lines +505 to +528
PathLine {
x: 26
y: 4
}
PathLine {
x: 19.5
y: 10
}
PathLine {
x: 19.5
y: 24
}
PathLine {
x: 16.5
y: 24
}
PathLine {
x: 16.5
y: 10
}
PathLine {
x: 10
y: 4
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nonblocking: it would br nice if the formatter let us keep this compact

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I agree... I'll see if there is anything we can do about this!

Copy link
Copy Markdown
Member Author

@acolombier acolombier Dec 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, it does not look like this is something we can change at the moment, but the qmlformat tool is involving fast, so we may hopefully see this feature in the future.

@acolombier
Copy link
Copy Markdown
Member Author

@ywwg Are you okay with me squashing all the fixup or would you want the auto formatting to remain in a dedicated commit?

@ywwg
Copy link
Copy Markdown
Member

ywwg commented Dec 16, 2025

Can you squash most of it and leave the formatting separate? If not, more commits is better than fewer

@acolombier
Copy link
Copy Markdown
Member Author

acolombier commented Dec 17, 2025

Will do - do you want me to setup a .git-blame-ignore-revs or should I leave this as is. Arguably, this is still the early daus of QML so the blame maybe doesn’t matter so much

@acolombier
Copy link
Copy Markdown
Member Author

@ywwg I have squashed every fixup and kept the formatting as its own commit - hopefully this is enough to get this merged.

@JoergAtGithub
Copy link
Copy Markdown
Member

I just tested this an noticed that I can move decks/deck elements when Edit is not active.

I do not see the blue higlighting of the selected elements as in the video above.

Likely related to the Qt version difference... Could you share a screencast for reference?

Here is the requested screencast, that shows that moving of a deck is possible without enabling the Edit mode:

DeckMoveInNonEditMode.mp4

@acolombier
Copy link
Copy Markdown
Member Author

Thanks for reporting this issue! I had the same on Android which was quite a pain and thought this was something specific to Android and touchscreen, glad to find it was reproducible on Windows - including in my VM.

I have now pushed a fix (+some small tweak as I spotted some little nits). Could you confirm everything looks fine now?

Copy link
Copy Markdown
Member

@JoergAtGithub JoergAtGithub left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thank you!

@acolombier
Copy link
Copy Markdown
Member Author

All commit squashed - ready for merge! 🚀

@JoergAtGithub JoergAtGithub merged commit 65628e4 into mixxxdj:main Jan 12, 2026
14 of 15 checks passed
@github-project-automation github-project-automation Bot moved this from In progress to Done in QML GUI Jan 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build code quality developer experience Issues, bugs and PRs related to the development process, development environment & developer docs library preferences qml scanner ui waveform

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants