Release 45

Release Information #

Platform Version Release Date
All R45 May 29, 2022
Target New Added Fixed Changed Removed
Desktop 2 35 19 13 2
Web 5 21 27 2 4

Desktop #

Type Change
NEW GraffitiMapViewer
NEW GraffitiPDFViewer
ADDED GraffitiCalendarRestriction
ADDED GraffitiCalendar has a new DisableDay( day as DateTime ) method.
ADDED GraffitiCalendar has a new EnableDay( day as DateTime ) method.
ADDED GraffitiCalendar has a new HideDaysOfWeek( days() as Integer ) method. (16780)
ADDED GraffitiCalendar has a new HideDaysOfWeek( ParamArray days as Integer ) method. (16780)
ADDED GraffitiCalendar has a new RestrictEventDisplay as Boolean = False property. (16780)
ADDED GraffitiCalendar has a new Restriction as GraffitiCalendarRestriction property.
ADDED GraffitiCalendar has a new RestrictSelection as Boolean = False property. (16780)
ADDED GraffitiCalendar has a new RestrictView as Boolean = False property. (16780)
ADDED GraffitiCalendar has a new ViewEnd as DateTime property. This property is read-only.
ADDED GraffitiCalendar has a new ViewStart as DateTime property. This property is read-only.
ADDED GraffitiCalendar now uses Bootstrap light and dark themes by default. Custom themes are still jQuery UI.
ADDED GraffitiCalendar now changes its appearance when the system is switched to Dark or Light color schemes.
ADDED GraffitiGrid now supports new lines in cell editing by holding Control while pressing Enter.
ADDED GraffitiHTMLtoPDF has a new BuildFailed event definition for when the FailureTimeout condition is met and the document has not been returned. (16789)
ADDED GraffitiHTMLtoPDF has a new ImageFailed( byref url as String ) as Boolean event definition for when an image is unable to be loaded. Modify URL with a BASE64 string representation of an image and return False to continue or Return True to cancel the build. (16789)
ADDED GraffitiHTMLtoPDF has a new FailureTimeout property that will raise the BuildFailed event when the time (in milliseconds) has passed. (16789)
ADDED GraffitiHTMLtoPDF has a new Scale as Double property that determines the output scale of the page images. Valid values are between 0 and 1. (16789)
ADDED GraffitiListbox has a new HeaderBackgroundColorAt( index as Integer, assigns value as Color ) method.
ADDED GraffitiListbox has a new HeaderBackgroundColorAt( index as Integer ) as Color function.
ADDED GraffitiListbox has a new HeaderBackgroundColorSetAt( index as Integer ) as Boolean method.
ADDED GraffitiListbox has a new HeaderBackgroundColorHoverAt( index as Integer, assigns value as Color ) method.
ADDED GraffitiListbox has a new HeaderBackgroundColorHoverAt( index as Integer ) as Color function.
ADDED GraffitiListbox has a new HeaderBackgroundColorHoverSetAt( index as Integer ) as Boolean function.
ADDED GraffitiListbox has a new HeaderBoldAt( index as Integer, assigns value as Boolean ) method.
ADDED GraffitiListbox has a new HeaderBoldAt( index as Integer ) as Boolean function.
ADDED GraffitiListbox has a new HeaderItalicAt( index as Integer, assigns value as Boolean ) method.
ADDED GraffitiListbox has a new HeaderItalicAt( index as Integer ) as Boolean method.
ADDED GraffitiListbox has a new HeaderTextColorAt( index as Integer, assigns value as Color ) method.
ADDED GraffitiListbox has a new HeaderTextColorAt( index as Integer ) as Color function.
ADDED GraffitiListbox has a new HeaderTextColorSetAt( index as Integer ) as Boolean function.
ADDED GraffitiListbox has a new HeaderTextColorHoverAt( index as Integer, assigns value as Color ) method.
ADDED GraffitiListbox has a new HeaderTextColorHoverAt( index as Integer ) as Color function.
ADDED GraffitiListbox has a new HeaderTextColorHoverSetAt( index as Integer ) as Boolean function.
ADDED GraffitiListbox has a new HeaderUnderlineAt( index as Integer, assigns value as Boolean ) method.
ADDED GraffitiListbox has a new HeaderUnderlineAt( index as Integer ) as Boolean method.
FIXED GraffitiCalendar once again properly applies jQuery UI themes. Requires a fully-qualified URL – such as “https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/themes/cupertino/jquery-ui.min.css” – be passed to LoadTheme. (16780)
FIXED GraffitiCalendar.DayClick event now passes the proper month in the parameter, previousl was monthNumber – 1. (16780)
FIXED GraffitiDateTimePicker should no longer throw an exception while painting days when the control is very small.
FIXED GraffitiEditor no longer uses an excessive amount of CPU while idle when creating very large lists of toolbar options. (16776)
FIXED GraffitiGrid’s EditField is once again properly positioned when scrolled. (16830)
FIXED GraffitiGrid’s EditField will now properly size itself when the selected cell is partially outside the bottom of the viewport. (16830)
FIXED GraffitiGrid should no longer encounter an OutOfBoundsException when sorting while a row contains nil value for the sort column.
FIXED GraffitiGrid column resizing once again functions properly when scrolled horizontally.
FIXED GraffitiGrid cells with embedded controls or containers no longer draw outside those embedded elements outside the Grid area.
FIXED GraffitiGrid will now preemptively disable BreakOnExceptions in the Sort method to avoid breaks on sorting of objects, which are handled internally.
FIXED GraffitiGrid should no longer leave empty space where rows should be drawn under some conditions due to scroll offsets.
FIXED GraffitiGrid should once again scroll vertically to display all rows.
FIXED GraffitiGrid once again properly selects rows when holding Shift and the first selected row has a higher index than the subsequently selected row. (16970)
FIXED GraffitiGrid now preserves selection on right-click. (16970)
FIXED GraffitiGrid’s ScrollIntoView method should now ensure that the entire row is visible.
FIXED GraffitiHTMLtoPDF will now attempt to load local and remote files by URL and stream them directly to BASE64 for rendering. (16789)
FIXED GraffitiHTMLtoPDF should no longer simply fail to output anything when image errors are encountered. Instead, these nodes may be removed from the resulting document. (16789)
FIXED GraffitiListbox once again properly changes border drawing when setting the Border property. (16825)
FIXED GraffitiSyntaxEditor no longer raises far more SelChange events than necessary.
CHANGED GraffitiCalendar’s CalendarView property has been renamed to “View”.
CHANGED GraffitiGrid no longer requires supplying scrollbars to the ScrollbarHorizontal and ScrollbarVertical properties programmatically at runtime.
CHANGED GraffitiGrid no longer requires supplying a DesktopTextField to the EditField property. This is now added programmatically at runtime.
CHANGED GraffitiGrid.EditField is now a DesktopTextArea.
CHANGED GraffitiGrid now uses Shift+MouseWheel for horizontal scroll.
CHANGED GraffitiPDFDocument.OutputQuality has moved to the GraffitiHTMLtoPDF class.
CHANGED GraffitiSyntaxEditor.CanUndo now synchronously reads data rather than relying solely on timed caching.
CHANGED GraffitiSyntaxEditor.CanRedo now synchronously reads data rather than relying solely on timed caching.
CHANGED GraffitiSyntaxEditor.IsDirty now synchronously reads data rather than relying solely on timed caching.
CHANGED GraffitiSyntaxEditor.SelStart now synchronously reads data rather than relying solely on timed caching.
CHANGED GraffitiSyntaxEditor.SelLength now synchronously reads data rather than relying solely on timed caching.
CHANGED GraffitiSyntaxEditor.SelText now synchronously reads data rather than relying solely on timed caching.
CHANGED GraffitiSyntaxEditor.Text now synchronously reads data rather than relying solely on timed caching.
REMOVED GraffitiGrid.ScrollbarHorizontal property.
REMOVED GraffitiGrid.ScrollbarVertical property.
NOTE GraffitiCalendar version updated to 3.10.0.
NOTE GraffitiCalendar has been updated to use DateTime. Users are encouraged, but not required due to Xojo’s built-in conversion, to follow suit.
NOTE GraffitiCalendar event parameters have changed significantly. Some no longer have parameters they once did, and corresponding properties should be used. User code updates will be necessary.
NOTE GraffitiDesktopControl has been cleaned up quite a bit to remove code and members that are not used since the addition of built-in JavaScript communication.

