MaxGUI v1.34 Released
BlitzMax Forums/MaxGUI Module/MaxGUI v1.34 Released
| ||
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 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. :-) |
| ||
Nice one Seb, you rock! |
| ||
Sweet and sexy! Downloading freaking now. |
| ||
Great news! Downloading it now Thank you! |
| ||
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 |
| ||
Great, thanks for working so hard on this. Looks like a really nice update. Jason. |
| ||
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 |
| ||
thanks seb |
| ||
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... |
| ||
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! |
| ||
you fixed that textarea bug where it scrolls by itself in linux, thanks |
| ||
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. |
| ||
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)? |
| ||
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. |
| ||
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 |
| ||
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. |
| ||
MaxGUI v1.34b on PowerPC MacOSX (10.5.7) works fine now. Be a few days before Mac Intel tests. Thanks much SebHoll. |
| ||
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! |
| ||
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... |
| ||
Multicolumn listbox would indeed be awesome... Especially if you they also supported images/icons. :-? |
| ||
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 :-). |
| ||
... 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) ![]() |
| ||
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. |
| ||
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"? |
| ||
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... |
| ||
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... |
| ||
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) |
| ||
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. :-) |
| ||
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. |
| ||
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 |
| ||
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. |
| ||
No I didn't submit it, my ListView is not in the code archive yet. ;) |
| ||
jsp, that's very nice! But it's win32 only isn't it? Was it done in MaxGUI? |
| ||
Yes, windows only, sorry. It is the standard windows listview as standalone type, implemented in MaxGui as extended ListBox (ProxyGadget). |
| ||
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. |
| ||
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! |
| ||
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 EndIfThen build modules. Will be fixed in next release. |
| ||
Hello, Please, add calendar control and date time picker in maxgui ... This would be a great addition... |
| ||
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. |
| ||
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. |
| ||
We do have at least: GadgetCopy( gadget:TGadget ) GadgetPaste( gadget:TGadget ) |
| ||
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. |
| ||
A bug I've found on Windows 7: When using a tabber, the tabs will "flash" when leaving or entering the tab "button". |
| ||
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. |
| ||
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. |
| ||
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. |
| ||
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. |
| ||
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. |
| ||
can you add:Rem bbdoc: MaxGUI gadget Type EndRem before Type TGadget? :D just for ide highlighting |
| ||
Great work :) One bug I've found in Win7 is that the tabber tabs are "flashing" when you hoover over them :P |
| ||
Will the win32 version also recieve a minor update? |