Skip to content
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

Optimize Interface preferences pane #527

Merged
merged 21 commits into from Jan 13, 2016

Conversation

Pegasus-RPG
Copy link
Member

Optimized the Interface preferences pane:

  • Replaced two-option drop-downs with side-by-side radio buttons
  • Replaced true/false drop-downs with single checkboxes
  • Grouped the Speed/Pitch options together
  • Reduced the minimum required size of the pane

No ConfigKey names were changed (other than an incorrect one, fixing a bug) so this is compatible with existing configurations, and all changed items were manually tested against existing config file values to ensure consistency. I also manually ensured the changed items indeed have the desired effect in Mixxx and that they get correctly saved to the config file, as well as display appropriately when loaded from it on startup.

Don't sweat the size of the diff for the .ui file. This happens mostly because Qt Designer rearranges the order of the XML elements on every save, you know, like Mixxx does with its controller mapping files. ;)

Before:
mixxx interface before

After:
mixxx interface after

Feel free to suggest rearrangements.

…o change the setting

- Fixed bug: key lock preference was not changing to the previously-stored value but resetting to default every time
…rotection" preference options to check boxes, reducing the number of clicks to set each to one.

- Consolidated spacing of the track load options to one row
- Removed erroneous documentation on the behavior of the "reset speed and pitch" control (0=off apparently, which makes more sense)
- Set "reset speed and pitch" default to 'off' (it was ambiguous what the previous default was due to the erroneous documentation)
@Pegasus-RPG Pegasus-RPG modified the milestone: 1.12 Mar 24, 2015
@daschuer
Copy link
Member

Hi @Pegasus-RPG

Thank you for the Pull request.

First of all:
The underlying issue is that the preference pain is overwhelming for new users and it is a good idea to fix it.
But we should keep in mind that every GUI change will confuse experienced uses just because they are different. So we have to be sure that the change actually improves the situation.
I am still in favor of the use of the combo boxes grid as a best practice.
Since it is a question of taste and your reasons for other controls are valid, It is fine for me to Improve the
preference pains according to your Ideas.

Here my comments driven from my taste, looking only on the screenshots:

  • The skin region is nice! This is a good pattern for all the other preferences. You can skim over the options in the left column. Overwhelming options a hidden in a combo-box, but displayed at full glance when opening it. Check boxes are used, to identify easy binary options with a guarantee for a short text in all translations.
  • Track time display: In this special case combo boxes are working, because the the labels are nouns
  • Track load options: This brakes the pattern form the other options. "Track load options" is a headline and not a preferences. Translation will likely break the view layout. Two rows with a "enabled" check box or back to combo boxes would be better.
  • Speed/Pitch options: For me this is great source of user confusion and eye irritation in the old and in the new version. It would prefer to keep the Grid layout from above and use just a vertical line. We can also use a bold header for each region or a groupbox, just a matter of taste, as long as they are equal.
  • Slider Range combo box should have full size.
  • Slider direction. A reference like Technics was helpful, as a hint that the Mixxx default is not the industrial standard. We may replace that hint with a more common phase.
  • Bend behavior: this is a important detail most user never will notice. IMHO it can be replaces with a combo box allowing to select four dedicated values.
  • Button adjustment: for dedicated row.

@ywwg
Copy link
Member

ywwg commented Mar 26, 2015

I talked to @Pegasus-RPG about this PR, and while I think it's a major improvement, we really need to have better tests for the preference system before we go monkeying around. So I've asked him to please write tests for whatever controls he wants to change before he changes them. (including first-run, load and save, pref -> ui and ui -> pref interaction). Once we have a good battery of tests, then we can come back to this PR and know that everything still works.

@Pegasus-RPG Pegasus-RPG modified the milestones: 1.13, 1.12 Nov 18, 2015
@Pegasus-RPG
Copy link
Member Author

Regarding tests, instantiating a DlgPrefControls requires many other objects (MixxxMainWindow, SkinLoader, PlayerManager, ConfigObject,) necessitating a good grasp of the testing infrastructure which I don't yet have. (How many of these can be mocked for example?)
Can one of you guys get me started with the framework? I can write all of the actual tests. (The easy part, I know.)

@ywwg
Copy link
Member

ywwg commented Nov 19, 2015

thanks for working on this. I have come around and agree that requiring tests for the prefs pane is very difficult and relies on a lot of subtle interaction. So I think the next best thing is coming up with a short list of things to check for to confirm that a prefs panel works:

  • Restore defaults should work
  • change some values, hit cancel, reenter pane. Changes should have been cancelled
  • change some values, hit apply, close and reenter pane. Changes should have been accepted
  • change some values, apply, see that Mixxx actually obeys the changes.
  • change some values, apply, exit mixxx, restart. Changes should still be reflected.

I have definitely seen changes that break one or more of these items, especially the exit/restart flow. If you can sanity check a few of the items, we can merge this in and have other people hammer on it.

