Release Information #

Platform Version Release Date
All R41 August 2, 2021

Desktop #

Type Change
NEW GraffitiThumbList 2.0
ADDED GraffitiDrillMenu now supports keyboard navigation using up and down arrows to change selection.
ADDED GraffitiDrillMenu now supports drilling in to an item to view its children by pressing the Enter key when it is selected.
ADDED GraffitiDrillMenu now supports returning to the parent of the currently viewed item by pressing the Backspace key.
ADDED GraffitiHTMLEditor has a new read-only property SelLink as Boolean. (15672)
ADDED GraffitiHTMLEditor has a new read-only property SelLinkURL as String. (15672)
ADDED GraffitiHTMLEditor has a new read-only property SelTable as Boolean. (15621)
ADDED GraffitiHTMLEditor now uses proportional image resizing by default. Holding Shift while resizing switches modes. (15622)
ADDED GraffitiMenuWindow has a new ShowAt( X as Integer, Y as Integer ) method.
ADDED GraffitiMenuWindow now uses smarter positioning to ensure that the window is always shown within the bounds of the parent’s current display when using ShowInPlace.
ADDED GraffitiPopupMenu has a new CellTextPaint( g as Graphics, row as Integer, column as Integer, x as Integer, y as Integer ) as Boolean event definition for custom text drawing in the popup’s cells.
ADDED GraffitiSettings has a new AddPreset( name as String, values as Dictionary) method for adding a set of values to use as a preset. (15697)
ADDED GraffitiSettings has a new HasPreset( name as String ) as Boolean method for determining if a Preset exists. (15697)
ADDED GraffitiSettings has a new LoadPreset( name as String, ignoredValues() as String) method for loading an added preset. ignoredValues is an array of strings representing settings keys that will not be overwritten if they exist. (15697)
ADDED GraffitiSettings has a new Preset( name as String ) as Dictionary function for returning the Dictionary object of an added preset. (15697)
ADDED GraffitiSettings has a new RemoveAllPresets() method for clearing added presets. (15697)
ADDED GraffitiSettings has a new RemovePreset( name as String ) method for removing a previously added preset. (15697)
FIXED GraffitiFieldLabel now vertically centers PopupMenus in the field area without reporting a size issue via MessageBox during debug.
FIXED GraffitiFontPicker now assigns the correct system TextField color to the search field when SearchBackgroundColor is black, or the specified color is not black.
FIXED GraffitiGrid now supports CMD/CTRL+A for selecting all rows when SelectionMode = ModeMultiple. (15407)
FIXED GraffitiGrid horizontal scrolling is now more responsive. (15407)
FIXED GraffitiGrid Vertical scrolling is now consistent between using the mouse wheel and the scrollbar. (15484)
FIXED GraffitiGrid once again clears the currently hovered row when the mouse leaves the Grid’s area. (15407)
FIXED GraffitiGrid’s IsRowSelected methods have been improved for speed and reliabitility. (15424)
FIXED GraffitiGrid no longer sets the now-deprecated DoubleBuffer property as it was causing artifacts in drawing. (15563)
FIXED GraffitiHTMLEditor now better accounts for the threaded nature of the HTMLViewer and avoids race conditions on format updates.
FIXED GraffitiHTMLEditor now properly reformats text as links on macOS versions greater than or equal to 10.12. (15645)
FIXED GraffitiHTMLEditor no longer encounters a TypeMismatchException when selecting multiple table cells. (15647)
FIXED GraffitiHTMLEditor now disables the Table buttons when the selection length is greater than 0 to combat erroneous insertions.
FIXED GraffitiHTMLEditor once again retains SelStart and SelLength when focus is shifted to the instance. (15636)
FIXED GraffitiHTMLEditor will no longer throw an IllegalCastException when clicking the Link button in the toolbar while there is no selection.
FIXED GraffitiMenuWindow once again properly positions on elements that are nested deeply (one or more levels inside ContainerControls). (15585)
FIXED GraffitiRadialProgress no longer sets the now-deprecated DoubleBuffer property as it was causing artifacts in drawing. (15563)
FIXED GraffitiTagField once again properly assigns the specified background color to the TextField.
CHANGED GraffitiHTMLEditor now relies purely on the Toolbar_LinkClicked event rather than displaying the link tooltip for a more customizable experience and to fix an issue where the tooltip was unresponsive. (15672)
CHANGED GraffitiHTMLEditor no longer forces a timeout when clicking the Link button, but will only respond when there is a selection. (15672)
CHANGED Resources that are required for multiple classes to be used in the project are now stored in the “Required” folder of “GraffitiSuite” in the navigator and should be copied to your project(s) whenever using GraffitiSuite.

