wxMax vs MaxGui ? (comparison)

BlitzMax Forums/Brucey's Modules/wxMax vs MaxGui ? (comparison)

Beaker(Posted 2008) [#1]
How does each GUI library compare? What are the advantages and disadvantages of each?

How well does wxMax work with Blitz3Dsdk? or miniB3D? Any caveats?

Which is simplest to use?

I understand that wxMax has much more to offer, but what if I don't need all the extra gadgets etc? Is it overkill, and more complicated?

Might be nice to drum up a comparison table so it's easier to decide which is best for the project in mind.

I know many people complain about Blitz's take on GUIs (b+ and now maxgui) but I've always enjoyed using them and not really been that troubled by what is missing.

Does wxMax support any form designer? or XML layout format?

Finally, I think it's great that Brucey has given users another option. So thanks for that.


plash(Posted 2008) [#2]
How well does wxMax work with Blitz3Dsdk? or miniB3D? Any caveats?
Uhh.. I'm not sure if anyone has tried to use minib3d or the sdk yet! They would probably both work though, with minor.. hacks.. :D


Which is simplest to use?
In my opinion, wxMax is. It's much cleaner, all you have to do is create a wxApp, a Frame and connect a few events.
Button example (taken from the tutorials, no clue what happened to the format; when I posted it it got all buggered!):


At first glance wxWidget's sizers can be very confusing, but they are a snap when you use wxFormBuilder (no sizers in the example above).

I understand that wxMax has much more to offer, but what if I don't need all the extra gadgets etc? Is it overkill, and more complicated?
No, its a very straight-forward design. You wont have a bunch of overhead if your not using all the features. In the example you can see that when we need a feature we simply Import it. So, for example, if you don't need a button on your frame you just don't Import it.

I know many people complain about Blitz's take on GUIs (b+ and now maxgui) but I've always enjoyed using them and not really been that troubled by what is missing.
Some applications just need more features ;)
MaxGUI isn't all that bad, the event handling is just fine, unless your writing a huge application, in which case its a pain in the arse. I mainly came here because everything WORKS cross-platform, and because it actually has a good form designer.

Does wxMax support any form designer? or XML layout format?
Both, XRC and wxFormBuilder, wxCodeGen (specific to wxMax) can turn a wxFormBuilder project into code.

Overall, I'd say wxMax and MaxGUI are geared towards different type of people. For the people that need tons of crazy features and prefer object oriented programming wxMax is the one, for people who are just playing around on Windows or Mac (arhh FLTK is evil) or those who prefer the classic blitz-style programming MaxGUI will do.


slenkar(Posted 2008) [#3]
is there a list of stuff that wxmax has got that maxgui hasnt got?


Brucey(Posted 2008) [#4]
Here's a list... feel free to disagree (Seb) :-)
Control                       Description                              wxMax           MaxGUI

aboutbox                   Native/Custom About box.                      X         Build your own.
aui                        Advanced UI Framework with                                  
                             custom layout/floating frames.              X              -
bitmap button              Image button with state support.              X        Button with image.
bitmapc combobox           Combobox supporting images.                   X              X
button                     A button.                                     X              X
calendar ctrl              A calendar control.                           X              -
checkbox                   A Checkbox.                                   X              X
check listbox              A checkable listbox.                          X              X
choice                     A non-editable combobox.                      X              X
choice book                A tabber using a combobox for page                            
                             selection.                                  X         Build your own.
choice dialog              A custom dialog with a combobox.              X         Build your own.
collapsible pane           Custom button/collapsible panel.              X         Build your own.
colourdialog               Colour chooser dialog.                        X              X
colour picker              Control for launching a colour dialog.        X         Build your own.
combo box                  A Combobox.                                   X              X
date picker                A date picker.                                X              -
dialog                     A standard dialog.                            X              X
dir dialog                 A dir selection/RequestDir dialog.            X              X
file dialog                A file selection dialog.                      X              X
file picker                A file picker.                                X         Build your own.
find replace dialog        A find/replace dialog.                        X         Build your own.
flat notebook              Very customizable tabber, with styles.        X              -
font dialog                A font selection dialog.                      X              X
font picker                A font picker.                                X         Build your own.
frame                      A standard Window.                            X              X
gauge/progress             A progress bar.                               X              X
generic dir                A customizable dir selection dialog.          X              -
canvas                     A canvas.                                     X              X
htmlhelp controller        Dialog for displaying html-help                            
                             (eg. chm etc)                               X              -
htmlwindow                 An HTML view.                                 X              X
hyperlink                  Hyperlink control.                            X         Available in MaxGUI.ProxyGadgets
knob                       Twistable knob control.                       X              -
led panel                  LED display.                                  X              -
listbook                   Tabber with listbox page selection.           X         Build your own.
listbox                    A basic 1-column listbox.                     X              X
listctrl                   A multi-column listbox.                       X              -
mdi                        Parent/child MDI windows.                     X              -
menu                       Menus.                                        X              X
menubar                    Menu bar.                                     X              X
message dialog             A Notify dialog.                              X              X
miniframe                  A floating toolbar style window.              X              X
notebook                   A standard tabber.                            X              X
number entry dialog        A dialog for number entry.                    X         Build your own.
panel                      A standard panel.                             X              X
password entry dialog      A dialog for password entry.                  X         Build your own.

page setup dialog          Printing page setup dialog.                   X              -
preview frame              Printing Preview window.                      X              -
print dialog               Printing Dialog.                              X              -

progress dialog            A progress dialog.                            X         Build your own.
property sheet dialog      Custom dialog for showing settings.           X         Build your own.
property grid              An advanced property grid.                    X              -
radio box                  A box with radio buttons.                     X              -
radio button               A radio button.                               X              X
sash window                A panel with a draggable sash on any side.    X              -
scintilla editor           Advanced text editor control with                            
                             line numbers, folding, colouring.           X              -   
scrollbar                  A scrollbar.                                  X              X
scrolled window            A scrollable panel.                           X         Build your own.
search ctrl                A control with search button, text box and              
                             cancel button.                              X         Build your own.
sheet                      A table/spreadsheet/grid control              X              -
slider                     A slider.                                     X              X    
spin button                Up/Down buttons.                              X              X
spin ctrl                  Text field and spin button.                   X         Build your own.
splash screen              Custom splash screen.                         X         Build your own.
splitter window            Draggable splitter bar.                       X              -
static bitmap              A static image control.                       X              X
static box                 A static box.                                 X              X
static line                A static line.                                X              X
static text                Static text/label.                            X              X
statusbar                  Window status bar.                            X              X
std dialog buttons         Native dialog button layout - HIG savvy              
                             OK/Cancel/Save etc button layout.           X              -
symbol picker dialog       Symbol chooser dialog.                        X              -
textctrl                   A text field.                                 X              X
text entry dialog          A dialog for text entry.                      X         Build your own.
tipprovider                A "tip of the day" dialog.                    X              -
togglebutton               A toggle button.                              X              X
toolbar                    Toolbar (horizontal/vertical/anywhere).       X              X
toolbook                   Tabber with toolbar page selection.           X         Build your own.
treebook                   Tabber with treelist page selection.          X         Build your own.
treectrl                   A tree list.                                  X              X
vscrolledwindow            A variable row height/virtual scrolling              
                             panel.                                      X              -
wizard                     A configurable wizard dialog.                 X              -


Other non-gadget things that come with wxMax :

GDI support - ie. native drawing onto windows etc.
Native printing.
Date/Time functions - including date range/span calculating.
PDF creation.
Cross-platform Serial I/O API.
JSON read/write
File History support - include your own "Recent Items" menu.. it will take care of populating it.
File-system functions.
File Config - transparently store app settings in registry or ini-type files.
Standardized Localisation
Midi
URI functions
Zip/BZip2/Rar stream handlers.


plash(Posted 2008) [#5]
Hehe.. BTW the list is much more readable if you copy it into a text editor (at least it does with gedit).


SebHoll(Posted 2008) [#6]
Hey - that's a comprehensive list.

The only thing I'd like to add to MaxGUI's list of supported features (although, again feel free to disagree with me) are:

> hyperlink (included in MaxGUI.ProxyGadgets)
> dir dialog (do you mean similar to BlitzMax's RequestDir()?)

Other than that, this list could be really handy to future GUI coders. Nice work. :P


plash(Posted 2008) [#7]
The only thing I'd like to add to MaxGUI's list of supported features (although, again feel free to disagree with me) are:
...
> dir dialog
That's not necessarily true, MaxGUI doesn't feature the RequestDir() function, BRL.System does.
Whereas wxMax has it's own, separate, features for getting a file/folder (with many more options).


Yahfree(Posted 2008) [#8]
http://blitzbasic.com/Community/posts.php?topic=78558

Minib3d support in wxmax is questionable, (seems to work in mac). But raw OGL works. I like wxmax more than maxGUI for two main reasons:

1. Its object oriented
2. It has a larger collection of gadgets, ect.


Brucey(Posted 2008) [#9]
I'm not sure what that ProxyGadgets stuff is for?


Brucey(Posted 2008) [#10]
How well does wxMax work with Blitz3Dsdk? or miniB3D? Any caveats?

The only caveat I know of, is troublesome fullscreen graphics context handling - I've had difficulty with input (key/mouse) event capture once you go fullscreen. Graphics Context in a window works well though.

But wxWidgets is aimed more for applications than games, and not many apps need to go fullscreen graphics, as far as I know.

MiniB3D runs fine using a wxGLCanvas - which is just a GL context (there are some examples around the forum and in the samples of doing GL things in wxMax).

Blitz3Dsdk is different though. I did a proof of concept a long time ago, and it was drawing in the window, but at the time there were event issues with the SDK - I'm not sure if those were fixed *in* the SDK though - I don't have it.
You can access the HWND of a window/panel via a method call, which I believe is enough to attach an SDK context to.


Brucey(Posted 2008) [#11]
Which is simplest to use?

Well, that all depends. ;-)

If you are used to the MaxGUI "style" of coding, where you are presented with a rather long list of Functions to do everything with, then obviously you will find MaxGUI easier to use.

If you are open to learning a bit of Object Orientation, then the structure of wxMax itself should make the task of building and controlling your GUIs much more simple. For example, a wxFrame extends a wxTopLevelWindow extends a wxWindow etc... It's all pretty logical.

The event system in wxMax is very much more under *your* control. You "Connect" a callback function to a particular event, and wait for the system to call it. There's no need for long Select/Case or If/Then/Else statements. You will instead end up with a group of functions which you will generally give useful names to - OnClick, OnListItemSelect, etc.

Yes, wxMax is much larger... so at first you might feel a bit lost with the amount of functionality at your disposal. But of course, that is a big advantage, since you have all that at your finger tips. There are a few large sample apps, as well as a comprehensive tutorial to help you get to grips with it.


Brucey(Posted 2008) [#12]
Does wxMax support any form designer? or XML layout format?

Like Plash mentions above, wxMax comes with a code-generator called wxCodeGen, which is a small app designed to read various GUI-designer project files.
Currently it supports wxFormBuilder, a very good open-source GUI-designer.

wxCodeGen itself is built from a wxFormBuilder project (yes, it can generate itself!), and is a good example of how one might integrate generated code into a proper application. The app also shows how to use the localization, drag-and-drop, file-config support, and other wxMax functionality :-)

wxWidgets can utilize an XML layout format called XRC. I'm currently integrating this into wxMax. There are some samples available that show it working. It's actually an excellent thing I've found, since you simply don't need half the code you would normally use to create an application - only code to implement event handling and the likes.


SebHoll(Posted 2008) [#13]
I'm not sure what that ProxyGadgets stuff is for?

It's a supplementary module included with the drivers, that will house any gadgets that have been officially wrapped to extend the functionality.

The only gadget it has, atm, is the hyperlink gadget, which can be used in the same way as all other MaxGUI gadgets, but internally (and as far as the MaxGUI drivers are concerned) it is a label emitting mouse events.

I'm currently adding a splitter gadget to the module, which some may also find helpful.


Beaker(Posted 2008) [#14]
The reason I ask about blitz3dsdk and miniB3D in wxMax is because I am going to be making a 3D application very soon (not fullscreen) which may very well use one or both of the 3D sdks. I am aware of the key input issues with blitz3dsdk (in conjunction with maxgui) and have fixed them (I hope). If I were to switch to wxMax I wouldn't want any similar show stoppers to get in the way, and also don't want to paint myself into a corner with maxgui (or wxMax even).

Thank you for your responses. Bruceys comparison list certainly makes for interesting reading. It definitely helps swing it that there are options for form designers.

I'm going to download wxMax and take a look to see what I can do. Thanks again.