Web #

Type Change
NEW GraffitiMap.Geocoder Module
NEW GraffitiMap.Geocoder.Result
NEW GraffitiMap.Overlays Module
NEW GraffitiMap.Overlays.Image Class
NEW GraffitiPDFViewer
ADDED GraffitiCalendar has a new Print() method. (16946)
ADDED GraffitiDateTimePicker variants Locales enumerations now have ES and IT values for Spanish and Italian. (16882)
ADDED GraffitiDrag’s Drop event has a new data as JSONItem parameter. Currently this is used for passing row IDs when used with GraffitiGrid and GraffitiTree.
ADDED GraffitiKanbanItem has a new constructor that accepts a WebContainer parameter: Constructor(title as String, container as WebContainer) (16865)
ADDED GraffitiKanbanItem has a new IndicatorContainer as WebUIControl.Indicators property. (16865)
ADDED GraffitiMap.Directions.Route has a new ResolveNames as Boolean = False property. When True, text supplied in the Location property will be decoded by the Google Geocoder API automatically when the RouteChanged event is raised (which also occurs immediately upon display of the route). (16727)
ADDED GraffitiMapViewer.AddImageOverlay( overlay as GraffitiMap.Overlays.Image )
ADDED GraffitiMapViewer.ImageOverlayAt( index as Integer ) as GraffitiMap.Overlays.Image
ADDED GraffitiMapViewer.LastImageOverlayIndex() as Integer
ADDED GraffitiMapViewer.RemoveAllImageOverlays()
ADDED GraffitiMapViewer.RemoveImageOverlay( overlay as GraffitiMap.Overlays.Image )
ADDED GraffitiMenu has a new AddMenu( theControl as WebListBox, theMenu as GraffitiMenuItem, AutoHide as Boolean = False ) method for contextual actions on WebListBox only when there are selected rows. (16889)
ADDED GraffitiPopupMenu has a new AddItems(items() as GraffitiPopupMenuItem) method for adding multiple items from an array.
ADDED GraffitiPopupMenu has a new PopupButtonText as String property. (16862)
ADDED GraffitiPopupMenu has a new PopupButtonIndicator as WebUIControl.Indicators property. (16862)
ADDED GraffitiPopupMenu has a new PopupButtonStyle as GraffitiStyle property. (16862)
ADDED GraffitiPopupMenu has a new PopupButtonPressed event. (16862)
ADDED GraffitiTimeline has a new Print() method. (16946)
ADDED GraffitiTree.FindByUUID( uuid as String, inItems() as GraffitiTreeItem )
ADDED GraffitiWall has a new AutoHeight as Boolean property. When True, the wall will size itself to fit all panels and raise the Resized event with the updated dimensions. The height of the control should not be modified by using the Height property. (16925)
ADDED GraffitiWall has a new Resized(width as Integer, height as Integer) property that is raised when the Wall changes dimensions in the viewport. Note that these values will not match the Xojo object’s Width and Height properties, and are used for positioning other elements below the Wall. (16925)
FIXED GraffitiButton once again properly applies the BaseStyle property. (16900)
FIXED GraffitiButton once again properly applies the TextStyle property. (16900)
FIXED GraffitiButton caption no longer improperly word wraps when full caption should fit the display area. (16960)
FIXED GraffitiDateTimePickerSingle now properly handles setting Nil value to clear the display. (16882)
FIXED GraffitiDateTimePickerSingle now properly sets Locale from the inspector. (16884)
FIXED GraffitiDateTimePickerSingle should no longer display “Invalid Date” in the field under some circumstances when the value is cleared. (16882)
FIXED GraffitiDateTimePickerSingle’s popup header should now be properly localized. (16882)
FIXED GraffitiDateTimePickerMultiple now properly handles setting Nil value to clear the display. (16882)
FIXED GraffitiDateTimePickerMultiple now properly sets Locale from the inspector. (16884)
FIXED GraffitiDateTimePickerRange now properly handles setting Nil value to clear the display. (16882)
FIXED GraffitiDateTimePickerRange now properly sets Locale from the inspector. (16884)
FIXED GraffitiDateTimePickerRange should now properly fire the ValueChanged event under all scenarios. (16855)
FIXED GraffitiDrag will no longer initiate drag operations on WebListBoxes or GraffitiGrids that have no selection.
FIXED GraffitiGrid once again displays GraffitiGridColumn.ContextMenus on contextual actions. (16827)
FIXED GraffitiGrid column sort indicators no longer either never appear or appear behind the header button. (16843)
FIXED GraffitiGrid no longer removes default CSS classes when supplying GraffitiStyles to the Style* properties. Override individual CSS properties as needed. (16872)
FIXED GraffitiGrid once again honors AddRow calls when LockUpdate = True. (16890)
FIXED GraffitiGrid can no longer enter a state where the appropriate number of rows are not displayed for the height when using AddRow. (16890)
FIXED GraffitiMapViewer.RemoveRoute now works as expected.
FIXED GraffitiMenu now properly suppresses the native context menu and repositions the menu on Windows upon subsequent right clicks. (16843)
FIXED GraffitiMenu separators are once again visible.
FIXED GraffitiPagination no longer breaks the built-in Pagination control.
FIXED GraffitiPopupMenu no longer fails to display FontAwesome icons under very specific conditions.
FIXED GraffitiPopupMenuItem’s Constructor no longer defaults the Enabled property to False. (16746, 16747)
FIXED GraffitiStyle once again supports multiple states rather than only the first state created.
FIXED GraffitiTree no longer loses SelectedItem value when focus is lost.
FIXED GraffitiUploader now fails more gracefully on IOExceptions by streaming the uploaded file data to the Data property of the GraffitiWebFile object. In UploadComplete, users should check to see if File.Data is empty. If not, the user will need to handle that BASE64 data. (16647)
CHANGED GraffitiUploader now uses randomized file names when writing files to the filesystem. The GraffitiWebFile.Name property retains the original name. (16647)
CHANGED GraffitiUploader now writes files to the temporary directory when debugging, rather than the ApplicationData folder. (16647)
NOTE GraffitiPopupMenuItem Constructor has been refactored to simplify. See documentation for updated Constructor signatures.
REMOVED GraffitiDatePicker
REMOVED GraffitiHTMLEditor
REMOVED GraffitiPopupMenu.FindItem(itemIndex as Integer) as GraffitiPopupMenuItem. Use Item(index as Integer) As GraffitiPopupMenuItem
REMOVED GraffitiTimePicker