Skip to content

Releases: enigma-dev/RadialGM

RadialGM-v1.0.118

01 Nov 01:42
5ca0af8
Compare
Choose a tag to compare
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.

RadialGM-v1.0.117

31 Oct 18:15
f534deb
Compare
Choose a tag to compare
Generalize Asset Views (#40)

* Create AssetView base class
* Rename BackgroundRenderer to BackgroundView
* Rename RoomRenderer to RoomView for consistency
* Move the zoom member into the base AssetView class
* Change the tileset properties spinboxes to use the same min (0) and max (32000) as GM5 and GM8.
* Disabled wrapping on the tileset spinboxes so you can't go below the min (0) and get the max (32000) because nobody will ever want the max for these properties.
* Return early and do not paint zero-area grids
* Added comments explaining why certain things are done.
* Use a pen with `Qt::MiterJoin` to prevent the edges of the rectangle-based grid from having diamond-shaped holes.
* Use a pen with `Qt::SquareCap` which gives half-pixel (actually half pen width) extension so the spots where the lines of the line-based grid overlap and the xor cancels is not 50/50 transparent or opaque.
* Offset the non-zero grid spacing by half a pixel for correct alignment.
* Fixed the offset of the line-based grid by starting its painted lines at the horizontal or vertical offset. I prefer doing it this way as opposed to just translating the entire painter for both grid methods because it can short circuit and not have to paint the entire grid in certain cases.
* Save and restore the state of the `QPainter` before returning so it doesn't affect the caller.

RadialGM-v1.0.116

29 Oct 12:40
Compare
Choose a tag to compare
Recursive Models and Room Editor Rendering (#36)

* Added a 500mb pixmap cache to the `ArtManager` class for caching large images used by the background, sprite, and room renderering widgets. That way they don't each load their own copy. Later it can be expanded with a file change monitor to automatically reload the pixmaps when they are changed on disk.
* Changed ArtManager::GetIcon to load more icons that have not yet been loaded.
* Used `QMenuView` widget by Ulrich Van Den Hekke to implement resource picker.
* Changed `BackgroundEditor` and `ScriptEditor` to use the renamed default mapper of `BaseEditor` which distinguishes it from the mapper used for mapping the resource's name in the tree model.
* Changed `BackgroundEditor::dataChanged` to forward itself to the `BaseEditor` base event.
* Made the `BackgroundEditor` save button mutate the dirty state of the default resource mapper and not the dirty state of its model.
* Changed the `BaseEditor` close event to check the dirty state of the default resource mapper and not the dirty state of its model. When not saving changes it also now clears the mappings to its tree node mapper. Finally, it will otherwise mark its mapper as not dirty now instead of its model.
* Added a map of resource type cases to to tree node field numbers to `BaseEditor.h` to facilitate looking up the submodel of a tree node.
* Added a `ResourceRenamed` signal to `BaseEditor` that is emitted when the tree node of the resource is renamed.
* Used the tree node mapper of `BaseEditor` in the room editor to map the name field on the settings tab.
* Used the resource mapper of `BaseEditor` in the room editor to map the rest of the settings that are fields of the root room resource proto.
* Added a new mapper in the room editor to map the view settings on the views tab.
* Made the current view combo box change the currently mapped view resource on the views tab.
* Tied the selection of assets in the assets list to the model shown in the asset properties view. Later this same selection model needs to be shared with the RoomRenderer as well.
* Added a status bar just under the room renderer that tracks the mouse position.
* Used an event filter to paint the transparency checkerboard pattern on the background of the room preview scroll area viewport.
* Added zooming to the room editor and room renderer.
* Put the room preview and the room property tabs into a horizontal splitter so more screen space can be used when designing levels.
* Because we decided to deprecate the transparent field from GM6 in libEGM when I fixed GMK, I removed the transparent checkbox from the sprite and background editors as well as the logic from both renderers.
* Changed the close event of the main window to close all the subwindows which triggers their save changes dialog. More work needs to be done to this to make it perfect. Even if you decline the individual dialog for each editor, there should still be a final overruling dialog that's shown if the tree model itself is dirty. That is how GM5 behaved though it could be improved upon with "Yes to All" or "No to All".
* Changed the `BaseEditor` constructor to accept the tree node instead of its subresource so editors can map the name field.
* Created the composite `ModelMapper` class that combines `ImmediateDataWidgetMapper` together with `ProtoModel` using traditional class composition. Fundies argued that since everywhere we use a model, we also want a mapper, it ultimately will save redundant code.
* Changed the `ProtoModel` to deal with recursive submodels from nested protobuf messages.
* Added the `RepeatedProtoModel` class for use with repeated submodels, such as instances that are a repeated field in the Room proto.
* Added the `TreeSortFilterProxyModel` class for filtering the main tree by resource type. It is used in conjunction with QMenuView to implement the resource picker which needs to filter by type.
* Added the `RoomRenderer` widget that uses the submodels of the Room proto to render the room layers, views, assets, grid, etc.
* Added the `ResourceModelMap` class that facilitates in finding resources by name as well as getting an object/sprite preview for the tree.
* Fixed a typo in the background renderer's grid painting algorithm. The mistake was that fundies put width where he meant height for the number of horizontal lines.

RadialGM-v1.0.115

20 Oct 07:25
fbe07cc
Compare
Choose a tag to compare
Basic Color Picking Widget (#39)

Used a Q_PROPERTY to implement the user property of the widget so that it can be mapped to models with a widget mapper. It handles transparency just fine using the transparency pattern and drawing a filled rectangle with the color on top of that. Went ahead and promoted the one in the room editor to it.

RadialGM-v1.0.114

07 Oct 20:57
737a04e
Compare
Choose a tag to compare
Chinchilla Functionality (#33)

* CodeWidget.h declares the interface for a code editing widget
* CodeWidget.cpp defines an implementation of code widget common to all other implementations
* CodeWidgetPlain.cpp defines an implementation of code widget using QPlainTextEdit
* CodeWidgetScintilla.cpp defines an implementation of code widget using QScintilla
* Changed the CMake lists and qmake pro file to link print support, but it doesn't work for some reason in the AppVeyor build
* Uses widget promotion to add the code widget to the code editor, which script editor derives from
* Now serializes with the main window settings whether tabbed view was enabled, and automatically restores that when you reopen RGM
* Changed tabbed view to use non-expanding tab headers, because not just Rusky but everyone else prefers that including me (applied when switching into tabbed mode)
* Uses qmake `CONFIG` (usable in qmake conditionals) instead of `DEFINES` (available to preprocessor/do not want) to toggle syntax highlighting enabled build
* Disabled the context help button for all windows by default using `Qt::AA_DisableWindowContextHelpButton` (this is silly, Qt should have always been that way). If we decide to use that and have a QWhatsThis or whatever, then it should be overriden on a per window or dialog basis for where we provide the behavior.
* Gave the main window's toolbar a window title "Toolbar" so that you can discern what it is when right-clicking the toolbar or menubar to hide/show docks.
* Made the "Cascade" and "Tile" actions first switch to MDI mode so the tab headers aren't still visible, because they shouldn't be
* Added actions to the "Window" menu to switch active windows. This is primarily oriented at MDI users, to facilitate switching windows when maximized, but can also be used by TDI users because the added mnemonics facilitate faster switching. Further, Notepad++ even has this behavior in its "Window" menu and it's a TDI as well, so definitely a good argument for bringing this back from LGM. The alternative I had experimented with but later decided against was switching into tabbed mode when maximizing an MDI window. I decided against that because it's unnatural and does not meet the established expectations of MDI users.
* Improved the efficiency of model synchronization with ImmediateMapper by removing and readding the widget changed notification connection while updating the model. Without this the script editor would lag because the code widget would constantly be reloaded because changing the code widget would trigger a model update which triggered a widget update and so on.
* Implemented the "Close All Others" action under the "Window" menu which closes every subwindow or tab except the active one.

RadialGM-v1.0.113

14 Sep 16:25
28f195c
Compare
Choose a tag to compare
AppVeyor New VS 2017 Image (#34)

RadialGM-v1.0.112

09 Sep 17:06
Compare
Choose a tag to compare
Fix building on GNU/Linux (#32)

RadialGM-v1.0.111

08 Sep 01:00
e70348a
Compare
Choose a tag to compare
Room Editor Prototype (#31)

Add actual prototype room editor layout.

RadialGM-v1.0.110

08 Sep 00:11
e70348a
Compare
Choose a tag to compare
Room Editor Prototype (#31)

Add actual prototype room editor layout.

RadialGM-v1.0.109

03 Sep 17:33
9211c7b
Compare
Choose a tag to compare
Preferences Dialog Functionality (#25)

* Add some basic functional preferences for help URLs and appearance
* Provide option to clear the preferences and restore the default values
* Record the name of the default style at startup for restoring defaults
* Add `Dialogs/PreferencesKeys.h` to promote default value and setting key consistency