I also think it's ok to fix prefs one pane at a time, even if that means we branch 2.1 with only some panes fixed

@Pegasus-RPG
Copy link
Member Author

@daschuer
Thank you for your comments.

One of my goals with this is to reduce the size of the pane so the window can fit completely on smaller screens so the Apply/Cancel buttons are still visible (and scrolling is minimized.) As a result, I did things like the Track Load Options where two of them can fit on the same line instead of adding another row. You're right, it's a heading, but the space saving I think is worth it (since not seeing the Apply/Cancel buttons is a far worse problem.) We could change that heading to "On track load:" leading the user to continue to read to complete the sentence, but I'm not sure if that will translate as well as "Track load options." What do you think?

With the Speed/Pitch options, I also thought about doing a horizontal line like under the skin options, but that again takes up an extra row. In this case, the options are all related to speed and pitch, so a groupbox makes sense and allows the heading and separator to share a row.

I struggled with the Slider Range combo box size, because the parenthetical notes would look better if it was wider, but the important parts are only three characters wide. So I made the choice to reduce it, again to save a row, being able to fit the slider direction next to it instead of under it. I added a tooltip on that as well to explain that it's the turntable default.

Bend Behavior only has two options. (I could even reduce it to a single checkbox, bend or not, but two radio buttons is clearer.)

@daschuer
Copy link
Member

One of my goals with this is to reduce the size of the pane so the window can fit completely on smaller screens so the Apply/Cancel buttons are still visible (and scrolling is minimized.)

The Apply/Cancel buttons are always visible even on my eeePC since they are on the non scrolling footer. Of cause scrolling should be avoided.

For me the whole preference window is ugly and not of high usability, because it misses a general pattern. Every single pane has a different idea how to arrange the options.
If a user is familiar with one pain, he cannot reuse his knowledge/habit on the other pains.
So if we want to make it "better" we need a few patterns we should use all the time.

I think Android has such patterns and so the preference windows are very similar.
The Gnome preferences tried also following a pattern, which works "almost".

IMHO this is more important than saving horizontal space.

With my comments I have tried to condense your ideas to some patterns.
Before discussing them step by step, I would prefer to discuss what is the final goal first.

I also think it's ok to fix prefs one pane at a time, even if that means we branch 2.1 with only some panes fixed

This would be OK for me once we have such patterns and verified they will finally fit to all panes.

What are your ideas for the whole picture?

@Pegasus-RPG
Copy link
Member Author

My plans are to look at each pane independently and use whatever GUI elements best fit the config options on each and take up the least vertical space.

@Pegasus-RPG
Copy link
Member Author

change some values, hit cancel, reenter pane. Changes should have been cancelled

This doesn't work because Mixxx (master and 2.0) currently appears to auto-apply settings changes. (We should remove the Cancel button if this is intended behavior.)

Bug filed: https://bugs.launchpad.net/mixxx/+bug/1530622

@ywwg
Copy link
Member

ywwg commented Jan 7, 2016

I think an incremental improvement in the preference pane is acceptable. I am ok with this PR in general and leaving a revamp of the whole pref system for later. Also it is not the job of this PR to fix the problem we have with not-always-instant-apply, as long as the change doesn't introduce new issues.

I'll try this out when I get a chance!

@Pegasus-RPG Pegasus-RPG deleted the preferences_cleanup branch January 13, 2016 22:19
m_pConfig->set(ConfigKey("[Controls]", "PositionDisplay"),ConfigValue(0));
// If not present in the config, set the default value
if (!m_pConfig->exists(ConfigKey("[Controls]","PositionDisplay")))
m_pConfig->set(ConfigKey("[Controls]","PositionDisplay"),ConfigValue(1));
Copy link
Member

Choose a reason for hiding this comment

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

Did you intend to change the default here?

Copy link
Member Author

Choose a reason for hiding this comment

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

Ah, no. Did it change in master at some point in the last couple years?

Copy link
Member Author

Choose a reason for hiding this comment

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

Fixed 3508c0b

@Pegasus-RPG Pegasus-RPG restored the preferences_cleanup branch January 13, 2016 22:25
// Speed auto reset combobox
m_speedAutoReset = BaseTrackPlayer::RESET_PITCH;
ComboBoxResetSpeedAndPitch->setCurrentIndex(BaseTrackPlayer::RESET_PITCH);
// Don't automatically reset the pitch & speed on track load
Copy link
Member

Choose a reason for hiding this comment

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

Comment doesn't match the code?

Copy link
Member Author

Choose a reason for hiding this comment

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

Fixed 3508c0b

@sblaisot
Copy link
Member

off; library only; Skin and library
Éteint; Seulement dans la bibliothèque; Thème et bibliothèque

@Pegasus-RPG
Copy link
Member Author

@ywwg Longer translations (see Sebastien's example above) are a good reason NOT to make prefs panes two groupboxes wide. (So there's room for them to expand horizontally.)

