Please read the history bottom-up. Note that the history might list some features that were implemented in beta versions and removed later but are still mentioned here. This history is a log of the programmer so that he can look up what has been done/tried/modified. Things that were implemented and removed later are marked with [VOID]. Version 2.1 (24-Oct-21) - Change: Updated documentation - Fix [macOS/PPC]: Setting Listviewcolumn.Hidden didn't hide the listview column (reported by Michael Rupp) - Fix [macOS]: Listview.DoubleClick is no longer generated for double clicks on the listview header when in dataview mode (reported by Dave C.) - Fix: Dynamically adding and removing widgets from scrollgroups didn't work; note that when adding new widgets to a scrollgroup, you need to pass the scrollgroup as the parent to moai.CreateObject() (reported by Sasha Pont) - Fix [Amiga]: Dialog.EndModal() led to a memory leak when called from the event handler of one of the dialog's children, e.g. a button (reported by Michael Rupp) - Change [Amiga]: For consistency with the other platforms, underline shortcuts are also supported for Text class on Amiga systems now (requested by Michael Rupp) - Fix [Amiga]: Sliders couldn't be controlled via keyboard shortcuts (reported by Michael Rupp) - Fix [Windows/macOS/Linux]: StringRequest() didn't support the #NUMERICAL mode (reported by Michael Rupp) - Fix [Windows/macOS/Linux]: Setting Hyperlink.URL didn't automatically update the label in case no custom label was set (reported by Michael Rupp) - Fix [Windows/macOS/Linux]: Group.Remove() didn't work correctly for colgroups (reported by Michael Rupp) - Fix: moai.CreateObject() didn't accept framed colgroups as the parent (reported by Michael Rupp) - Fix: Escape sequences like \n and \t weren't converted to the correct character code when the MOAI.I18N attribute was set (reported by Michael Rupp) - Fix [Amiga]: Hollywood versions 7.x and 8.0 crashed when trying to load RapaGUI 2.0 when the script was requesting ISO 8859-1 mode (reported by Petteri Valli) - Fix [Linux]: Setting Popfile.File didn't show the new path in the widget (reported by OffseT) - Fix [Android]: Textview.Text returned an empty string on Android if Textview.Styled was set to FALSE (reported by Petteri Valli) Version 2.0 (17-Jul-21) - Change: Updated documentation - New [Examples]: Added ContextMenu, Dynamic5, Fonts, Localization, Sort, Splitter and Weight examples to show and test some new features of RapaGUI 2.0 - Change [Examples]: Made most examples DPI-aware by setting Hollywood 9's new "DPIAware" tag to TRUE in the @OPTIONS preprocessor command - Change [Doc]: Applicability is now clickable so that beginners can get a better idea of what it's about (requested by Michael Rupp) - Change: Amiga installer will now also copy the plugins for all platforms to Hollywood's linker plugins directory so that they can be easily linked to executables (suggested by kas1e) - Change [macOS]: Dropped support for the 32-bit x86 platform; since RapaGUI on Intel Macs requires macOS 10.10 now it isn't possible to support 32-bit x86 any more because 10.10 doesn't even run on 32-bit x86 Macs at all - New: Listview.First has an applicability of SG now (requested by Michael Rupp) - Fix [Windows/macOS/Linux/Android]: Group.HorizSpacing now defaults to 4 like on AmigaOS (reported by Michael Rupp) - Fix [Windows]: Ampersands weren't correctly handled in text class in case Text.Frame was set to FALSE (reported by Michael Rupp) - Fix [Amiga]: Group class handled Group.Padding even when Group.Frame was set to FALSE (reported by Michael Rupp) - Fix [Amiga]: Horizontal rows of buttons weren't layouted correctly in case one or more of them had a fixed width or a different weight setting than the others (reported by Michael Rupp) - Fix [Windows]: Window.ActiveObject didn't return the correct object in case a listview in dataview mode was the active object (reported by Michael Rupp) - New: Listview.GetEntry() accepts an optional argument now; if this is set to TRUE, Listview.GetEntry() will also return the identifier of the brush/icon used for a listview item or -1 if no brush/icon has been set for this item; note that the identifier is only returned for columns that have the "Icon" tag set to TRUE (requested by Michael Rupp) - Fix: moai.FreeObject() couldn't free menu objects that had previously been attached as a context menu (reported by Thomas Igracki) - Change: Area.ContextMenu has an applicability of ISGN now; this means that you can now also set up a notification on the attribute; in that case, your event handler will be called immediately before RapaGUI shows the context menu; you can then return either FALSE for no context menu or use moai.Set() to set the desired context menu to show; this is very useful for customizing the context menu depending on where the right mouse button has been clicked; the position will be passed to your event handler; in case you are listening to Area.ContextMenu, your event handler will also be passed some additional information depending on the context menu's parent widget: for listview widgets, RapaGUI will pass the row and column of the item below the mouse pointer; for treeview widgets RapaGUI will pass the id of the item below the mouse pointer and for texteditor widgets, the cursor position below the mouse pointer will be passed - Change: The "Sorted" special position identifier for Listview.Insert() is obsolete now; when a listview has a column that is used for sorting, all new entries are automatically sort-inserted and the insert position is ignored; also, Listview.Move() and Listview.Exchange() can no longer be used for listviews that have a sorting column because the order of elements in a listview that has sorting activated is solely determined by the sort order and items cannot be positioned at arbitrary indices - New: Added Listviewcolumn.SortOrder [ISGN] attribute; this can be used to set the sorting order of a listview column; it can be set to either "Ascending" (the default) or "Descending"; furthermore, you can also listen to this attribute to get notified when the user changes the sorting order by clicking a listview column's header - New: Added Listview.SortColumn [ISGN] attribute; this attribute allows you to set which column should be the current sorting column; users can also click on the listview's header to change the current sorting column in which case you'll be notified in case you are listening to Listview.SortColumn - Change: Listviewcolumn.Sortable is no longer restricted to just a single column; you can set it to TRUE for as many columns as you wish - Fix [Windows/macOS/Linux]: Sortable listviews in dataview mode didn't really work correctly; the item's indices were returned and handled in the completely wrong order - New: Added Listview.GetColumnID() to find out the identifier of a listview column - Change: Listviewcolumn.Icon, Listviewcolumn.Checkbox, and Listviewcolumn.Editable have an applicability of IG now instead of just I - New: Added Listview.Columns [G] attribute to query the number of columns in a listview - New: Added Listview.InsertColumn() and Listview.RemoveColumn() methods to dynamically insert and remove listview columns; it's no longer necessary to re-create the whole listview when you need to change its number of columns; note that these methods are only available "Listview" and "Dataview" mode; the default "Listbox" mode doesn't support multiple columns so you might have to explicitly set Listview.ForceMode if you want to add and remove columns on-the-fly - Fix [Windows/macOS/Linux]: Setting Area.Hide to TRUE didn't hide the horizontal/vertical spacing applied by the parent group object (reported by Michael Rupp) - Fix [Windows]: Area.Tooltip didn't work with Listview and Treeview in dataview mode (reported by Anbjorn Myren) - Fix [Amiga]: Setting XXX.DropTarget multiple times caused a crash (reported by Paul Bloedel) - New: Added Treeview.ClickColumn [GN] attribute; this works in the same way as Listview.ClickColumn and can be used to find out the column that the user has last clicked - Fix [Windows/macOS/Linux]: Area.ContextMenu didn't work with Treeview class when Treeview.ForceMode was set to "Dataview" and with Listview class when Listview.ForceMode was set to "Dataview"; note that "Dataview" is also automatically chosen by RapaGUI in case certain features require it, e.g. multiple columns in a TreeView widget will automatically activate dataview mode (reported by Thomas Scheller) - Fix [macOS]: Listviewcolumn.Hidden didn't work (reported by Michael Rupp) - New: Added Radio.GetItem() and Radio.SetItem() methods; these methods can be used to get and set the labels of individual radio buttons - New: Added Radio.Columns [I] attribute; this allows you to set the number of columns to use when laying out the radio buttons (defaults to 1); note that on Android, you cannot have complex radio layouts that use columns and rows; you can either have all radio buttons appear in one row (horizontal layout) or in one column (vertical layout) (requested by Sandro Barbagelata) - Change [Windows/macOS/Linux]: The default step size for Slider class is 1 instead of 10 now so that Windows/macOS/Linux are consistent with MUI; you can use the new Slider.StepSize attribute to set a different step size (reported by Michael Rupp) - New [Windows/macOS/Linux]: Added Slider.StepSize [ISG] attribute; this can be used to set the step size to use when clicking outside the thumb (requested by Michael Rupp) - New: Added Slider.Drag [I] notification; this will trigger whenever the user starts to drag a slider's thumb; this is the counterpart to the Slider.Release [I] notification (requested by Michael Rupp) - New [macOS]: Added Application.WindowMenu [I] attribute; this attribute allows you to set the title of macOS' standard window menu to a custom one (requested by Michael Rupp) - New [macOS]: Added new types "About", "Quit", "Help", "Preferences" to the Menuitem.Type attribute; by setting a menu item to one of these types, RapaGUI will move it to its appropriate position according to the host OS' styleguide (e.g. the "About", "Preferences", and "Quit" menus are part of the program menu on macOS); on non-macOS systems, those new types don't have any effect and RapaGUI will just ignore them; there's also Menu.Type which can be set to "Help" on macOS to set a menu as the standard help menu (requested by Michael Rupp) - Change [Amiga]: Pageview.PlainBG defaults to TRUE now if Pageview.Mode has been set to "None"; this is for consistency with the Windows/Linux/macOS appearance (requested by Michael Rupp) - New: Radio.Title also has an applicability of ISG now instead of I; the same restrictions as with Group.FrameTitle apply (requested by Sandro Barbagelata) - New: Group.FrameTitle has an applicability of ISG now instead of I; this allows you to change a group's frame title anytime; note that this requires a newer MUI version; with MUI 3.8, Area.FrameTitle is only I (requested by Michael Rupp) - New: Added Textentry.ReadOnly [I]; if this is set to TRUE, the text in the widget won't be editable at all (requested by Michael Rupp) - Fix [macOS]: Combobox.Value didn't trigger when selecting an entry of the pre-defined list of entries - Fix [macOS]: Listview.AbortEditing and Treeview.AbortEditing were never triggered when aborting editing - Fix [macOS]: Text in Listview and Treeview columns could get cut off when using columns that automatically adapt their width to the largest entry - Fix [macOS]: Single column listviews often showed a scrollbar when there was nothing to scroll at all - New: Added Listview.RowHeight [I] attribute; this allows you to set the row height; this is normally not necessary because it is calculated automatically but when using icons in "DataView" mode on Windows and macOS it might be necessary to set this attribute because otherwise the icons could get cut off - Fix [Windows/macOS/Linux]: Crash when calling Area.Redraw() on widgets that can't be drawn like widgets of Rectangle class (reported by Samuel Crow) - Fix [Windows/macOS/Linux]: Treeviewleaf.SetItem() was only able to change the text of items in the first column (reported by Sandro Barbagelata) - Change: Toolbar.ViewMode defaults to "Gfx" now because this is the standard toolbar look - New: Added Window.SizeChange [N] attribute; this allows you to listen to window size changes; whenever the event callback is triggered, the "Width" and "Height" member fields will contain the new window size (requested by Lazar Zoltan) - Fix [Windows/macOS/Linux]: When changing the size of a Hollywood widget that was embedded inside a widget of type Scrollgroup, the scrollgroup's size was reset to its minimum size (reported by Petr Kaderka) - Fix [Windows/macOS/Linux]: When listening to Window.Activate, the "TriggerValue" message member was always set to TRUE - Fix [Windows/macOS/Linux]: Listview.Insert() in modes "Listview" and "Dataview" wasn't entirely consisted with the Amiga version when inserting entries before the active entry, causing the active entry to be shifted down - New: Hollywood class supports Hollywood's SetPointer(), HidePointer(), ShowPointer(), and MovePointer() functions now; this allows you to change the mouse pointer that should be shown when the mouse is over a widget of type Hollywood class (requested by Paul Bloedel) - New [Windows]: Added Listview.SystemTheme [I] attribute; this can be used to enable the Windows system theme for a listview control by setting it to TRUE (default is FALSE); note that this is only supported case the listview is operating in "Listview" mode (see Listview.ForceMode for details) - New [Windows/macOS/Linux]: Added Application.ContextMenu [I] attribute; this new attribute can be used to install a context menu for the application's tray icon; obviously, this will only work if you also use SetTrayIcon() - New [Windows/macOS/Linux]: RapaGUI also supports Hollywood's SetTrayIcon() function now which can be used to install an icon in the system tray for your app; in contrast to Hollywood's SetTrayIcon() function, RapaGUI's one will also work on macOS and Linux (only if the Linux window manager supports the "System Tray Protocol") (requested by Paul Bloedel) - New: Added Combobox.Popup [N] attribute; this will trigger whenever the combobox's list popup is opened or closed; the "TriggerValue" message member will contain the current state of the popup list (either TRUE or FALSE) (requested by Paul Bloedel) - New: Added Combobox.Acknowledge [N] attribute; this will trigger whenever the user presses RETURN in the string widget that is part of the combobox (requested by Paul Bloedel) - New: Added Combobox.Selected [N] attribute; this will trigger whenever the user selects an item from the combobox list (requested by Paul Bloedel) - Fix [Android]: Combobox.Value event handler didn't work - New [Android]: Pinch view zooming is now supported for HTMLview class (requested by Paul Bloedel) - New: HTMLview.Search() returns a boolean now indicating whether or not the search term was actually found (requested by Paul Bloedel) - New: Added moai.UpdateImage(); this can be used to update the graphics of an image; note that this is currently only supported for images inside Listview or Treeview objects; after calling moai.UpdateImage() you also have to make sure that rows that use the image are redrawn, e.g. by using Listview.Rename() to update the image information in a row (requested by Jörg Renkert) - Fix [Amiga]: Pageview widgets weren't in the TAB cycle chain (reported by Thomas Igracki) - New [Amiga]: When Text.Frame is set to TRUE, the text inside the text object will be markable; note that this requires MUI 4.0 (requested by Ulrich Beckers) - Fix [Amiga]: Percentage info text wasn't correct in case Progressbar.Max was set to something different to 100 (reported by Thomas Igracki) - Fix [Amiga]: The scale below the progress bar didn't appear in case Progressbar.Max was set to a value not equal to 100 (reported by Thomas Igracki) - Fix [Amiga]: Area.Hide didn't work correctly on Progressbar widgets when used in the XML file (reported by Thomas Igracki) - New: Added convenient internationalization support; all tags that accept a string argument also accept a new "i18n" attribute now that allows you to specify a catalog string index that should be used if a catalog for the user's system language is available; the string index can either be an absolute numeric value or a Hollywood constant; for locale-dependent strings that are passed in tag attributes you can use the new "@i18n:" suffix in the string; just append this suffix to the string, followed by a numeric value or a Hollywood constant and Hollywood will use the specified catalog string instead if there's a catalog for the user's system language available; note that all these internationalization features only apply to the XML; all changes that are made at runtime need to be handled manually; also note that it will obviously only work if there's an open catalog loaded either via the OpenCatalog() command or via the @CATALOG preprocessor command (requested by Sandro Barbagelata) - Fix [Android]: Texteditor.Text didn't correctly return the escape sequence for resetting the color back to its default when part of a text was colored (reported by Paul Bloedel) - Fix [Android]: Colgroup rows sometimes got cut off (reported by Lazar Zoltan) - Fix [Android]: Textentry.Acknowledge didn't trigger on Android (reported by Dick Valk) - New: Added Hyperlink class; this can be used to embed clickable links in your GUIs; note that on Amiga this requires Hyperlink.mcc which is part of MUI on MorphOS and MUI 4.0 but it's not part of MUI 3.8 (requested by Sasha Pont) - New: Added "HideDisplays" tag to @REQUIRE; if you set this to FALSE, RapaGUI won't hide all Hollywood displays automatically on startup; this can be useful when using RapaGUI in Hollywood emulation mode, i.e. without using any of RapaGUI's GUI functionality but just to get some features that Hollywood does not support by default on some platforms (e.g. menus on Linux, or inter-process communication on Linux and macOS) - New: RapaGUI now supports inter-process communication via Hollywood's CreatePort() and SendMessage() functions; this is especially useful on macOS and Linux where Hollywood doesn't have inbuilt IPC support yet; you can just use RapaGUI now to workaround this Hollywood limit - Fix [Amiga]: Window.ActiveObject couldn't be obtained for some widgets like comboboxes, pop objects, checkboxes, etc. (reported by Nick S.) - Fix: Window.ActiveObject sometimes returned trash (reported by Nick S.) - Fix [Amiga]: Context menus didn't work when used on Treeview widgets (reported by Michael Suther) - New: RapaGUI now also supports menus attached to normal Hollywood displays using the menu library that is part of Hollywood; this can be very useful on Linux because Hollywood doesn't support menus on Linux because it is a purely X11 application on Linux; by using RapaGUI, however, your app will be turned into a GTK application and GTK apps support menus of course so this is an easy and convenient way to get menu support on Linux too! (requested by Juan Carlos Herran Martin) - New: Added Window.Remember attribute [I]; if this is set to TRUE, the window will remember its position and size when the program is restarted (or when dialogs are destroyed and re-created); note that this is only possible for windows/dialogs that have an ID; the ID is used to memorize the window's position and size in order to restore it later so keep in mind that if you change the window's ID the settings will get lost (or they will be transferred to another window in case you re-use an ID previously used for a certain window for a new window); also note that this attribute defaults to TRUE on Amiga systems because the standard MUI behaviour is to always remember positions; on all other systems it defaults to FALSE - New: Added support for splitter groups; splitter groups can be used to make GUI layouts more dynamic; RapaGUI supports <hsplitter> for horizontal splitter groups and <vsplitter> for vertical ones; splitter groups must always contain two widgets which will be separated by a sash allowing the user to configure the size of both widgets; there are also some attributes to fine-tune the behaviour of splitter groups - Fix [MorphOS]: Memory leak when creating a Textentry widget without any initial contents - New: Added Area.FontName [ISG], Area.FontSize [ISG], and Area.FontStyle [ISG]; these can be used to set the font family, size, and style to be used by a widget; note that although these are area attributes, they are not supported by all widgets; it depends on what the native widgets of the platform RapaGUI is running on actually support; e.g. on AmigaOS, Area.FontName and Area.FontSize have an applicability of just IG, meaning you can't change the font family and font size attributes after creation because MUI doesn't support that; also note that font sizes are always in points and not in pixels so that they can automatically adapt to higher DPI displays (requested by Paul Bloedel) - Change [Windows/macOS/Linux/Android]: Area.Weight is now handled better; it's still not completely the same as with MUI but we're pretty close now which should be sufficient for most cases; note that when setting Area.Weight you normally shouldn't set specific dimensions via Area.Width/Height; these should be determined by the Area.Weight setting - Fix: Context menus didn't work when they were attached to objects that were created dynamically using moai.CreateObject() - Fix [Amiga]: Nested context menu items triggered twice (reported by Paul Bloedel) - Fix [Windows/macOS/Linux]: Setting Area.ContextMenu didn't work correctly for context menu which hadn't been initialized yet (reported by Jörg Renkert) - Fix: Plugin is now de-initialized correctly in the rare case that it is loaded several times from different locations (reported by Petteri Valli) - New [Amiga]: Listview.Alternate [I] and Treeview.Alternate [I] are now also supported on Amiga systems; requires MUI 5.0; note that you might have to enable the stripes effect in the MUI preferences first (requested by Richard Lake) - Fix [Amiga]: Texteditor.NoWrap didn't show a horizontal scrollbar; since this is now supported by TextEditor.mcc, RapaGUI now requires TextEditor.mcc 15.53 in case you want to use Texteditor class (reported by Lazar Zoltan) - Fix [Windows/macOS/Linux]: Listview sorting didn't always work correctly for non-ISO-8859-1 languages (reported by Petr Kaderka) - Fix [Windows/macOS/Linux/Android]: Sorted insert in listview and dataview mode is case-insensitive now just like in the Amiga versions of RapaGUI - Fix [Windows]: Sorted insert didn't work when a listview was in listbox mode - New: FileRequest() supports extended filters introduced with Hollywood 9.0 now - Change: RapaGUI requires at least Hollywood 9.0 now - New: Dropped multi-threaded core and replaced it with a single-threaded one which runs all event callbacks instantly; e.g. when setting Listview.Active, the notification callback defined for Listview.Active will be run right when setting Listview.Active using moai.Set() instead of at the next time WaitEvent() is called; this instant event handling might break some scripts which depend on the behaviour of the old asynchronous event dispatcher but the API break was necessary for some exciting upcoming features and dispatching events instantly is also much cleaner than the previous asynchronous event dispatcher - Fix [Windows/macOS/Linux]: Listening to Listview.StartEditing led to a memory access fault - Change: Since modal event loops are no longer supported by RapaGUI, the plugin now disables all Hollywood functions which attempt to start a modal event loop, e.g. WaitLeftMouse(), WaitSampleEnd(), InKeyStr(), etc.; these can't be used together with RapaGUI any longer - Change: All RapaGUI projects must use WaitEvent() now; it's no longer acceptable to implement custom event handling using CheckEvent() or CheckEvents(); routing normal Hollywood scripts through RapaGUI will only work if they use WaitEvent() too - Change [Examples]: Updated Dialogs.hws example to use RunCallback() instead of a dialog function - Change: Dialog.ShowModal() no longer supports dialog functions; if you want to open a dialog that doesn't block your script, you now have to set Window.Open to TRUE for the dialog (and possibly Application.Sleep to TRUE too) and then you can implement the dialog's actual behaviour by repeatedly calling a management function either using SetTimeout() or Hollywood 9.0's new RunCallback() function; take a look at the updated Dialogs example for a reference implementation - Fix: Getting Listviewcolumn.Width didn't work (reported by Sasha Pont) - New: Added support for Finddialog class; this can be used to show the system's standard find dialog; the following attributes are supported: Finddialog.Open, Finddialog.ReplaceMode, Finddialog.NoUpDown, FindDialog.NoMatchCase, Finddialog.NoWholeWorld, Finddialog.FindString, Finddialog.ReplaceString, Finddialog.Down, Finddialog.MatchCase, Finddialog.WholeWord, Finddialog.Find, Finddialog.FindNext, Finddialog.Replace, Finddialog.ReplaceAll; note that the system find dialog must always be modeless so you must use Finddialog.Open to show it and not Dialog.ShowModal(); also note that Finddialog class is currently not supported on AmigaOS and Android - New: Added support for online help; Application.HelpFile [ISG] can be used to set a help file for the application; on Windows this should point to a CHM file, on Amiga to an AmigaGuide file and on all other platforms to a directory which contains all HTML files belonging to the documentation (the main file must be called index.html, the index file must be called findex.html) help file; you can then use Application.ShowHelp() and Application.ShowHelpNode() to show the online help; note that this is not supported on Android - Change: The behaviour of TextEditor.HasChanged is now defined more precisely: it is not triggered when setting TextEditor.Text any more (this is an API change!) and it's also not triggered when calling TextEditor.Clear(); instead, those two will cause TextEditor.HasChanged to be set to FALSE again, i.e. unmodified; you can also do this manually now, i.e. TextEditor.HasChanged has an applicability of SGN now but when setting it, you should always set it to FALSE - New: Added TextEditor.ScrollToLine() to scroll the specified line into view - New: Added TextEditor.GetLineLength() to get a line's length (without any trailing line break or carriage return characters) - New: Added TextEditor.GetPosition() to get the index position from row and column values; -1 is returned in case the position is out of range - Fix: TextEditor.GetXY() returns -1 now for both values in case an invalid position was specified - Fix [Windows/macOS/Linux]: Using the special button string "Cancel" didn't return the correct result when it was pressed when using moai.Request() and SystemRequest() - New: Added Textview.Append() method to append text to the existing text in the view; on AmigaOS this requires at least MUI 4.0 - Fix: Setting/getting Group.Title and Group.Icon didn't work for pages that had been dynamically added to a pageview using one of the append/prepend/insert page methods - Change: It is now allowed to create empty <pageview> objects and add pages later - Change: RapaGUI requires Hollywood 9.0 now because it uses several interfaces only available in Hollywood 9 and better - Change [Amiga]: Optimized main loop for faster event handling - Change [Examples]: Updated Image example to use a Hollywood 9 image now - Change [Examples]: Scrollbar example now checks if scrollbar position has changed before drawing; this improves performance on slower systems, especially on Android - New [AROS]: Enabled image support since this is now supported by Zune; requires muimaster.library v19.52 or better (reported by Neil Cafferkey) - New [Android]: Added Window.Orientation [ISGN]; this tag allows you to set the orientation for the respective window; this can be either "Device" to keep what is the current device orientation or "Portrait" or "Landscape"; you can also set up a notification on this attribute to get notified about orientation changes - New [Android]: Added Listview.ItemStyle [I] tag; this tag allows you to configure the appearance of listview items on Android; possible values are "Default", "Normal", and "Big"; the "Normal" mode corresponds to android.R.layout.simple_list_item_1 and the "Big" mode corresponds to android.R.layout.simple_expandable_list_item_1 - New [Android]: Added Listview.LongClick [N] tag; this notification will be triggered whenever the user long clicks a listview item - New: Added Scrollcanvas.AutoScale [I] tag; this does the same as Scrollbar.AutoScale but for widgets of Scrollcanvas class - New: Added Scrollbar.AutoScale [I] tag; if this is set to FALSE, all values set in Scrollbar.Level, Scrollbar.Range, Scrollbar.StepSize, and Scrollbar.Visible are interpreted as raw pixels; if the tag is set to TRUE, they are interpreted as density-independent pixels; the default of this tag is what has been set to the "ScaleGUI" tag on @REQUIRE (defaults to TRUE) - New [Android]: Added Window.NoCyclerMenu [I]; if this tag is set to TRUE, RapaGUI won't add a menu that allows you to cycle between all open windows automatically; this is useful if you'd like to manage window cycling manually - New [Windows/macOS/Linux]: Core model has been completely rewritten and uses a thread-based design now; this is much cleaner than the old design and solves several glitches (especially on macOS and Linux) that could appear with the old core which was quite hackish anyway [VOID] - New: Added Texteditor.Hint [ISG] attribute; this does the same as Textentry.Hint but for RapaGUI's Texteditor class; on AmigaOS this requires at least TextEditor 15.51 - New: Added Textentry.Hint [ISG] attribute; this allows you to set hints to be displayed when the widget is empty; note that on Amiga platforms this requires MUI 5 from muidev.de; on MorphOS it requires MorphOS 3.12 - Change: Adapted the Demo, SongPlayer, TextEditor, HTMLview, and VideoPlayer examples for high dpi systems; thanks to Martin "Mason" Merz for the hires icons; they look stunning on high resolutions! - New: Scrollcanvas also supports high dpi monitors now; by default, the dimensions you specify in Scrollcanvas.VirtWidth/Height are in density-independent pixels and RapaGUI will automatically apply the system's scale factor to the contents drawn by the paint function; if you want to have fine-tuned control, you can set the new Scrollcanvas.AutoScale [I] tag to FALSE; in that case, Scrollcanvas.VirtWidth/Height are interpreted as pixels and no auto scaling will be performed so that your paint function can draw high resolutions graphics without any quality loss due to scaling - New: Application.AboutRapaGUI() also uses high resolution graphics on high dpi monitors now - Change: moai.FreeImage() accepts an optional parameter now that can be used to tell RapaGUI if the function should free a brush (the default) or an icon image - New: All widgets that support brushes also support Hollywood icons now which were introduced in Hollywood 8; the advantage of Hollywood icons is that an icon can contain image data in several sizes; this is perfect for adding separate image data for high dpi systems because separate image data in a higher resolution of course looks better than scaling low-res graphics; in addition to that, Hollywood icons can also use vector graphics in order to be freely scalable; to use Hollywood icons in RapaGUI you can either set the new Application.UseIcons [I] tag to TRUE to globally make Hollywood icons the default image type instead of brushes; alternatively, you can also configure the desired image type individually for each of RapaGUI's widgets by using the following new tags: Group.IconType [I], Button.IconType [I], Listviewcolumn.IconType [I], Treeviewcolumn.IconType [I], Image.BrushType [I], Toolbarbutton.IconType [I] - New: All Hollywood displays will automatically be put into Hollywood 8's new "SystemScale" mode now which means that they will appear in the correct size even on monitors with a higher dpi setting; you can disable this behaviour by setting the new "ScaleHollywood" tag to FALSE when @REQUIREing RapaGUI; bilinear interpolation is disabled by default but can be enabled from @REQUIRE by setting the new "InterpolateHollywood" tag to TRUE; NB: on Android bilinear interpolation is enabled by default because RapaGUI uses hardware-accelerated scaling on Android - New: RapaGUI will now automatically scale all brushes that are used by widgets (e.g. button images, listview icons, etc.) by the host system's content scale factor so that GUI designs look correct on systems with a high dpi as well; you can disable this behaviour by setting the new "ScaleGUI" tag to FALSE when @REQUIREing RapaGUI; bilinear interpolation is enabled by default but can also be disabled from @REQUIRE by setting the "InterpolateGUI" tag to FALSE; automatic scaling of UI graphics can also be locally disabled or enabled for certain widgets by using the following new tags: Button.IconScale [I], Listviewcolumn.IconScale [I], Treeviewcolumn.IconScale [I], Image.BrushScale [I], Toolbarbutton.IconScale [I], Group.IconScale [I] - New: Added support for high dpi systems; all position and size values are now expected to be in density-independent pixels (dip/dp) instead of pixels (px); using pixel values for GUI layouts really doesn't make much sense because the user can have an arbitrary scale factor applied to his user interface setting; this is especially so on systems whose monitors use a high dpi (e.g. 4K monitors or Retina systems on the Mac) - Fix [Windows/macOS/Linux]: Combobox.Value didn't work at initialization time - Fix [Windows/macOS/Linux]: Textview.Text and Group.Title were falsely handled as texts that could contain a keyboard shortcut; the underscore character is now ignored as it should be - Fix [Windows/macOS/Linux]: Setting Label.Text didn't correctly handle the underscore character - Change [Examples]: The "Dialogs" examples sets Button.Hint for its dialog buttons now which gives it a better look on Android systems - New [Android]: Added Button.Hint [I]; this allows you to give RapaGUI a hint whether the button is the positive, negative, or neutral one in a dialog; this is currently only used in dialogs on Android; if you set it for your dialog buttons, RapaGUI will use Android's system dialog buttons instead which makes your dialog look more native - Fix: TextEditor.Color didn't work at all - Fix [Linux/macOS, 64bit only]: TextEditor.GetSelection() didn't return correct values - Change [Examples]: All examples declare the GUI's XML file in a @FILE statement now; this will automatically link the XML into the applet when compiling the script which makes it easier to test the RapaGUI examples on Android - New [Android/Amiga]: Added Window.Borderless [I] attribute; if this is set, the window won't have any border; on Android this means that the action bar won't be shown - New [Android]: Added Window.Subtitle [ISG]; this allows you to set a string to be shown as the action bar's subtitle - Fix [Windows/macOS/Linux]: Menu.Remove() didn't scan for the item to be removed recursively like it is done in the Amiga version - New [Android]: Added Window.SingleMenu [I]; if this attribute is set to TRUE, only the first menu of the menu bar is used and its items will be shown directly when pressing the options button in the action bar - Fix [Windows/macOS/Linux]: Listview.Move() no longer activates the wrong entry when moving entries - Change [Windows/MacOS/Linux]: Listview.Exchange() no longer scrolls the second item into view - Fix [Windows/macOS/Linux]: Setting Listview.Active to an item that was already active triggered another Listview.Active notification; this behaviour was inconsistent to the behaviour on Amiga - Fix [Windows/macOS/Linux]: The Listview.Edit() method didn't work at all - Fix [Windows/macOS/Linux]: Setting Slider.Level didn't clip to Slider.Min as the lower boundary but to 0 - Fix [Windows]: Setting Texteditor.Align often didn't change the alignment until the next refresh - New: Added Combobox.Open() and Combobox.Close() methods; these two allow you to show and hide the combobox's list (requested by Paul Bloedel) - Fix [Windows]: Potential crash on exit when Application.AboutRapaGUI() had been called earlier - Change [Windows]: RapaGUI no longer requires the Visual C++ Redistributable DLLs; it is completely stand-alone now! (but about 200kb bigger because it is now statically linked against MSVCRT) - New: Added Treeview.Clear() method; this removes all items from a treeview widget; this does the same as calling Treeview.Remove() with the special "Root" keyword - New: Added special "Root" parameter for Treeview.Remove(); if "Root" is passed in item$, all items in the treeview will be removed so that the treeview will be empty (requested by Jean Holzammer) - Fix: Treeview.Remove() didn't correctly adapt lots of internal state values which could lead to the problem that certain MOAI IDs weren't released correctly (reported by Jean Holzammer) - Fix [Amiga]: TextEditor.HasChanged triggers for every change now, not only for the first one; this makes the Amiga version consistent to the behaviour of the Windows, Linux, and Mac OS versions of RapaGUI (requested by Lazar Zoltan) - NEW [Android]: Ported RapaGUI to Android; this took more than 6 months to write but the result is stunning; creating GUI applications that run on Windows, macOS, Linux, AmigaOS, MorphOS, AROS and Android has never been easier! RapaGUI on Android supports almost everything from the desktop versions; the only thing missing entirely is a tree view widget because Android doesn't have one; all the other features are pretty much all supported, including dialogs, icons, toolbars, multiple windows and the Hollywood widget; it is also possible to combine Hollywood displays and RapaGUI windows in the same application, just like on the desktop platforms; since the majority of RapaGUI for Android has been implemented in Java with just a small bridge layer written in C/JNI, it's not possible to distribute it as a plugin because plugins are just shared objects containing native code; instead, RapaGUI on Android is completely built into Hollywood; for compatibility reasons, you still need to @REQUIRE it, though, just like you do it on desktop platforms Version 1.2 (22-Sep-17) - Change: Updated documentation - Fix [Amiga]: Changing the text style or text alignment in objects of Texteditor class no longer triggers a Texteditor.HasChanged notification; this fix is for consistency between Amiga and the other platforms; requires at least TextEditor.mcc 15.48 - Change: Texteditor.Align is now a global setting on all platforms; previously, the alignment could be changed for individual lines but this is no longer possible for cross-platform consistency; the alignment setting will now always be a global setting for all lines in the text editor; on AmigaOS this feature requires at least TextEditor.mcc 15.48 - Fix [Windows/Linux/MacOS]: Clicking to the left and right of the slider knob to change the knob's position didn't trigger a notification (reported by Xabier Payet) - Fix [Amiga]: Setting MOAI.NoNotify after Slider.Max still caused a notification being triggered when the current slider position was higher than the new maximum (reported by Lazar Zoltan) - Fix [Windows]: Putting a ListView widget into "Dataview" mode often resulted in refresh errors that only went away by resizing the parent window - New: Added moai.FreeImage(); this allows you to free an image in RapaGUI's internal image cache; you have to pass the number of the brush you want to free or -1 to free all images; note that you must make sure that the image you free is no longer used by any widget or RapaGUI might crash; note that normally it isn't necessary to call moai.FreeImage() because all images are freed automatically when RapaGUI quits; it's only necessary in case you want to reuse the same brush number with a new image or free memory used by an image (requested by Lazar Zoltan and Petteri Valli) - Fix [Windows/Linux/MacOS]: Calling moai.FreeObject() on a listview, treeview or pageview control didn't free all images correctly - Fix [MacOS]: TextEditor.GetXY() didn't work at all - Fix [Amiga]: TextEditor.GetText() didn't convert style information to the platform-independent format used by RapaGUI (reported by Paul Bloedel) - Fix [Amiga]: Getting TextEditor.Text after changing the alignment to center or right didn't work any more (reported by Paul Bloedel) - Fix [Windows/Linux/MacOS]: TextEditor.Insert() didn't apply style information to the text in case TextEditor.Styled was set to true - Fix [Windows/Linux/MacOS]: TextEditor.GetText() didn't return any style information in case TextEditor.Styled was set to true - New: Added version for the PowerPC version of Mac OS X; note that this version of RapaGUI requires OS X 10.5, it won't work on 10.4 (requested by Cameron Kaiser) - Fix [Windows/Linux/MacOS]: Treeview.GetEntry() didn't work correctly for nodes which were empty (reported by Samuel Crow) - Change [Windows/Linux/MacOS]: Single-select listviews of mode "Listview" don't allow deselection of the active item any longer for consistency with MUI; note that listview mode "Dataview" still allows the deselection of items but a Listview.Active event will be triggered whenever the user deselects the active item so you can act upon it - Fix: Getting TextEditor.Text didn't work with certain versions of the RichEdit control when TextEditor.Styled was set to true and the text contained different styles and ran over multiple lines Version 1.1 (09-Apr-17) - Change: Updated documentation - New: Added @2x graphics for high resolutions systems on Windows and Mac OS - Fix [Windows]: Double-clicking on a listview item crashed the program when using the "Dataview" backend and listening to the Listview.DoubleClick notification - New: Added support for Listview.AbortEditing [N] and Treeview.AbortEditing [N]; these two attributes allow you to get notified when the user cancels item editing by pressing escape or clicking outside the edit widget (requested by Lazar Zoltan) - Fix [Windows]: Size calculation of vertical sliders with label weren't done correctly which could lead to several layout problems like sliders overdrawing neighbouring widgets (reported by Lazar Zoltan) - Change: When not specifying Window.Title, RapaGUI will now use the value of @APPTITLE as the default title; if @APPTITLE hasn't been specified, "RapaGUI" is used - New: Group.Title and Group.Icon now have an applicability of ISG instead of just I; this allows you to change the title and icon of individual pages at runtime; to remove the icon from a page set Group.Icon to -1; note that on AmigaOS for all Pageview.Modes except "List" this feature requires at least MUI 4 (requested by Sandro Barbagelata) - Fix [Amiga]: Accelerator key "ENTER" didn't work (reported by Lazar Zoltan) - Fix [Windows/MacOS/Linux]: Treeview.GetEntry() segfaulted when used with "Active" for item and "Parent" for position on a node/item in the root list (reported by Samuel Crow) - New: Added help strings for RapaGUI's commands; if you have Hollywood 7, you will now get function help with Hollywood's IDE for Windows and you can also press F1 to open the RapaGUI reference; note that you need to copy RapaGUI.chm to a directory named "PluginHelp" inside the Hollywood installation directory for this to work - New: Added new methods and attributes for Choice class which make it much more flexible; the following new methods are now supported: Choice.Clear(), Choice.GetEntry(), Choice.Insert(), Choice.Remove(), and Choice.Rename(); additionally, a Choice.Count [G] attribute has been added to allow you to query the number of items in the widget; finally, it is now possible to declare empty choice widgets in XML, i.e. you needn't add items in XML any longer but you can simply do this later at runtime using the new methods; also note that only Choice.GetEntry() and Choice.Count [G] are compatible with MUI 3.8; all other methods need MUI 4 or better (requested by Leo den Hollander) - New: Added new methods and attributes for Combobox class which make it much more flexible; the following new methods are now supported: Combobox.Clear(), Combobox.GetEntry(), Combobox.Insert(), Combobox.Remove(), and Combobox.Rename(); additionally, a Combobox.Count [G] attribute has been added to allow you to query the number of items in a combobox; finally, it is now possible to declare empty combobox widgets in XML, i.e. you needn't add items in XML any longer but you can simply do this later at runtime using the new methods (requested by Leo den Hollander) - New: Added new sample called "DragNDrop"; this demonstrates how to support drag and drop with RapaGUI - New [Windows/MacOS/Linux]: Normal displays opened through RapaGUI also support the "OnDropFile" event handler now; this feature is only available on Hollywood 7 - New: Listview, Treeview, and Hollywood widgets now support file dropping; to enable drop events for these widgets, you have to set the new "DropTarget" attribute [ISG] to TRUE and listen to the new "DropFile" [N] attribute; your event callback will then receive the file(s) dropped on the widget in a table passed in the "TriggerValue" message field; the position of the drop operation will be passed in the "X" and "Y" message fields; this position will be relative to the top-left corner of the widget (requested by Sandro Barbagelata) - Fix [Doc]: Listview.DefClickColumn is now correctly documented as Amiga-only - Fix [Windows/MacOS/Linux]: Listview.ClickColumn wasn't implemented at all (reported by Leo den Hollander) - New: RaiseOnError() works correctly with RapaGUI now but only if you have Hollywood 7 or better (reported by Paul Bloedel) - Fix: moai.FreeApp() didn't work correctly (reported by Paul Bloedel) - Fix [Windows/MacOS/Linux]: FileRequest() filters were laid out in a different way than filters in file requesters managed by Hollywood; this inconsistency has now been fixed (reported by Dimitris Panokostas) - Fix [Windows/MacOS/Linux]: "NoClose" and "NoHide" display flags didn't work with RapaGUI (reported by Paul Bloedel) - Fix: RapaGUI no longer crashes when calling its functions without @REQUIREing it (reported by Paul Bloedel) - Fix [MacOS]: Calling moai.Set() or moai.DoMethod() to change widget attributes or its contents often didn't have any effect until the next event came in which led to quite a poor responsiveness; I don't remember seeing this problem on Mac OS 10.11 so I think it is related to 10.12; nevertheless, it's fixed now - Fix [Doc]: Treeview.GetEntry() was falsely documented as returning a "Name" item in its return table but it returns an "Items" table instead (reported by Lazar Zoltan) - New [Windows/MacOS/Linux]: Ported RapaGUI to 64-bit for the upcoming Hollywood 7 - New: Hollywood class supports the "VanillaKey" event handler now if Hollywood 7 is available; this event handler allows you to listen to Unicode keys - New: Added Unicode support; this finally allows you to create fully internationalized GUIs with RapaGUI; note that Unicode support requires at least Hollywood 7 Version 1.0 (14-May-16) - First Release