wxENIGMA was an attempt by User:Goombert to create a C++ IDE for ENIGMA using wxWidgets as the GUI presentation layer. It went quite well at first and was being partially developed with the help and guidance of User:JoshDreamland and was able to compile empty projects with ENIGMA natively through compileEGMf.
The following wxSmith issues create limitations in building an IDE using wxWidgets:
- Blocker wxSmith does not allow the normal wxToolBar at any level of the layout except the root of a wxFrame, so if you try to add it to a wxPanel it will remove it unless you use the "Custom" widget which is cumbersome. This makes it difficult to add toolbars for things like the room and path editors, or even the search filter on the project tree.
- Important wxSmith supports wxStyledTextCtrl only if you use the "Custom" widget way, which is not as easily maintainable. There are patched versions of wxSmith floating around on the internet, but the real one should probably just be patched already. I don't consider this a blocker because we are only going to use that thing in like two places (script editor and shader editor).
- Important wxWidgets has no baseline alignment, which is not that big of a deal, but honestly that's how a label and a textctrl should truly be aligned in any proper widgets framework.
- wxGridBagSizer throws an error at runtime when setting the growable columns property from the designer. The reason is because the codegen calls AddGrowableCol directly after the constructor. wxGridBagSizer requires that all columns exist first. I was using this layout on the preferences dialog to align the documentation and website URI settings, but was actually able to change it to a wxFlexGridSizer because the layout doesn't really need specific column/row placement, but if we do ever want to use this layout elsewhere this problem will get in the way. wxFlexGridSizer does not exhibit this problem and is simpler to use.
- wxAUINotebook does not offer a way of configuring the default tab layout in the designer. I can't have it opened up with tabs split automatically for me, the splitting must be done manually with code. Also, the split functionality is not robust in that you have to call it twice if you want the one tab to be its minimum size and let the other tab take up the remaining space. It's not possible to add it to "Extra code" in the designer either because it puts that code before the tabs are created causing an error:
- mainAuiNotebook = new wxAuiNotebook(this, ID_AUINOTEBOOK1, wxDefaultPosition, wxDefaultSize, wxAUI_NB_DEFAULT_STYLE);
- You can not add a bitmap to wxMenu, only to wxMenuItem, which is a long-time bug in wxWidgets itself. A workaround is to use a wxMenuItem for the wxMenu with child wxMenuItems. As far as I can see though, wxSmith only allows wxMenu to have child menu items meaning the XRC has to be hand modified to do this. The only menu we particulary need it in is the events menu, which is going to be automatically generated, so although this is an issue we are not effected too much.
- wxStdDialogButtonSizer, at least in the wxSmith designer, provides no setting for the border of its child buttons, only for itself. Since it apparently defaults to 5, this ends up looking like each button has 5 padding around it (making the total gap between adjacent buttons 10) instead of looking like spacing. You can even see this in the Code::Blocks dialogs, the Ok/Cancel buttons seem to be too far apart compared to their gap between the dialog window border. It would be nice if wxSmith showed the buttons as children in the resources tree/view so their borders could be manually configured. It would also be nice if it respected the default border I have of 0 maybe, but it seems like that may actually be wxWidgets not respecting it since the border isn't specified and it still sets it to 5 for the buttons.
- Edit: It actually claims in the wxWidgets manual that the border is derived from the platform settings. So I guess the solution would be to make all dialogs and frames use that same setting for their border if we can find a way.
- The delete key works in the designer but not if you select the widget to be deleted in the resources tree/view.
- The resources tree/view of all the widgets does not have a context menu, I can't right click and rename a widget or delete it. It also doesn't support drag and drop to move an entire group of layout items at once. Cut, copy, paste do work but you have to click on the edit menu after selecting the item in the tree because it only works if the designer area is in focus.
- Can only select 1 widget at a time, thus it's hard to move a group of widgets somewhere else even with cut, copy, and paste.
- Toolbars, Menubars, and Statusbars do not show in the designer "Preview" dialog.
- Ironically, I don't think the designer preview dialog uses a sizer at the root of its layout. This makes previewing editors like the object editor, that are supposed to expand horizontally, difficult. You have to compile the project to preview how they resize horizontally.