@rryan
Copy link
Member

rryan commented Jan 13, 2016

off; library only; Skin and library
Éteint; Seulement dans la bibliothèque; Thème et bibliothèque

I had a feeling "peau" was not the right translation :).

Pegasus-RPG added a commit that referenced this pull request Jan 13, 2016
@sblaisot
Copy link
Member

"peau" is skin like in body skin. In French we use the word "thème" for software interface skin.
Now you know a little bit of French ;)

ConfigKey("[Controls]", "ShowDurationRemaining"));
connect(m_pControlPositionDisplay, SIGNAL(valueChanged(double)),
connect(m_pControlTrackTimeDisplay, SIGNAL(valueChanged(double)),
this, SLOT(slotSetPositionDisplay(double)));
Copy link
Member

Choose a reason for hiding this comment

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

This slot no longer exists since hte function is renamed

Copy link
Member Author

Choose a reason for hiding this comment

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

Fixed 20c0908

@daschuer
Copy link
Member

@Pegasus-RPG
I am sorry, I have not done this before. The preferences using Cinnamon deskop are looking misaligned. This persists on any scaling width. Also the headline of the group-box is to near to the line above for my eyes.
Do you know a fix without a big impact?

bildschirmfoto vom 2016-01-20 23 30 05

@Pegasus-RPG
Copy link
Member Author

@daschuer The columns in the group box are independent from the ones above, so they will almost never align. The solution is to move those options to their own pane, as mentioned previously.

Regarding the group box heading, it sounds like you dislike the way Cinnamon chooses to render those. (You can see on my KDE screen shots that the text is clearly a group box heading.) We can't worry about how different desktops choose to render standard GUI elements or we'll forever be hacking things to look good in one case and messing up others.

@daschuer
Copy link
Member

The solution is to move those options to their own pane, as mentioned previously.

Will we have this before 2.1?

If not, I think it is worth to polish it for all common target systems.

The library pane looks good on all targets. It is because it has group boxes for all sections.
I think this here would be look a bit nicer if we have a bigger gap before the group box. How about introducing just this?
I am afraid the alignment can only fixed with thee group boxes, since all lines have the same starting point throughout all targets. On the other hand your three group box version looks already polished so we may need no common alignment in this case.
The only issue was the weak headline for the middle box.

Any thoughts?

@ywwg
Copy link
Member

ywwg commented Jan 21, 2016

I think Daniel's screenshot looks fine, I see no reason to make any changes.

@daschuer
Copy link
Member

For my eyes, this looks better and is consistent with the other panes.

gtk
kde

@daschuer
Copy link
Member

An other issue is, that I did not noticed that the waveform preferences are now hidden behind a [+]
Can we expand them by default or just revert the change?
IMHO they is enough vertical space in the treeview that it is not required to hide an option.

@ywwg
Copy link
Member

ywwg commented Jan 21, 2016

is that a mockup or is it a code change? It just looks like a different desktop theme

@daschuer
Copy link
Member

Both screen shots are taken form QT Designer. One with GTK style, the other with a style rendering the group box lines.

@ywwg
Copy link
Member

ywwg commented Jan 21, 2016

style choice is up to the user, it's not up to us to decide that we prefer one or the other.

@daschuer
Copy link
Member

sure ... It should only look reasonable nice on each default style our target OSs.

@ywwg
Copy link
Member

ywwg commented Jan 21, 2016

GTK does not use boxes for groups by default, therefore it would look inconsistent to add them. PR is fine as is.

@daschuer
Copy link
Member

I did not propose to use boxes = "lines around groups" in GTK. I am just trying to find a solution that looks nice with these lines and without, depending on the chosen render style.

Please compare the GTK screen-shots of today with the GTK screen shot from yesterday.

Both new ones are nicer for my eyes and are matching with the concepts used in the majority of the other panes like the library pane.

@ywwg
Copy link
Member

ywwg commented Jan 21, 2016

We already had this discussion, why are you bringing it up again?

"It feels like we're forcing things into 3 groupboxes when they don't fit. Given the expense of vertical height for this decoration I would suggest to wait on groupboxes until we split the panes."

@daschuer
Copy link
Member

I have played around with it for a while. An I did not find a good solution with a single group box. Than I realised, that we had the "Unrelated topics" issue in the other panes as well. There we have solved it by a miscellaneous group. And what works there might work here as well. So I have decided to show it here as a draft. As said any other low impact solution is welcome too.

esbrandt added a commit to esbrandt/manual that referenced this pull request Jun 18, 2017
…j/mixxx#527

Reverts the last revert, now how it should have been from the beginning, with correct markdown syntax for crosslinking on Github
esbrandt added a commit to esbrandt/manual that referenced this pull request Jun 24, 2017
@Be-ing Be-ing mentioned this pull request Nov 12, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants