Release Information #

Platform Version Release Date
All R40 May 24, 2021

Desktop #

Type Change
ADDED GraffitiKanbanColumn has a new CanMove as Boolean = True property. When False the column will not be draggable. (15282)
FIXED GraffitiHTMLEditor now has added Format parameters when using Str() internally in an attempt to cope with potential locale issues. (15236)
FIXED GraffitiKanban now properly applies IndicatorSubtitle to column objects when set before being added. (15282)
FIXED GraffitiKanban now properly applies IndicatorTitle to column objects when set before being added. (15282)
FIXED GraffitiKanbanColumn button is no longer visible when HasButton = False at initialization. (15282)
FIXED GraffitiKanbanColumn menu button is no longer visible when HasMenuButton = False at initialization. (15282)
FIXED GraffitiKanbanItem will no longer show an empty space when HasButton = False and no Avatar is supplied. (15282)

Web #

Type Change
NEW GraffitiCheckbox
NEW GraffitiRadioButton
ADDED GraffitiCamera has a new IsMobile as Boolean method for determining if the current device runs iOS or Android. (15287)
ADDED GraffitiCamera has a new FacingMode as FacingModes property for determining which camera to bind to on mobile OSes. (15287)
ADDED GraffitiCamera has a new FacingModes enumeration: 0 = User, 1 = Environment. (15287)
ADDED GraffitiGrid now supports CTRL\CMD+CLICK followed by SHIFT+CLICK for multiple row deselection. (15355)
ADDED 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. (15361)
ADDED GraffitiGrid now supports cell values of DateTime. (15329)
ADDED GraffitiGrid has a new SearchRows(RowSetID as Integer) as GraffitiGridRow for searching rows loaded using the AddRowSet method. (15330)
ADDED 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. (15330)
ADDED 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 GraffitiGrid has a new FormatTypes.ButtonGroup for displaying SegmentedButton-like controls in cells whose value is a GraffitiGridButtonGroup.
ADDED GraffitiGrid has a new FormatTypes.Chart for displaying charts in column cells.
ADDED GraffitiGrid has two new classes: GraffitiGridButtonGroup and GraffitiGridButtonGroupItem.
ADDED GraffitiGrid has new classes for various chart types: GraffitiGridChartLine, GraffitiGridChartBar, GraffitiGridChartTristate, GraffitiGridChartDiscrete, GraffitiGridChartBullet, GraffitiGridChartPie, GraffitiGridChartBoxPlot.
ADDED GraffitiGrid will now attempt to update row values automatically on CellChange. (15244)
ADDED 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 GraffitiGridRow has a new DatabaseRowSet property for storing the original RowSet associated with this row when adding via AddRowSet.
ADDED GraffitiGridRow has a new DatabaseRowSetIDField as String property for update operations. (15244)
ADDED GraffitiGridRow has a new DatabaseRowSetIDValue as Integer property for storing the ID field from the RowSet. (15330)
ADDED GraffitiImagePicker.Value has a new overridden method: Value(assigns BASE64Data as String) (15310)
ADDED GraffitiImagePicker.Value has a new overridden method: Value(assigns File as GraffitiWebFile) (15310)
ADDED GraffitiImagePicker.Value has a new overridden method: Value(assigns p as Picture) (15310)
ADDED GraffitiKanbanColumn has a new CanMove as Boolean = True property. When False the column will not be draggable. (15282)
ADDED GraffitiMenuItem has a new IconObject as Variant property. Accepts Picture, WebPicture, WebFile, and String URLs. (15257)
ADDED 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 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. (15351)
ADDED 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. (15220)
ADDED 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. (15290)
ADDED 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. (15249)
FIXED GraffitiBarcodeReader once again decodes the video streams properly. (15285)
FIXED GraffitiCamera now functions properly when embedded in a Xojo WebTabPanel. (15308)
FIXED GraffitiFontAwesome now respect the BaseStyle property value.
FIXED GraffitiGrid now attempts to clear it’s in-browser component reference on close in order to release more client-side memory.
FIXED GraffitiGrid’s ScrollTo* methods once again actually scroll the grid. (15260)
FIXED GraffitiGridColumns once again honor Visible = False. (15317)
FIXED GraffitiImagePicker now attempts to correct BASE64 strings supplied without the appropriate prefix. (15310)
FIXED GraffitiKanban now properly applies IndicatorSubtitle to column objects when set before being added. (15282)
FIXED GraffitiKanban now properly applies IndicatorTitle to column objects when set before being added. (15282)
FIXED GraffitiKanbanColumn button is no longer visible when HasButton = False at initialization. (15282)
FIXED GraffitiKanbanColumn menu button is no longer visible when HasMenuButton = False at initialization. (15282)
FIXED GraffitiKanbanItem will no longer show an empty space when HasButton = False and no Avatar is supplied. (15282)
FIXED GraffitiLabel will no longer unnecessarily encode spaces to the   entity for content inside of contained HTML elements. (15275)
FIXED GraffitiLabel once again properly sets the MaxHeight of the element in the browser when changing it via Xojo code. (152775)
FIXED GraffitiMenu no longer conflicts with Xojo’s built-in ContextMenus, resulting in failure of the Xojo menus to display due to a JavaScript exception. (15231)
FIXED GraffitiPDF once again returns data to the application when the UploadPath is not Nil.
FIXED GraffitiPopupMenu’s dropdown once again auto-sizes to fit the contained rows’ text. (15351)
FIXED GraffitiTree now applies GraffitiStyles when setting the BaseStyle property. (15372)
FIXED GraffitiTree and GraffitiTreeItems have fewer color properties explicitly set in CSS, relying more on inheritance. (15372)
FIXED GraffitiWall Panel WebContainer children are once again properly hidden when calling Remove of RemoveAll. (15249)
REMOVED Removed unused enumerations from GraffitiTabPanel.
NOTE For cell values in GraffitiGrid Chart columns, the value must be an array of either Integer or Double.
NOTE ZXing library for GraffitiBarcodeReader version updated to 0.18.5 (15285)
CHANGED 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. (15374)
CHANGED 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. (15244)
CHANGED GraffitiPopupMenu no longer uses FontAwesome for the dropdown arrow. (15333)
CHANGED GraffitiPopupMenu has received an optimization pass. There is likely more to do here, but it should load more quickly.