Loading document parsing libraries...
# Changelogs
Module
## Release 33 - Alpha1
Release Date: Sep 30, 2020
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | Initial Release |
## Release 33.1 - Alpha2
Release Date: Unreleased
| Type | Ticket | Description |
| --- | --- | --- |
| Fixed | None | GraffitiSignature no longer causes other scripts to fail to load due to an error when using Combined functionality. |
## Release 33.2 - Alpha3
Release Date: Unreleased
| Type | Ticket | Description |
| --- | --- | --- |
| Fixed | 14611 | GraffitiGrid once again allows drag reordering of columns without throwing a TypeMismatchException. |
| Fixed | None | GraffitiGrid once again allows drag reordering of rows without throwing a TypeMismatchException. |
| Fixed | None | GraffitiGrid once again sorts properly. |
| Fixed | None | GraffitiSidebar no longer displays a horizontal scrollbar. |
## Release 34 - Beta
Release Date: Nov 6, 2020
| Type | Ticket | Description |
| --- | --- | --- |
| Add | 14652 | GraffitiProgressBar now converted to Web 2.0. |
| Add | 14652 | GraffitiProgressRadial now converted to Web 2.0. |
| Add | 14652 | GraffitiProgressSemiCircle now converted to Web 2.0. |
| Add | None | GraffitiSlider now converted to Web 2.0. |
| Add | 14652 | GraffitiToolbar now converted to Web 2.0. |
| Add | 14652 | GraffitiUploader now converted to Web 2.0. |
| Add | 14620 | GraffitiTimeline has a new ItemRemoved(item as GraffitiTimelineItem) event for when the user clicks the remove button on items in the display. |
| Fixed | None | GraffitiStyle once again properly encodes the CSS content. |
| Fixed | 14617 | GraffitiTree no longer displays items twice which were added before the control was displayed in the browser. |
## Release 35
Release Date: Dec 22, 2020
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiGrid now has a built-in search panel for on-the-fly filtering of data. |
| Add | None | GraffitiButton now converted to Web 2.0. |
| Add | None | GraffitiLabel now converted to Web 2.0. |
| Add | None | GraffitiPDF now converted to Web 2.0. |
| Add | None | GraffitiAlertMessage has a new Draggable property. When True and the message has a title, it can be dragged around the display. |
| Add | None | GraffitiAlertMessage has a new Resizable property. When True, the alert can be resized from the East and South edges, as well as the SouthEast corner. |
| Add | None | GraffitiAlertMessage has a new MaximizeButton as Boolean property. When True and the message has a title, a Maximize button will be displayed in the titlebar. |
| Add | None | GraffitiAlertMessage has a new MinimizeButton as Boolean property. When True and the message has a title, a Minimize button will be displayed in the titlebar. |
| Add | 14740 | GraffitiFieldMask now has an Unmask(MaskedField as WebTextField) method to remove masking on the specified field. |
| Add | None | GraffitiGrid now has a new SearchColumnHeaderText as String property. |
| Add | None | GraffitiGrid now has a new SeachFieldPlaceholder as String property. |
| Add | None | GraffitiGrid now has a new SearchFieldText as String property. |
| Add | None | GraffitiGrid now has a new SearchLabelText as String property. |
| Add | None | GraffitiGrid now has a new SearchPanelVisible as Boolean property. |
| Add | 14802 | GraffitiTextField now has a CaseModifiers enumeration with the following values: 0 = None, 1 = Lower, 2 = Upper for use with the CaseModifier property. |
| Add | 14802 | GraffitiTextField now has a CaseModifier As CaseModifiers property for controlling the capitalization of value text. |
| Fixed | None | GraffitiCalendar now properly references FontAwesome. |
| Fixed | None | GraffitiSignature once again properly sizes images loaded from data. |
| Fixed | None | GraffitiStyle no longer overwrites the default state with subsequently loaded states. |
| Fixed | 14740 | GraffitiTextField will now remove the input mask when setting the Mask property to an empty string. |
| Changed | 14775 | GraffitiWebGrid no longer relies on round-trip packets when resizing in order to update the display. |
| Changed | None | Project file updated to 2020R2. |
## Release 36
Release Date: Jan 21, 2021
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiKanban |
| Added | None | GraffitiGridColumn has a new ContextMenu as GraffitiMenuItem property. GraffitiMenuItems should have already been added using AddMenu of a GraffitiMenu item in order to function. Right-clicking a cell in the specified column will set that cell to the current selection then display the menu. Menu handler code should check current selection of the GraffitiGrid instance when performing operations. |
| Changed | None | GraffitiGrid.toCSV has two new optional parameters: columnSeparator as String = ",", rowSeparator as String = "". An empty rowSeparator value will default to EndOfLine.UNIX. |
## Release 37
Release Date: Feb 16, 2021
| Type | Ticket | Description |
| --- | --- | --- |
| New | 15009 | GraffitiSlideshow |
| New | None | GraffitiThemer |
| Added | None | GraffitiAlertMessage has a new Indicator as WebUIControl.Indicators property. |
| Added | None | GraffitiAlertButton now has an Indicator as WebUIControl.Indicators property. |
| Added | None | GraffitiButton has a new IndicatorSpinner property for setting the color of the status icon. |
| Added | None | GraffitiButton has a new AutoDisableShowSpinner as Boolean = False property for determining if the status icon should be shown when the button is automatically disabled. |
| Added | None | GraffitiButton has a new SpinnerShow method for hiding the caption and showing the status icon. |
| Added | None | GraffitiButton has a new SpinnerHide method for showing the caption and hiding the status icon. |
| Added | 15030 | GraffitiCurrencyField now has a States enumeration and State property for displaying validation result. |
| Added | 15030 | GraffitiDatePickerSingle now has a States enumeration and State property for displaying validation result. |
| Added | 15030 | GraffitiDatePickerMultiple now has a States enumeration and State property for displaying validation result. |
| Added | 15030 | GraffitiDatePickerRange now has a States enumeration and State property for displaying validation result. |
| Added | 15003 | GraffitiKanban now has RemoveAll, RemoveAllItems, RemoveAllListItems, and RemoveAllMenuItems methods. |
| Added | 15003 | GraffitiKanbanColumn now has RemoveAllItems and RemoveAllMenuItems methods. |
| Added | 15003 | GraffitiKanbanItem now has a RemoveAllListItems methods. |
| Added | None | GraffitiMenuItem has a new Value as Boolean = False property. When True, the item will show a checkmark in the icon portion of the item. When False, it will display the provided Icon value. |
| Added | 14945 | GraffitiPDF now has a DocumentReady event that is triggered when the PDF has been completely generated by the Output method. |
| Added | 15030 | GraffitiPopupMenu now has a States enumeration and State property for displaying validation result. |
| Added | 15030 | GraffitiTimePicker now has a States enumeration and State property for displaying validation result. |
| Added | None | GraffitiWall now animates layout changes. |
| Fixed | None | GraffitiCalendar once again resizes properly. |
| Fixed | None | GraffitiCard now applies non-standard theme values properly. |
| Fixed | 14958 | GraffitiGrid no longer creates extraneous scrollable space when removing rows. |
| Fixed | 14958 | GraffitiGrid vertical scrollbar should now draw the proper amount of scrollable space. |
| Fixed | 14964 | GraffitiGrid will no longer fire HeaderClick event after resizing a column. |
| Fixed | 14964 | GraffitiGrid will no longer fire sort operations after resizing a column. |
| Fixed | None | GraffitiHTMLEditor now properly resets its contents' CSS properties to avoid issues with custom Bootstrap themes. |
| Fixed | None | GraffitiKanbanListItems now properly include an HREF attribute. |
| Fixed | 14964 | GraffitiMenu now retains MenuItem properties client-side between shows. |
| Fixed | None | GraffitiMenu once again displays items with IsSeparator = True when cloned. |
| Fixed | None | GraffitiSidebar once again positions properly. |
| Fixed | None | GraffitiSlider once again properly tracks mouse changes by dragging the handle. |
| Fixed | None | GraffitiSlider tick labels now position properly on vertical sliders. |
| Fixed | 14993 | GraffitiTimeline now properly handles adding Items and Groups when none were added in the Open event. |
| Fixed | 15007 | GraffitiToolbar buttons no longer expand to fill the entire component area regardless of width or flex settings. |
| Fixed | None | GraffitiUploader stability further enhanced. |
| Fixed | None | GraffitiUploader theme support improvements. |
| Fixed | None | GraffitiWall once again resizes properly. |
| Changed | None | GraffitiAccordionMenu entirely rebuilt for Bootstrap theming support. |
| Changed | None | GraffitiAlert now uses the current Bootstrap4 theme in all instances, and the outdated custom themes have been removed. |
| Changed | None | GraffitiAlertMessage constructors no longer have a parameter for theme. |
| Changed | None | GraffitiCard Style properties are now of type WebUIControl.Indicators. This may require rebuilding of UIs in some scenarios. |
| Changed | None | GraffitiGrid theme support improvements. |
| Changed | None | GraffitiKanbanItem.RemoveItem renamed to GraffitiKanbanItem.RemoveListItem for consistency. |
| Changed | None | GraffitiLikert updated to theme more appropriately |
| Changed | None | GraffitiLikert no longer has enumerations for Style properties and instead uses WebUIControl.Indicators values. |
| Changed | None | GraffitiLikertQuestion Style properties are now of type WebUIControl.Indicators. |
| Changed | None | GraffitiMenu now uses the current Bootstrap theme. |
| Changed | 14945 | GraffitiPDF no longer relays the PDF file data back to the server. This will reduce overhead significantly and clears an issue that was being encountered even when data was not desired server-side. |
| Removed | 14945 | GraffitiPDF no longer has a FileAvailable event that returns the data of the generated PDF. |
| Removed | None | GraffitiAlert.MessageTypes Enumeration |
| Removed | None | GraffitiAlert.MessageThemes Enumation |
| Removed | None | GraffitiAlertMessage.Theme property |
| Removed | None | GraffitiPopupMenu.Skins Enumeration |
| Removed | None | GraffitiPopupMenu.ContainerSkin property |
| Removed | None | GraffitiPopupMenu.DropdownSkin property |
## Release 38
Release Date: Mar 29, 2021
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiFavIcon |
| Added | None | There is a new Session Attribute named "LoadFA". When not added or has a value of True, FontAwesome will be loaded into the browser. When set to False, FontAwesome will not be loaded. Disabling FontAwesome is not recommended outside of debugging speed issues. |
| Added | 15142 | GraffitiButton has a new Cancel as Boolean property. When True, the button's Pressed event will fire if the user presses the Enter/Return key on any component that exists as a child of the same parent and the event is able to bubble up through the DOM. |
| Added | 15142 | GraffitiButton has a new Default as Boolean property. When True, the button's Pressed event will fire if the user presses the Enter/Return key on any component that exists as a child of the same parent and the event is able to bubble up through the DOM. |
| Added | 15142 | GraffitiButton has a new Press method for raising the Pressed event. This does not trigger client-side autodisable or spinner. |
| Added | None | GraffitiEmailValidator will now respond to any change made to an attached field with a 100ms timeout. |
| Added | None | GraffitiEmailValidator will now apply the is-invalid Bootstrap class to the field when there is a suggestion. |
| Added | None | GraffitiGrid has a new Color EditType. |
| Added | 15112 | GraffitiGrid has a new PopupMenu EditType. |
| Added | 15112 | GraffitiGrid has a new PopupMenu Formatter. |
| Added | 15112 | GraffitiGrid has a new Multiselect EditType. |
| Added | 15112 | GraffitiGrid has a new Multiselect Formatter. |
| Added | None | GraffitiGrid now has a RowExpanded(row as GraffitiGridRow) event. |
| Added | None | GraffitiGrid now has a RowCollapsed(row as GraffitiGridRow) event. |
| Added | None | GraffitiGrid now has a TreeView property. When True, the component will be setup for displaying parent and child relationships between rows. Sorting is disabled in this mode. |
| Added | None | GraffitiGridColumn now has a IntegerButtonIndicator as WebUIControl.Indicators property. |
| Added | None | GraffitiGridColumn now has a IntegerValueMax as Integer = 100 property. |
| Added | None | GraffitiGridColumn now has a IntegerValueMin as Integer = 0 property. |
| Added | 15112 | GraffitiGridColumn has a new PopupMenuAllowEmpty as Boolean = True property. |
| Added | 15112 | GraffitiGridColumn has a new PopupMenuPlaceholder as String = "(Empty)" property. |
| Added | 15112 | GraffitiGridColumn has a new PopupMenuValue() as String property. |
| Added | None | GraffitiGridColumn has a new ProgressAnimated as Boolean = False property. |
| Added | None | GraffitiGridColumn has a new ProgressStriped as Boolean = False property. |
| Added | None | GraffitiGridRow now has a Expandable as Boolean = False property for supporting TreeView mode. |
| Added | None | GraffitiGridRow now has a Expanded as Boolean = False property for supporting TreeView mode. |
| Added | None | GraffitiGridRow has a new ProgressIndicator as WebUIControl.Indicators property. |
| Added | 15128 | GraffitiTimeline now supports the following locales: es, es_ES, ja, ja_JP |
| Added | 15082 | GraffitiUploader now supports transmitting thumbnail images when adding GraffitiWebFiles from Xojo using the AddFile method. Be mindful of file sizes. |
| Added | None | GraffitiWebFile now has a Tag as Variant property. |
| Fixed | 15142 | GraffitiButton now captures Enter/Return when focused rather than allowing those actions to bubble up unexpectedly. |
| Fixed | 15142 | GraffitiButton now responds to pressing the Spacebar when it has focus. |
| Fixed | 15142 | GraffitiButton now responds to touch events. |
| Fixed | 15152 | GraffitiCalendar no longer adds events twice when calling AddEvent in the Open or Shown events while LockBuffer = False. |
| Fixed | None | GraffitiCalendar should no longer fail to display when using only the "Today" button on the left side of the header. |
| Fixed | 15139 | GraffitiCurrencyField no longer initializes event listeners twice when placed on a WebDialog. |
| Fixed | 15108 | GraffitiPDF should now do a better job of preserving the set font face when setting only the style using SetFontStyle. |
| Fixed | 15095 | GraffitiPopupMenu now uses the current theme's font face and size for form controls in the primary display. |
| Fixed | 15095 | GraffitiPopupMenu now uses the current theme's font face and size for form controls on the in-popup search field. |
| Fixed | 15092 | GraffitiPopupMenu will no longer show an empty square on some browsers when AllowAdd = False and no icons are defined for the items. Whitespace normalized between all control types. |
| Fixed | 15095 | GraffitiPopupMenu's dropdown arrow positioning has been modified to appear more correct in Bootstrap 4. |
| Fixed | 15098 | GraffitiSignature should once again draw properly. |
| Fixed | None | GraffitiSignature now uses chunked sending for large images and should no longer trigger unknown exceptions in the Xojo framework that cannot be handled. |
| Fixed | None | GraffitiTimeline now properly displays a themed background. |
| Fixed | None | Instances where creating new JSONItem instances were failing in 2021R1 have been fixed. |
| Changed | None | GraffitiButtonSegment rebuilt. Massive API changes. |
| Changed | 15108 | GraffitiPDF now explicitly sets Helvetica Normal as the default font when calling NewDocument. If you wish to use a different font face and/or style, set it using SetFont after your NewDocument call. |
| Note | None | This version contains massive changes to support file loading for all products. Things may be broken that I didn't catch. |
| Note | None | Cleaned up method and property scopes in GraffitiControlWrapper. |
## Release 39
Release Date: Apr 15, 2021
| Type | Ticket | Description |
| --- | --- | --- |
| New | 15163 | GraffitiRectangle |
| New | 15182 | GraffitiTabPanel |
| Added | 15166 | GraffitiCalendar now supports showing Tooltips on events during hover. |
| Added | 15166 | GraffitiCalendarEvent now has a Tooltip as String property for providing text to display when the cursor is over an event. |
| Added | None | GraffitiGrid has a new AddRowSet(rs as RowSet) method for loading rows directly from databases. Honors LockUpdate. |
| Added | None | GraffitiGrid has a new AddRows(Rows() as GraffitiGridRow) method for loading multiple rows more easily. Honors LockUpdate. |
| Added | 15198 | GraffitiGrid has a new EditTypes.TextWithButton editor |
| Added | 15198 | GraffitiGrid has a new EditorButtonPressed(Row as GraffitiGridRow, Column as GraffitiGridColumn) event. |
| Added | 15198 | GraffitiGridColumn has a new EditorButtonCaption as String, which accepts HTML or custom-formatted FontAwesome strings "<fas fa-search>" for setting the caption of the button for TextWithButton editors. |
| Added | 15198 | GraffitiGridColumn has a new EditorButtonIndicator as WebUIControl.Indicators property for changing the style of the editor button for columns whose Editor = EditTypes.TextWidthButton. |
| Added | 15198 | GraffitiGridColumn has a new EditorButtonTooltip as String for setting tooltip text on the editor button for columns whose Editor = EditTypes.TextWithButton. |
| Added | 15198 | GraffitiGridColumn has a new EditorFieldReadOnly as Boolean = False property for disabling the field, leaving the button enabled for operations. |
| Added | None | GraffitiGridRow has a new DatabaseRecord as DatabaseRow property which is populated automatically when using GraffitiGrid.AddRowSet, or may be set manually when loading data without using this method. |
| Added | 15181 | GraffitiSlider has a new StyleTick as GraffitiStyle property for applying CSS to tick points that are not in the current selection. |
| Added | 15181 | GraffitiSlider has a new StyleTickSelected as GraffitiStyle property for applying CSS to tick points that are in the current selection. |
| Fixed | None | GraffitiButton should no longer encounter NilObjectExceptions in certain very specific scenarios when embedding in dynamically added containers. |
| Fixed | 15177 | GraffitiGrid no longer has display issues with the HTML FormatType when mixing line breaks with other tags. |
| Fixed | 15158 | GraffitiMenu no longer encounters a JavaScript exception when a GraffitiMenuItem is bound to a GraffitiToolbarButton on hover. |
| Fixed | 15181 | GraffitiSlider tooltip point is once again properly positioned when TooltipPosition is set to Top or Bottom. |
| Fixed | 15190 | GraffitiToggle now better handles TrueStyle and FalseStyle property changes and assigning the associated CSS classes. |
| Note | None | GraffitiGridColumn.ButtonCaption is now GraffitiGridColumn.HeaderButtonCaption |
| Note | None | GraffitiGridColumn.ButtonIndicator is now GraffitiGridColumn.HeaderButtonInidicator |
| Note | None | GraffitiGridColumn.ButtonTooltip is now GraffitiGridColumn.HeaderButtonTooltip |
| Note | None | GraffitiGridColumn.IntegerButtonIndicator has been removed in favor of GraffitiGridColumn.EditorButtonIndicator |
| Note | None | Parts of the demo have been reworked to allow direct page loading via Session.HashTag. |
## Release 40
Release Date: May 24, 2021
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiCheckbox |
| New | None | GraffitiRadioButton |
| Added | 15287 | GraffitiCamera has a new IsMobile as Boolean method for determining if the current device runs iOS or Android. |
| Added | 15287 | GraffitiCamera has a new FacingMode as FacingModes property for determining which camera to bind to on mobile OSes. |
| Added | 15287 | GraffitiCamera has a new FacingModes enumeration: 0 = User, 1 = Environment. |
| Added | 15355 | GraffitiGrid now supports CTRL\CMD+CLICK followed by SHIFT+CLICK for multiple row deselection. |
| Added | 15329 | GraffitiGrid now supports cell values of DateTime. |
| Added | 15330 | GraffitiGrid has a new SearchRows(RowSetID as Integer) as GraffitiGridRow for searching rows loaded using the AddRowSet method. |
| Added | 15330 | GraffitiGrid has a new SearchRows(column as GraffitiGridColumn, value as Variant, limit as Integer = -1) as GraffitiGridRow method for searching rows loaded using the AddRowSet method. |
| Added | None | GraffitiGrid now has a FormatTypes.Button for defining a column that displays a button. Uses the EditorButtonIndicator and EditorButtonTooltip properties for customzation. Clicking the button raises the CellClick event. |
| Added | None | GraffitiGrid has a new FormatTypes.ButtonGroup for displaying SegmentedButton-like controls in cells whose value is a GraffitiGridButtonGroup. |
| Added | None | GraffitiGrid has a new FormatTypes.Chart for displaying charts in column cells. |
| Added | None | GraffitiGrid has two new classes: GraffitiGridButtonGroup and GraffitiGridButtonGroupItem. |
| Added | None | GraffitiGrid has new classes for various chart types: GraffitiGridChartLine, GraffitiGridChartBar, GraffitiGridChartTristate, GraffitiGridChartDiscrete, GraffitiGridChartBullet, GraffitiGridChartPie, GraffitiGridChartBoxPlot. |
| Added | 15244 | GraffitiGrid will now attempt to update row values automatically on CellChange. |
| Added | None | GraffitiGrid's EditorButtonPressed event has a new parameter Value as String which will contain the value of the field at the time the button was pressed. |
| Added | None | GraffitiGridRow has a new DatabaseRowSet property for storing the original RowSet associated with this row when adding via AddRowSet. |
| Added | 15244 | GraffitiGridRow has a new DatabaseRowSetIDField as String property for update operations. |
| Added | 15330 | GraffitiGridRow has a new DatabaseRowSetIDValue as Integer property for storing the ID field from the RowSet. |
| Added | 15361 | GraffitiImagePicker has a new Value(isBASE64 as Boolean = True, assigns newValue as String) method for assigning the value as either BASE64 or URL. For URL, use as: imagePicker.Value(False) = urlString. |
| Added | 15310 | GraffitiImagePicker.Value has a new overridden method: Value(assigns BASE64Data as String) |
| Added | 15310 | GraffitiImagePicker.Value has a new overridden method: Value(assigns File as GraffitiWebFile) |
| Added | 15310 | GraffitiImagePicker.Value has a new overridden method: Value(assigns p as Picture) |
| Added | 15282 | GraffitiKanbanColumn has a new CanMove as Boolean = True property. When False the column will not be draggable. |
| Added | 15257 | GraffitiMenuItem has a new IconObject as Variant property. Accepts Picture, WebPicture, WebFile, and String URLs. |
| Added | None | GraffitiPDF's DocumentReady event has a new file as GraffitiWebFile = Nil parameter. When UploadPath is not Nil, GraffitiPDF will create and write a PDF file in the specified directory and return a representation of that file in the parameter. |
| Added | 15351 | GraffitiPopupMenu has a new ReserveIconSpace as Boolean = False property. When True, a fixed width area equal to the displayed icon width (when present) for a row will be reserved whether an icon is assigned or not. |
| Added | 15220 | GraffitiRectangle has a new IsOval as Boolean = False property. When set to True the control will draw as an oval and override the Border*Rounded properties. |
| Added | 15290 | GraffitiTabPanel has a new Resizing(newWidth as Integer, newHeight as Integer) event that will fire at most every 250ms when the size of the control is changed. |
| Added | 15249 | GraffitiWallPanel has a new PercentHeight as Integer = 0 property for setting the panel to occupy a percentage height of the control's viewable area (without scoll). When PercentHeight = 0 the WebContainer's original height is used. |
| Fixed | 15285 | GraffitiBarcodeReader once again decodes the video streams properly. |
| Fixed | 15308 | GraffitiCamera now functions properly when embedded in a Xojo WebTabPanel. |
| Fixed | None | GraffitiFontAwesome now respect the BaseStyle property value. |
| Fixed | None | GraffitiGrid now attempts to clear it's in-browser component reference on close in order to release more client-side memory. |
| Fixed | 15260 | GraffitiGrid's ScrollTo* methods once again actually scroll the grid. |
| Fixed | 15317 | GraffitiGridColumns once again honor Visible = False. |
| Fixed | 15310 | GraffitiImagePicker now attempts to correct BASE64 strings supplied without the appropriate prefix. |
| Fixed | 15282 | GraffitiKanban now properly applies IndicatorSubtitle to column objects when set before being added. |
| Fixed | 15282 | GraffitiKanban now properly applies IndicatorTitle to column objects when set before being added. |
| Fixed | 15282 | GraffitiKanbanColumn button is no longer visible when HasButton = False at initialization. |
| Fixed | 15282 | GraffitiKanbanColumn menu button is no longer visible when HasMenuButton = False at initialization. |
| Fixed | 15282 | GraffitiKanbanItem will no longer show an empty space when HasButton = False and no Avatar is supplied. |
| Fixed | 15275 | GraffitiLabel will no longer unnecessarily encode spaces to the &nbsp; entity for content inside of contained HTML elements. |
| Fixed | 152775 | GraffitiLabel once again properly sets the MaxHeight of the element in the browser when changing it via Xojo code. |
| Fixed | 15231 | GraffitiMenu no longer conflicts with Xojo's built-in ContextMenus, resulting in failure of the Xojo menus to display due to a JavaScript exception. |
| Fixed | None | GraffitiPDF once again returns data to the application when the UploadPath is not Nil. |
| Fixed | 15351 | GraffitiPopupMenu's dropdown once again auto-sizes to fit the contained rows' text. |
| Fixed | 15372 | GraffitiTree now applies GraffitiStyles when setting the BaseStyle property. |
| Fixed | 15372 | GraffitiTree and GraffitiTreeItems have fewer color properties explicitly set in CSS, relying more on inheritance. |
| Fixed | 15249 | GraffitiWall Panel WebContainer children are once again properly hidden when calling Remove of RemoveAll. |
| Removed | None | Removed unused enumerations from GraffitiTabPanel. |
| Note | None | For cell values in GraffitiGrid Chart columns, the value must be an array of either Integer or Double. |
| Note | 15285 | ZXing library for GraffitiBarcodeReader version updated to 0.18.5 |
| Changed | 15374 | GraffitiCalendar's ViewDate property now operates the same as the underlying library in that it is guaranteed to be somewhere within the confines of the current view. From the documentation: For month view, it will always be sometime between the first and last day of the month. For week views, it will always be sometime between the first and last day of the week. |
| Changed | 15244 | GraffitiGrid's AddRowSet method has a new optional parameter: idField as String = "id". This should be set to a unique integer column in your database. |
| Changed | 15333 | GraffitiPopupMenu no longer uses FontAwesome for the dropdown arrow. |
| Changed | None | GraffitiPopupMenu has received an optimization pass. There is likely more to do here, but it should load more quickly. |
## Release 41
Release Date: Aug 2, 2021
| Type | Ticket | Description |
| --- | --- | --- |
| New | 15478 | GraffitiGridBadge class for adding Badges to cells in columns with the Formatter of FormatTypes.Badge. |
| New | None | GraffitiOrgChart |
| New | None | GraffitiResponsive |
| Added | 15638 | GraffitiAccordionMenuItem now has an Icon property for displaying a FontAwesome icon to the left of the item text. |
| Added | None | GraffitiAlertMessage has a new ContentStyle as WebStyle property. |
| Added | 15465 | GraffitiCalendar has a new AddRowSet(rs as RowSet) method. |
| Added | 15465 | 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. |
| Added | 15465 | GraffitiCalendarEvent has a new UpdateDatabaseRecord() method for commiting all current values to the database. |
| Added | 15465 | 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. |
| Added | 15465 | GraffitiCalendarEvent has a new DatabaseRecord as DatabaseRow property. This is only set when an event is loaded using AddRowSet. |
| Added | 15465 | GraffitiCalendarEvent has a new DatabaseRowSet as RowSet property. This is only set when an event is loaded using AddRowSet. |
| Added | 15465 | 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. |
| Added | 15433 | GraffitiCamera.FrameReceived now has an additional parameter: frame as Picture |
| Added | None | GraffitiDatePickerMultiple has a new Icon as String = "far fa-calendar-alt" property. |
| Added | None | GraffitiDatePickerMultiple has a new ButtonIndicator as WebUIControl.Indicators property. |
| Added | None | GraffitiDatePickerMultiple has a new ButtonVisible as Boolean = True property. |
| Added | None | GraffitiDatePickerMultiple has a new ClearButtonIndicator as WebUIControl.Indicators property. |
| Added | None | GraffitiDatePickerMultiple has a new ClearButtonStyle as GraffitiStyle property. |
| Added | None | GraffitiDatePickerSingle has a new Icon as String = "far fa-calendar-alt" property. |
| Added | None | GraffitiDatePickerSingle has a new ButtonVisible as Boolean = True property. |
| Added | None | GraffitiDatePickerSingle has a new ButtonIndicator as WebUIControl.Indicators property. |
| Added | None | GraffitiDatePickerSingle has a new ClearButtonIndicator as WebUIControl.Indicators property. |
| Added | None | GraffitiDatePickerSingle has a new ClearButtonStyle as GraffitiStyle property. |
| Added | 15415 | GraffitiGrid has a new DatabaseAutoUpdate as Boolean = True property for disabling RowSet updates when cell values are changed by the user. |
| Added | 15478 | GraffitiGrid now supports a Badge column type: FormatTypes.Badge. |
| Added | None | GraffitiGrid's client-side search now filters more column types. |
| Added | 15485 | GraffitiGridColumn now has a WidthTypes enumeration (0 = Pixels, 1 = Percentage) |
| Added | None | 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 | 15641 | 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. |
| Added | None | GraffitiMenu now has a TriggerOn enumeration that replaces the previous Trigger* constants: 0 = None, 1 = Right, 2 = Left, 3 = Hover |
| Added | 15592 | GraffitiPDFTable cells can now contain line breaks in the form of "\n". |
| Added | 15763 | GraffitiPopupMenu has a new IsPopupVisible as Boolean = False property which is set the PopupMenu's popup is shown or hidden. |
| Added | None | GraffitiPopupMenu has a new Item(index as Integer) as GraffitiPopupMenuItem method. |
| Added | None | GraffitiPopupMenu has a new LastItemIndex method to replace ItemCount. |
| Added | 15763 | GraffitiPopupMenu has a new PopupShown event that is raised when the user shows the Popup in the browser. |
| Added | 15763 | GraffitiPopupMenu has a new PopupHidden event that is raised when the user hides the Popup in the browser. |
| Added | 15679 | GraffitiRectangle now has a MouseEnter event. |
| Added | 15679 | GraffitiRectangle now has a MouseExit event. |
| Added | 15550 | GraffitiStyle.GetInstance has a new overloaded shared method: GetInstance( inSession as WebSession, withName as String, state as GraffitiStyle.States = GraffitiStyle.States.Default ) |
| Added | None | 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 | 15430 | GraffitiTree has a new CustomIcons as Boolean = False property for overriding the default icon values with those specified in the independent properties. |
| Added | 15573 | GraffitiWall has a new AnimationTime as Integer = 500 property for setting animation timing in milliseconds. |
| Fixed | None | All classes once again draw in the layout editor. |
| Fixed | 15709 | 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. |
| Fixed | None | GraffitiButtonSegment can no longer enter a state where the button themes don't update to match the current user's Dark Mode setting. |
| Fixed | 15481 | GraffitiButtonSegment should once again display on old browsers that don't support theme mode detection. |
| Fixed | None | GraffitiCalendar no longer encounters an UnsupportedOperationException when dragging an AllDay event to a day/time slot. |
| Fixed | 15433 | GraffitiCamera.RequestFrame now uses the maximum available quality setting. |
| Fixed | 15433 | GraffitiCamera.Play has a new frameSize as Size = Nil parameter for setting the resolution of the camera stream. Defaults to 1920x1080. |
| Fixed | None | GraffitiDatePickerMultiple once again exposes the Day*Highlight properties. |
| Fixed | None | GraffitiDatePickerMultiple can no longer enter a state where a StackOverflowException can be raised when changing some properties. |
| Fixed | 15401 | GraffitiDatePickerRange Hightlight and Enabled properties for weekdays are once again exposed in the inspector. |
| Fixed | 15401 | GraffitiDatePickerRange once again properly updates the display with provided dates for ValueStart and ValueEnd. |
| Fixed | 15401 | GraffitiDatePickerRange will no longer erroneously parse date values under certain circumstances. |
| Fixed | None | GraffitiDatePickerRange's To label can no longer extend outside the vertical area of the control. |
| Fixed | None | GraffitiGrid editors no longer throw a JavaScript exception related to key presses. |
| Fixed | 15481 | GraffitiGrid no longer fires the CellClick event twice in some conditions. |
| Fixed | None | GraffitiGrid's client-side search now updates filter criteria when a key is pressed in the textbox. |
| Fixed | 15689 | GraffitiGrid's EditType.Double no longer fails on locales that do not have a thousands separator. |
| Fixed | 15732 | GraffitiGridColumn now honors DecimalPlacesMax and DecimalPlacesMin for Currency column types. |
| Fixed | 15481 | GraffitiGridRow.DatabaseRowSetIDValue is now actually populated. |
| Fixed | 15510 | GraffitiGridRow.Selected is once again populated as expected in addition to the GraffitiGrid.SelectedRows property. |
| Fixed | 15649 | GraffitiHTMLEditor no longer fails to insert tables under most conditions. |
| Fixed | 15657 | GraffitiHTMLEditor will no longer insert errant cells when clicking the buttons for inserting rows or columns. |
| Fixed | 15655 | GraffitiHTMLEditor.InsertHTML once again functions. |
| Fixed | 15654 | GraffitiHTMLEditor overlays no longer have enormously sized text. |
| Fixed | 15651 | GraffitiHTMLEditor no longer adds empty lines to table cells that imported via setting the HTML property or using InsertHTML. |
| Fixed | 15641 | GraffitiHTMLEditor once again inserts images properly. |
| Fixed | None | GraffitiMenuItem icons now have an appropriate amount of right-side space under all circumstances. |
| Fixed | 15540 | GraffitiSidebar no longer shows a vertical scrollbar on Windows Edge and Chrome when not needed. |
| Fixed | 15550 | GraffitiStyle.AddTo no longer enters a state where it's in-browser interval is never cleared even if the element was found. |
| Fixed | 15550 | GraffitiStyle.GetInstance's State parameter is now Optional. State as GraffitiStyle.States = GraffitiStyle.States.Default |
| Fixed | None | GraffitiTextField label can no longer become taller than the control's height. |
| Fixed | 15695 | GraffitiTextField.Enabled once again functions properly. |
| Fixed | 15599 | GraffitiTimePicker again properly updates properties on initial load. |
| Fixed | None | GraffitiTimePicker now disables the built-in autocomplete of supporting browsers. |
| Fixed | None | GraffitiTimePicker should no longer fire the ValueChange event multiple times when the user has finished selecting a time. |
| Fixed | None | GraffitiTimePicker will no longer attempt to raise the MouseEnter and MouseExit events if they have not been implemented for that control instance. |
| Fixed | 15599 | GraffitiTimePicker's AutoClose property again sets properly in the browser. |
| Fixed | None | GraffitiToolbarButton text will no longer overflow the display area. |
| Fixed | None | GraffitiToolbarButtons that are Picture objects are now properly displayed when using the Constructor method. |
| Fixed | 15372 | GraffitiTree no longer always shows scrollbars on macOS when the system scrollbar setting is not "When scrolling". |
| Fixed | 15430 | GraffitiTree once again honors custom icons. |
| Fixed | None | GraffitiUploader will now create an UploadPath beside the application binary if one is not specified. |
| Fixed | 15746 | GraffitiUploader now uses larger chunks for uploading thanks to a fix in the Xojo framework. Fix is only present in 2021r2+. |
| Fixed | 15547 | GraffitiWall once again sizes columns properly to their container size. |
| Removed | 15433 | GraffitiCamera.Snapshot |
| Removed | None | GraffitiHTMLEditor events that were mostly vestigial and caused slow response times between the client and server. |
| Removed | None | GraffitiHTMLEditor.InsertImageClick event |
| Removed | None | GraffitiHTMLEditor.InsertLinkClick event |
| Removed | None | GraffitiHTMLEditor.InsertVideoClick event |
| Removed | None | GraffitiMenu no longer has Trigger* constants. |
| Removed | None | GraffitiPopupMenu.ItemCount (See GraffitiPopupMenu.LastItemIndex) |
| Removed | 15763 | GraffitiPopupMenu.ClosePopup (See IsPopupVisible property). |
| Removed | 15763 | GraffitiPopupMenu.OpenPopup (See IsPopupVisible property). |
| Changed | None | GraffitiDatePickerSingle's ClearButton property has been renamed to ClearButtonVisible |
| Changed | None | GraffitiDatePickerMultiple's ClearButton property has been renamed to ClearButtonVisible |
| Changed | 15478 | 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. |
| Changed | 15578 | 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. |
| Changed | None | GraffitiPopupMenu's Items property is now Private. Use methods to access data. |
| Changed | None | GraffitiStyle no longer inherits from WebStyle to reduce confusion. |
| Changed | 15758 | 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. |
| Updated | None | GraffitiCalendar has now been updated to use DateTime. |
| Updated | 15599 | GraffitiTimePicker has been updated to use DateTime. |
| Updated | None | GraffitiTimePicker has been fully updated to replace all Deprecations. |
| Updated | None | GraffitiTimePicker library has been updated. |
| Updated | None | GraffitiCalendar has been fully updated to replace all Deprecations. |
## Release 41.1
Release Date: Aug 5, 2021
| Type | Ticket | Description |
| --- | --- | --- |
| Added | None | GraffitiRectangle has a new Pressed event. |
| Fixed | None | All controls should now render more quickly in the IDE's Layout Editor. |
| Fixed | None | GraffitiFavIcon no longer fails when using Combined Resources. |
| Fixed | 15766 | GraffitiRectangle's MouseExit event now works as expected. |
| Removed | None | GraffitiMenu no longer has an AddMenu method that accepts a GraffitiToolbarButton parameter due to unavoidable issues with load timing. |
## Release 42
Release Date: Sep 2, 2021
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiGridHyperlink |
| New | None | GraffitiGridPercentScale |
| New | None | GraffitiPreloader |
| New | None | GraffitiSpinner |
| New | None | GraffitiStepBar |
| New | None | GraffitiTour |
| Added | None | GraffitiGrid has a new FooterClick(Column as GraffitiGridColumn) event. |
| Added | None | GraffitiGrid has a new FooterContextClick(Column as GraffitiGridColumn) event. |
| Added | None | GraffitiGrid has a new FooterRow as GraffitiGridRow property. |
| Added | None | GraffitiGrid has a new FooterRowFunction as String property that accepts a JavaScript function with the following parameters: row, column, allRows. |
| Added | None | GraffitiGrid has a new FooterRowHeight as Integer = 26 property. |
| Added | None | GraffitiGrid has a new FooterRowVisible as Boolean = False property. |
| Added | None | GraffitiGrid has a new FormatTypes.JavaScript for supplying a JavaScript function to format cell values for display. |
| Added | 15796 | GraffitiGrid has a new FormatTypes.StarRating for displaying star-type ratings in a column. Values should be Double. Point values below 0.5 will display an empty star while point values >= 0.5 and <= 0.99 will display a half-star. |
| Added | 15784 | GraffitiGrid has a new RowFromDatabase( row as GraffitiGridRow ) event that is raised for each row added to the Grid from a RowSet to allow for advanced customization of row data on load. |
| Added | 15784 | GraffitiGrid has a new RowToDatabase( column as GraffitiGridColumn, row as GraffitiGridRow ) event that is raised when a row that is loaded via AddRowSet has a changed column value. Return True to cancel the default update attempt. |
| Added | None | GraffitiGrid has a new StyleRowFooter as GraffitiStyle property. |
| Added | None | GraffitiGridColumn has a new FormatterJavaScript property for supplying a JavaScript function to format cell values for display. |
| Added | 15846 | GraffitiGridColumn has a new PercentScale as GraffitiGridPercentScale property for defining color breaks on FormatTypes.Percent column values. |
| Added | 15806 | GraffitiGridColumn has a new ZeroValueOverride as String property. Used on columns whose Formatter is Currency or Double, when the value is exactly 0, this string will be displayed. |
| Added | None | GraffitiGridRow cell values can now be JSONItems. This is intended to be used with FormatTypes.JavaScript and may have unexpected results otherwise. |
| Added | 15933 | GraffitiRectangle has a new PressedRight event for right-click events. |
| Fixed | None | GraffitiAccordionMenu's SelectedItem property is no longer read-only and will modify the selection in the browser. |
| Fixed | 15853 | GraffitiCalendar now uses a DateInterval when converting events to strings for transfer to the browser rather than adding a day via the DateTime constructor. |
| Fixed | 15884 | GraffitiAccordion now accounts for recent changes to the way Xojo implements WebContainer styling, which was disregarding properties set by the class. |
| Fixed | 15867 | GraffitiDatePickerSingle now displays more appropriately at varying heights. |
| Fixed | 15867 | GraffitiDatePickerMultiple now displays more appropriately at varying heights. |
| Fixed | None | GraffitiGrid now properly applies selection of rows whose Selected property is set to True when added. |
| Fixed | 15896 | GraffitiGrid should no longer enter an erroneous state when embedded deeply where columns do not resize properly. |
| Fixed | None | GraffitiGrid's EditTypes.Double editor is now properly Bootstrap styled. |
| Fixed | None | GraffitiGrid should no longer encounter NilObjectExceptions when using AddRows. |
| Fixed | None | GraffitiGrid now properly expands parent rows when added using AddRows or AddRowSet when LockUpdate = True. |
| Fixed | 15855 | GraffitiGrid will no longer overwrite SelectedRows under certain conditions on cell clicks. |
| Fixed | None | GraffitiGrid charts are no longer rendered with all values negative. |
| Fixed | 15791 | GraffitiGrid.AddRows method should load data to the client more quickly. |
| Fixed | 15791 | GraffitiGrid.AddRowSet method should load data to the client more quickly. |
| Fixed | None | GraffitiGrid.ResetGrid method now also resets SelectedRows property. |
| Fixed | 15808 | GraffitiGridRow.DatabaseRowSetIDValue is now a Variant to account for other unique primary key data types. |
| Fixed | 15938 | GraffitiOrgChart now properly changes the Root node's title instead of content when setting the RootNodeTitle property. |
| Fixed | 15830 | GraffitiPopupMenu once again clears the SelectedItem property when calling DeselectAll. |
| Fixed | 15830 | GraffitiPopupMenu will now clear the SelectedItem property when calling SetItemSelect with an ItemState parameter of False if the specified item is the current value of SelectedItem. |
| Fixed | 15830 | GraffitiPopupMenu will now clear the SelectedItem property when an item has been deselected by the user if it is the current value of SelectedItem. |
| Fixed | 15906 | GraffitiRectangle.Pressed now properly fires on click or touch rather than mouse enter. |
| Fixed | 15871 | GraffitiStyle.AddTo no longer leaves an in-browser timer running that can cause subsequent RemoveFrom calls to fail. |
| Fixed | 15893 | GraffitiTextField now sends updates more frequently when text is changed. |
| Fixed | 15828 | GraffitiTimePicker should no longer encounter random Bad Format exceptions in GraffitiTimePicker.DateToTime. |
| Changed | None | GraffitiGrid will now attempt to Define or Convert the encoding of strings when sending data to the client if the Encoding of the value isn't UTF8. This should address issues of blank grids when the developer doesn't explicitly manage the encoding. |
| Changed | None | GraffitiGrid now sends Double and Currency values to the browser as Number rather than String. |
| Removed | None | Removed en-US locale specific formatting for integer and double types throughout. |
| Note | None | When using GraffitiGrid.FooterRowFunction and GraffitiGridColumn.FormatterJavaScript with Double and Currency value types, you must use the JavaScript parseFloat(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat) function on values inside your JavaScript function. It may also be necessary to use JavaScript’s toFixed(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) function on these values to get the desired result. |
## Release 43
Release Date: Nov 18, 2021
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiDrag |
| New | None | GraffitiPDFTemplate |
| Added | 15947 | GraffitiAccordionMenu has two new properties for setting the chevron icons for items with child nodes: IconCollapsed as Picture, IconExpanded as Picture. |
| Added | 16021 | GraffitiButton has a new Tag as Variant property. |
| Added | 16208 | GraffitiCurrencyField has a new Caption as String property for displaying a label for the field. |
| Added | 16026 | GraffitiCurrencyField has a new DetectLocale as Boolean = False property. When True the control will attempt to use the client locale to populate the currency symbol, decimal character, and grouping characters client-side. |
| Added | 16004 | GraffitiDatePickerSingle has a new IconPicture as Picture property for setting a custom picture object to the select button. |
| Added | 16004 | GraffitiDatePickerMultiple has a new IconPicture as Picture property for setting a custom picture object to the select button. |
| Added | 15968 | GraffitiGrid now sorts Badge columns first by indicator then by text, using the following order: Primary, Secondary/Default, Info, Success, Warning, Danger, Light, Dark, Link. |
| Added | 16161 | GraffitiGridButtonGroup has a new FillCell as Boolean = True property. When False the group will be automatically sized by its content and centered in the cell. |
| Added | 16161 | GraffitiGridButtonGroup has a new RoundedCorners as Boolean = False property. When True the group's outside corners will be rounded. |
| Added | None | GraffitiGridColumn has a new Sorter as String property for providing a JavaScript function to sort data. |
| Added | 15992 | GraffitiGridColumn has a new NumericGrouping as Boolean = False property. When set to True, the cell values in that column will be formatted using the locale-specific grouping method (such as commas for en-US like 1,234). |
| Added | 15992 | GraffitiGridColumn has a new CurrencyCode as String = "" property. When set to a valid currency code, such as "USD", the Grid will format cell values appropriately for that code (such as $1234). |
| Added | None | GraffitiGridColumns with a Formatter of FormatTypes.Integer now make use of ZeroValueOverride when it is supplied. |
| Added | None | GraffitiGridColumns with a Formatter of FormatTypes.Integer now apply the IntegerValueMax and IntegerValueMin properties when displaying values in addition to when editing. |
| Added | 16110 | GraffitiHTMLEditor now has a toPage method to export the content and all necessary CSS to HTML. |
| Added | 16313 | GraffitiImagePicker has a new IconFindButtonURL as String property for specifying the icon to use as a URL to an image. |
| Added | 16313 | GraffitiImagePicker has a new IconRemoveButtonURL as String property for specifying the icon to use as a URL to an image. |
| Added | 16313 | GraffitiImagePicker has a new IconUploadButtonURL as String property for specifying the icon to use as a URL to an image. |
| Added | 16089 | GraffitiMenu once again has a method for attaching menus to GraffitiToolbarButtons. |
| Added | None | GraffitiPDF has a new HasCoverPage as Boolean = False property for controlling display and count of headers and footers relative to the first document page. |
| Added | None | GraffitiPDF has a new PageTemplate as GraffitiPDFTemplate property. |
| Added | 15933 | GraffitiRectangle's Pressed event now has two new parameters for determining the relative click point: X as Integer, Y as Integer. |
| Added | 15933 | GraffitiRectangle's PressedRight event now has two new parameters for determining the relative click point: X as Integer, Y as Integer. |
| Added | None | GraffitiStyle has a new Destroy method for removing styles from the client's browser and the table of session styles. |
| Added | None | GraffitiStyle has a new overridden Shared Method: DestroyInstance(inSession as WebSession, Name as String) |
| Added | None | GraffitiStyle has a new overridden Shared Method: GetInstance(inSession as WebSession, Name as String, State as GraffitiStyle.States = GraffitiStyle.States.Default) As GraffitiStyle |
| Added | 16115 | GraffitiTabPanelItem has a new Style as GraffitiStyle property. |
| Fixed | 16221 | GraffitiAccordion child WebContainers should now stretch to fill the width of their panel. |
| Fixed | None | GraffitiBarcodeReader once again returns a valid list of devices on iOS. |
| Fixed | None | GraffitiCalendar will no longer throw a JavaScript exception when resizing the browser under some conditions. |
| Fixed | None | GraffitiCalendar will no longer fire the EventSelected event when clicking the currently selected event. |
| Fixed | None | GraffitiCamera once again returns a valid list of devices on iOS. |
| Fixed | 16026 | GraffitiCurrencyField can no longer enter an invalid state when either the Decimal or Group character properties are empty. |
| Fixed | 16057 | GraffitiCurrencyField now uses the padding defined for form controls in the Bootstrap theme. |
| Fixed | 16057 | GraffitiCurrencyField once again sends negative values. |
| Fixed | 16057 | GraffitiCurrencyField no longer loses value when changing properties after initialization. |
| Fixed | 16175 | GraffitiDatePickerRange now updates Xojo-side values when navigating months and years in the picker popup. |
| Fixed | 15970 | GraffitiGrid can once again show the search panel. |
| Fixed | 15969 | GraffitiGrid now updates visible selection when setting a row's Selected Property to False. |
| Fixed | None | GraffitiGrid will now scroll rows in to view when calling ScrollToRow at load time. |
| Fixed | 16069 | GraffitiGridColumns using WidthTypes.Percentage no longer corrupt the display when the user resizes a column. |
| Fixed | None | GraffitiHTMLEditor now properly sizes as expected rather than extending beyond the control's height by the height of the toolbar. |
| Fixed | None | GraffitiImagePicker's Value method for string parameters no longer uses Assigns and has an optional isBASE64 parameter. |
| Fixed | 16135 | GraffitiMenu once again works when left-clicking Xojo's built-in WebButton in 2021R3+. |
| Fixed | None | GraffitiMenu now better handles more attachment scenarios. Position values may need adjustment. |
| Fixed | 16195 | GraffitiPDF has a new Print() method which will open the print dialog with the PDF content loaded allowing the user to immediately print on output. |
| Fixed | None | GraffitiPDF.LoadInViewer now works for PDFs generated using FromHTML in Chrome. |
| Fixed | None | GraffitiPreloader now properly colors spinners that use the before pseudoselector. |
| Fixed | None | GraffitiPopupMenu once again properly adds GraffitiStyles to items. |
| Fixed | 15981 | GraffitiPopupMenu.AddItem once again works after initialization. |
| Fixed | 16283 | GraffitiPopupMenu once again exposes the OpenPopup method. |
| Fixed | 16283 | GraffitiPopupMenu once again exposes the ClosePopup method. |
| Fixed | 16293 | GraffitiProgressRadial once again properly sets the ValueCaption in the browser when changed. |
| Fixed | 16323 | GraffitiSidebar will no longer attempt to open when calling the OpenBar method is the Container property is nil, fixing a NilObjectException. |
| Fixed | 16290 | GraffitiSignature once again loads images from BASE64 data strings. |
| Fixed | None | GraffitiSignature no longer chunks and caches packets for sending. This was a workaround for an early version of Web 2.0. |
| Fixed | 16236 | GraffitiSyntaxEditor should no longer fail to initialize on WebContainers. |
| Fixed | 16075 | GraffitiTabPanel no longer erroneously raises the Open event whenever the TabPanel becomes visible. |
| Fixed | 16090 | GraffitiTabPanel once again updates the panel height when the browser is resized. |
| Fixed | 16073 | GraffitiTimePicker once again honors the Enabled property. |
| Fixed | None | GraffitiTour now exposes properties to the inspector. |
| Fixed | None | Tooltip properties now work on most, if not all, classes when defined. |
| Changed | 16069 | GraffitiGrid more frequently updates column sizes to account for issues with percentage widths. |
| Changed | 16170 | GraffitiGrid now raises the ButtonGroupItemPressed event when a GraffitiGridButtonGroupItem is pressed regardless of the GraffitiGridButtonGroup.SingleSelect setting. Previously CellChange would be raised on SingleSelect = True. This is no longer the case. |
| Changed | None | GraffitiWebWall may operate faster on load now by calling for fewer updates. |
| Changed | None | GraffitiWebWall.UpdateDisplay is no longer public to avoid misuse. |
| Note | None | GraffitiPopupMenu has been updated to Select2 v4.1.0-rc.0 |
## Release 44
Release Date: Apr 1, 2022
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiFieldLabel |
| New | None | GraffitiPagination |
| Added | 16677 | GraffitiDatePickerRange has a new YearChangeStart( viewDate as Date ) property that fires when the user changes the current display year in the picker UI. |
| Added | 16677 | GraffitiDatePickerRange has a new YearChangeEnd( viewDate as Date ) property that fires when the user changes the current display year in the picker UI. |
| Added | 16677 | GraffitiDatePickerRange has a new MonthChangeStart( viewDate as Date ) property that fires when the user changes the current display month in the picker UI. |
| Added | 16677 | GraffitiDatePickerRange has a new MonthChangeEnd( viewDate as Date ) property that fires when the user changes the current display month in the picker UI. |
| Added | 16510 | GraffitiGridRow.Clone() as GraffitiGridRow method for cloning rows. |
| Added | 16510 | GraffitiGrid.RowsReordered event. |
| Added | 16424 | GraffitiPDF has a new UploadPathMakeSafe as Boolean = True property. If you set this to False, generated files will be saved directly in the UploadPath and you may run in to issues in multi-user environments. Sorting these problems out will not be supported as the recommended setting is to leave this property's value as True. |
| Added | None | GraffitiPopupMenu has a new AddItemAt( index as Integer, item as GraffitiPopupMenuItem ) method for adding items by index. |
| Added | None | GraffitiTextField has a new EnterKeyHints enumeration. |
| Added | None | GraffitiTextField has a new EnterKeyHint as EnterKeyHints property. |
| Added | None | GraffitiTextField has a new Pattern as String property for using the browser's built-in RegEx validation (https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern). |
| Added | None | GraffitiTextField has a new PatternInvalidMessage as String property for the browser's built-in RegEx validation (https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern). |
| Added | None | GraffitiTextField has a new PatternSetsState as Boolean = True property that will set the validation state of the field based on the value matching the supplied Pattern property RegEx. |
| Added | None | GraffitiTextField has a new StateChanged event for the browser's built-in RegEx validation (https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern). |
| Fixed | None | CSS errors causing display issues when using Combined Resources. |
| Fixed | None | GraffitiButtonSegment once again deselects items on subsequent clicks when Mode = SelectionModes.Multiple. |
| Fixed | None | GraffitiDatePickerRange now sends only data that is necessary for operation or implemented events. |
| Fixed | None | GraffitiDatePickerRange should no longer fire the Change event twice unnecessarily under certain conditions. |
| Fixed | 16628 | GraffitiDatePickerRange will now shift focus to the second field when TAB is pressed in the first field. |
| Fixed | 16628 | GraffitiDatePickerRange will now shift focus to the first field when Shift+Tab is pressed in the second field. |
| Fixed | 16377 | GraffitiEditor now actually raises the Changed event when the content is changed. |
| Fixed | 16379 | GraffitiEditor now properly displays FontAwesome icons in GraffitiEditorToolbarMenus. |
| Fixed | 16510 | GraffitiGrid now more appropriately handles Nil row entries when they are encountered. |
| Fixed | 16510 | GraffitiGrid will now properly reorder rows after a drag operation. |
| Fixed | 16492 | GraffitiGrid.FooterRowVisible can now be set at runtime. |
| Fixed | 16492 | GraffitiGrid.FormatTypes.Percent is now localized. |
| Fixed | 16510 | GraffitiGrid.SelectedRows is now sorted by the index at which the rows appear in the Grid display. |
| Fixed | 16642 | GraffitiGridColumn.NilDateOverride is once again honored for FormatTypes.Date. |
| Fixed | None | GraffitiMenu now only applies default dropdown styles when a Style property value is not defined. |
| Fixed | 16636 | GraffitiOrgChart should once again properly center on the specified node when calling the ScrollTo method. |
| Fixed | None | GraffitiPopupMenu.BaseStyle is once again properly applied when set before load. |
| Fixed | None | GraffitiPopupMenu.StyleTag is once again properly applied when set before load. |
| Fixed | None | GraffitiPopupMenu.State is once again properly applied when set before load. |
| Fixed | None | GraffitiPopupMenuItems whose properties are changed programmatically will now update in the client browser. |
| Fixed | 16499 | GraffitiPopupMenuItem's Constructor method parameter ItemDisabled as Boolean = False has been changed to ItemEnabled as Boolean = True. |
| Fixed | 16529 | GraffitiResponsive now fires the Resized event. |
| Fixed | 16673 | GraffitiResponsive no longer requires adding Rows before assigning that row's cells in order for cell property changes to be honored at runtime. |
| Fixed | 16529 | GraffitiResponsive will now honor Bottom lock. |
| Fixed | None | GraffitiSignature once again exposes the BGColor property in the inspector. |
| Fixed | None | GraffitiSignature once again exposes the PenColor property in the inspector. |
| Fixed | None | GraffitiSignature no longer initializes multiple times, causing strange drawing behavior. |
| Fixed | None | GraffitiTimePicker now more appropriately handles twelve hour time meridiem. |
| Fixed | None | GraffitiToolbar will no longer add unnecessary spacing to buttons that have an icon but no caption. |
| Fixed | 16486 | GraffitiUploader now honors the provided Thumbnail size properties when programmatically adding files. |
| Fixed | None | GraffitiUploader will no longer override paths set on GraffitiWebFiles in the FileExclude event, or build the user-specific structure if UploadPath is not Nil. |
| Fixed | 16588 | GraffitiWall no longer causes pages to show undesired Containers on subsequent page loads when the GraffitiWallPanel object parent of those Containers has been previously removed. When calling RemovePanel or RemoveAll, child containers are now closed rather than re-embedded on the page and hidden. |
| Fixed | None | GraffitiWebFile.SaveTo now more intelligently handles results, specifically it now functions as expected if the file has already been saved to disk rather than expecting only BASE64 data output. |
| Changed | None | GraffitiPopupMenuItem.Disabled is now GraffitiPopupMenuItem.Enabled to better match expectations. |
| Changed | None | GraffitiGridColumn.IntegerValueMax's default value is now -1. Change both IntegerValue properties to apply constraints. |
| Changed | None | GraffitiGridColumn.IntegerValueMin's default value is now -1. Change both IntegerValue properties to apply constraints. |
| Deprecated | None | GraffitiTextField.MaskComplete event. |
| Deprecated | None | GraffitiTextField.Mask property. |
| Deprecated | None | GraffitiTextField.MaskPlaceholder property. |
| Deprecated | None | GraffitiTextField.MaskValid property. |
| Removed | 16510 | GraffitiGrid.RowReordered event (see GraffitiGrid.RowsReordered). |
| Note | None | GraffitiGrid loading has been further optimized. |
## Release 44.1
Release Date: Apr 4, 2022
| Type | Ticket | Description |
| --- | --- | --- |
| New | 16710 | GraffitiSlideshow has a new Transitions enumeration: 0 = Fade, 1 = Slide. |
| New | 16710 | GraffitiSlideshow has a new Transition as Transitions property. |
| Fixed | 16713 | GraffitiEditor now properly hides the toolbar from the Opening event when setting editor.toolbar.visible = false. |
| Fixed | 16713 | GraffitiEditor will no longer leave a blank void below the editor area when the toolbar is invisibile. |
| Fixed | 16708 | GraffitiStepBar no longer erroneously includes a Pressed event definition. |
| Fixed | 16708 | GraffitiStepBar no longer raises the SelectionChanged event upon subsequent clicks on an already selected step. |
| Fixed | 16720 | GraffitiTextField no longer ignores the PatternSetsState property. |
| Fixed | 16720 | GraffitiTextField.PatternSetsState property now defaults to False. |
## Release 45
Release Date: May 29, 2022
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiMap.Geocoder Module |
| New | None | GraffitiMap.Geocoder.Result |
| New | None | GraffitiMap.Overlays Module |
| New | None | GraffitiMap.Overlays.Image Class |
| New | None | GraffitiPDFViewer |
| Added | 16946 | GraffitiCalendar has a new Print() method. |
| Added | 16882 | GraffitiDateTimePicker variants Locales enumerations now have ES and IT values for Spanish and Italian. |
| Added | None | 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 | 16865 | GraffitiKanbanItem has a new constructor that accepts a WebContainer parameter: Constructor(title as String, container as WebContainer) |
| Added | 16865 | GraffitiKanbanItem has a new IndicatorContainer as WebUIControl.Indicators property. |
| Added | 16727 | 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). |
| Added | None | GraffitiMapViewer.AddImageOverlay( overlay as GraffitiMap.Overlays.Image ) |
| Added | None | GraffitiMapViewer.ImageOverlayAt( index as Integer ) as GraffitiMap.Overlays.Image |
| Added | None | GraffitiMapViewer.LastImageOverlayIndex() as Integer |
| Added | None | GraffitiMapViewer.RemoveAllImageOverlays() |
| Added | None | GraffitiMapViewer.RemoveImageOverlay( overlay as GraffitiMap.Overlays.Image ) |
| Added | 16889 | 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. |
| Added | None | GraffitiPopupMenu has a new AddItems(items() as GraffitiPopupMenuItem) method for adding multiple items from an array. |
| Added | 16862 | GraffitiPopupMenu has a new PopupButtonText as String property. |
| Added | 16862 | GraffitiPopupMenu has a new PopupButtonIndicator as WebUIControl.Indicators property. |
| Added | 16862 | GraffitiPopupMenu has a new PopupButtonStyle as GraffitiStyle property. |
| Added | 16862 | GraffitiPopupMenu has a new PopupButtonPressed event. |
| Added | 16946 | GraffitiTimeline has a new Print() method. |
| Added | None | GraffitiTree.FindByUUID( uuid as String, inItems() as GraffitiTreeItem ) |
| Added | 16925 | 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. |
| Added | 16925 | 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. |
| Fixed | 16900 | GraffitiButton once again properly applies the BaseStyle property. |
| Fixed | 16900 | GraffitiButton once again properly applies the TextStyle property. |
| Fixed | 16960 | GraffitiButton caption no longer improperly word wraps when full caption should fit the display area. |
| Fixed | 16882 | GraffitiDateTimePickerSingle now properly handles setting Nil value to clear the display. |
| Fixed | 16884 | GraffitiDateTimePickerSingle now properly sets Locale from the inspector. |
| Fixed | 16882 | GraffitiDateTimePickerSingle should no longer display "Invalid Date" in the field under some circumstances when the value is cleared. |
| Fixed | 16882 | GraffitiDateTimePickerSingle's popup header should now be properly localized. |
| Fixed | 16882 | GraffitiDateTimePickerMultiple now properly handles setting Nil value to clear the display. |
| Fixed | 16884 | GraffitiDateTimePickerMultiple now properly sets Locale from the inspector. |
| Fixed | 16882 | GraffitiDateTimePickerRange now properly handles setting Nil value to clear the display. |
| Fixed | 16884 | GraffitiDateTimePickerRange now properly sets Locale from the inspector. |
| Fixed | 16855 | GraffitiDateTimePickerRange should now properly fire the ValueChanged event under all scenarios. |
| Fixed | None | GraffitiDrag will no longer initiate drag operations on WebListBoxes or GraffitiGrids that have no selection. |
| Fixed | 16827 | GraffitiGrid once again displays GraffitiGridColumn.ContextMenus on contextual actions. |
| Fixed | 16843 | GraffitiGrid column sort indicators no longer either never appear or appear behind the header button. |
| Fixed | 16872 | GraffitiGrid no longer removes default CSS classes when supplying GraffitiStyles to the Style* properties. Override individual CSS properties as needed. |
| Fixed | 16890 | GraffitiGrid once again honors AddRow calls when LockUpdate = True. |
| Fixed | 16890 | GraffitiGrid can no longer enter a state where the appropriate number of rows are not displayed for the height when using AddRow. |
| Fixed | None | GraffitiMapViewer.RemoveRoute now works as expected. |
| Fixed | 16843 | GraffitiMenu now properly suppresses the native context menu and repositions the menu on Windows upon subsequent right clicks. |
| Fixed | None | GraffitiMenu separators are once again visible. |
| Fixed | None | GraffitiPagination no longer breaks the built-in Pagination control. |
| Fixed | None | GraffitiPopupMenu no longer fails to display FontAwesome icons under very specific conditions. |
| Fixed | 16746, 16747 | GraffitiPopupMenuItem's Constructor no longer defaults the Enabled property to False. |
| Fixed | None | GraffitiStyle once again supports multiple states rather than only the first state created. |
| Fixed | None | GraffitiTree no longer loses SelectedItem value when focus is lost. |
| Fixed | 16647 | 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. |
| Changed | 16647 | GraffitiUploader now uses randomized file names when writing files to the filesystem. The GraffitiWebFile.Name property retains the original name. |
| Changed | 16647 | GraffitiUploader now writes files to the temporary directory when debugging, rather than the ApplicationData folder. |
| Note | None | GraffitiPopupMenuItem Constructor has been refactored to simplify. See documentation for updated Constructor signatures. |
| Removed | None | GraffitiDatePicker |
| Removed | None | GraffitiHTMLEditor |
| Removed | None | GraffitiPopupMenu.FindItem(itemIndex as Integer) as GraffitiPopupMenuItem. Use Item(index as Integer) As GraffitiPopupMenuItem |
| Removed | None | GraffitiTimePicker |
## Release 46
Release Date: Jul 13, 2022
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiAvatar |
| New | None | GraffitiAvatarGroup |
| Fixed | 16994 | GraffitiStyle.AddTo( selector as String) will no longer cause a JavaScript exception when the user supplies an unsanitized classname for the Style. |
| Fixed | 17048 | GraffitiGrid now retains selection after sorting. |
| Fixed | 17053 | GraffitiGrid.ScrollToRow now properly scrolls to the provided row rather than Row + 1. |
| Fixed | 17053 | GraffitiGrid now properly sets the focus to the Grid control when calling the SetFocus method. If there are no cells selected in the Grid when this method is called, cell (0, 0) will be selected. |
| Fixed | 17053 | GraffitiGrid no longer scrolls by pages when scrolling up using arrow keys. |
## Release 47
Release Date: Jul 26, 2022
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiThumbList |
| Added | 17085 | GraffitiCalendar has a new StyleTitle as GraffitiStyle property. |
| Added | 17085 | GraffitiCalendar has a new NavigationButtonPressed event that is raised when the user clicks or touches one of the navigation buttons in toolbar. Implementing this event does not cancel default operations. |
| Added | None | GraffitiCalendar has a new NavigationButtons enumeration. |
| Added | 17119 | GraffitiAccordion once again applies the BaseStyle property to the correct element to override overall default style. |
| Fixed | 17132 | Global jQuery 3.5.1 compatibility fixes. |
| Fixed | 17085 | GraffitiCalendar now updates custom styles when changing Show* properties. |
| Fixed | 17085 | GraffitiCalendar has improved handling for header buttons, and will no longer show the header is none of the buttons are enabled. |
| Fixed | 17085 | GraffitiCalendar will now properly override FullCalendar defaults on Center and Right header positions when none of the buttons are enabled. |
| Fixed | 17077 | GraffitiCamera should no longer experience timing issues when detecting cameras. |
| Fixed | 17130 | GraffitiGrid.AddRow once again sends updated rows when setting LockUpdate to False. |
| Fixed | 17077 | GraffitiKanban no longer carries out some edit operations when list items are not currently being edited. |
| Fixed | 17077 | GraffitiKanban once again raises the ListItemPressed event. |
| Fixed | 17077 | GraffitiKanban once again properly handles pressing Enter or Escape during edit operations. |
| Fixed | 17120 | GraffitiMapViewer.RemoveAllShapes now removes more than the first shape. |
| Fixed | 17120 | GraffitiMapViewer.RemoveShape now properly removes the reference to the shape on the client side. |
| Note | None | Fixed a number of issues with the DateTimePicker demo page. |
## Release 47.1
Release Date: Jul 29, 2022
| Type | Ticket | Description |
| --- | --- | --- |
| Added | 17139 | GraffitiDateTimePickerSingle has a new States enumeration. |
| Added | 17139 | GraffitiDateTimePickerSingle.State for setting the visual validation state of the field in the browser. |
| Added | 17139 | GraffitiDateTimePickerMultiple has a new States enumeration. |
| Added | 17139 | GraffitiDateTimePickerMultiple.State for setting the visual validation state of the field in the browser. |
| Added | 17139 | GraffitiDateTimePickerRange has a new States enumeration. |
| Added | 17139 | GraffitiDateTimePickerRange.StateStart for setting the visual validation state of the field in the browser. |
| Added | 17139 | GraffitiDateTimePickerRange.StateEnd for setting the visual validation state of the field in the browser. |
| Added | None | GraffitiGrid.CellStyle(column as GraffitiGridColumn) as GraffitiStyle |
| Added | None | GraffitiGrid.CellStyle(column as GraffitiGridColumn, assigns style as GraffitiStyle) |
| Fixed | 17143 | GraffitiFavIcon.SetIcon no longer throws a JavaScript exception due to the removal of the Shortcut Icon LINK element in the Xojo framework. |
| Fixed | 17151 | GraffitiGrid should no longer attempt to execute some JavaScript before the control is initialized, which resulted in JavaScript exceptions. |
| Fixed | None | GraffitiGrid.AddRow has improved error handling and optimization. |
| Fixed | None | GraffitiGrid.AddRow should once again properly update the display under all scenarios. |
| Fixed | None | GrafftiGrid.AddRows has improved error handling and optimization. |
| Fixed | None | GraffitiGrid.AddRowSet has improved error handling and optimization. |
| Fixed | None | GraffitiGrid.AddRowSet should once again properly update the display under all scenarios. |
| Fixed | None | GraffitiGrid.InsertRow has improved error handling and optimization. |
| Fixed | None | GraffitiGrid.InsertRow should once again properly update the display under all scenarios. |
| Fixed | None | GraffitiGrid.RemoveRow has improved error handling and optimization. |
| Fixed | None | GraffitiGrid.RemoveRow should once again properly update the display under all scenarios. |
| Fixed | 17151 | GraffitiGrid.SetCellStyle no longer throws JavaScript exceptions when setting a cell's style before adding the row to the Grid. |
| Fixed | 17151 | GraffitiTree should no longer attempt to execute some JavaScript before the control is initialized, which resulted in JavaScript exceptions. |
| Fixed | 17151 | GraffitiTooltip no longer throws a JavaScript exception when binding to controls. |
| Fixed | None | GraffitiUploader once again shows previews of files added client-side. |
| Fixed | 17145 | GraffitiUploader no longer overrides paths set in the FileExclude event. |
| Fixed | None | GraffitiUploader no longer throws a JavaScript exception on excluded files. |
| Note | 17151 | GraffitiGrid now buffers more actions when LockUpdate = True. |
| Note | None | GraffitiGrid load times should be significantly reduced for complex scenarios. |
| Note | None | GraffitiTree has been optimized to send less JavaScript under certain conditions. |
## Release 48
Release Date: Sep 5, 2022
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiBadge |
| New | None | GraffitiEditorFormat |
| New | None | GraffitiEditorSelection |
| New | None | GraffitiEditorSelectionRange |
| New | None | GraffitiListGroup |
| Added | None | GraffitiEditor has a new SelectionChanged event that will be raised when 500ms has passed after a last selection change without a subsequent selection change. |
| Added | 17192 | GraffitiDateTimePickerSingle has a new Mask as String property. |
| Added | 17192 | GraffitiDateTimePickerSingle has a new ValueInvalid( text as String ) event. |
| Added | None | GraffitiDateTimePickerSingle has a new read-only ViewValue as DateTime property for determining the current view span of the control's popup. |
| Added | 17307 | GraffitiDateTimePickerSingle has a new IconButton as String = "fas fa-calendar-alt" property for controlling the content of the popup button. |
| Added | None | GraffitiDateTimePickerMultiple has a new read-only ViewValue as DateTime property for determining the current view span of the control's popup. |
| Added | 17307 | GraffitiDateTimePickerMultiple has a new IconButton as String = "fas fa-calendar-alt" property for controlling the content of the popup button. |
| Added | 16677 | GraffitiDateTimePickerRange has a new read-only ViewStartValue as DateTime property for determining the current view span of the start control's popup. |
| Added | 16677 | GraffitiDateTimePickerRange has a new read-only ViewEndValue as DateTime property for determining the current view span of the end control's popup. |
| Added | None | GraffitiDateTimePickerRange has a new ValueInvalid( field as Fields, text as String ) event. |
| Added | 17324 | GraffitiGrid has a new FormatTypes.NativeCheckbox. Values can be altered by a single user click when Editable = True. |
| Added | 17324 | GraffitiGrid has a new EditTypes.NativeCheckbox. |
| Added | 17235 | GraffitiTree has a new ItemContextClicked( item as GraffitiTreeItem, x as Integer, y as Integer ) event. If this event is not implemented and ContextClick is, ContextClick will fire. |
| Added | 17235 | GraffitiTree will now select nodes that were right-clicked before raising either of the ContextClick events. |
| Fixed | 17239 | GraffitiAccordion's individual sections no longer have a z-index value, which now allows for layering. |
| Fixed | 17261 | GraffitiDateTimePickerRange no longer enters a state where it can return Nil values despite values having been set. |
| Fixed | 17313 | GraffitiDateTimePickerRange no longer erroneously sets a Maximum on the end picker when updated the maximum for the start picker. |
| Fixed | None | GraffitiEditor has received more Xojo 2022R2 fixes. |
| Fixed | 17178 | GraffitiEditor can now be subclassed. |
| Fixed | None | GraffitiEditor.Insert* methods can no longer enter a state where they erroneously add the elements to nodes outside the editor that previously had focus. |
| Fixed | None | GraffitiEditor folder renamed to gsEditor to work around a bug in Xojo's Copy/Paste. |
| Fixed | None | GraffitiGrid should no longer encounter an exception when calling GraffitiGridRow.CellStyle setter after initialization. |
| Fixed | None | GraffitiGrid should once again fire SelectionChanged only once when setting an items Selected property. |
| Fixed | 17329 | GraffitiGrid now allows for updating selected rows during initialization when using AddRowSet. |
| Fixed | None | GraffitiPopupMenu should now properly display icons vertically centered. |
| Fixed | None | GraffitiStyle no longer creates oddly named CSS elements due to attempting to include the State in the ID attribute even when State = States.Default. |
| Fixed | None | GraffitiTree's ContextClick event no longer has a parameter for the item right-clicked and only fires when the user has right-clicked outside of all nodes. |
| Fixed | None | GraffitiWall resizing has been optimized and users should see a noticeable difference in rendering speed. |
| Changed | None | GraffitiDateTimePickerSingle implements a separate pathway for view change notifications that does not necessarily occur when changing the value in the browser. |
| Changed | None | GraffitiDateTimePickerMultiple implements a separate pathway for view change notifications that does not necessarily occur when changing the value in the browser. |
| Changed | None | GraffitiDateTimePickerRange implements a separate pathway for view change notifications that does not necessarily occur when changing the value in the browser. |
| Changed | None | GraffitiStyle names can now contain dashes or other special characters. |
| Changed | None | GraffitiWall will now throw an UnsupportedOperationException when trying to add panels containing WebContainers that have not been embedded on a page. |
| Note | None | GraffitiEditor now explicitly sets focus to the editor when calling selection-related methods, including inserts. |
| Note | None | GraffitiEditor bumped to SunEditor version 2.43.14. |
## Release 48.1
Release Date: Unreleased
| Type | Ticket | Description |
| --- | --- | --- |
| Fixed | None | Updated demo objects to fix issue with Xojo renaming of parameter in WebSegment.Pressed. |
## Release 49
Release Date: Feb 26, 2023
| Type | Ticket | Description |
| --- | --- | --- |
| New | 17568 | GraffitiMap.Icon |
| Added | None | GraffitiControlWrapper has a new ExtendedLayoutDrawing string constant for controlling drawing in the IDE's layout editor. "True" for icon and title, "False" for title only. Defaults to “True”. Pages may be slower to load the first time when editing within the IDE. |
| Added | None | GraffitiAccordionMenuItem has a new CanExpand as Boolean = True property to control user's ability to expand or collapse items with children. |
| Added | 17475 | GraffitiAvatar has a new BorderColor as Color = &caaaaaa property. |
| Added | 17475 | GraffitiAvatar has a new BorderSize as Integer = 2 property. |
| Added | 17475 | GraffitiAvatar has a new TextColor as Color = &cffffff property. |
| Added | 17699 | GraffitiCalendar will now update GraffitiCalendarEvents in the display when their visual properties change. |
| Added | 17699 | GraffitiCalendar now implements GraffitiUpdateInterface. |
| Added | None | GraffitiCalendar now performs a sanity check to validate the events are actually repeating before adding them as repeating. |
| Added | None | GraffitiCalendar has a new EventToRowSet( theEvent as GraffitiCalendarEvent ) event for modifying event properties before writing to the database. |
| Added | None | GraffitiCalendar.AddRowSet will now exit if the RowSet contains no rows. |
| Added | None | GraffitiCalendar.AddRowSet will now yield every 250 records. |
| Added | None | GraffitiCalendarRestriction has a new Constructor( RestrictionID as String, ParamArray VisibleDays as Integer ) method for hiding days of the week from the calendar's view. |
| Added | None | GraffitiCalendarEvent has a new LockUpdate property which prevents updating the client display when an events properties change. |
| Added | 17716 | GraffitiCurrencyField has a new DecimalCharAlternate as String property for supporting multiple decimal character input such as "," and "." simultaneously. |
| Added | 17460 | GraffitiEditor.Fonts has a new DefaultLineHeight as Double property for setting the default line height of contents in the editor. Should be set in the Open event |
| Added | 17516 | GraffitiKanban now supports iterating columns with For Each column as GraffitiKanbanColumn in Instance |
| Added | 17637 | GraffitiKanban has a new GutterHeight as Integer property for controlling horizontal space around the edges of columns. Valid values are 0-5 matched Bootstrap theme padding values. |
| Added | 17637 | GraffitiKanban has a new GutterWidth as Integer property for controlling horizontal space around the edges of columns. Valid values are 0-5 matched Bootstrap theme padding values. |
| Added | 17515 | GraffitiKanbanItem has a new ImageMaxHeight as Integer = -1 property. |
| Added | 17541 | GraffitiKanbanItem has a new HasLink as Boolean = False property. |
| Added | 17541 | GraffitiKanbanItem has a new LinkCaption as String property. |
| Added | 17541 | GraffitiKanbanItem has a new LinkURL as String property. |
| Added | 17516 | GraffitiKanbanColumn now supports iterating items with For Each item as GraffitiKanbanItem in Column |
| Added | None | GraffitiMapViewer now exposes the Hidden event. |
| Added | 17568 | GraffitiMap.Marker has a new Icon as GraffitiMap.Icon property for specifying icons with scale and positioning properties. |
| Added | 17759 | GraffitiOrgChart has a new ZoomRelative( percentValue as Double ) method. 200 for 2x, 50 for 0.5x |
| Added | 17552 | GraffitiPopupMenu has a new AdaptiveHeight as Boolean = False property. When True, the control will resize vertically based on the height of the selected items and raise the HeightChanged event. |
| Added | 17552 | GraffitiPopupMenu has a new HeightChanged( oldHeight as Integer ) property that is raised the selected items withing a MultipleSelect instance changes the in-browser height of the control. |
| Added | 17667 | GraffitiPopupMenu has a new SortDirections enumeration. |
| Added | 17667 | GraffitiPopupMenu has a new SortItems as Boolean = False property. |
| Added | 17667 | GraffitiPopupMenu has a new SortDirection as SortDirections property. |
| Added | None | GraffitiPopupMenu has a new DropdownStyle as GraffitiStyle property. |
| Added | 17384 | GraffitiTextField has a new Multiline as Boolean = False property that uses an HTML TEXTAREA in the browser rather than an INPUT element. |
| Added | 17805 | GraffitiToolbarButton has a new BadgeIndicator as WebUIControl.Indicators property. |
| Added | 17805 | GraffitiToolbarButton has a new BadgeIsPill as Boolean property. |
| Added | 17805 | GraffitiToolbarButton has a new BadgeText as String property. |
| Added | 17421 | GraffitiUploader has a new CancelConfirmText as String property. |
| Added | 17421 | GraffitiUploader has a new CancelUploadText as String property. |
| Added | 17421 | GraffitiUploader has a new CompleteText as String property. |
| Added | 17421 | GraffitiUploader has a new FallbackText as String property. |
| Added | 17421 | GraffitiUploader has a new FileTooBigText as String property. |
| Added | 17421 | GraffitiUploader has a new InvalidFileTypeText as String property. |
| Added | 17421 | GraffitiUploader has a new RemoveFileText as String property. |
| Added | 17421 | GraffitiUploader has a new SendingText as StringProperty. |
| Fixed | 17356 | GraffitiAccordionMenu now properly escapes strings for item text and badges at load time. |
| Fixed | None | GraffitiAlert should now better handle containers added programmatically in recent versions of Xojo. |
| Fixed | 17746 | GraffitiAlert now better positions alerts with a container when center positioned horizontally. |
| Fixed | 17660 | GraffitiAvatarGroup.RemoveAll once again works as expected. |
| Fixed | 17440 | GraffitiButtonSegment will no longer show scrollbars when a button's caption is too large for the display. It will instead ellipsize the caption without wrapping as it did previously. |
| Fixed | None | GraffitiButtonSegment now better handles automatic theming with Indicator overrides. |
| Fixed | 17605 | GraffitiButtonSegment now swaps Indicator property CSS classes based on button values to account for CSS class priority. |
| Fixed | None | GraffitiCalendarEvent.UpdateDatabaseRecord will now return when the matching row has been found and updated. |
| Fixed | None | GraffitiCalendarEvent.DatabaseAutoUpdate now defaults to False. |
| Fixed | 17758 | GraffitiCurrencyField once again implements the BaseStyle property. |
| Fixed | 17404 | GraffitiDateTimePickerSingle now more intelligently handles custom locales for direct data input. |
| Fixed | 17404 | GraffitiDateTimePickerMultiple now more intelligently handles custom locales for direct data input. |
| Fixed | None | GraffitiDateTimePickerRange no longer experiences both JavaScript and Xojo exceptions when Nil values are provided. These values are now appropriate replaced at runtime. |
| Fixed | 17460 | GraffitiEditor once again honors setting ReadOnly to False in the inspector or in the Open event. |
| Fixed | 17500 | GraffitiGrid should no longer encounter a JavaScript exception in recent versions of Xojo when resizing columns. |
| Fixed | 17374 | GraffitiGrid once again implements the BaseStyle property. |
| Fixed | 17430 | GraffitiGrid.ScrollToCell should now function when calling in the same set of processes as the control is initialized and data is loaded. |
| Fixed | 17430 | GraffitiGrid.ScrollToRow should now function when calling in the same set of processes as the control is initialized and data is loaded. |
| Fixed | 17456 | GraffitiGrid should no longer throw JavaScript exceptions when sorting. |
| Fixed | None | GraffitiGrid sorting can no longer be effected by timing issues during sorting. |
| Fixed | 17656 | GraffitiHTMLExporter.FromEntity now properly handles hex encoded entities. |
| Fixed | 17532 | GraffitiKanban now applies the BaseStyle property. |
| Fixed | 17473 | GraffitiMapViewer.FitBounds once again functions. |
| Fixed | 17593 | GraffitiMapViewer now fires the Shown event only after the map has been initialized. |
| Fixed | 17648 | GraffitiMapViewer now reports the Latitude and Longitude of the mouse position in the Pressed and DoublePressed events rather than the center point of the view. |
| Fixed | 17801 | GraffitiMenu.HideMenu once again functions for menus bound to WebButtons. |
| Fixed | 17801 | GraffitiMenu.ShowMenu once again functions for menus bound to WebButtons. |
| Fixed | 16636 | GraffitiOrgChart.ScrollTo can now be called from Open and Shown events. |
| Fixed | 16636 | GraffitiOrgChart.ScrollTo now scrolls item more closesly to the center of the center of the display rather than just making them visible. |
| Fixed | None | GraffitiPDFViewer download functionality once again works as expected. |
| Fixed | None | GraffitiPDFViewer print functionality once again works as expected. |
| Fixed | 17684 | GraffitiPopupMenu should now apply item styles to items when AllowAdd = False. |
| Fixed | None | GraffitiSpeak should no longer encounter a JavaScript exception in recent versions of Xojo when resizing columns. |
| Fixed | None | GraffitiTextField should no longer bind multiple events to KeyPress when changing the MaxLength property. |
| Fixed | 17735 | GraffitiTooltip will now wait for GraffitiToolbarButtons to be rendered before attempting to attach. |
| Fixed | 17769 | GraffitiTree will now only show scrollbars when content expands outside the viewable area. |
| Fixed | 17769 | GraffitiTree.InsertItem once again functions as expected. |
| Fixed | 17411 | GraffitiWall now disposes of child containers when they are removed to ensure clean initialization. If you wish to reuse the same container, users will need to make a new copy instead of re-adding an existing container. |
| Fixed | 17432 | GraffitiWebFile.SaveTo will no longer bail under certain circumstances when the file doesn't already exist. |
| Changed | 17430 | GraffitiGrid will now add both Row.Style and Grid.StyleRowEven/Odd to rows when both are supplied. |
| Note | 17561 | Added a workaround to GraffitiControlWrapper where Xojo may raise events for WebUIControls as they are being destroyed resulting in NilObjectExceptions when attempting to raise event handlers on control instances. |
## Release 49.1
Release Date: Mar 15, 2023
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiEventManager |
| Added | None | GraffitiLikertQuestion has a new Description as String property. |
| Added | 17865 | GraffitiLikert has a new IsVertical as Boolean = False property for display responses vertically rather than horizontally. |
| Added | 17847 | GraffitiPopupMenu has a new AllowClear as Boolean = False property. When set to True, a clear button will be displayed when there is a selected item and MultipleSelect = False. |
| Fixed | 17850 | GraffitiColorPicker now supports the disabled state. |
| Fixed | None | GraffitiLikert now properly links response labels to their radiobuttons. |
| Fixed | None | GraffitiPopupMenu no longer hides overflow, causing focus rects to be cut off. |
| Fixed | 17868 | GraffitiPopupMenu once again honors the Enabled property after adding or removing items. |
## Release 50
Release Date: Jun 22, 2023
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiGeolocation |
| New | None | GraffitiVideoRecorder |
| New | None | GraffitiW3W |
| Added | None | GraffitiGrid now has a Clear button in the search bar. |
| Added | 11 | GraffitiGrid's SearchBar now has a Case Sensitive filter checkbox. |
| Added | 11 | GraffitiGrid has a new SearchCaseText as String property for changing the label of the Case Sensitive checkbox in the search bar. |
| Added | None | GraffitiMapViewer.HasThreeWordsOverlay as Boolean = False |
| Added | 8 | GraffitiMapViewer.HeatmapAt( index as Integer ) as GraffitiMap.Overlays.Heatmap |
| Added | None | GraffitiMapViewer.PerformThreeWordsLookups as Boolean = False |
| Added | None | GraffitiMapViewer.Position now updates the display when assigning a new GraffitiMap.Point class instance. |
| Added | None | GraffitiMapViewer.PositionW3W as GraffitiW3W.MapPoint |
| Added | 8 | GraffitiMapViewer.RemoveAllHeatmaps |
| Added | 8 | GraffitiMapViewer.RemoveHeatmap( heatmap as GraffitiMap.Overlays.Heatmap ) |
| Added | None | GraffitiPopupMenu.Text as String property. Only applicable when MultipleSelect = False and AllowAdd = True. |
| Added | None | GraffitiMapViewer.Marker.Visible alterations are now reflected on the display. |
| Fixed | 28 | GraffitiPopupMenu no longer requires calling DeselectAll before setting selection when MultipleSelection = False. |
| Fixed | None | GraffitiSlideshow no longer appears to have a remaining item after calling RemoveAll. |
| Fixed | None | GraffitiSlideshow no longer attempts to execute JavaScript to change slides when there are no slides added. |
| Fixed | 31 | GraffitiTextField once again registers itself and works as expected in the framework's TabEngine. |
| Changed | 28 | GraffitiPopupMenu will now raise the SelectionChanged event when the selection is altered programmatically. |
| Changed | None | GraffitiPopupMenu.FindItem renamed to ItemFromText to better match expectations. |
| Changed | None | GraffitiPopupMenu.FindItemByTag renamed to ItemFromTag to better match expectations. |
| Changed | None | GraffitiPopupMenu.GetItemIndex renamed to ItemIndex to better match expectations. |
| Changed | None | GraffitiPopupMenu.Item method renamed to ItemAt to better match expectations. |
| Changed | None | GraffitiPopupMenu.GetSelectedItems renamed to SelectedItems to better match expectations. |
| Changed | None | GraffitiPopupMenu.GetSelectedItemsIndex renamed to SelectedItemsIndexes to better match expectations. |
| Removed | None | GraffitiPopupMenu.GetItemIndexByTag. |
| Removed | None | GraffitiPopupMenu.SetItemSelect methods. Use the Selected property of items. |
| Removed | None | GraffitiPopupMenu.SetItemState method. Use the Enabled property of items. |
| Removed | None | GraffitiPopupMenu.SetText. method. Replaced with Text property. |
## Release 51
Release Date: Aug 9, 2023
| Type | Ticket | Description |
| --- | --- | --- |
| Updated | None | All classes and resource files updated for Bootstrap 5.x. |
| Added | 63 | GraffitiAccordion has a new HeaderContextPressed( item as GraffitiAccordionItem, position as Xojo.Point ) event. |
| Added | 82 | GraffitiGeolocation has a new Allowed property. When False, the user has either disabled Location Services, blocked location sharing for the browser, or denied access to the page when prompted. |
| Added | 81 | GraffitiGridColumn has a new PopupMenuSearchThreshold property that controls at what number of added items the search field will be shown in the PopupMenu editor type. |
| Added | 81 | GraffitiGrid now displays a disclosure triangle within PopupMenu cells. |
| Fixed | None | GraffitiGrid now properly applies GraffitiStyles to FooterRow cells. |
| Fixed | 66 | GraffitiToggle can once again be disabled. |
| Fixed | 69 | GraffitiWall should no longer enter a state where containers are not embedded in the control upon page load. |
| Removed | None | FriendlyLabel |
| Removed | None | GraffitiThemer |
| Removed | None | Xojo 2023 Release 1.1 and lower support. |
## Release 51.1
Release Date: Aug 10, 2023
| Type | Ticket | Description |
| --- | --- | --- |
| Fixed | 87 | GraffitiAccordion no longer encounters a Javascript error resulting in containers not being properly embedded. |
| Fixed | None | GraffitiAccordion now more appropriately fits Bootstrap 5 themes. |
## Release 52
Release Date: Nov 4, 2023
| Type | Ticket | Description |
| --- | --- | --- |
| Added | 147 | GraffitiAlertMessage has a CloseOnInteraction as Boolean = True property that controls whether interactions with buttons or the modal backdrop will close the message. |
| Added | 138 | GraffitiCalendar has a new ShowDayNames as Boolean = True property. |
| Added | 107 | GraffitiCalendar has a new TitleFormat as String property. When empty, the locale-specific default string will be displayed. Accepts moment.js formats or arbitrary text inside brackets: [Hello World]. |
| Added | 125 | GraffitiCursor has a new UnsetBodyCursor method for clearing the cursor applied to the <BODY> tag. |
| Added | 125 | GraffitiCursor has a new UnsetCursor(boundTo as WebControl) method for clearing the cursor applied to a control. |
| Added | None | GraffitiFieldLabel has a new LabelPressed event. |
| Added | 171 | GraffitiFieldLabel now has a FieldStyle as GraffitiStyle property. |
| Added | 108 | GraffitiGridColumn.NativeCheckboxDisabled property. |
| Added | 160 | GraffitiGridRow.Add( row as GraffitiGridRow ) method. |
| Added | 160 | GraffitiGridRow.AddAt( index as Integer, row as GraffitiGridRow ) method. |
| Added | 160 | GraffitiGridRow.ItemAt( index as Integer ) as GraffitiGridRow function. |
| Added | 160 | GraffitiGridRow.ItemIndex( row as GraffitiGridRow ) as Integer function. |
| Added | 160 | GraffitiGridRow.LastIndex() as Integer function. |
| Added | 160 | GraffitiGridRow.Remove( row as GraffitiGridRow ) method. |
| Added | 160 | GraffitiGridRow.RemoveAll() method. |
| Added | 160 | GraffitiGridRow.RemoveAt( index as Integer ) method. |
| Added | 166 | GraffitiImagePicker has a new PictureValue() as Picture method. Returns Nil if no value or the value is not a PNG or JPEG due to framework limitations. |
| Added | None | GraffitiMap.Icon has a new Constructor( p as Picture ) method. |
| Added | None | GraffitiMap.Icon has a new Constructor( wf as WebFile ) method. |
| Added | 101 | GraffitiTextField has a new SelectAll method. |
| Added | 101 | GraffitiTextField has a new SelectionLength as Integer property. |
| Added | 101 | GraffitiTextField has a new SelectionStart as Integer property. |
| Fixed | None | GraffitiAlert once again applies the TitleStyle property of GraffitiAlertMessages. |
| Fixed | 143 | GraffitiButton's Pressed event no longer fires twice on Android-based touch-enabled devices when pressing. |
| Fixed | 107 | GraffitiCalendar no longer requires at least one item in the toolbar in order to resize its height properly. |
| Fixed | 126 | GraffitiCalendar should no longer encounter an exception when selecting some dates in some timezones. |
| Fixed | 138 | GraffitiEditor no longer immediately hides the virtual keyboard on Android devices when tapping to begin editing. |
| Fixed | 137 | GraffitiFieldLabel once again positions and sizes the field section properly. |
| Fixed | 100 | GraffitiGrid now overrides selection CSS entirely when a StyleRowSelected value is provided. |
| Fixed | 136 | GraffitiGrid should no longer report an empty search column or doubled column listing in certain scenarios. |
| Fixed | 131 | GraffitiGrid's DateTime editor no longer breaks built-in WebDatePickers after its first use. |
| Fixed | None | GraffitiGrid's DateTime editor has been further modified for Bootstrap 5. |
| Fixed | 132 | GraffitiGrid's DateTime editor now properly returns focus to the input after the picker is hidden and a selection has been made. |
| Fixed | 99 | GraffitiPopupMenu's dropdown can once again receive focus when the control is embedded in a WebDialog. |
| Fixed | 172 | GraffitiPopupMenu now fires SelectionCleared when MultipleSelect = False and AllowClear = True and the clear button was pressed. |
| Fixed | 121 | GraffitiSpeak once again returns a list of voices. |
| Fixed | 94 | GraffitiTextField once again positions and sizes field properly. |
| Fixed | 94 | GraffitiTextField once again fires the LabelPressed event. |
| Fixed | 148 | GraffitiTextField's Field no longer has inherited CSS values imposed. |
| Fixed | 148 | GraffitiTextField's Label no longer has inherited CSS values imposed. |
| Fixed | 148 | GraffitiTextField's LabelStyle property is once again applied as expected. |
| Fixed | 101 | GraffitiTextField's LabelVisible property is once again honored when set via the inspector. |
| Fixed | 98 | GraffitiToolbar flex spacers are once again visible. |
| Fixed | 167 | GraffitiTree further updated for Bootstrap 5 compatibility. |
| Fixed | 167 | GraffitiTree now applies ItemSelStyle to the text element of the selected node rather than the entire row to reduce confusion and match user expectations. |
| Changed | 153 | GraffitiDateTimePicker will now set the Value to Nil when an invalid date is entered manually by the user. |
| Changed | 108 | GraffitiGrid's NativeCheckbox Formatter now supports immediate value propagation on change when the column does not have an Editor assigned and when Editable and AutoEdit are false. To disable this functionalty, set the GraffitiGridColumn.NativeCheckboxDisabled property to True. |
| Changed | 108 | GraffitiGrid's NativeCheckbox column type now renders asynchronously to support extended functionality. |
| Changed | 149 | GraffitiGrid now triggers a SelectionChanged event with updated row ordering after a drag is complete. |
| Changed | 160 | GraffitiGridRow.Cells property is now Hidden. Users should access row data using the Cell methods. |
| Changed | 160 | GraffitiGridRow.Children property is now Hidden. Users should access child rows using the new methods. |
| Changed | None | GraffitiTextField's LabelClick event has been renamed to LabelPressed. |
| Note | None | GraffitiControlWrapper has seen some optimizations to increase backend speed of all products. |
| Note | None | GraffitiGrid has been optimized in various ways for speed on the backend. |
## Release 52.1
Release Date: Unreleased
| Type | Ticket | Description |
| --- | --- | --- |
| Fixed | 177 | GraffitiGrid no longer improperly formats Currency and Double values when converting for the client browser. |
## Release 53
Release Date: Dec 11, 2023
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiDateTimePickerRange rebuilt for a more modern experience. |
| New | None | GraffitiSplitView |
| Added | 207 | GraffitiAlert has a new IconStyle as GraffitiStyle property. |
| Added | 216 | GraffitiDateTimePickerMultiple has a new StyleButton as GraffitiStyle property. |
| Added | 216 | GraffitiDateTimePickerMultiple has a new StyleField as GraffitiStyle property. |
| Added | 216 | GraffitiDateTimePickerSingle has a new StyleButton as GraffitiStyle property. |
| Added | 216 | GraffitiDateTimePickerSingle has a new StyleField as GraffitiStyle property. |
| Added | None | GraffitiEventManager now supports ContextMenu events with new Enumeration value ContextMenu. |
| Added | None | GraffitiEventManager now supports Copy events with new Enumeration value Copy. |
| Added | None | GraffitiEventManager now supports DoubleClick events with new Enumeration value DoubleClick. |
| Added | None | GraffitiEventManager now supports Paste events with new Enumeration value Paste. |
| Added | None | GraffitiEventManager now supports Scroll events with new Enumeration value Scroll. |
| Added | None | GraffitiEventManager now supports ScrollEnd events with new Enumeration value ScrollEnd. |
| Added | 176 | GraffitiFieldLabel has a new FieldVisible as Boolean = True property. |
| Added | None | GraffitiKanban has a new AutoHeight = False property. In order to function properly, the LockBottom property must be set to False. |
| Added | 219 | GraffitiRectangle has a new BorderBottomRightRadius as Integer = 0 property. |
| Added | 219 | GraffitiRectangle has a new BorderBottomLeftRadius as Integer = 0 property. |
| Added | 219 | GraffitiRectangle has a new BorderBottomSize as Integer = 1 property. |
| Added | 219 | GraffitiRectangle has a new BorderLeftSize as Integer = 1 property. |
| Added | 219 | GraffitiRectangle has a new BorderRightSize as Integer = 1 property. |
| Added | 219 | GraffitiRectangle has a new BorderTopLeftRadius as Integer = 0 property. |
| Added | 219 | GraffitiRectangle has a new BorderTopRightRadius as Integer = 0 property. |
| Added | 219 | GraffitiRectangle has a new BorderTopSize as Integer = 1 property. |
| Added | 221 | GraffitiStyle has a new IsClass as Boolean = True property for determining whether the CSS should be rendered as a class or, when False, rendered as the provided selector. |
| Added | 178 | GraffitiTextField has a new AddValue( value as String ) method. |
| Added | 178 | GraffitiTextField has a new AddValueAt( index as Integer, value as String ) method. |
| Added | 178 | GraffitiTextField has a new IndexOfValue( value as String ) as Integer function. |
| Added | 178 | GraffitiTextField has a new LastValueIndex() as Integer function. |
| Added | 178 | GraffitiTextField has a new RemoveAllValues() method. |
| Added | 178 | GraffitiTextField has a new RemoveValueAt( index as Integer ) method. |
| Added | 178 | GraffitiTextField has a new AutocompleteHighlightTyped as Boolean = True property. |
| Added | 178 | GraffitiTextField has a new AutocompleteMaximumItems as Integer = 5 property. |
| Added | 178 | GraffitiTextField has a new AutocompleteSearchThreshold as Integer = 2 property. |
| Added | 185 | GraffitiTree has a new CheckedItems() as GraffitiTreeItem() method to return all currently checked items. |
| Fixed | 203 | Fixed a minor memory leak in GraffitiControlWrapper. |
| Fixed | 201 | GraffitiAccordionMenu should no longer leak memory from closed instances. |
| Fixed | None | GraffitiAvatar should now properly show image values in more scenarios. |
| Fixed | None | GraffitiAvatarGroup should no longer retain instances in memory after close. |
| Fixed | 198 | GraffitiButtonSegment now properly updates captions that are set after Open and contain special characters. |
| Fixed | 201 | GraffitiButtonSegment should no longer leak memory from closed instances. |
| Fixed | 201 | GraffitiCalendar should no longer leak memory from closed instances. |
| Fixed | 209 | GraffitiCamera now better detects source stream dimensions. |
| Fixed | None | GraffitiDateTimePickerMultiple further updated for Bootstrap 5. |
| Fixed | None | GraffitiDateTimePickerMultiple.ViewValue will now properly be reported as read-only by the compiler. |
| Fixed | None | GraffitiDateTimePickerRange further updated for Bootstrap 5. |
| Fixed | None | GraffitiDateTimePickerSingle.ViewValue will now properly be reported as read-only by the compiler. |
| Fixed | None | GraffitiFieldLabel further updated for Bootstrap 5. |
| Fixed | 217 | GraffitiFieldLabel.LabelStyle once again applies as expected. |
| Fixed | None | GraffitiGrid no longer incorrectly hold references in memory after close. |
| Fixed | 184 | GraffitiGrid no longer encounters a JavaScript exception when setting column Width after grid has initialized. |
| Fixed | 195 | GraffitiGrid once again honors the Enabled property state. |
| Fixed | None | GraffitiGrid's Time EditTypes popup has been further updated for Bootstrap 5. |
| Fixed | 201 | GraffitiGrid should no longer leak memory from closed instances. |
| Fixed | 218 | GraffitiGrid now supports supplying zero values for GraffitiGridColumn decimal properties. |
| Fixed | 201 | GraffitiKanban should no longer leak memory from closed instances. |
| Fixed | 201 | GraffitiLikert should no longer leak memory from closed instances. |
| Fixed | None | GraffitiListGroup further updated for Bootstrap 5.x |
| Fixed | 194 | GraffitiListGroup now properly raises the SelectionChanged event on the first and last items. |
| Fixed | 201 | GraffitiListGroup should no longer leak memory from closed instances. |
| Fixed | 196 | GraffitiMapViewer.PanTo no longer encounters a JavaScript exception. |
| Fixed | 201 | GraffitiMapViewer should no longer leak memory from closed instances. |
| Fixed | 201 | GraffitiMenu should no longer leak memory from closed instances. |
| Fixed | 201 | GraffitiOrgChart should no longer leak memory from closed instances. |
| Fixed | 99 | GraffitiPopupMenu's dropdown can once again receive focus when the control is embedded in a WebDialog. |
| Fixed | 190 | GraffitiPopupMenu no longer allows users to add duplicate values when AllowAdd = True. |
| Fixed | 190 | GraffitiPopupMenu.AllowAdd once again works as expected. |
| Fixed | 201 | GraffitiPopupMenu should no longer leak memory from closed instances. |
| Fixed | 219 | GraffitiRectangle further updated for Bootstrap 5. |
| Fixed | 201 | GraffitiResponsive should no longer leak memory from closed instances. |
| Fixed | None | GraffitiSlideshow should no longer retain instances in memory after close. |
| Fixed | 201 | GraffitiStepBar should no longer leak memory from closed instances. |
| Fixed | 201 | GraffitiTabPanel should no longer leak memory from closed instances. |
| Fixed | 214 | GraffitiTextField now enforces MaxLength in scenarios where the browser doesn't. |
| Fixed | 201 | GraffitiThumblist should no longer leak memory from closed instances. |
| Fixed | 201 | GraffitiTimeline should no longer leak memory from closed instances. |
| Fixed | 183 | GraffitiToggle once again properly applies the FalseStyle property value. |
| Fixed | 201 | GraffitiToolbar should no longer leak memory from closed instances. |
| Fixed | 185 | GraffitiTree once again allows multiple selection/checking. |
| Changed | 181 | GraffitiEditor now uses an entirely pixel-based system for font sizes. EM/REM support can be done with the CustomCSS property and hiding the font size popupmenu. |
| Changed | 189 | GraffitiGrid now returns DateTime objects upon editing applicable columns. It is recommended that all users switch to use DateTime class instances from Date class instances. |
## Release 54
Release Date: Feb 20, 2024
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiControlGroup |
| New | None | GraffitiCSSAnimator |
| New | None | GraffitiGridColumnGroup |
| New | None | GraffitiUploaderSingle |
| New | None | GraffitiWebControl |
| Added | None | GraffitiGrid.Columns() as GraffitiGridColumn() method. |
| Added | None | GraffitiGrid.Rows() as GraffitiGridRow() method. |
| Added | 311 | GraffitiGrid now supports changing column editors after they have been added to the Grid instance. |
| Added | None | GraffitiGrid now supports column grouping. |
| Added | 312 | GraffitiGrid has a new EnabledColumnGrouping as Boolean = False property. |
| Added | None | GraffitiGrid now supports the Iterable interface for row data. |
| Added | 312 | GraffitiGridColumn has a new Group as GraffitiGridColumnGroup property. |
| Added | 242 | GraffitiProgressRadial has a new UnfilledWidth as Double property which determines the size of the progress area that is currently incomplete as a percentage of the display size. |
| Added | 242 | GraffitiProgressRadial has a new UnfilledColor as Color property which determines the color of the progress area that is currently incomplete. |
| Added | 242 | GraffitiProgressSemicircle has a new UnfilledWidth as Double property which determines the size of the progress area that is currently incomplete as a percentage of the display size. |
| Added | 242 | GraffitiProgressSemicircle has a new UnfilledColor as Color property which determines the color of the progress area that is currently incomplete. |
| Added | None | GraffitiToolbarItem has a new Constructor( container as WebContainer, width as Integer = -1 ) method. |
| Added | None | GraffitiToolbarItem has a new read-only Container as WebContainer property. |
| Fixed | 249 | GraffitiAvatar no longer contains invalid Nil checking in UserImage methods. |
| Fixed | 308 | GraffitiAccordion should no longer encounter a JavaScript Exception for an undefined variable in some scenarios. |
| Fixed | 268 | GraffitiButton now properly raises other events when GotFocus is implemented. |
| Fixed | 243 | GraffitiDateTimePickerRange now supports reverse order selection. |
| Fixed | 241 | GraffitiDateTimePickerRange should no longer encounter a NilObjectException when setting StyleButton without setting Style. |
| Fixed | 260 | GraffitiDateTimePickerRange should no longer encounter a browser hang due to errant JavaScript when repeatedly setting the ValueStart and ValueEnd properties. |
| Fixed | 243 | GraffitiDateTimePickerRange should no longer raise ValueChanged twice when selecting the first date in the range. |
| Fixed | 243 | GraffitiDateTimePickerRange should now raise the ValueChanged event only when one of the values is actually changed by one second or more. |
| Fixed | 250 | GraffitiDateTime components should no longer encounter a JavaScript exception in the underlying library when changing time values that results in server data being stale. |
| Fixed | None | GraffitiDateTime components should no longer show then immediately hide the dropdown when focusing the field. |
| Fixed | 266 | GraffitiEditor now supports changing fonts and defaults after initialization. |
| Fixed | 245 | GraffitiGrid once again displays badges. |
| Fixed | 300 | GraffitiGrid should no longer return rows whose column value is empty when searching regardless of the value being searched. |
| Fixed | 237 | GraffitiKanban once again properly applies changes to various column Indicator and Style properties. |
| Fixed | 259 | GraffitiKanban now applies a minimum height to column drop areas to allow dragging items to empty columns. |
| Fixed | None | GraffitiLikert now properly calculates answer width for Bootstrap 5. |
| Fixed | 232 | GraffitiPDF.LoadInViewer now functions correctly in Xojo 2023 Release 4 and later. |
| Fixed | 238 | GraffitiPopupMenu.AdaptiveHeight can no longer encounter a breaking JavaScript exception when AllowAdd = True. |
| Fixed | 236 | GraffitiRectangle.ColorBorder once again functions properly. |
| Fixed | 306 | GraffitiResponsive no longer duplicates content on subsequent page shows. |
| Fixed | 289 | GraffitiTabPanel once again draws a consistent border around the content area using theme values. |
| Fixed | 252 | GraffitiTextField now uses a different mode of hiding the label portion when LabelVisible = False. Border radius should be maintained from theme. |
| Fixed | 267 | GraffitiTextField should now ensure data is up-to-date when losing focus. |
| Fixed | 285 | GraffitiTextField will no longer improperly replace underscores with space in Value. |
| Fixed | None | GraffitiWall once again applies GutterWidth and GutterHeight to the outside edges of the control. |
| Changed | 260 | GraffitiDateTimePickerRange now sets the ValueEnd property value to Nil upon setting ValueStart as an added form of validation and to avoid JavaScript exceptions in the utilized library under some conditions. |
| Changed | None | GraffitiToolbarButton has been renamed to GraffitiToolbarItem. |
| Changed | None | GraffitiToolbar.ToolbarStyle property is now of type WebSDKUIControl.Indicators. |
| Changed | None | GraffitiToolbar.TextStyles has a new Default = 0 value. |
| Deprecated | None | GraffitiGrid.ColumnCount method. Use GraffitiGrid.LastColumnIndex. |
| Deprecated | None | GraffitiGrid.RowCount method. Use GraffitiGrid.LastRowIndex. |
| Deprecated | None | CDNSecure Session Attribute has been deprecated in favor of “GraffitiSuite.CDN.Address”. |
| Deprecated | None | CDNUnsecure Session Attribute has been deprecated in favor of “GraffitiSuite.CDN.Address”. |
| Deprecated | None | DebugRemote Session Attribute has been deprecated in favor of "GraffitiSuite.CDN.Debug". |
| Deprecated | None | DeployRemote Session Attribute has been deprecated in favor of "GraffitiSuite.CDN.Deployed". |
| Deprecated | None | Combined Session Attribute has been deprecated in favor of "GraffitiSuite.Files.Combined". |
| Deprecated | None | LoadFA Session Attribute has been deprecated in favor of “GraffitiSuite.Files.FontAwesome”. |
| Note | None | GraffitiToolbar now supports embedding containers. |
| Note | None | GraffitiControlWrapper is now GraffitiWebUIControl |
## Release 55
Release Date: Apr 16, 2024
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiLayout |
| Added | 333 | GraffitiGrid.CommitOnFocusLost as Boolean = False property. When True and the focus is shifted from the currently active cell editor, any changes made to the value of that cell using the editor will be committed. |
| Added | 349 | GraffitiListGroupItem.Alignments enumeration. 0 = Left, 1 = Right |
| Added | None | GraffitiListGroupItem.Alignment property. |
| Added | 370 | GraffitiOrgChartItem has a new read-only Container as WebContainer property. |
| Added | 370 | GraffitiOrgChartitem has a new Constructor( Title as String, Container as WebContainer ) method. |
| Added | 350 | GraffitiTree.IconExpanderStyle as GraffitiStyle property. |
| Added | None | GraffitiWallPanel.Constructor( container as WebContainer ) |
| Added | 342 | GraffitiWall now supports adding programmatically created WebContainers. |
| Added | None | GraffitiWall now supports creating GraffitiWallPanels that have a transparent background color by default. |
| Fixed | 344 | All library icons are once again visible. Not sure how they vanished, but they're back! |
| Fixed | 326 | GraffitiCurrencyField now properly displays the caption to the left of the field element for Bootstrap 5. |
| Fixed | None | GraffitiEditor no longer attempts to retrieve the current view dynamically when setting the View property. |
| Fixed | 361 | GraffitiEditor should now resize more reliably. |
| Fixed | 361 | GraffitiEditor should no longer use unnecessary system resources monitoring dimensions. |
| Fixed | 312 | GraffitiGrid column groups now work as expected when the Grid is displayed in a modal. |
| Fixed | None | GraffitiOrgChart Bootstrap5 color definitions. |
| Fixed | 341 | GraffitiPopupMenuItems that have been previously selected programmatically can once again be selected programmatically again. |
| Fixed | 339 | GraffitiRectangle no longer throws a JavaScript exception upon setting CustomBorder to False. |
| Fixed | 325 | GraffitiTextField should no longer raise the LostFocus event when the dropdown selector receives focus. |
| Fixed | 325 | GraffitiTextField now restores focus to the field after autocomplete dropdown item selection. |
| Fixed | 325 | GraffitiTextField now raises LostFocus in more circumstances when appropriate. |
| Fixed | 337 | GraffitiToolbar once again applies button border properties when set before adding the button to a toolbar instance. |
| Fixed | 365 | GraffitiTour once again raises the Started event. |
| Fixed | 365 | GraffitiTour now reports the current step correctly in the MovedNext and MovedPrevious events. |
| Fixed | 336 | GraffitiUploader once again properly sets the MaxFileSize property for visual display. |
| Fixed | 336 | GraffitiUploader now reports MaxFileSize exceeded to user and cancels upload.. |
| Fixed | 342 | GraffitiWall no longer raises an exception when adding panels and the instance is embedded in a container. |
| Changed | None | GraffitiGrid.Editing property now operates independently of EditBegin/EditEnd to ensure proper state reporting in all circumstances. |
| Changed | 333 | GraffitiGrid.EditTypes.CheckBox now uses a native checkbox when editing. |
| Changed | 365 | GraffitiTour.Opacity's default value is now 0.75 instead of 1.0. |
| Removed | None | References to internal stylesheet that's no longer needed. |
| Note | None | GraffitiGrid now supports committing cell edits by switching focus on the page. Beware that other events, like button presses, that cause the focus to shift, may be received by the server before the updated cell data. Always check the Editing property. |
## Release 56
Release Date: Jul 15, 2024
| Type | Ticket | Description |
| --- | --- | --- |
| Added | 457 | GraffitiButtonSegmentItem has a new Style as GraffitiStyle property. |
| Added | 457 | GraffitiButtonSegmentItem has a new StyleSelected as GraffitiStyle property. |
| Added | 439 | GraffitiCalendar has a new DayStyle( day as DateTime ) as GraffitiStyle function for returning the style set to a specific day. |
| Added | 439 | GraffitiCalendar has a new DayStyle( day as DateTime, assigns style as GraffitiStyle ) method for setting a style to the background of a specific day. |
| Added | 425 | GraffitiGrid.Formatters.DateTime |
| Added | 425 | GraffitiGrid.Editors.DateTime |
| Added | None | GraffitiGridRow.Invalidate method. |
| Added | 425 | GraffitiGridColumn.DateTimeEditorLocale as DateTimeEditorLocales property |
| Added | 425 | GraffitiGridColumn.DateTimeEditorLocales enumeration: 0 = EN, 1 = DE, 2 = NL, 3 = RO, 4 = RU, 5 = ES, 6 = IT |
| Added | 422 | GraffitiLikertQuestion has a new Tag as Variant property. |
| Added | 397 | GraffitiMap.Directions.Route now has a DistanceText as String property. |
| Added | 397 | GraffitiMap.Directions.Route now has a DistanceValue as Integer property. |
| Added | None | GraffitiStepBar.Add( ParamArray itemContents as String) |
| Added | None | GraffitiStepBar.Remove( item as GraffitiStepBarItem ) |
| Added | None | GraffitiStepBar.RemoveAt( index as Integer ) |
| Added | 440 | GraffitiToolbar has a new Directions enumeration. 0 = Horizontal, 1 = Vertical |
| Added | 440 | GraffitiToolbar has a new Direction as Directions property. |
| Fixed | 459 | GraffitiAlert will now close ContentContainer values when the containing message has been closed, raising the Closed event of the container instance. |
| Fixed | 408 | GraffitiBadge once again applies BaseStyle property. |
| Fixed | None | GraffitiButtonSegment further updated for Bootstrap 5. |
| Fixed | 404 | GraffitiDateTimePickerMultiple's popup should once again appear above modals of all type. |
| Fixed | None | GraffitiDateTimePickerMultiple updated to address JavaScript deprecation warnings. |
| Fixed | 404 | GraffitiDateTimePickerRange's popup should once again appear above modals of all type. |
| Fixed | None | GraffitiDateTimePickerRange updated to address JavaScript deprecation warnings. |
| Fixed | 404 | GraffitiDateTimePickerSingle's popup should once again appear above modals of all type. |
| Fixed | None | GraffitiDateTimePickerSingle updated to address JavaScript deprecation warnings. |
| Fixed | 444 | GraffitiEditor should no longer throw a JavaScript exception related to ResizeObservers when loading. |
| Fixed | None | GraffitiFavIcon no longer breaks combined resources. |
| Fixed | 379 | GraffitiGrid columns using the UpDown editor should no longer cause an exception when a user commits a new value = 0. |
| Fixed | 379 | GraffitiGrid columns using the Integer editor should no longer cause an exception when a user commits a new value = 0. |
| Fixed | 384 | GraffitiGrid now reports the proper selected rows when a search is active. |
| Fixed | 386 | GraffitiGrid cells no longer bleed through when controls are layered on top of Grid instances. |
| Fixed | 388 | GraffitiGrid.SortBy once again works properly from the Shown event. |
| Fixed | None | GraffitiMapViewer should no longer ignore travel mode and unit settings when generating directions. |
| Fixed | 402 | GraffitiSplitView should no longer enter an erroneous state where AreaAfter isn't properly sized under some circumstances. |
| Fixed | 416 | GraffitiSplitView now interprets MinimumSizes as a percentage. |
| Fixed | None | GraffitiStepBar should no longer enter a state where it does not function correctly in some scenarios due to incompatible element ID generation. |
| Fixed | 414 | GraffitiTextField once again displays the PatternInvalidMessage on mouse over only when the value of the field doesn't match the Pattern. |
| Fixed | 381 | GraffitiToolbar now applies the Default(Secondary) Style to buttons when none is specified. |
| Fixed | 381 | GraffitiToolbar no longer inappropriately overwrites button Style when updating border properties. |
| Fixed | 440 | GraffitiToolbar now does more validation on parent existence before attempting to add buttons, and waits if necessary. This may address issues where, on some systems, buttons are improperly added. |
| Fixed | 442 | GraffitiUploader will no longer create the default upload path structure if the UploadPath property is set. Files will be places directly in the specified directory. |
| Fixed | 442 | GraffitiUploaderSingle will no longer create the default upload path structure if the UploadPath property is set. Files will be places directly in the specified directory. |
| Fixed | None | GraffitiWall should no longer briefly show embedded WebContainers covering the entire page upon load. |
| Changed | 425 | GraffitiGridRow.Height is no longer read-only once a row has been added to its parent Grid instance. |
| Changed | None | GraffitiSplitView uses a more resilient method of modifying contents when changing the StackDirection property's value. |
| Changed | None | GraffitiStepBar initialization improved slightly. |
| Changed | 424 | GraffitiTour has been largely reworked internally. There are minor API differences. |
| Note | None | Fixed all demo WebLabels where Xojo nuked the color settings. |
| Note | None | GraffitiButtonSegment now defaults to using the Secondary Bootstrap indicator for items. |
| Note | 457 | GraffitiButtonSegmentItem requires both Style and StyleSelected properties have values if either is to be used. |
| Note | 424 | GraffitiTour updated to Driver.js version 1.3.1. |
| Deprecated | None | GraffitiBarcodeReader |
| Deprecated | None | GraffitiQR |
| Deprecated | None | GraffitiStepBar.Item( index as Integer ), use GraffitiStepBar.ItemAt( index as Integer ) |
| Deprecated | None | GraffitiStepBar.RemoveItem( index as Integer ), use GraffitiStepBar.RemoveAt( index as Integer ) |
| Deprecated | None | GraffitiStepBar.RemoveItem( item as GraffitiStepBarItem ), use GraffitiStepBar.Remove( item as GraffitiStepBarItem ) |
## Release 57
Release Date: Jul 26, 2024
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiAnchor |
| New | None | GraffitiTOTPField |
| New | None | GraffitiTOTPProvider |
| Added | 473 | GraffitiAlert has a new ForceZIndex as Boolean = False property. When True, the appropriate z-index will be calculated to ensure that the alert shows above all other page elements. When False, default Bootstrap values are applied. |
| Added | None | GraffitiCurrencyField.NegativeCharacterSymbol as String = "-" |
| Added | None | GraffitiCurrencyField.BracketNegatives now supports an empty value for displaying the negative symbol rather than values encased in brackets. |
| Fixed | 475 | GraffitiAlert vertical resizing once again works as expected. |
| Fixed | None | GraffitiCurrencyField.BracketNegatives now performs validation on the value to ensure that it is in the format expected. |
| Fixed | 476 | GraffitiSignature is now more reliable when embedded at different levels in more types of views. |
| Fixed | 474 | GraffitiStepBar will no longer duplicate items when shown/hidden. |
| Fixed | 474 | GraffitiStepBar will no longer raise the SelectionChanged event multiple times. |
| Fixed | 460 | GraffitiTextField value should now wrap properly when Multiline = True. |
| Note | 473 | GraffitiAlert.ForceZIndex may cause existing implementations to behave differently than previous versions. If you notice a problem, set this value to True to enforce the old behavior. |
## Release 58
Release Date: Aug 6, 2024
| Type | Ticket | Description |
| --- | --- | --- |
| Added | None | GraffitiCurrencyField has a new Alignment as TextAlignments property. |
| Fixed | 491 | GraffitiGrid.FooterRow is now properly reported as Read Only by the IDE when an attempt is made to assign a GraffitiGridRow instance. |
| Changed | None | GraffitiGrid JavaScript reformatted in some areas for readability. |
## Release 60
Release Date: Sep 21, 2024
| Type | Ticket | Description |
| --- | --- | --- |
| New | 522 | GraffitiDiffViewer |
| Added | None | GraffitiColorPicker has a new DropdownPosition as DropdownPositions property. |
| Added | None | GraffitiColorPicker has a new DropdownPositions enumeration: 0 = Bottomleft, 1 = BottomRight, 2 = TopLeft, 3 = TopRight |
| Added | None | GraffitiColorPicker has a new SelectorType as SelectorTypes property. |
| Added | None | GraffitiColorPicker has a new SelectorTypes enumeration: 0 = Hue, 1 = Brightness, 2 = Saturation, 3 = Wheel |
| Added | 507 | GraffitiDateTimePickerMultiple now supports embedding in Popovers. |
| Added | 507 | GraffitiDateTimePickerRange now supports embedding in Popovers. |
| Added | 507 | GraffitiDateTimePickerSingle now supports embedding in Popovers. |
| Added | 509 | GraffitiButtonSegmentItem has a new BadgeIndicator as WebSDKUIControl.Indicators property. |
| Added | 509 | GraffitiButtonSegmentItem has a new BadgeStyle as GraffitiStyle property. |
| Added | 509 | GraffitiButtonSegmentItem has a new BadgeText as String property. |
| Added | None | GraffitiPopupMenu now supports embedding in Popovers. |
| Added | None | GraffitiStyle now implementes Operator_Add for combining two GraffitiStyle instances' content to create a new GraffitStyle. |
| Added | None | GraffitiStyle now supports additional States values: Active, Focus, FocusVisible, FocusWithin, Target. |
| Added | None | GraffitiSyntaxEditor has a new HTMLRendered( content as String ) event. |
| Added | 514 | GraffitiSyntaxEditor has a new ToHTML( includeCSS as Boolean = True ) method. |
| Added | 539 | GraffitiTextField has a new AllowLineFeed property that will allow the insertion of line feeds when the Enter key is pressed. |
| Added | 539 | GraffitiTextField has a new AllowLineWrapping property that will disable text wrapping as indicated. |
| Added | 539 | GraffitiTextField has a new AllowTabs property that will catch the Tab key to insert a tab character and Shift+Tab to remove a tab character. |
| Added | None | GraffitiTextField has a new SpellCheck as Boolean = True property. |
| Added | 534 | GraffitiTextField has a new SelectedText as String property for getting/setting the currently selected text in the Value. |
| Fixed | None | GraffitiAlert once again honors the GraffitiAlertMessage.CanOverflow property. |
| Fixed | None | GraffitiColorPicker now uses RGBA values internally to improve reliability. |
| Fixed | 493 | GraffitiEditor's Print toolbar button once again works as expected in Chromium-based browsers. |
| Fixed | 493 | GraffitiEditor updated to SunEditor 2.47.0 from 2.43.14. |
| Fixed | 511 | GraffitiEventManager now properly returns coordinates in mouse events when the application is running in Firefox. |
| Fixed | 510 | GraffitiGrid no longer fails to update cell values under some circumstances. |
| Fixed | None | GraffitiGridRow will now properly handle setting Nil to CellStyle to clear applied styles. |
| Fixed | None | GraffitiGridRow.ButtonIndicator is once again applied when the value is not WebSDKUIControl.Indicators.Default. |
| Fixed | None | GraffitiPopover's HeightChanged event is now more reliable when AdaptiveHeight = True. |
| Fixed | 519 | GraffitiSplitView no longer purports to be GraffitiCamera in the IDE's designer. |
| Fixed | 515 | GraffitiTextField should once again honor property changes made in the Shown event. |
| Fixed | 515 | GraffitiTextField with Type = Search will once again operate as expected when the user clicks the "X" button and there are no autocomplete values provided to the control. |
| Fixed | 534 | GraffitiTextField.SelectionChanged event will now properly raise when the selection is empty. |
| Changed | None | GraffitiColorPicker initialization routine modernized. |
| Changed | 496 | GraffitiGrid.Editor.PopupMenu style has been changed to better match the appearance of the row within which it resides. |
| Changed | None | GraffitiUploader now calculates maximum file size in MB in the Xojo code to match the client-side JavaScript. |
| Changed | None | GraffitiColorPicker.Selector property. See GraffitiColorPicker.SelectorType |
| Changed | None | GraffitiColorPicker.Position property. See GraffitiColorPicker.DropdownPosition |
| Note | 515 | GraffitiTextField's Autocomplete functionality should not be used with Type = Search due to a bug in Bootstrap and/or browser implementations. (See: https://github.com/twbs/bootstrap/issues/34411) |
## Release 61
Release Date: Dec 27, 2024
| Type | Ticket | Description |
| --- | --- | --- |
| New | 606 | GraffitiGridAvatarGroup |
| New | 606 | GraffitiGridAvatarGroupItem |
| Added | 584 | GraffitiAccordionMenu.BaseStyle implemented. |
| Added | 601 | GraffitiAccordionMenu now has a MouseEnter event definition. |
| Added | 601 | GraffitiAccordionMenu now has a MouseExit event definition. |
| Added | 560 | GraffitiAlert palette and modal windows now respond to clicks by moving forward in the z-index stack. |
| Added | 592 | GraffitiCalendar now has EventAt(index as Integer) as GraffitiCalenderEvent method. |
| Added | 592 | GraffitiCalendar now has LastIndex() as Integer method. |
| Added | 590 | GraffitiDrag now supports multiple target controls per source control. |
| Added | 606 | GraffitiGrid.Formatters.AvatarGroup. |
| Added | 565 | GraffitiKanban has a new Footer as WebContainer property. |
| Added | 604 | GraffitiOrgChart once again has a DisplayDirection property. |
| Added | 607 | GraffitiOrgChart.FindByTag( tag as Variant, parent as GraffitiOrgChartItem = nil ) |
| Added | 607 | GraffitiOrgChart.FindByTitle( title as String, parent as GraffitiOrgChartItem = nil ) |
| Added | 607 | GraffitiOrgChartItem.IndexOf( item as GraffitiOrgChartItem) as Integer |
| Added | None | GraffitiStyle now supports the "enabled" pseudo-class state. |
| Added | None | GraffitiStyle now supports the "disabled" pseudo-class state. |
| Added | 545 | GraffitiSyntaxEditor has a new FontFamily as String property. |
| Added | 593 | GraffitiWall.AllowDragReorder as Boolean = False property. |
| Added | 593 | GraffitiWall.Reordered event. |
| Fixed | 591 | GraffitiAccordionMenu once again properly applies visual selection when modifying the SelectedItem property. |
| Fixed | 589 | GraffitiButton.TextStyle is now more reliable. |
| Fixed | 562 | GraffitiButtonSegment should once again return the selected button when using the Value property. |
| Fixed | 582 | GraffitiDateTimePickerSingle now honors changing the Format from the Open event. |
| Fixed | 582 | GraffitiDateTimePickerSingle now honors changing the Locale from the Open event. |
| Fixed | 567 | GraffitiDatePickerRange will no longer set ValueEnd to Nil when receiving only a start value unless StartValue > EndValue. |
| Fixed | 563 | GraffitiGrid.AddRow no longer fails when LockUpdate = True and following DeleteAllRows. |
| Fixed | 570 | GraffitiGrid should no longer experience issues with KeyPress event being sent from browser. |
| Fixed | None | GraffitiGrid now updates search columns when setting LockUpdate = False. |
| Fixed | 578 | GraffitiGrid once again properly sets GraffitiGridRow.CellStyles set before rows are rendered to the Grid. |
| Fixed | None | GraffitiGridRow now requires the use of methods (Add, Remove, etc) for child rows. |
| Fixed | 577 | GraffitiGridRow.Expanded is no longer ignored in some scenarios. |
| Fixed | 604 | GraffitiOrgChart.RemoveAll no longer leaves orphaned nodes. |
| Fixed | 607 | GraffitiOrgChart once again properly updates the display on Title change. |
| Fixed | 576 | GraffitiPopupMenu will now use theme defaults for active elements within the dropdown. |
| Fixed | 608 | GraffitiPopupMenu no longer encodes HTML entities in the selected item display by default. |
| Fixed | 556 | GraffitiProgressRadial once again properly colors the progress area. |
| Fixed | 556 | GraffitiProgressSemiCircle once again properly colors the progress area. |
| Fixed | 539 | GraffitiTextField.AllowLineFeed should now be more reliable. |
| Fixed | 539 | GraffitiTextField.AllowLineWrapping should now be more reliable. |
| Fixed | 539 | GraffitiTextField.AllowTabs should now be more reliable. |
| Fixed | None | GraffitiUploaderSingle once again properly sets the filesystem name for uploaded files. |
| Fixed | 581 | GraffitiUploader should no longer fail to write the final packet to the filesystem on very large files. |
| Removed | 604 | GraffitiOrgChart.ScrollTo method. |
| Changed | 574 | GraffitiGrid.SelectedRows is now a function that returns a copy of the internal array preventing modification of the Grid's internal tracking outside of using the methods of GraffitiGrid or the GraffitiGridRow.Selected property. This may require code changes. |
| Changed | 604 | GraffitiOrgChart updated to jQuery.OrgChart version 4.0.1. |
## Release 62
Release Date: Mar 27, 2025
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiCookieAlert |
| New | None | GraffitiGridCellContainer |
| New | None | GraffitiNote |
| New | None | GraffitiSessionMessenger |
| New | None | GraffitiSimpleEditor |
| Added | None | GraffitiAccordion now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiAccordionMenu now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiAvatarGroup now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiCalendar now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiCamera now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiControlGroup now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiGridRow.CellContainer( column as GraffitiGridColumn ) as GraffitiGridCellContainer method. |
| Added | 632 | GraffitiKanbanColumn has a new Width property for setting a static width in pixels. |
| Added | None | GraffitiKanbanItem has a new read-only Container as WebContainer property. |
| Added | None | GraffitiLayout now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiLikert now implements the iterable interfaces to support For...Each for child items. |
| Added | 656 | GraffitiListGroup has a new AllowDragReordering as Boolean = False property. |
| Added | 656 | GraffitiListGroup has a new ItemDragReordered( item as GraffitiListGroupItem, index as Integer ) event. |
| Added | None | GraffitiListGroup now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiMenu now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiOrgChart now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiPDF.Formats enumeration. |
| Added | None | GraffitiPDF.LineStyles enumeration. |
| Added | None | GraffitiPDF.Orientations enumeration. |
| Added | None | GraffitiPDF.Units enumeration. |
| Added | None | GraffitiPDFTable.OverflowStyles enumeration. |
| Added | 618 | GraffitiPopupMenu has a new ItemClicked( item as GraffitiPopupMenuItem ) which is triggered when MultipleSelect = True and a selected tag is clicked. |
| Added | None | GraffitiPopupMenu now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiResponsive now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiResponsiveRow now implements the iterable interfaces to support For...Each for child items. |
| Added | 658 | GraffitiSignature has a new PenMaximumSize as Double = 2.5 property. |
| Added | 658 | GraffitiSignature has a new PenMinimumSize as Double = 0.5 property. |
| Added | None | GraffitiSlideshow now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiSpeak now implements the iterable interfaces to support For...Each for child items. |
| Added | 642 | GraffitiStepBar has a new ItemPressed( item as GraffitiStepBarItem ) event. |
| Added | 642 | GraffitiStepBarItem has a new BadgeIndicator as WebUIControl.Indicators property. |
| Added | 642 | GraffitiStepBarItem has a new BadgeStyle as GraffitiStyle property. |
| Added | 642 | GraffitiStepBarItem has a new BadgeText as String property. |
| Added | 642 | GraffitiStepBarItem has a new Indicator as WebUIControl.Indicators property. |
| Added | 642 | GraffitiStepBarItem has a new IndicatorActive as WebUIControl.Indicators property. |
| Added | 642 | GraffitiStepBarItem has a new Style as GraffitiStyle property. |
| Added | 642 | GraffitiStepBarItem has a new StyleActive as GraffitiStyle property. |
| Added | None | GraffitiStepBar now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiSyntaxEditor.AnnotationTypes enumeration. |
| Added | None | GraffitiTabPanel now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiThumbList now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiToolbar now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiTour now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiTree now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiTreeItem now implements the iterable interfaces to support For...Each for child items. |
| Added | None | GraffitiWall now implements the iterable interfaces to support For...Each for child items. |
| Added | 613 | GraffitiDiffViewer has a new HighlightChangesInline as Boolean = False property. When ViewType = Inline and this value is true, changes will be flattened to NewText only. |
| Added | 614 | GraffitiKanban.ItemMoved event has two new parameters for source and destination indices: ItemMoved( item as GraffitiKanbanItem, fromColumn as GraffitiKanbanColumn, fromIndex as Integer, toColumn as GraffitiKanbanColumn, toIndex as Integer ) |
| Fixed | None | GraffitiAccordion can no longer lose its containers due to an issue in Xojo 2025R1. |
| Fixed | None | GraffitiAlert can no longer lose its containers due to an issue in Xojo 2025R1. |
| Fixed | 612 | GraffitiCalendar no longer throws an InvalidArgumentException when double-clicking a date slot. |
| Fixed | None | GraffitiCard once again properly applies SubtitleTextStyle property. |
| Fixed | None | GraffitiControlGroup can no longer lose its containers due to an issue in Xojo 2025R1. |
| Fixed | 613 | GraffitiDateTimePickerSingle Format property should now be more reliable. |
| Fixed | None | GraffitiDateTimePickerSingle optimized to send less data to the client. |
| Fixed | None | GraffitiGrid can no longer lose its containers due to an issue in Xojo 2025R1. |
| Fixed | None | GraffitiGrid column groups header now more reliably resizes when the Grid is resized. |
| Fixed | 617 | GraffitiGrid no longer skips the first row the first time a For...Each is conducted. |
| Fixed | 639 | GraffitiGrid now properly updates footer row cells that were modified while LockUpdate = True after setting LockUpdate = False. |
| Fixed | None | GraffitiKanban can no longer lose its containers due to an issue in Xojo 2025R1. |
| Fixed | None | GraffitiKanban no longer skips the first row the first time a For...Each is conducted. |
| Fixed | 630 | GraffitiKanban no longer ignores column and item drag operations to the end of the display area for that type. |
| Fixed | None | GraffitiKanban GutterWidth and GutterHeight no longer cause parts of items to be hidden when on a very small display and using 100% size for columns. |
| Fixed | None | GraffitiLayout now has improved handling of nested controls when locking all sides. |
| Fixed | None | GraffitiListGroup can no longer lose its containers due to an issue in Xojo 2025R1. |
| Fixed | None | GraffitiResponsive can no longer lose its containers due to an issue in Xojo 2025R1. |
| Fixed | None | GraffitiSidebar can no longer lose its containers due to an issue in Xojo 2025R1. |
| Fixed | None | GraffitiSplitView can no longer lose its containers due to an issue in Xojo 2025R1. |
| Fixed | None | GraffitiTabPanel can no longer lose its containers due to an issue in Xojo 2025R1. |
| Fixed | None | GraffitiToolbar can no longer lose its containers due to an issue in Xojo 2025R1. |
| Fixed | None | GraffitiTooltip can no longer lose its containers due to an issue in Xojo 2025R1. |
| Fixed | 642 | GraffitiStepBar's MouseEnter and MouseExit once again fire. |
| Fixed | None | GraffitiWall can no longer lose its containers due to an issue in Xojo 2025R1. |
| Changed | 613 | GraffitiDiffView.ContextSize now defaults to -1 to show all lines. 0 shows all changed lines. |
| Changed | 629 | GraffitiLayout.ConstrainToContent now defaults to False to avoid unintended size alterations on new instances. |
| Changed | None | GraffitiPDF.FromHTML parameters updated to use enumerations. |
| Changed | None | GraffitiPDF.NewDocument parameters updated to use enumerations. |
| Changed | None | GraffitiPDFTable.OverflowStyle property is now of type GraffitiPDFTable.OverflowStyles. |
| Changed | None | GraffitiSyntaxEditor.AddAnnotation parameters updated to use enumerations. |
| Removed | None | GraffitiPDF Format constants. |
| Removed | None | GraffitiPDF LineStyle constants. |
| Removed | None | GraffitiPDF Orientation constants. |
| Removed | None | GraffitiPDF Side constants. |
| Removed | None | GraffitiPDF Units constants. |
| Removed | None | GraffitiPDF Overflow constants. |
| Removed | None | GraffitiSyntaxEditor Annotation constants. |
## Release 62.1
Release Date: Apr 2, 2025
| Type | Ticket | Description |
| --- | --- | --- |
| Fixed | None | GraffitiEditor custom toolbar menus can no longer get stuck on the screen when selecting an item. |
| Fixed | None | GraffitiOrgChart should no longer encounter a JavaScript exception when setting the title of a new node added after initialization. |
| Fixed | None | GraffitiSplitView no longer encounters a JavaScript exception upon setup. |
| Changed | None | GraffitiAlertMessage containers are now reusable by default. Users should Close instance when they're done with them. |
| Changed | 678 | GraffitiEditor custom toolbar menus should no longer extend beyond the height of the editor's area to account embedding in containers, modals, and other WebViews. |
## Release 63
Release Date: Jul 1, 2025
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiAccordion Rewrite |
| New | None | GraffitiAlertDialog |
| New | None | GraffitiPDF |
| Added | 687 | GraffitiAlertMessage has a new read-only BodyWidth as Integer property. |
| Added | 687 | GraffitiAlertMessage has a new MaximumHeight as Integer = -1 property. |
| Added | 687 | GraffitiAlertMessage has a new MaximumWidth as Integer = -1 property. |
| Added | 687 | GraffitiAlertMessage has a new MinimumHeight as Integer = -1 property. |
| Added | 687 | GraffitiAlertMessage has a new MinimumWidth as Integer = -1 property. |
| Added | 755 | GraffitiAlertMessage has a new Palette as Boolean = False property. Setting to True changes the embed mode and allows scrolling for large messages on small displays. |
| Added | None | GraffitiCurrencyField has a new FromLocale( value as Locale = Nil ) method. Fills DecimalChar, ThousandsSep, and CurrencySymbol properties from the provided Xojo Locale object. If Value = Nil then the coontrol will attempt to use the current Session locale. If that fails, the current server locale will be used. |
| Added | 749 | GraffitiEditor has a new AllowStyleChangesOnly as Boolean = False property that prevents users from making changes to the editor's content by either typing or drag/drop but allows changing the formatting of existing text. |
| Added | 690 | GraffitiGrid now supports modifying column groups at any time. |
| Added | None | GraffitiKanban has a new ColumnPressed( column as GraffitiKanbanColumn ) event definition for when users press a column. |
| Added | 715 | GraffitiKanban has a new ItemPressed( item as GraffitiKanbanItem ) event definition for when users press an item. |
| Added | None | GraffitiSessionMessenger has a new AutomaticTruncation as Boolean = False shared property. If True, messages older than current date minus MessagePreservationLength will be removed from the database upon connect. |
| Added | None | GraffitiSessionMessenger has a new ListenInterval as Integer = 500 shared property. Length of time, in milliseconds, between checking for new messages. |
| Added | None | GraffitiSessionMessenger has a new MessagePreservationLength as DateInterval shared property. Length of time that messages are preserved in the database. Default is 24 hours. |
| Fixed | None | GraffitiAlert once again properly restores minimized GraffitiAlertMessages, issue was due to missing jQuery resources in the framework. |
| Fixed | 720 | GraffitiAlert.Show( theMessage as GraffitiAlertMessage ) no longer requires that containers be embedded before alerts are shown. |
| Fixed | 702 | GraffitiDateTimePickerSingle should no longer throw a JavaScriptException on load when setting a value. |
| Fixed | 719 | GraffitiKanban now appropriately applies the column Indicator property to the column card body. |
| Fixed | 740 | GraffitiKanbanItem now properly applies the AvatarPicture. |
| Fixed | 746 | GraffitiKanbanItem now properly applies the ImagePicture. |
| Fixed | 745 | GraffitiKanbanItem now hides the list items area when no list items are present. |
| Fixed | None | GraffitiListGroup once again areports selection of the first item in the list. |
| Fixed | None | GraffitiPDFViewer now looks better in dark mode. |
| Fixed | None | GraffitiPDFViewer.Enabled = False no longer disables the entire page. |
| Fixed | None | GraffitiSessionMessenger should no longer encounter a NilObjectException upon destruction in some cases. |
| Fixed | None | GraffitiSessionMessenger data folder name corrected. |
| Fixed | 685 | GraffitiToolbar once again properly applies GraffitiToolbarItem.CaptionAlignment property. |
| Fixed | 685 | GraffitiToolbar once again properly applies GraffitiToolbarItem.BorderType property. |
| Fixed | None | GraffitiWall is now more responsive when switching pages. |
| Changed | None | GraffitiTabPanel now closes containers when their containing TabPanelItem is closed. The ItemClosed event is raised before this occurs to allow for interacting with the container before it is destructed. |
| Changed | None | GraffitiWebControl once again versions remote resource files for cache optimization. |
| Changed | None | GraffitiWebControl shared methods cleanup. |
| Changed | None | GraffitiWebUIControl once again versions remote resource files for cache optimization. |
| Changed | None | GraffitiWebUIControl shared methods cleanup. |
| Changed | None | GraffitiWebControl and GraffitiWebUIControl remote resource loading optimized to cache URL. This should reduce render time and overall resource usage on session startup. |
| Changed | None | GraffitiWebControl and GraffitiWebUIControl now raise RuntimeExceptions for deprecated session attributes. |
| Changed | None | SessionMessenger now uses a Cooperative thread for message monitoring rather than a Preemptive thread. Preemptive threads may have been causing lockups. |
## Release 63.1
Release Date: Jul 5, 2025
| Type | Ticket | Description |
| --- | --- | --- |
| Fixed | None | GraffitiAccordion fixes for WebListboxes embedded in sections. |
| Fixed | None | GraffitiSessionMessenger once again uses cooperative threading as preemptive threads are still causing application lockups. |
## Release 64
Release Date: Oct 18, 2025
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiHTMLtoPDF |
| New | 807 | GraffitiKanbanAvatar |
| New | None | GraffitiRecaptcha |
| Added | 814 | GraffitiAlert.MaximizeAll method |
| Added | 814 | GraffitiAlert.MinimizeAll method |
| Added | 814 | GraffitiAlert.RestoreAll method |
| Added | 814 | GraffitiAlert.MessageMaximized(message as GraffitiAlertMessage) event |
| Added | 814 | GraffitiAlert.MessageMinimized(message as GraffitiAlertMessage) event |
| Added | 814 | GraffitiAlert.MessageRestored(message as GraffitiAlertMessage) event |
| Added | 814 | GraffitiAlertDialog.DisplayStates enumeration |
| Added | 814 | GraffitiAlertDialog.DisplayState property |
| Added | 814 | GraffitiAlertDialog.Maximized event |
| Added | 814 | GraffitiAlertDialog.Minimized event |
| Added | 814 | GraffitiAlertDialog.Restored event |
| Added | 814 | GraffitiAlertMessage.DisplayStates enumeration |
| Added | 814 | GraffitiAlertMessage.DisplayState property |
| Added | 804 | GraffitiKanban has a new ColumnHeadersSticky as Boolean = False property. |
| Added | 805 | GraffitiKanban.IndexOf( column as GraffitiKanbanColumn ) as Integer method. |
| Added | 805 | GraffitiKanbanColumn.IndexOf( item as GraffitiKanbanItem ) as Integer method. |
| Added | None | GraffitiKanbanItem.Parent() as GraffitiKanbanColumn method. |
| Added | None | GraffitiKanban.MaximumAvatars as Integer = 4 property. |
| Added | 804 | GraffitiKanbanItem has a new CheckboxLabel as String property. |
| Added | 804 | GraffitiKanbanItem has a new CanEditSubtitle as Boolean = False property. |
| Added | 804 | GraffitiKanbanItem has a new Subtitle as String property. |
| Added | 804 | GraffitiKanbanItem has a new SubtitleIndicator as String property. |
| Added | 804 | GraffitiKanbanItem has a new SubtitleStyle as GraffitiStyle property. |
| Added | 807 | GraffitiKanbanItem has a new AddAvatar( avatar as GraffitiKanbanAvatar ) method. |
| Added | 807 | GraffitiKanbanItem has a new LastAvatarIndex() as Integer method. |
| Added | 807 | GraffitiKanbanItem has a new RemoveAllAvatars() method. |
| Added | 807 | GraffitiKanbanItem has a new RemoveAvatar( avatar as GraffitiKanbanAvatar ) method. |
| Added | 818 | GraffitiPDF.Internal.Template.WatermarkFontName as String = "Helvetica" |
| Added | 818 | GraffitiPDF.Internal.Template.WatermarkFontStyle as GraffitiPDF.Document.FontStyles |
| Added | 818 | GraffitiPDF.Internal.Template.WatermarkOpacity as Double = 0.5 |
| Added | 822 | GraffitiPDF.Tables.Instance.AddFooterStyle( column as Integer, style as GraffitiPDF.Tables.CellStyle ) method. |
| Added | 822 | GraffitiPDF.Tables.Instance.AddHeaderStyle( column as Integer, style as GraffitiPDF.Tables.CellStyle ) method. |
| Added | 819 | GraffitiPDF.Tables.Instance.Footer( index as Integer ) as String method. |
| Added | 819 | GraffitiPDF.Tables.Instance.Footer( index as Integer, assigns value as String ) method. |
| Added | 819 | GraffitiPDF.Tables.Instance.FooterStyle as GraffitiPDF.Tables.CellStyle property |
| Added | 815 | GraffitiSimpleEditor.AddHashtag( value as String ) method. |
| Added | 815 | GraffitiSimpleEditor.AddHashTags( Values() as String ) method. |
| Added | 815 | GraffitiSimpleEditor.AddMention( MentionValue as String ) method. |
| Added | 815 | GraffitiSimpleEditor.AddMentions( Values() as String ) method. |
| Added | 815 | GraffitiSimpleEditor.HashTag( tagID as Integer ) as String method. |
| Added | 815 | GraffitiSimpleEditor.HashTagCount() as Integer method. |
| Added | 815 | GraffitiSimpleEditor.Mention( mentionID as Integer ) as String method. |
| Added | None | GraffitiSimpleEditor.MentionCount() as Integer method. |
| Added | None | GraffitiSimpleEditor.RemoveAllHashTags() method. |
| Added | None | GraffitiSimpleEditor.RemoveAllMentions() method. |
| Added | None | GraffitiSimpleEditor.RemoveHashTag( tagID as Integer ) method. |
| Added | None | GraffitiSimpleEditor.RemoveMention( mentionID as Integer ) method. |
| Added | None | GraffitiTabPanel.Lookup( name as String ) as GraffitiTabPanelItem method. |
| Added | None | GraffitiTabPanelItem.Name as String property. |
| Added | 791 | GraffitiWall.ScrollTo( item as GraffitiWallPanel ) |
| Fixed | 840 | GraffitiGrid should no longer enter a state where some row references are lost after sorting during a search operation. |
| Fixed | 841 | GraffitiGrid should no longer show an empty column grouping header when EnableColumnGrouping = False and resizing columns. |
| Fixed | 825 | GraffitiPDF now properly positions footers on all pages. |
| Fixed | 823 | GraffitiPDF.Document.DrawLine no longer throws a JavaScript exception. |
| Fixed | 821 | GraffitiPDF.Tables.Instance.BodyStyleAlternate is now honored. |
| Removed | 807 | GraffitiKanbanItem.AvatarFile |
| Removed | 807 | GraffitiKanbanItem.AvatarPicture |
| Removed | 807 | GraffitiKanbanItem.AvatarStyle |
| Removed | 807 | GraffitiKanbanItem.AvatarURL |
| Changed | 783 | GraffitiListGroup now does more verification on item containers. |
| Changed | None | GraffitiListGroup will now close item containers when the item is removed. |
## Release 65
Release Date: Jan 27, 2026
| Type | Ticket | Description |
| --- | --- | --- |
| New | None | GraffitiAudioRecorder |
| New | None | GraffitiSelectGroup |
| Added | 877 | GraffitiUploader has a new AutoUpload as Boolean = True property. |
| Added | 877 | GraffitiUploader has a new UploadPressed( file as GraffitiWebFile ) as Boolean event. |
| Fixed | None | GraffitiGrid's LongText editor now better matches the current Bootstrap theme. |
| Fixed | 871 | GraffitiListGroup no longer encounters a JavaScript exception when setting SelectedItem. |
| Fixed | 844 | GraffitiListGroup now resets search when criteria is empty. |
| Fixed | 871 | GraffitiListGroup once again supports setting SelectedItem to Nil. |
| Fixed | 844 | GraffitiListGroup once again uses a search type field for list searches. |
| Fixed | None | GraffitiTooltip once again displays tooltips with containers correctly. |
| Changed | None | GraffitiCookieAlert no longer relies on Modernizr. |
## Release 65.1
Release Date: Feb 2, 2026
| Type | Ticket | Description |
| --- | --- | --- |
| Added | None | Implemented a new system of resource tracking that should reduce memory usage over time. |
| Fixed | 894 | GraffitiHTMLtoPDF now embeds the Roboto font by default as the base library now requires it. |
| Changed | None | GraffitiSuite no longer requires a GraffitiSuiteInstances as Dictionary property. |
## Release 65.2
Release Date: Feb 5, 2026
| Type | Ticket | Description |
| --- | --- | --- |
| Fixed | 899 | Workaround for bug in Xojo's Libraries implementation in regards to the registration system. |
## Release 66
Release Date: Apr 1, 2026
| Type | Ticket | Description |
| --- | --- | --- |
| Fixed | 922 | GraffitiKanban.ScrollTo now accounts for header height when ColumnHeaderSticky = True. |
| Note | None | Xojo 2026R1 Compatibility |
## Release 67
Release Date: Apr 9, 2026
| Type | Ticket | Description |
| --- | --- | --- |
| Fixed | 927 | GraffitiTextField should no longer always report a True state when using PatternSetsState = True. |
| Fixed | 928 | GraffitiTextField no longer inappriopriately applies AllowTabs behavior when Multiline = False. |
| Fixed | 929 | GraffitiKanban no longer adds GraffitiKanbanListItems to all GraffitiKanbanItems in a column when calling AddListItem. |
## Release 68
Release Date: Apr 15, 2026
| Type | Ticket | Description |
| --- | --- | --- |
| Changed | None | GraffitiSuite now incorporates a method of determining the true Application object to workaround a linker error when users have renamed it from "App" to something else. |
## Release 69
Release Date: May 9, 2026
| Type | Ticket | Description |
| --- | --- | --- |
| Added | None | Current GraffitiSuite Library version is now available by accessing the GraffitiSuite.Version constant. |
| Added | 936 | GraffitiMapViewer.MarkerPressed event has a new screenPosition as Point parameter for the X/Y location of the press relative to the current page. |
| Fixed | None | GraffitiSuite is now initialized in more scenarios where it was needed. |
| Fixed | 937 | GraffitiTree now supports adding items in the Shown event. |
| Updated | None | Updated documentation to reflect the move to Libraries. |
## Release 70
Release Date: May 22, 2026
| Type | Ticket | Description |
| --- | --- | --- |
| Added | None | Support for Xojo2026 Release 2. |
| Fixed | 941 | GraffitiGrid now supports changing a cell's GraffitiGridAvatarGroup value without requiring the removal and re-adding of the row. |
| Fixed | 941 | GraffitiGrid now supports changing a row's ButtonIndicator value after the row has been added to the Grid. |
| Fixed | None | GraffitiGrid no longer encounters a JavaScript error when setting a row’s ProgressIndicator property after the row has been added to the Grid. |
| Changed | None | Improved control appearance on views within the IDE. |
## Release 71
Release Date: Jun 22, 2026
| Type | Ticket | Description |
| --- | --- | --- |
| Added | None | Additional metadata. |
| Added | None | GraffitiSimpleEditorMention class. |
| Added | 943 | GraffitiSimpleEditor now has method and function overrides for leveraging the new GraffitiSimpleEditorMention class. |
| Added | 943 | GraffitiSimpleEditor now supports headers in mentions list. |
| Added | 943 | GraffitiSimpleEditor now supports names, titles, and tags for mentions via the GraffitiSimpleEditorMention class. |
| Fixed | 953 | GraffitiPDFViewer now better handles loading operations regardless of control visibility. |
| Fixed | 944 | GraffitiSimpleEditor once again raises GotFocus and LostFocus. |
| Changed | 943 | GraffitiSimpleEditor.MentionAdded event definition has been changed. Requires project updates. |
| Changed | 912 | GraffitiTabPanel container loading modified in an attempt to correct an exceedingly rare issue where containers would not correctly embed in the control. |
| Updated | None | Xojo 2026 Release 2 Compatibility. |