2.1 History

    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


Show TOC