MaxGUI v1.34 Released

BlitzMax Forums/MaxGUI Module/MaxGUI v1.34 Released

SebHoll(Posted 2009) [#1]
Salut!

Yep! After a collossal bug fixing and coding marathon, MaxGUI v1.34 is finally out the door, ready and waiting for you over at the 'Product Updates' page (under the 'Account' part of the site).

This is a MAJOR bug fix release, but also features a brand new MaxGUI feature: LOCALIZATION! :D

Edited from the docs:

MaxGUI.Localization is a simple yet powerful localization engine that you can use to localize your applications. Although the module is designed primarily for use with the MaxGUI toolkit, it is self-contained and so
can be imported into other BlitzMax games and applications separately without the overhead of the rest of MaxGUI.

MaxGUI users should predominantly use the LocalizeGadget() function in MaxGUI.MaxGUI (instead of LocalizeString())
whenever applicable, to quickly and easily localize your application.

In short, this new module allows MaxGUI'ers to quickly and easily localize their applications for different languages. Make sure to hit "Rebuild Documentation" to build the docs for the new module. :-) There should hopefully be a multi-lingual test-build of MaxIDE available soon which demonstates this new functionality in action. Stay tuned.

For those that were put off by the 'Release Candidate' status of the interim MaxGUI v1.33RC1 release, this module also includes the new cross-platform ScrollPanel gadget which should provide a convenient way to extend the client-area on your forms with minimum effort.



Here's the usual run-down of some of the bugs fixed in each module (see also fixes listed for MaxGUI v1.33RC1):

MaxGUI.CocoaMaxGUI v1.45
> Fixed the CanvasView setAlpha unrecognized selector error.
> Added explicit removal of NSLinkAttributeName in NSSetStyle().
> Fixed NSScroller events.
> Swapped out deprecated float selectors for their double-precision counterparts.
> Disabled a few unwanted NSTextView features.
> Fixed progress bar NSState() crash.
> Disabling a panel should now grey out all of its children.
> Fixed a few issues concerning client areas and toolbars.
> Suppressed arrow keys EVENT_GADGETCHAR filter.
> Fixed group panel initial text setting.

MaxGUI.FLTKMaxGUI v1.48
> Added icon support to list boxes (http://www.fltk.org/str.php?L1739).
> Fixed another memory corruption bug concerning incorrectly casting toolbar Fl_Group to Fl_Panel.
> Fixed group panel label background so that it is 'transparent'.
> Implemented primitive software-based pixmap scaling for panels.
> Updated FLTK library to FLTK 1.3 rev. 6852.
> Disabled XDBE for Linux as it was sometimes causing black flickering on window resize.
> (Finally) found and fixed the memory corruption bug in Fl_Menu and plugged up a memory leak.
> Fixed textarea paste crash.
> Fixed UpdateWindowMenu() crash.
> Toolbars now push down the client area of the parent window.
> More work to improve handling of WINDOW_CLIENTCOORDS style.
> Hacked in 'xdg-get-user-path' for Flu_File_Chooser using Brucey's kindly donated BaH.Volumes code.
> Added user_data() node information to speed up treeviews and event generation.
> Added maximize() and restore() methods for Fl_AWindow.
> Fixed textfields with TEXTFIELD_PASSWORD style.
> Added hover effect for non-standard push-buttons and non-editable comboboxes.
> Reworked event handling to use extremely nice and tidy C++ template system - improves mouse/keyboard event generation.
> Fixed SelectedTreeViewNode() and EVENT_GADGETMENU on treeviews.
> Fixed textfield crash upon typing.

MaxGUI.Localization v1.00
> First release.

MaxGUI.MaxGUI v1.28
> A few documentation updates.
> Added constants for Leadwerks.

MaxGUI.ProxyGadgets v1.10
> Added SCROLLPANEL_HNEVER and SCROLLPANEL_VNEVER constants.

MaxGUI.Win32MaxGUIEx v0.66
> Fixed a textarea redraw problem, and added hack to fix cursor sometimes getting stuck on 'busy' when highlighting.
> Improved handling of 'Alt' and firing of events when keys are hotkeys.
> Optimized brush transparency code by caching brushes.
> HotKey fix for modifiers.
> Disabling a panel should now grey out all of its children.
> State() is now no longer recursive.
> Toolbars now push down the client area of the parent window.
> Tidying up of some of the window sizing code.
> Attempt to fix some drawing slow-downs/bugs.
> Made use of TGadget's style field instead of additional _style.
> Fixed RequestFont() bug - thanks klepto2!


The final thing I'd like to remind users about is the following changes that were discussed and implemented following respective majority decisions that they should go ahead. I feel these make the toolkit easier to use and the behaviour clearer, but also should mean that people don't get as many suprises when switching between platforms. These were:

1. Toolbar Positioning & Client Area (toolbar now added outside client-area on all platforms)
2. Should GadgetHidden() be recursive? (now has optional recurse parameter)
3. TextField Focus Loss (thread includes solution to mimic old behaviour)

Anyone noticing, since updating, that their window gadgets have shifted down slightly from their original positions should visit link #1 above. To recap, this is because toolbars are now added outside the client-area of windows on Windows and Linux, to match Mac OS X MaxGUI behaviour. You may need to reset your gadget positioning to take this into account the first time you run your app after upgrading.

Okey-dokey - that should be everything. Have fun and be sure to post to let me know how you get on. :-)


skidracer(Posted 2009) [#2]
Nice one Seb, you rock!


Ked(Posted 2009) [#3]
Sweet and sexy! Downloading freaking now.


degac(Posted 2009) [#4]
Great news! Downloading it now

Thank you!


degac(Posted 2009) [#5]
mmm...

Please check this: FLTK (under win32), GLcube example. Do you see the cube rotating?
(I just tested and it seems be 'broken' since v. 1.3?)
PS: maybe this is the standard behaviour of FLTK under windows OR it's my hardware configuration.

I like very much the LOCALIZATION MODULE! Great addition!

PS: I looked the Localization source code: LocalizedDate() could be very shorter (and easy) if my hack for CurrentDate() was implemented by default...
http://www.blitzbasic.com/Community/posts.php?topic=84517#954993


QuickSilva(Posted 2009) [#6]
Great, thanks for working so hard on this. Looks like a really nice update.

Jason.


degac(Posted 2009) [#7]
Just a sidenote, I understand your efforts into making MaxGUI better and better, but a *simple* example for Localization would be greatly appreciated I think :)

Here my effort



slenkar(Posted 2009) [#8]
thanks seb


SebHoll(Posted 2009) [#9]
Cheers degac!

Peeps, I've uploaded the source code to MaxIDE v1.34rc3 to the 'Product Updates' page (link immediately beneath the MaxGUI updates). Binary builds for each platform will also be available there shortly.

Please check this: FLTK (under win32), GLcube example. Do you see the cube rotating?
(I just tested and it seems be 'broken' since v. 1.3?)
PS: maybe this is the standard behaviour of FLTK under windows OR it's my hardware configuration.

Haven't noticed this example before - RedrawGadget() seems to work fine for FLTK (both under Windows and Linux) which implies that the Max2D driver is working OK. Hmmmm...


degac(Posted 2009) [#10]

Peeps, I've uploaded the source code to MaxIDE v1.34rc3 to the 'Product Updates' page...


Ooohhhh...thank you!!!

RedrawGadget() [example] seems to work fine


yes, this works on my same machine.

PS: another 'translation thing' I've noticed (not important) reading the MaxIDE source...
Const ABOUT$=..
"{bcc_version} - Copyright Blitz Research Ltd.~n~n"+..
"Please visit www.blitzbasic.com for all your Blitz related needs!"

Const ABOUTDEMO$=..
"This demo features both the core BlitzMax package and optional MaxGUI module.~n~n"+..
"Please note that the MaxGUI module must be purchased separately."

and more in

- Method CheckVersion$()
- Method OpenSource:TOpenCode(path$)
- Method Initialize()

there are other messages to the user.
For the next update I think these sentences should be replaced - so to 'complete' the localization work.

In any case GOOD WORK!


slenkar(Posted 2009) [#11]
you fixed that textarea bug where it scrolls by itself in linux, thanks


SebHoll(Posted 2009) [#12]
yes, this works on my same machine.

OK, I think this appears to be a problem with OpenGL and FLTK Windows. DirectX examples (like RedrawGadget()) on Windows, and OpenGL examples on Linux seem to work as expected.

Can't work out why it isn't working though.

PS: another 'translation thing' I've noticed (not important) reading the MaxIDE source...

ABOUT$ and ABOUTDEMO$: I left those intentionally as I don't think it's a good idea for people to be able to change those quite as easily as editing an INI file. :P

CheckVersion$()/Initialize() - these strings are used before the language settings are loaded from the INI file, and before the user would even have an opportunity to select a new language, so it seems a bit pointless as they would always be in English.

OpenSource() - yep, those could probably do with being added in the next build. Cheers.

In any case GOOD WORK!

Merci!

you fixed that textarea bug where it scrolls by itself in linux, thanks

Awesome! Glad to hear.


Grisu(Posted 2009) [#13]
Thank you!
"SCROLLPANEL_VNEVER" works as it should. :)

For the listbox icon support:
Would you advise a certain icon size for best cross platform compatibility (e.g. 16x16)?


degac(Posted 2009) [#14]

ABOUT$ and ABOUTDEMO$: I left those intentionally as I don't think it's a good idea for people to be able to change those quite as easily as editing an INI file. :P


A possible solution is to keep a part of the string 'embedded' and the rest translated via Localization (ie: BlitzMax (c) BRl...)+{{translation}} - 'BlitzMax DEMO VERSION'+{{translation}}'
It should work.

And about FLTK/OpenGL: dont' worry, I use FLTK under Windows only to check if things work without turn on the Linux machine.


John G(Posted 2009) [#15]
Hi SebHoll,

On MacOSX PowerPC version of MaxGUI 1.34, I'm getting some errors like:
2009-09-09 10:49:52.399 glcube[450:717] *** -[NSView setAlpha:]: unrecognized selector sent to instance 0x270610

This same error shows up in several MaxGUI Examples also.

Thanks,
John G


SebHoll(Posted 2009) [#16]
On MacOSX PowerPC version of MaxGUI 1.34, I'm getting some errors like:
2009-09-09 10:49:52.399 glcube[450:717] *** -[NSView setAlpha:]: unrecognized selector sent to instance 0x270610

MaxGUI v1.34b has been uploaded for Mac users, to address this issue. Any early Mac adopters, please re-download MaxGUI from the 'Product Updates' page where the links have been updated. :-)

@ John G: Please let me know how you get on with this build.


John G(Posted 2009) [#17]
MaxGUI v1.34b on PowerPC MacOSX (10.5.7) works fine now. Be a few days before Mac Intel tests. Thanks much SebHoll.


DrDeath(Posted 2009) [#18]
Very nice! Just a few days ago, I was thinking about how to implement a decent localisation system in my program. Problem solved! :D

Now we only need a way to get the language the user's OS is running in – that would make the whole system just perfect!


Ked(Posted 2009) [#19]
This is a great MaxGUI update! However, I think the day when we finally get a multicolumn listbox gadget added in, THAT would be the GREATEST update ever. :) Just rambling...


xlsior(Posted 2009) [#20]
Multicolumn listbox would indeed be awesome... Especially if you they also supported images/icons. :-?


Htbaa(Posted 2009) [#21]
Well there's a Windows only solution that comes with LogicGUI that supports a multicolumn listbox, or data grids, depends on how you call them :-).


Ked(Posted 2009) [#22]
... Why would you want a Max2D solution when all three platforms have the control already?

EDIT2: Also, sorry! I thought you were talking about the one that came with ifsogui or whatever it's called. But, still, the one that's windows-only is pretty horrible to say the least.

EDIT: Some images:
Win32 (from msdn)


FLTK (with treeview (not necessary and can be removed)) (from fltk.org)


MacOS (from developer.apple.com)



SebHoll(Posted 2009) [#23]
Not promising anything, but I'll certainly look into this for you guys.

FLTK (with treeview (not necessary and can be removed)) (from fltk.org)

That's a control in FLTK 2.0 - FLTKMaxGUI uses FLTK 1.3 which is actively being developed but only has a primitive form of column support in the official Fl_Browser implementation.


Ked(Posted 2009) [#24]
That's a control in FLTK 2.0 - FLTKMaxGUI uses FLTK 1.3 which is actively being developed but only has a primitive form of column support in the official Fl_Browser implementation.

You're right! Sorry for not looking closely enough. :) That's what I get for just copying and pasting links! What do you mean "primitive"?


SebHoll(Posted 2009) [#25]
What do you mean "primitive"?

Fl_Browser columns have no mechanism for user sizing, and by the look of things, it doesn't support column titles/headings out-of-the-box either. Looking into solutions...


Mark Tiffany(Posted 2009) [#26]
I suspect that a "table" gadget like the above might actually be best implemented as a custom maxgui gadget. While all platforms will have a basic table function, people will always want to extend it, e.g. adding images in any column, editable cells, differently formatted cells, etc, etc. A custom gadget feels like the easiest way to a) implement the basics cross-platform, and b) enable people to extend out from that. I'm fairly sure the basic "table" and "cell" and "row/column headings" functionality would be easy enough to render, the question is probably more what the API will look like...


degac(Posted 2009) [#27]
About MaxIDE1.34:
- click on 'Add projects'
- it shows the Property Windows for the project
- then you click CANCEL
- you have still 'New project' in the project-tree...

To me it seems a wrong behaviour: if the user dont' want to create a new project, press CANCEL, and the project itself should be removed.
(Maybe this is 'normal' - I just noticed it now)


SebHoll(Posted 2009) [#28]
Cheers degac! Will look into this.

Although could future MaxIDE bug reports be posted in the MaxIDE thread, as it's easier for me to keep track and refer to them in the future. :-)


Ked(Posted 2009) [#29]
I suspect that a "table" gadget like the above might actually be best implemented as a custom maxgui gadget. While all platforms will have a basic table function, people will always want to extend it, e.g. adding images in any column, editable cells, differently formatted cells, etc, etc. A custom gadget feels like the easiest way to a) implement the basics cross-platform, and b) enable people to extend out from that. I'm fairly sure the basic "table" and "cell" and "row/column headings" functionality would be easy enough to render, the question is probably more what the API will look like...

IMO it would be easier to just extend and create your own table gadget in FLTK to make it work like Win32 and MacOS. From some reading that I've done, FLTK is kind of our only problem in this situation. :) Here's a custom table gadget that someone did for FLTK 1.1.3: http://seriss.com/people/erco/Fl_Table/documentation/. The first screenshot on that page is what we're really looking at.

EDIT: The table has column resizing and titling, and row resizing (which isn't necessary because when the column resizes the row should also). The columns are also clickable.


jsp(Posted 2009) [#30]

EDIT2: Also, sorry! I thought you were talking about the one that came with ifsogui or whatever it's called. But, still, the one that's windows-only is pretty horrible to say the least.



@Ked
Not sure if you meant my TListView, as I didn't see a better implementation yet in MaxGui, or did you refer to something else?

http://jsp.logiczone.de/downloads/ListViewDemo.zip


Ked(Posted 2009) [#31]
I was referring to the one in the code archives. I don't know if you submitted it or not, but it has double buffering errors, always editable rows, and an excuse for a sort method when a column is clicked.


jsp(Posted 2009) [#32]
No I didn't submit it, my ListView is not in the code archive yet. ;)


Ked(Posted 2009) [#33]
jsp, that's very nice! But it's win32 only isn't it? Was it done in MaxGUI?


jsp(Posted 2009) [#34]
Yes, windows only, sorry.
It is the standard windows listview as standalone type, implemented in MaxGui as extended ListBox (ProxyGadget).


SebHoll(Posted 2009) [#35]
There are definitely two distinct gadgets here:

1. Multi-column List Boxes
Like it is now, a gadget item represents each row, but the listbox gadget allows for these items to be displayed in a columnar format, with resizable titled columns. Each row has the option (like it has at the moment) to have an icon associated with it (shown on the left hand edge as it already is) and a tooltip for the entire row. Effectively the listbox is still made up of a collection of stacked "rows" rather than cells. The only thing you will be able to set on a per 'cell' basis, is text - all other item properties are attributes of the entire row.

2. Grid / table control
The gadget is basically a 2 dimensional matrix of cells which house other gadgets (which could be buttons, labels, panels, text-fields etc.). As Mark says, this is probably best to do as proxygadget-esque implementation.

I've been looking into top one as I'm assuming this is what you guys are after. If I'm wrong do let me know, and I won't waste any more time on it. If I do implement it though, the API will be pretty simple, as to be honest, I don't think there's any real need to overcomplicate this rather basic feature. Also, I'm long over due some MaxGUI/MaxIDE rest atm now that this release is out of the door...

Edit: *Sigh* It's a pity that BlitzMax doesn't support function over-loading.


Mark Tiffany(Posted 2009) [#36]
I probably agree this should be the approach you take, although 1 is kind of a subset of 2.

BUT...1 will meet many people's immediate requirement, and would be a handy addition, but in most instances I've ever used any form of grid, I've ended up needing / wanting to do a little more, e.g. images in more than just the first column, different formatting per column / row, images in column headings (both as the heading and as the sort indicator). My thinking is that as soon as a solution for 1 appears, you'll get more requests for 2 than you have to start out with!


SebHoll(Posted 2009) [#37]
Bug found in BlitzMax/mod/maxgui.mod/localization.mod/localization.bmx's TMaxGUILocalizationEngine.LocalizeData().

Replace Asc("o") case in the Select block with...
					Case Asc("o")
						If tmpTokenCount = 2 Then
							Select Int(tmpDate[0])
								Case 1,21,31;tmpToken = "{{st}}"
								Case 2,22;tmpToken = "{{nd}}"
								Case 3,23;tmpToken = "{{rd}}"
								Default;tmpToken = "{{th}}"
							EndSelect
						EndIf
Then build modules.

Will be fixed in next release.


r(Posted 2009) [#38]
Hello,
Please, add calendar control and date time picker in maxgui ...
This would be a great addition...


Ked(Posted 2009) [#39]
Hello,
Please, add calendar control and date time picker in maxgui ...
This would be a great addition...

Without bringing offense to you (or anyone else reading this)... you're going to have to wait in line. :) The multi-column listbox has been wanted "official" since BlitzPlus days.

EDITED.


ImaginaryHuman(Posted 2009) [#40]
Pretty much most gui apps have a cut/copy/paste access to the native clipboard, if this were added to maxgui I think it would be a good addition.


jsp(Posted 2009) [#41]
We do have at least:

GadgetCopy( gadget:TGadget )
GadgetPaste( gadget:TGadget )


SebHoll(Posted 2009) [#42]
MaxGUI v1.34c is now available for all platforms, over at the 'Product Updates' page.

Includes a few bug fixes for the reports posted against the initial MaxGUI v1.34 release, but also a few doc tweaks (so make sure to 'Rebuild Docs' after updating).

P.S. The source code for MaxIDE v1.34 has been updated to rc4, and is also available from the 'Product Updates' page.


Thareh(Posted 2009) [#43]
A bug I've found on Windows 7:
When using a tabber, the tabs will "flash" when leaving or entering the tab "button".


Thareh(Posted 2009) [#44]
Also, Sometimes when freeing a gadget I get this error (Only in debug-mode):
Unhandles exception:Attempt to index array element beyond array length

The gadget which causes this is a Checkbox button, which I've already freed using FreeGadget.
But I null check it before I try to free it again.

If Gadget <> Null
FreeGadget( Gadget )
Endif

If I free it using:
FreeGadget( Gadget )
Gadget = Null

The first time, It works.
So I guess there's a bug in the FreeGadget command.


SebHoll(Posted 2009) [#45]
Each gadget object should only be free'd once. This has been discussed a few times before and I believe it was decided that free'ing a gadget twice (once it has already been freed) is a user error - code should be written such that pointers to freed gadgets are not kept hanging around in memory.


Thareh(Posted 2009) [#46]
I only free it if it doesn't pass the Null check :P
That means, I freed the gadget and the variable doesn't become Null.
It should, right? It does for all my other gadgets.


SebHoll(Posted 2009) [#47]
I only free it if it doesn't pass the Null check :P
That means, I freed the gadget and the variable doesn't become Null.

I'm not sure I understand you properly, but remember that a gadget instance, and variable that points to that gadget instance are two different things. Nulling a variable which points a gadget clears one pointer, but if there are others pointers to the TGadget instance stored in other variables, the TGadget object instance will remain in memory.

Start a new thread in the 'BlitzMax GUI Programming' forum if you need more help.


SebHoll(Posted 2009) [#48]
Adding the about window to MaxIDE uncovered an OS X specific drawing issue involving pixmaps with an alpha channel, when they are set on a panels.

This is quite a major bug, so I thought it best to update the Mac OS X release of MaxGUI v1.34 with the fix. Hence, there is a Mac OS X specific build (MaxGUI v1.34d) now available from the 'Product Updates' page. Windows/Linux modules are unchanged from MaxGUI v1.34c and so those packages have not been rereleased.

Note: The MaxGUI v1.34d package also includes the OS X fix for RequestColor() described here.


Zeke(Posted 2009) [#49]
can you add:
Rem
	bbdoc: MaxGUI gadget Type
EndRem

before Type TGadget? :D just for ide highlighting


Thareh(Posted 2009) [#50]
Great work :)
One bug I've found in Win7 is that the tabber tabs are "flashing" when you hoover over them :P


Grisu(Posted 2009) [#51]
Will the win32 version also recieve a minor update?