-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Library navigation controls #953
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
64e7dd2
28acc2e
7d6756c
38e022c
04b04e2
ac2b6c1
ac01058
522a0e4
c4a9772
bd9b492
fd7b609
4f4878e
ca45153
8073616
af91335
c779781
1964523
81dbb3d
b105407
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -354,47 +354,64 @@ ControlPickerMenu::ControlPickerMenu(QWidget* pParent) | |
|
|
||
| // Library Controls | ||
| QMenu* libraryMenu = addSubmenu(tr("Library")); | ||
| addPrefixedControl("[Playlist]", "ToggleSelectedSidebarItem", | ||
| tr("Expand/Collapse View"), | ||
| tr("Expand/collapse the selected view (library, playlist..)"), | ||
| addPrefixedControl("[Library]", "MoveUp", | ||
| tr("Move up"), | ||
| tr("Equivalent to pressing the UP key on the keyboard"), | ||
| m_libraryStr, libraryMenu); | ||
|
|
||
| addPrefixedControl("[Playlist]", "SelectPlaylist", | ||
| tr("Switch Next/Previous View"), | ||
| tr("Switch to the next or previous view (library, playlist..)"), | ||
| addPrefixedControl("[Library]", "MoveDown", | ||
| tr("Move down"), | ||
| tr("Equivalent to pressing the DOWN key on the keyboard"), | ||
| m_libraryStr, libraryMenu); | ||
| addPrefixedControl("[Library]", "MoveVertical", | ||
| tr("Move up/down"), | ||
| tr("Move vertically in either direction using a knob, as if pressing UP/DOWN keys"), | ||
| m_libraryStr, libraryMenu); | ||
| addPrefixedControl("[Library]", "ScrollUp", | ||
| tr("Scroll Up"), | ||
| tr("Equivalent to pressing the PAGE UP key on the keyboard"), | ||
| m_libraryStr, libraryMenu); | ||
| addPrefixedControl("[Playlist]", "SelectNextPlaylist", | ||
| tr("Switch To Next View"), | ||
| tr("Switch to the next view (library, playlist..)"), | ||
| addPrefixedControl("[Library]", "ScrollDown", | ||
| tr("Scroll Down"), | ||
| tr("Equivalent to pressing the PAGE DOWN key on the keyboard"), | ||
| m_libraryStr, libraryMenu); | ||
| addPrefixedControl("[Playlist]", "SelectPrevPlaylist", | ||
| tr("Switch To Previous View"), | ||
| tr("Switch to the previous view (library, playlist..)"), | ||
| addPrefixedControl("[Library]", "ScrollVertical", | ||
| tr("Scroll up/down"), | ||
| tr("Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys"), | ||
| m_libraryStr, libraryMenu); | ||
| addPrefixedControl("[Playlist]", "SelectTrackKnob", | ||
| tr("Scroll To Next/Previous Track"), | ||
| tr("Scroll up or down in library/playlist"), | ||
| addPrefixedControl("[Library]", "MoveLeft", | ||
| tr("Move left"), | ||
| tr("Equivalent to pressing the LEFT key on the keyboard"), | ||
| m_libraryStr, libraryMenu); | ||
| addPrefixedControl("[Playlist]", "SelectNextTrack", | ||
| tr("Scroll To Next Track"), | ||
| tr("Scroll to next track in library/playlist"), | ||
| addPrefixedControl("[Library]", "MoveRight", | ||
| tr("Move right"), | ||
| tr("Equivalent to pressing the RIGHT key on the keyboard"), | ||
| m_libraryStr, libraryMenu); | ||
| addPrefixedControl("[Playlist]", "SelectPrevTrack", | ||
| tr("Scroll To Previous Track"), | ||
| tr("Scroll to previous track in library/playlist"), | ||
| addPrefixedControl("[Library]", "MoveHorizontal", | ||
| tr("Move left/right"), | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The AutoDJ add to bottom/top controls aren't replaced by this PR right?
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You can use ControlDoublePrivate::insertAlias to track them on old and new name.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If I understand correctly, we'll change it to [Library] as well, and we can insert an alias without creating another ControlObject in the library controller?
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, but the alias should be created in the library controller.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done |
||
| tr("Move horizontall in either direction using a knob, as if pressing LEFT/RIGHT keys"), | ||
| m_libraryStr, libraryMenu); | ||
| addPrefixedControl("[Playlist]", "LoadSelectedIntoFirstStopped", | ||
| tr("Load Track Into Stopped Deck"), | ||
| tr("Load selected track into first stopped deck"), | ||
| addPrefixedControl("[Library]", "MoveFocusForward", | ||
| tr("Move focus to right pane"), | ||
| tr("Equivalent to pressing the TAB key on the keyboard"), | ||
| m_libraryStr, libraryMenu); | ||
| addPrefixedControl("[Playlist]", "AutoDjAddBottom", | ||
| addPrefixedControl("[Library]", "MoveFocusBackward", | ||
| tr("Move focus to left pane"), | ||
| tr("Equivalent to pressing the SHIFT+TAB key on the keyboard"), | ||
| m_libraryStr, libraryMenu); | ||
| addPrefixedControl("[Library]", "MoveFocus", | ||
| tr("Move focus to right/left pane"), | ||
| tr("Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys"), | ||
| m_libraryStr, libraryMenu); | ||
| addPrefixedControl("[Library]", "AutoDjAddBottom", | ||
| tr("Add to Auto DJ Queue (bottom)"), | ||
| tr("Append the selected track to the Auto DJ Queue"), | ||
| m_libraryStr, libraryMenu); | ||
| addPrefixedControl("[Playlist]", "AutoDjAddTop", | ||
| addPrefixedControl("[Library]", "AutoDjAddTop", | ||
| tr("Add to Auto DJ Queue (top)"), | ||
| tr("Prepend selected track to the Auto DJ Queue"), | ||
| m_libraryStr, libraryMenu); | ||
|
|
||
| // Load track (these can be loaded into any channel) | ||
| addDeckAndSamplerControl("LoadSelectedTrack", | ||
| tr("Load Track"), | ||
| tr("Load selected track"), libraryMenu); | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can't remove these old ones before we have no intuitive solution for a RMX2 style control buttons.
"[Playlist]", "SelectNextPlaylist" & "[Playlist]", "SelectPrevPlaylist"
We have to keep them forever if we have a controller with two up/down controls for library.
I do not know one, you?
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As we previously discussed, my understanding is that currently UP/DOWN maps to
slotSelectTrack(), and LEFT/RIGHT maps toslotSelectSidebarItem(). Furthermore, there are two buttons LoadA and LoadB that load the currently selected track into Deck A / Deck B respectively. Is this correct?If this is correct then the scheme that I previously suggested is perfectly intuitive. The left and right buttons will change the currently focused pane (shift+tab, tab on keyboard), and the up and down buttons will change the selected item within the currently focused pane (up, down buttons on keyboards). This is FAR more intuitive than using left and right to navigate up and down inside the left sidebar IMHO.
Shift+Left, Shift+Right buttons should be mapped to Left, Right keys on the keyboard
Shift + Up, Shift + Down buttons should be mapped to PgUp, PgDown keys on keyboard
If you feel this is unintuitive then please explain yourself in detail. Also keep in mind that though the current mapping may be more efficient in terms of button presses, it's not scalable to more than two panes in the library.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you mean four buttons, 2 x up, 2 x down? I don't know of such a controller, but even if it does exist you can just map the extra buttons as in left and right above. I don't see any big problem with this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes. The current mapping is a pain.
But I do not think that a solution that mandatory requires shift is even better. In this case I will stick with the current mapping, Since it is easier to control.
In master:
Your proposal:
I hope you see that there might be users who want to be able to map th old controls.
It is a bit annoying to step over the expanded tree though.
The proposal for the new library layout may look like this:
No Shift would be required. :-D
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I really don't understand... According to the code in
slotSelectSidebarItem(), it does exactly the same as pressing the UP/DOWN buttons on the keyboard while the sidebar has focus. It sounds like you're saying that it's doing some kind of automatic item expansion that I didn't see in the code when I looked.i.e. AFAIK what you wrote should be changed to:
In master:
Right/Left to select the sidebar item
Press the right button on the keyboard to expand the playlists item in the tree
Right/Left to choose the playlist (now that is has been expanded)
Up/Down to select the track
LoadA/LoadB to load the track
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems we at least both agree that my proposed mapping is more suitable for the new library layout.
Yeah in the case of track selection it's not required, but some features (browse for example) still need it in general, as the left pane is still a QTree.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes that bad, Interesting that I have not noticed it :-/
The idea is to add a new key, or modified key to the tree that is "open child" when there is a child and "Tab" when there is no child. Do you think that will work?
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So you agree that my proposed new mapping for RMX is in fact more convenient than the old mapping (mouse/keyboard actions no longer required for navigation), and we can safely remove the old deprecated controls from the MIDI learn wizard in order to discourage their use? Mandatory mouse/keyboard action with the current control set was in fact the main motivation for this PR.
I prefer to discuss this outside the context of a merge decision for this PR, as I want to work on the new library layout ASAP, and we seem to agree that the new proposed mapping is better in the current library layout, and MUCH better in the new library layout. OK?
In saying that (i.e. even with the understanding that if we were to add a new control it would not be inside this PR):
In the new library design, "show children" is not required for the most common actions due to the new "button bar" feature selection pane. The only feature which I'm aware of it being required for is "Browse" for navigating the filesystem, so let's assume that scenario.
In this scenario, the most common actions will be change pane and move selection. Show children will be a very uncommon action (i.e. limited to browser feature), so I feel that it's more suitable to map it to the shift key. In this case I don't see any real advantage to having the combined button, since one simply releases the shift key when they're ready to change the pane.
I strongly prefer to keep all navigation controls atomic, so that the code is simple and scalable to different designs. Changing the panes and showing/hiding children in a tree are two completely different things. If you still really want this extra control then please add it yourself in a separate PR?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes. .. and there is no reason to delay this PR for future decisions.
But lets try to find a conclusion for th new library layout as well (without delaying this)
In a somehow designed n-Pane library, we have the issue that a put "TAB" / TAB_BACK" binding cycles though all controls. This is required to control the entire GUI without mouse, but it is not that straight forward for a default controller cursor mapping where we are focused on "Load A Track".
TAB it self is handy on th other hand to directly switch between panes. This should be an ideal candiate for the DEON Shift+Back (Panes) button.
If we are looking to a complex example: #991 (comment) ,
and a user wants to load a track from an old history using the keyboard, he has to do this:
The TAB row becomes longer if we consider a button pane for AutoDJ and future features like Notepad or Lyrics or track suggestor.
This leads to a following proposal for the above action using the controller's cursor keys:
TAB / TAB_BACK could go to Shift + Right / Left
Shift UP/DOWN seams to be a good PgUp PgDown candidate.
Adopted to the DENON controller it is
This looks very convenient to me.
It does not map atomic to a keyboard key, but It reuses right, when it would be normally ignored by the widget. So we may consider to back port this behavior to the keyboard.
What do you think?
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@daschuer
OK, I see you're basically describing a kind of "GoToSelected" control, which would usually be the equivalent of Enter and then Tab on the keyboard, unless the "last" item in the selection hierarchy (e.g. a track) is selected, in which case it's just loaded into the first stopped deck without looping back to the first pane.
I'm happy to have a go at implementing this, but would like to see how it "feels" in both the old and new library layout before committing to the idea, and before deciding whether it should replace "ChooseItem" or be in addition to it, so let's put that into a separate PR.