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

Joystick: suggested interface improvements #617

Open
9 tasks
ES-Alexander opened this issue Dec 5, 2023 · 4 comments
Open
9 tasks

Joystick: suggested interface improvements #617

ES-Alexander opened this issue Dec 5, 2023 · 4 comments
Assignees
Labels
accessibility enhancement New feature or request face-lift ui UI related issues ux Has to do with the user experience

Comments

@ES-Alexander
Copy link
Contributor

ES-Alexander commented Dec 5, 2023

This is a single page view:
image
image
image

  • Global axes protocol settings
  • MAVLink/Cockpit/modifier icons for joystick functions
    • I've used % symbols for modifier here because I think of it as the mod(ulo) operator from Python, but we could choose something else if we can think of something clearer / more intuitive
      • one alternative is using typical symbols based on the modifier name, although I quite like the sense of "groupiness" provided by having a consistent symbol for the different modifiers, just with different numbers
  • Intuitive button icons for importing and exporting joystick and functions mappings
  • Support modifier keys (advanced version of Allow mapping shift functions for Mavlink buttons  #453)
    • first 4 modifier keys are called SHIFT, ALT, CTRL, and META by default, and after that they're just numbered / use custom names (or disallowed?)
    • we don't support multiple modifiers at once, but it is allowed to press a modifier and multiple other non-modifier buttons
      • for ease of implementation, pressing a modifier while a different one is held should override the currently active modifier with the new one (i.e. modifiers activate when pressed, and deactivate when released or when a different modifier is pressed)
    • Display tabs for modifier keys
      • pressing a button assigned to a modifier key moves to that tab, but tabs can also be changed by clicking
    • Functions mapping table for advanced configuration (/if there isn't an SVG)
      • should likely be hidden by default, in a collapsible "advanced configuration" section
      • columns are modifier keys, rows are (virtual) joystick button numbers
      • each column can be optionally counted as a MAVLink MANUAL_CONTROL shift button, except the REGULAR column
      • pressing a button/modifier-combination highlights the corresponding table cell(s), as well as the column+row headings
        • since simultaneous modifiers aren't supported only one column should ever be highlighted at a time, but several rows can be highlighted at once (corresponding to the current modifier as well as any non-modifier buttons that are held down)
      • clicking a table cell allows changing the assigned function
      • if a cell is assigned as a modifier key, the rest of the row is greyed out
      • MAVLink MANUAL_CONTROL button function assignments also show the BTNn "n" number they're assigned to, or "Sn" for shifted button functions
        • we may want a toggle switch somewhere to turn this on/off, since users likely don't care about it most of the time
    • adding a new modifier key is possible by clicking the + button in the tabs or on the right of the table
  • Support multi-joystick prioritisation
    • show as tabs on the side
    • allow dragging joysticks to prioritise
      • by default only the top priority joystick has MANUAL_CONTROL outputs enabled
      • if multiple joysticks enable MANUAL_CONTROL, outputs are determined based on prioritisation (e.g. both can press buttons, and control axes, but if one they're fighting over the state of a particular button function or axis then the higher priority one wins)
    • if keyboard and mouse support are added, they could be considered as alternative joysticks, subject to the same prioritisation/mixing (we could rename the section to Control Input Devices or similar)
    • one input device could conceivably activate a modifier function to affect the outputs of another input device, if it is configured to have control over a modifier function that the other device uses
      • this would allow a 'teacher' to have a physical switch on their controller that disables input from a 'student'
      • provides more native input mixing/sharing/coordination options
@rafaellehmkuhl
Copy link
Member

Those are some really good ideas.
I will implement at least the tabs and import/export buttons for now.

I specially love the icons in the functions names. They turn everything much more intuitive. And I'm fine with the %.

@ES-Alexander
Copy link
Contributor Author

Note: @Williangalvani is working on some potentially related/overlapping UI elements in BlueOS focused on sensor+peripheral calibration and configuration. We should probably try to create similar UIs so the two applications feel consistent/related.

@rafaellehmkuhl
Copy link
Member

Note: @Williangalvani is working on some potentially related/overlapping UI elements in BlueOS focused on sensor+peripheral calibration and configuration. We should probably try to create similar UIs so the two applications feel consistent/related.

Can you get some examples?

@ES-Alexander
Copy link
Contributor Author

Can you get some examples?

You’ll have to ask Will - I was talking to him about it, so I’m not sure if the code is committed/public yet.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
accessibility enhancement New feature or request face-lift ui UI related issues ux Has to do with the user experience
Projects
None yet
Development

No branches or pull requests

3 participants