Web #

Type Change
NEW GraffitiGridBadge class for adding Badges to cells in columns with the Formatter of FormatTypes.Badge. (15478)
NEW GraffitiOrgChart
NEW GraffitiResponsive
ADDED GraffitiAccordionMenuItem now has an Icon property for displaying a FontAwesome icon to the left of the item text. (15638)
ADDED GraffitiAlertMessage has a new ContentStyle as WebStyle property.
ADDED GraffitiCalendar has a new AddRowSet(rs as RowSet) method. (15465)
ADDED GraffitiCalendar has a new DatabaseAutoUpdate as Boolean = True property. When True and an event is edited as the result of an event, the DatabaseRecord will also be updated. (15465)
ADDED GraffitiCalendarEvent has a new UpdateDatabaseRecord() method for commiting all current values to the database. (15465)
ADDED GraffitiCalendarEvent has a new DatabaseAutoUpdate as Boolean = True property. When True and an event is edited either by the user or directly via code, the DatabaseRecord will also be updated. (15465)
ADDED GraffitiCalendarEvent has a new DatabaseRecord as DatabaseRow property. This is only set when an event is loaded using AddRowSet. (15465)
ADDED GraffitiCalendarEvent has a new DatabaseRowSet as RowSet property. This is only set when an event is loaded using AddRowSet. (15465)
ADDED GraffitiCalendarEvent has a new DatabaseRowSetID as Integer = -1 property. This is only set to a value greater than or equal to 0 when an event is loaded using AddRowSet. (15465)
ADDED GraffitiCamera.FrameReceived now has an additional parameter: frame as Picture (15433)
ADDED GraffitiDatePickerMultiple has a new Icon as String = “far fa-calendar-alt” property.
ADDED GraffitiDatePickerMultiple has a new ButtonIndicator as WebUIControl.Indicators property.
ADDED GraffitiDatePickerMultiple has a new ButtonVisible as Boolean = True property.
ADDED GraffitiDatePickerMultiple has a new ClearButtonIndicator as WebUIControl.Indicators property.
ADDED GraffitiDatePickerMultiple has a new ClearButtonStyle as GraffitiStyle property.
ADDED GraffitiDatePickerSingle has a new Icon as String = “far fa-calendar-alt” property.
ADDED GraffitiDatePickerSingle has a new ButtonVisible as Boolean = True property.
ADDED GraffitiDatePickerSingle has a new ButtonIndicator as WebUIControl.Indicators property.
ADDED GraffitiDatePickerSingle has a new ClearButtonIndicator as WebUIControl.Indicators property.
ADDED GraffitiDatePickerSingle has a new ClearButtonStyle as GraffitiStyle property.
ADDED GraffitiGrid has a new DatabaseAutoUpdate as Boolean = True property for disabling RowSet updates when cell values are changed by the user. (15415)
ADDED GraffitiGrid now supports a Badge column type: FormatTypes.Badge. (15478)
ADDED GraffitiGrid’s client-side search now filters more column types.
ADDED GraffitiGridColumn now has a WidthTypes enumeration (0 = Pixels, 1 = Percentage) (15485)
ADDED GraffitiGridColumn now has a WidthType as WidthTypes property. When set to Percentage, the column’s width will be calculated as a percentage of the Grid’s total display width.
ADDED GraffitiHTMLEditor now has added functionality for image alignment and resizing in the browser. Using the resize handlers of images will scale them proportionally, holding shift will scale disproportionately. (15641)
ADDED GraffitiMenu now has a TriggerOn enumeration that replaces the previous Trigger* constants: 0 = None, 1 = Right, 2 = Left, 3 = Hover
ADDED GraffitiPDFTable cells can now contain line breaks in the form of “\n”. (15592)
ADDED GraffitiPopupMenu has a new IsPopupVisible as Boolean = False property which is set the PopupMenu’s popup is shown or hidden. (15763)
ADDED GraffitiPopupMenu has a new Item(index as Integer) as GraffitiPopupMenuItem method.
ADDED GraffitiPopupMenu has a new LastItemIndex method to replace ItemCount.
ADDED GraffitiPopupMenu has a new PopupShown event that is raised when the user shows the Popup in the browser. (15763)
ADDED GraffitiPopupMenu has a new PopupHidden event that is raised when the user hides the Popup in the browser. (15763)
ADDED GraffitiRectangle now has a MouseEnter event. (15679)
ADDED GraffitiRectangle now has a MouseExit event. (15679)
ADDED GraffitiStyle.GetInstance has a new overloaded shared method: GetInstance( inSession as WebSession, withName as String, state as GraffitiStyle.States = GraffitiStyle.States.Default ) (15550)
ADDED GraffitiTextField has a new EnterPressed event for when you wish to handle the user pressing the Enter key. This will stop passing of the key to default buttons if implemented. Class updates Value and calls ValueChanged if different before raising the EnterPressed event.
ADDED GraffitiTree has a new CustomIcons as Boolean = False property for overriding the default icon values with those specified in the independent properties. (15430)
ADDED GraffitiWall has a new AnimationTime as Integer = 500 property for setting animation timing in milliseconds. (15573)
FIXED All classes once again draw in the layout editor.
FIXED All classes should no longer fail to receive focus when using keyboard navigation on the page or cause the browser to lock up when reverse tabbing from the first focusable element on the page. (15709)
FIXED GraffitiButtonSegment can no longer enter a state where the button themes don’t update to match the current user’s Dark Mode setting.
FIXED GraffitiButtonSegment should once again display on old browsers that don’t support theme mode detection. (15481)
FIXED GraffitiCalendar no longer encounters an UnsupportedOperationException when dragging an AllDay event to a day/time slot.
FIXED GraffitiCamera.RequestFrame now uses the maximum available quality setting. (15433)
FIXED GraffitiCamera.Play has a new frameSize as Size = Nil parameter for setting the resolution of the camera stream. Defaults to 1920×1080. (15433)
FIXED GraffitiDatePickerMultiple once again exposes the Day*Highlight properties.
FIXED GraffitiDatePickerMultiple can no longer enter a state where a StackOverflowException can be raised when changing some properties.
FIXED GraffitiDatePickerRange Hightlight and Enabled properties for weekdays are once again exposed in the inspector. (15401)
FIXED GraffitiDatePickerRange once again properly updates the display with provided dates for ValueStart and ValueEnd. (15401)
FIXED GraffitiDatePickerRange will no longer erroneously parse date values under certain circumstances. (15401)
FIXED GraffitiDatePickerRange’s To label can no longer extend outside the vertical area of the control.
FIXED GraffitiGrid editors no longer throw a JavaScript exception related to key presses.
FIXED GraffitiGrid no longer fires the CellClick event twice in some conditions. (15481)
FIXED GraffitiGrid’s client-side search now updates filter criteria when a key is pressed in the textbox.
FIXED GraffitiGrid’s EditType.Double no longer fails on locales that do not have a thousands separator. (15689)
FIXED GraffitiGridColumn now honors DecimalPlacesMax and DecimalPlacesMin for Currency column types. (15732)
FIXED GraffitiGridRow.DatabaseRowSetIDValue is now actually populated. (15481)
FIXED GraffitiGridRow.Selected is once again populated as expected in addition to the GraffitiGrid.SelectedRows property. (15510)
FIXED GraffitiHTMLEditor no longer fails to insert tables under most conditions. (15649)
FIXED GraffitiHTMLEditor will no longer insert errant cells when clicking the buttons for inserting rows or columns. (15657)
FIXED GraffitiHTMLEditor.InsertHTML once again functions. (15655)
FIXED GraffitiHTMLEditor overlays no longer have enormously sized text. (15654)
FIXED GraffitiHTMLEditor no longer adds empty lines to table cells that imported via setting the HTML property or using InsertHTML. (15651)
FIXED GraffitiHTMLEditor once again inserts images properly. (15641)
FIXED GraffitiMenuItem icons now have an appropriate amount of right-side space under all circumstances.
FIXED GraffitiSidebar no longer shows a vertical scrollbar on Windows Edge and Chrome when not needed. (15540)
FIXED GraffitiStyle.AddTo no longer enters a state where it’s in-browser interval is never cleared even if the element was found. (15550)
FIXED GraffitiStyle.GetInstance’s State parameter is now Optional. State as GraffitiStyle.States = GraffitiStyle.States.Default (15550)
FIXED GraffitiTextField label can no longer become taller than the control’s height.
FIXED GraffitiTextField.Enabled once again functions properly. (15695)
FIXED GraffitiTimePicker again properly updates properties on initial load. (15599)
FIXED GraffitiTimePicker now disables the built-in autocomplete of supporting browsers.
FIXED GraffitiTimePicker should no longer fire the ValueChange event multiple times when the user has finished selecting a time.
FIXED GraffitiTimePicker will no longer attempt to raise the MouseEnter and MouseExit events if they have not been implemented for that control instance.
FIXED GraffitiTimePicker’s AutoClose property again sets properly in the browser. (15599)
FIXED GraffitiToolbarButton text will no longer overflow the display area.
FIXED GraffitiToolbarButtons that are Picture objects are now properly displayed when using the Constructor method.
FIXED GraffitiTree no longer always shows scrollbars on macOS when the system scrollbar setting is not “When scrolling”. (15372)
FIXED GraffitiTree once again honors custom icons. (15430)
FIXED GraffitiUploader will now create an UploadPath beside the application binary if one is not specified.
FIXED GraffitiUploader now uses larger chunks for uploading thanks to a fix in the Xojo framework. Fix is only present in 2021r2+. (15746)
FIXED GraffitiWall once again sizes columns properly to their container size. (15547)
REMOVED GraffitiCamera.Snapshot (15433)
REMOVED GraffitiHTMLEditor events that were mostly vestigial and caused slow response times between the client and server.
REMOVED GraffitiHTMLEditor.InsertImageClick event
REMOVED GraffitiHTMLEditor.InsertLinkClick event
REMOVED GraffitiHTMLEditor.InsertVideoClick event
REMOVED GraffitiMenu no longer has Trigger* constants.
REMOVED GraffitiPopupMenu.ItemCount (See GraffitiPopupMenu.LastItemIndex)
REMOVED GraffitiPopupMenu.ClosePopup (See IsPopupVisible property). (15763)
REMOVED GraffitiPopupMenu.OpenPopup (See IsPopupVisible property). (15763)
CHANGED GraffitiDatePickerSingle’s ClearButton property has been renamed to ClearButtonVisible
CHANGED GraffitiDatePickerMultiple’s ClearButton property has been renamed to ClearButtonVisible
CHANGED GraffitiGrid.AddRowSet will now skip database fields whose names are reserved by the Grid for internal use, including those which start with an underscore. If these are encountered during debug, an exception is thrown. A list of those can be seen at https://graffitisuite.com/wiki/doku.php?id=web2:grid2#common_problems. (15478)
CHANGED GraffitiMenu.AddMenu method parameter Position now accepts a Xojo.Point value of (-1, -1) for displaying at mouse coordinates, Nil for displaying automatically based on element size and positioning, or a Xojo.Point with populated X and Y coordinates for static positioning. (15578)
CHANGED GraffitiPopupMenu’s Items property is now Private. Use methods to access data.
CHANGED GraffitiStyle no longer inherits from WebStyle to reduce confusion.
CHANGED GraffitiToolbarButton.IconObject is now of type Variant and handles values of Picture, WebPicture, or String. Strings are treated as URLs and can be images or SVG. (15758)
UPDATED GraffitiCalendar has now been updated to use DateTime.
UPDATED GraffitiTimePicker has been updated to use DateTime. (15599)
UPDATED GraffitiTimePicker has been fully updated to replace all Deprecations.
UPDATED GraffitiTimePicker library has been updated.
UPDATED GraffitiCalendar has been fully updated to replace all Deprecations.