Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
GRPC & Compiler Related Features (#37)
* Added `SettingsEditor` designer form class with the basic ENIGMA settings for compiling. * Added 4 new icons to use in the script editor's autocompletion window. One of them is an f(x) icon for functions and the other three are colored right-facing arrows for constants/variables/globals. Resources will later just use their resource icons when we add that. * Added a system cache to the main window for plugins to communicate available systems to the built in editors. This is primarily just used by the settings editor so it can populate the API combos using systems found by the GRPC plugin. * Added a static instance accessor to the main window I'd like to later remove that is used to emit a config change signal from outside the main window itself. The reason is that signals require a QObject instance. * Added a `CompileStatusChanged` signal to RGMPlugin interface so plugins can inform the main window when the compile status changes. This is how running the game disables the other buttons and forces the output dock widget visible. * Added a static mutator to set the currently selected config which for now just fires a signal on the static instance that I want to remove. This is used temporarily for the settings editor to have a save button that actually tells the GRPC plugin to tell emake to update its API targets. * Added the settings editor to the editor factory map so config resources can actually be opened. * Replaced the change game settings action with a menu for config selection under the resources menu in the same place. * Added a config selector to the main toolbar and gave it a split popup mode. * Renamed the timeline actions in the menu to be a single word instead of two words. I never agreed with GameMaker making them two words, unlike every other resource group in the tree. * Added mnemonics to the resource creation menu to facilitate keyboard navigation. * Merged `ErrorRead` and `OutputRead` signals into a `LogOutput` signal on the main window. This is to support more granularity of logging which we can later allow the user to filter. * Moved the initialization of the `TreeModel` icon map to its constructor to allow public access. This is so that later the icons can be used to represent resource keywords in the autocompletions. * Added `future_deadline` helper to facilitate in calculating GRPC deadlines in the `ServerPlugin`. * Added `tag`/`detag` helpers to the `ServerPlugin` to faciliate in tagging RPC states with async GRPC. * Added `CallData` to manage the common state of async RPC calls in the `ServerPlugin`. * Added `AsyncReadWorker` to drive the state machine of an async streaming read RPC in the `ServerPlugin`. * Added `AsyncResponseReadWorker` to drive the state machine of a non-streaming async read RPC in the `ServerPlugin`. * Changed all RPC stub implementations in `CompilerClient` to async using derivations of the above classes, helpers, and abstractions. * Added `CompilerClient::ScheduleTask` to schedule an RPC to be started and processed asynchronously. * Added `CompilerClient::UpdateLoop` for processing RPC calls asynchronously one at a time (for now). This is triggered regularly by a QTimer with an interval of 0 ms. * Added a list of search paths for emake that looks for executable files in known locations. This means RGM can now find emake if it's directly next to it in the filesystem. * Changed the `ServerPlugin` destructor to call `QProcess::close` instead of `QProcess::terminate` because the latter does not work for console programs that do not run an event loop on Windows. * Added a static keyword API to `CodeWidget` that can be used to communicate keywords to QScintilla for syntax highlighting and autocompletion.
- Loading branch information