Expand description
Provides a user interface for managing 18xx game maps and calculating the optimal revenue for each company.
See the rusty_train
binary for an example of using this crate.
§Overview
The UserInterface struct encapsulates map drawing and event handling. It is divided into several components:
- Assets: the current Map and the available Games.
- Canvas: the surface on which the map is drawn.
- State: the current user interface state (or “mode”), which defines the actions available to the user and how the map is drawn.
- Keymap: responds to keyboard and mouse input by triggering state actions.
- Controller: manages user interface elements and collects input from the user (e.g., selecting a game file to load or save).
§Events and event handlers
There are three types of events that UserInterface handles:
-
Mouse button events, which are described by ButtonPress structs and are handled by UserInterface::handle_button_press.
-
Keyboard events, which are described by KeyPress structs and are handled by UserInterface::handle_key_press.
-
“Ping” events, which are triggered by something else (e.g., a message from a task running in a separate thread) and are handled by UserInterface::ping. Pings can be sent using a PingSender, which can be obtained by calling Controller::ping_tx.
Note that event details, such as key identifiers, are defined by the ButtonPress and KeyPress structs, which use types from the GDK 3 library.
§Responses to event handlers
Each of the UserInterface event handlers (listed above) return a UiResponse value, which indicates what actions the UserInterface should take (if any) once the event has been handled. These actions are performed by UserInterface::respond.
Modules§
- Manage drawing surfaces.
- Control UI elements.
- Response to keyboard and mouse events.
- The different states of the user interface.
Structs§
- Defines the non-UI game state components.
- Describes a mouse button being clicked.
- Ordered collections of available games.
- Describes a keyboard key being pressed.
- Global UI actions, which are not specific to the current State.
- Defines the user interface.
Enums§
- Identify which part of the UI should respond to a “ping”.
- The different user interface states.
- UI responses that may be required when the UI state changes.
Traits§
- The methods that are required in order to manipulate the user interface.