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

Improved Global rate control windows #12246

Open
Hanziness opened this issue Mar 24, 2020 · 8 comments
Open

Improved Global rate control windows #12246

Hanziness opened this issue Mar 24, 2020 · 8 comments

Comments

@Hanziness
Copy link

@Hanziness Hanziness commented Mar 24, 2020

qBittorrent version and Operating System

4.2.2 (x64) Windows 10 x64 1909

If on linux, libtorrent-rasterbar and Qt version

Not relevant.

What is the problem

Adjusting the global download/upload rate in their respective windows (brought up by clicking the global download/upload speed items in the bottom status bar) is difficult: its units cannot be changed (at least I've found no option for it) and the units are printed into the text box.
If I click into it with the mouse, the rate becomes difficult to edit: if I delete enough digits, it switches to infinity and typing anything into the text box will not trigger changes: I have to delete the infinity sign to be able to enter my limits.
Double clicking into the box will cause ####KiB to be selected (the full text is ####KiB/s) which again makes it impossible the edit the text box' value, requiring three consequent clicks to select everything (including the /s part).
If I want to enter something like 30 MiB/s, it requires me to do the calculations myself (not that difficult, but still inconvenient) to convert the value into KiB/s. The slider also seems strange to me (maybe the current limit is 100% and I can lower that with the slider?) and it is not labelled as to which end means what (its left end is infinity, for example).

What is the expected behavior

I believe these control windows could be reworked to omit the units from the text box (so they truly become just number inputs) and the units should be moved into a combo box next to the number input. I think the sliders could also be made somewhat more intuitive (maybe they are already intuitive and I just don't seem to get how they work or in what situations they are supposed to be used - like: what if I want to increase my limit?). The "No limit" could also be moved into a separate checkbox, or just have its own tick mark on the slider.

Steps to reproduce

  1. Click on the download speed area in the status bar to open the controls for the global download speed (opens in a new window)
  2. Try to set a new download speed limit (like 32.5 MiB/s)
  3. Notice that it probably wasn't that fluid of an action

Extra info (if any)

None.

@FranciscoPombal FranciscoPombal changed the title Global rate control windows are clunky Improved Global rate control windows Mar 24, 2020
@FranciscoPombal

This comment has been minimized.

Copy link
Member

@FranciscoPombal FranciscoPombal commented Mar 24, 2020

Maybe something like this?

_________________________________________________________________
|                         ____   __________                 - x  |
| ----o----------------  | 35 | | MiB/s -> |    [x] unlimited    |
|                                                                |
|                                                 [OK] [Cancel]  |
------------------------------------------------------------------
  • Numbers can be inputted via a textbox or via the slider (the latter is for quick changes where an exact value is not needed) where the allowed values go from 1 to 1024. The textbox values are bound to the slider of course.
  • The units are selected via a dropdown that allows setting between bytes/s (lol), KiB/s, MiB/s, GiB/s, TiB/s (lol).
  • Selecting the unlimited checkbox greys out all the other controls and makes the text box display
@Hanziness

This comment has been minimized.

Copy link
Author

@Hanziness Hanziness commented Mar 25, 2020

Exactly, something like that (thank you very much for the ASCII mockup by the way, I really like it!).

I'm still thinking how the slider could be made a bit more useful. Maybe if we had options for its ranges or upper bounds - something like "maximum download speed" (not necessary the best naming!) that would control its maximum (100%) value, it could be customized.

My problem with the fixed 1 to 1024 range is that if you have a 10 MiB/s budget of internet, you'll likely switch to MiB/s for units (so you can set something bigger than 1 MiB/s), but it would be quite difficult to quickly nail a value between 0 and 10 on a slider with a maximum of 1024 - essentially 99% of the slider would be "useless" to you, going beyond your physical speed cap.

Would it make the window too cluttered if we had two boxes below the slider that specify the caps? Expanding on your mockup I'm thinking of something like

_________________________________________________________________
|                         ____   __________                 - x  |
| --------------o------  | 35 | | MiB/s  v |    [x] unlimited    |
| | 0 |          | 50 |                                          |
|                                                 [OK] [Cancel]  |
------------------------------------------------------------------

Side note: since upload/download speed caps are usually not the same, it would likely be more convenient for these range controls to be independent for the download and upload speeds (so I can set my download slider to 3-8 (MiB/s) and my upload to 5-900 (KiB/s)). Handling manually entered values also becomes more tricky here: what if my slider is set to 3-8 but I enter 9? It can set the slider to the max, but that might involve clamping manually if it comes to implementation (unless the slider ignores values outside the [0, 1] range or whatever it works with).

@FranciscoPombal

This comment has been minimized.

Copy link
Member

@FranciscoPombal FranciscoPombal commented Mar 25, 2020

I also thought of another problem. ~It is not possible to set values like 9.5 MiB/s (unless the checkbox allows for decimal values, but that may no be obvious and what separator would be the valid one? dot or comma?).

I don't like the two boxes solution for the slider, I think it's too complex. How about just one extra box for decimal input?

__________________________________________________________________________
|                         ____  _______   __________                 - x  |
| ----o----------------  | 35 |.| 625 | | MiB/s -> |    [x] unlimited     |
|                                                                         |
|                                                 [OK] [Cancel]           |
---------------------------------------------------------------------------

In this example, the user is setting a limit of 35.625 MiB/s. I think allowing a max of 3 decimal places is reasonable.

@Hanziness

This comment has been minimized.

Copy link
Author

@Hanziness Hanziness commented Mar 26, 2020

Well, I believe putting an extra box for the decimal part would also complicate stuff - I've never seen two inputs used to enter a single number, be it fractional or not.

I mean, while you're right that the decimal separator is locale-dependent (and if we want it to be 100% right, it should be locale-dependent), I'm pretty sure I've met programs that simply didn't care and used . as the decimal separator (no second text box needed, and also a lot simpler to handle in code). I'd think that a regular number input should also support decimal values and standard libraries should be ready to handle locale-specific stuff if it's truly required (not from my end).

How would we go about the slider's min-max values? Maybe the minimum value can be fixed to 0 (no control needed there), but I think the maximum should have an option to be set somewhere in the application.

@FranciscoPombal

This comment has been minimized.

Copy link
Member

@FranciscoPombal FranciscoPombal commented Mar 26, 2020

I mean, while you're right that the decimal separator is locale-dependent (and if we want it to be 100% right, it should be locale-dependent), I'm pretty sure I've met programs that simply didn't care and used . as the decimal separator (no second text box needed, and also a lot simpler to handle in code). I'd think that a regular number input should also support decimal values and standard libraries should be ready to handle locale-specific stuff if it's truly required (not from my end).

I mean we can just allow decimal numbers in on text box, and not allow input if it doesn't comply with the required format, it is not that hard. My issue is is with communicating to the user that it is possible to enter a decimal number. It would not be obvious that it would be allowed. Maybe if the box supports placeholder text? That would be the ideal solution.

How would we go about the slider's min-max values? Maybe the minimum value can be fixed to 0 (no control needed there), but I think the maximum should have an option to be set somewhere in the application.

I think the slider limits should not be configurable, that's too complex. Maybe they could go up to 10000 like it is now, so that one can input 9 MiB/s easily by setting to KiB and sliding to 9000 instead? That partially solves the problem of the slider being useless for very small values.

Or maybe we can get rid of the slider completely?

@Hanziness

This comment has been minimized.

Copy link
Author

@Hanziness Hanziness commented Mar 27, 2020

I mean we can just allow decimal numbers in on text box, and not allow input if it doesn't comply with the required format, it is not that hard. My issue is is with communicating to the user that it is possible to enter a decimal number. It would not be obvious that it would be allowed. Maybe if the box supports placeholder text? That would be the ideal solution.

Yeah, the placeholder could be a great solution!

I think the slider limits should not be configurable, that's too complex.

Or maybe we can get rid of the slider completely?

If it would not be configurable, then I think it doesn't have much of a value for a lot of people. I feel like it's kind of in the same situation as communicating to the user that it is possible to enter a decimal number: while it's not that hard to "get a feel for it" while dragging the slider around, one might easily realize that it's just not great for their internet speed and they'd have to feel out what part of the slider covers their internet connection in which unit space. Take the 50 MiB/s connection speed for example: the user can either use KiB/s and go up to 10 MiB/s (the slider covering 1/5th of their speed, so no way to go above this if they're on KiB/s) with ease or if they switch to MiB/s, it will be almost impossible to set a value around 20-30 MiB/s. Same applies to people having connections up to about 100-200 MiB/s with the slider's 10-20% covering their speed and the rest of it just being useless.

I'd rather see a slider as something that ranges from 0 to somewhere around my max speed (which needs user configuration then) as that would be comfortable to use without having to switch units or having huge "dead zones" on the slider. If it's not like that, I'll just enter a speed in the text box myself - due to this nature, I personally haven't touched the slider anytime (and global rates probably don't need changes that often anyway).

If that's that case (ie. no configuration), then I'd rather vote for ditching the slider entirely.

@FranciscoPombal

This comment has been minimized.

Copy link
Member

@FranciscoPombal FranciscoPombal commented Mar 27, 2020

If that's that case (ie. no configuration), then I'd rather vote for ditching the slider entirely.

Yeah having a config option just for so we can have another redundant control does not seem like the right choice. We are in agreement then, decimal tickbox with placeholder + unlimited checkbox it is.

It would look approximately like this (in case of the place holder text, the same, but faded):

_______________________________________________
|  ________   __________                  - x  |
| | 35.625 | | MiB/s -> |   [x] unlimited      |
|                                              |
|                             [OK] [Cancel]    |
------------------------------------------------
@Hanziness

This comment has been minimized.

Copy link
Author

@Hanziness Hanziness commented Mar 27, 2020

Yep, I agree! I think that would work better and would be easier to wrap our heads around (unsure about other users' opinion though, so feel free to chime in!)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants
You can’t perform that action at this time.