WhiteMagic / JoystickGremlin

A tool for configuring and managing joystick devices.
http://whitemagic.github.io/JoystickGremlin/
GNU General Public License v3.0
313 stars 45 forks source link

Profile structure rework to support action and action tree split #468

Closed WhiteMagic closed 1 year ago

WhiteMagic commented 1 year ago

The current profile architecture is made up of a library that holds action trees that specify the actions to execute. These entries are linked to physical inputs and their relevant configurations. This works as desired for actions that operate on a singular input, however, multi-input actions cannot be supported by such a setup. Of the various options to support multi-input actions, such as a merge axis, adding the ability to share the same action across different action trees is the most sensible one.

For this reason, the profile structure needs to be modified such that the library contains a list of uniquely identifiable actions, which are then referenced in the action tree setup to construct an executable action sequence. The benefit is that this setup permits a single action to be used in more than one action tree without cumbersome synchronization and consistency checking of the action's configuration.

WhiteMagic commented 1 year ago

This evolved to entirely remove the action tree as actions themselves reference other actions that they utilize, making the tree redundant. Now only actions exist with root actions that start the collection of actions assigned to an input.

WhiteMagic commented 1 year ago

Profile structure has now been refactored, removing the old ActionTree instance and wrapping everything in an explicit tree structure. Actions now reference other actions as needed, implicitly forming a tree structure that starts at the root action associated with every InputItemBinding instance.

Furthermore, all actions are split into a data class and a QML model class, making the separation between data storage and UI representation and interaction explicit.