Release 29

View Categories
Table of Contents

Date Released #

Final: Jun 7, 2019
Release Candidate 4: May 30, 2019 Web Only
Release Candidate 3: May 28, 2019
Release Candidate 2: May 17, 2019
Release Candidate 1: May 13, 2019
Beta 3: May 7, 2019 Desktop Only
Beta 2: May 5, 2019 Desktop Only
Beta 1: May 4, 2019
Alpha 4: April 29, 2019
Alpha 3: April 19, 2019
Alpha 2: March 21, 2019
Alpha 1: March 8, 2019

Desktop #

Type Change
ADD GraffitiSignature
ADD GraffitiAccordion now has a “System” style that is dark mode adaptive.
ADD GraffitiAccordion now has a TextShadow as Boolean = True property.
ADD GraffitiColorPicker now better supports dark mode.
ADD GraffitiDateTimePicker now supports dark mode.
ADD GraffitiDesktopControl subclasses (Calendar, HTMLEditor, SyntaxEditor) now have LoaderShow and LoaderHide methods for displaying a spinner on load and during long operations.
ADD GraffitiDesktopControl subclasses (Calendar, HTMLEditor, SyntaxEditor) now have a ShowLoaderOnEvents as Boolean = False property which will automatically show and hide the loader on long event operations.
ADD GraffitiDateTimePicker now supports date range selection using GraffitiDateTimePicker.SelectionTypes.Range
ADD GraffitiFontPicker now supports dark mode.
ADD GraffitiGrid now relies on GraffitiGridRows for data.
ADD GraffitiGrid now supports variable row height.
ADD GraffitiGrid now has a SystemColors property which will attempt to automatically use the system color scheme for drawing, and will draw the appropriate progressbar style for the OS.
ADD GraffitiGrid now supports embedding RectControls and ContainerControls in rows. These controls should NOT have the Grid’s parent as their parent for proper drawing on Windows.
ADD GraffitiGrid now supports DarkMode colors when using SystemColors = True.
ADD GraffitiGridColumn has a new property ControlSizing as GraffitiGridColumn.Sizings for positioning and dimensions of contained controls, and should not be modified after the control has been embedded.
ADD GraffitiGridColumn has a new enumeration Sizings as Integer for use with GraffitiGridColumn.ControlSizing.
ADD GraffitiHTMLEditor now has a CurrentLine method to determine the current line that SelStart occupies in PlainText.
ADD GraffitiHTMLEditor now has a SelFont as String property for getting/setting the font of the currently selected text.
ADD GraffitiHTMLEditor now has an EnforceHTTPS as Boolean = True property for forcing users to use HTTPS URLs for Audio/Image/Video tags.
ADD GraffitiHTMLEditor now supports inline hashtags(#graffitisuite) and mentions(@graffitisuite).
ADD GraffitiHTMLEditor has a new HashtagAdded( tagID as Integer, tagValue as String ) event for when a user adds a pre-defined hashtag to the text.
ADD GraffitiHTMLEditor has a new MentionAdded( mentionID as Integer, mentionValue as String ) event for when a user adds a pre-defined mention to the text.
ADD GraffitiHTMLEditor has a new AddHashTag( HashValue as String ) method.
ADD GraffitiHTMLEditor has a new AddHashTags( Values() as String ) method.
ADD GraffitiHTMLEditor has a new AddMention( MentionValue as String ) method.
ADD GraffitiHTMLEditor has a new AddMentions( Values() as String ) method.
ADD GraffitiHTMLEditor has a new HashTag( tagID as Integer ) as String method for retrieving the value of tagID.
ADD GraffitiHTMLEditor has a new HashTagCount() as Integer method for retrieving the number of hashtags currently used.
ADD GraffitiHTMLEditor has a new Mention( mentionID as Integer ) as String method for retrieving the value of mentionID.
ADD GraffitiHTMLEditor has a new MentionCount() as Integer method for retrieving the number of mentions currently used.
ADD GraffitiHTMLEditor has a new RemoveAllHashTags() method.
ADD GraffitiHTMLEditor has a new RemoveAllMentions() method.
ADD GraffitiHTMLEditor has a new RemoveHashTag( tagID as Integer ) method.
ADD GraffitiHTMLEditor has a new RemoveMention( mentionID as Integer ) method.
ADD GraffitiHTMLExporter now has a HTMLEntityEncodeSkipTags( theHTML as String ) as String method for encoding text in HTML but not the tags.
ADD GraffitiHTMLExporter now has a HTMLEntityDecodeSkipTags( theHTML as String ) as String method for decoding text in HTML but not the tags.
ADD GraffitiNote now has a MaxHeight property that is applied when using dynamic height. This is used to alleviate a hard crash on Windows when the height gets above 10000. Valid values are between 10 and 10000.
ADD GraffitiPropertyList now has a Password child type which will display the password value during editing, but an obscured string during display.
ADD GraffitiPropertyList now supports Dark Mode.
ADD GraffitiPropertyList now has a new Event: CustomCellClick( Node as PropertyListChild, X as Integer, Y as Integer )
ADD GraffitiPropertyList now has a new Event: CustomIconPaint( Node as PropertyListChild, X as Integer, Y as Integer )
ADD GraffitiPropertyListChild now a new kChildCustom constant for Type.
ADD GraffitiPropertyListChild now has an EditorFormat property for use with kChildSingleLine.
ADD GraffitiPropertyListChild now has an EditorMask property for use with kChildSingleLine.
ADD GraffitiRibbonButton has a new IconShift as Boolean as Boolean property for overriding the global Ribbon setting.
ADD GraffitiRibbonRectControls can now have a width of “Flex” to fill their parent group.
ADD GraffitiSyntaxEditor now has Menu Handlers defined for the following Edit operations: EditUndo, EditRedo, EditCopy, EditPaste, EditCut, EditDelete, EditSelectAll.
ADD GraffitiSyntaxEditor now has a Copy() method.
ADD GraffitiSyntaxEditor now has a Paste() method.
ADD GraffitiSyntaxEditor now has a Delete() method for clearing the currently selected text.
ADD GraffitiSyntaxEditor now has a PrintDocument( Title as String, Theme as Themes, WordWrap as Boolean = True ) as FolderItem method for generating a printable version of syntax highlighted content.
ADD GraffitiSyntaxEditor now has a CenterSelection() method.
ADD GraffitiSyntaxEditor now has a Fold() method.
ADD GraffitiSyntaxEditor now has an Unfold() method.
ADD GraffitiSyntaxEditor now has a ShowFind() method.
ADD GraffitiSyntaxEditor now has a ShowReplace() method.
ADD GraffitiSyntaxEditor now has a ShowGotoLine( PrompText as String = “Enter line number:” ) method.
ADD GraffitiSyntaxEditor now has a ShowSettingsMenu() method for displaying an editable menu of settings. Changes made here are not reflected in the class’s properties.
ADD GraffitiSyntaxEditor now has a ShowShortcutsMenu() method for displaying the default editor keyboard shortcuts.
ADD GraffitiSyntaxEditor now has a FoldAll() method.
ADD GraffitiSyntaxEditor now has an UnfoldAll() method.
ADD GraffitiSyntaxEditor now has a SelectToStart() method for selecting all text between document start and current selection.
ADD GraffitiSyntaxEditor now has a SelectToEnd() method for selecting all text between current selection and document end.
ADD GraffitiSyntaxEditor now has a SelectUp() method for moving selection up one line.
ADD GraffitiSyntaxEditor now has a SelectDown() method for moving selection down one line.
ADD GraffitiSyntaxEditor now has a SelectPageUp() method for selecting the previous page.
ADD GraffitiSyntaxEditor now has a SelectPageDown() method for selecting the next page.
ADD GraffitiSyntaxEditor now has a MatchingExpandTo() method for expanding the current selection within matching brackets/parentheses.
ADD GraffitiSyntaxEditor now has a MatchingJumpTo() method for moving to the matching bracket/parenthesis for the current block.
ADD GraffitiSyntaxEditor now has a SelectionDuplicate() method for duplicating the currently selected text/block.
ADD GraffitiSyntaxEditor now has a CommentBlockToggle() for toggling block comments of selected text in supported languages.
ADD GraffitiSyntaxEditor now has a CommentToggle() for toggling single line comments.
ADD GraffitiSyntaxEditor now has a SelectionCopyLinesDown() method for copying the currently selected lines below the selection end.
ADD GraffitiSyntaxEditor now has a SelectionCopyLineUp() method for copying the currently selected line above the selection start.
ADD GraffitiSyntaxEditor now has a SelectionMoveLinesDown() method for moving the currently selected lines down one line.
ADD GraffitiSyntaxEditor now has a SelectionMoveLinesUp() method for moving the currently selected lines up one line.
ADD GraffitiSyntaxEditor now has a SelectionSplitLine() method for splitting the current line at the selection start.
ADD GraffitiSyntaxEditor now has a SelectionTranspose() method for transposing the current selection.
ADD GraffitiSyntaxEditor now has a SelectionTransposeLetters() method for transposing the currently selected letters.
ADD GraffitiSyntaxEditor now has a SelectionToUppercase() method for changing the currently selected text to uppercase.
ADD GraffitiSyntaxEditor now has a SelectionToLowercase() method for changing the currently selected text to lowercase.
ADD GraffitiSyntaxEditor now has a SelectionModifyNumber() method for incrementing or decrementing the currently selected integer value within the text.
ADD GraffitiSyntaxEditor now has a PrintMarginColumn as Integer property for setting the position of the print margin.
ADD GraffitiSyntaxEditor now has a FadeFoldWidgets as Boolean property, which will fade out the disclosure triangle of fold points unless the mouse is over the gutter.
ADD GraffitiSyntaxEditor now has a ShowFoldWidget as Boolean property which determines whether fold disclosure triangles are drawn.
ADD GraffitiSyntaxEditor now has a ShowInvisible as Boolean property for displaying representations of characters that would otherwise be invisible, such as tabs and new lines.
ADD GraffitiSyntaxEditor now has a ShowPrintMargin as Boolean property for displaying the print margin within the editor.
ADD GraffitiSyntaxEditor now has a FontSize as Integer property.
ADD GraffitiTagField now supports dark mode.
ADD GraffitiTextField
ADD GraffitiTreeView now has a ShowBorder as Boolean = True property.
ADD KillerToolBar has a new Dark Style included.
FIX GraffitiAccordion once again properly sets the width of child containers to that of the accordion’s child area.
FIX GraffitiAccordion once again sizes containers properly on resize.
FIX GraffitiAccordion now uses an alpha color for drawing shadows instead of inverting the text color.
FIX GraffitiColorPicker once again properly saves recent colors with Alpha channels.
FIX GraffitiDesktopControl subclasses no longer double up EndOfLine on Windows.
FIX GraffitiGrid now properly positions long strings passed via FormatCellValue.
FIX GraffitiGrid now resets the cursor when moving from the column header.
FIX GraffitiGrid’s CellClick event now returns a boolean value for skipping selection changes. Useful for clickable value cells like Boolean/Checkbox.
FIX GraffitiHTMLEditor’s font loading method optimized significantly.
FIX GraffitiHTMLEditor no longer fails to load on MacOS Mojave (Issue introduced in R29B2).
FIX GraffitiHTMLExporter’s HTML entity encoding/decoding methods now support the ü entity/character.
FIX GraffitiHTMLExporter.HTMLEntityEncode and GraffitiHTMLExporter.HTMLEntityDecode should now behave better on a wider range of mixed strings.
FIX GraffitiNote now fires HeightChanged during the close animation.
FIX GraffitiPropertyList will no longer encounter a NilObjectException if a cell is being edited when the window is closed.
FIX GraffitiRibbonButton items inside GraffitiRibbonColumns should no longer become cut-off when using auto-sizing on HiDPI screens.
FIX GraffitiRibbonButtonSmall now properly sets the text color of the button.
FIX GraffitiRibbonButtonLarge now properly draws Icons along the X axis when not using menus.
FIX GraffitiRibbonRectControls should now draw at the appropriate X and Y coordinates when the parent GraffitiRibbon is not set to (0,0).
FIX GraffitiSearchCanvas now properly supports Mojave.
FIX GraffitiSearchCanvas has improved support for Dark Mode.
FIX GraffitiSyntaxEditor should now more reliably set all properties on load.
FIX GraffitiTagField horizontal scrolling once again works as expected.
FIX GraffitiTagField now better supports HiDPI.
FIX GraffitiTaskList now supports dark mode.
FIX GraffitiTreeView should no longer intermittently ignore the CustomPictures property.
FIX GraffitiTreeView should no longer exhibit strange spacing around the icons on Windows.
NOTE Due to changes for MacOS, inserting Audio/Image/Video elements that use a non-HTTPS URL may fail. You should use an info.plist for modifying NSAppTransportSecurity or enforce only HTTPS URLs.
NOTE GraffitiSyntaxEditor example now includes file drop loading example.
NOTE Fixed analysis warnings.

Web #

Type Change
ADD Experimental combined resource loading. See https://graffitisuite.com/wiki/doku.php?id=web:combined
ADD GraffitiHTMLExporter, which is now a dependency of GraffitiWebHTMLEditor.
ADD GraffitiWebImagePicker
ADD GraffitiWebCalendar now supports adding titles to days with the new DayTitle method.
ADD GraffitiWebFile’s SaveTo method now has an Overwrite as Boolean = False parameter. When False the class will append the nearest unused number to the file name and use that.
ADD GraffitiWebFile’s SaveTo method now returns a FolderItem pointing to the saved file location in case of numbering.
ADD GraffitiFontAwesome now has a Scale value for the IconSizes enumeration which sizes the icon to the current control height.
ADD GraffitiWebGrid now breaks on events where one or more necessary paremeters are Nil to highlight errors in implementation.
ADD GraffitiWebHTMLEditor now has a CurrentLine method to determine the current line that SelStart occupies in PlainText.
ADD GraffitiWebPopupMenu now has a new SearchTypes as Integer enumeration.
ADD GraffitiWebPopupMenu now has a new SearchType as SearchTypes property for controlling how data searches are performed.
ADD GraffitiWebPopupMenu now has a PlaceholderSearchText as String property for setting the search field’s placeholder on instances where MultiSelect = False.
ADD GraffitiWebTabPanel has a new LockUpdate property for disallowing updates during long operations.
ADD GraffitiWebTextField now has a “Search” FieldType.
ADD GraffitiWebTextField now has new properties for setting images as the icons: IconObject as Picture, IconWidth as Integer, IconHeight as Integer.
ADD GraffitiWebTextField now supports icon parsing similar to GraffitiWebButton where <icon> is used for IconObject and <fa fa-icon-name> is used for FontAwesome.
ADD GraffitiWebTextField now has a Required as Boolean property for denoting within the display that the field is required to have a value.
ADD GraffitiWebUploader now has a FileClicked event.
ADD GraffitiWebUploader now has an AddFile method, but does not display previews.
ADD GraffitiWebUploader now has a Remove( File as GraffitiWebFile ) method.
ADD GraffitiWebUploader now has a UpdateName( File as GraffitiWebFile ) method to make the in-display name match the GraffitiWebFile.Name property for that file.
FIX All classes now have more realistic default dimensions.
FIX GraffitiWebAccordion.FindItem( ItemText as String ) as Integer renamed to FindItemIndex.
FIX GraffitiWebButton captions are no longer placed 0.5px too far to the bottom of the control.
FIX GraffitiWebDatePicker (All Variants) now properly shows and hides the “clear” button based on the value of the ClearButton property.
FIX GraffitiWebDatePickerRange no longer exposes a Style property to the inspector. It has three specific Style* properties.
FIX GraffitiWebGrid now respects rows with Expanded = True when added.
FIX GraffitiWebGrid once again shows an appropriate spacer for tree children.
FIX GraffitiWebGrid now properly updates selection info when a row is removed.
FIX GraffitiWebGrid once again properly updates row order when user drags a row.
FIX GraffitiWebGridRow.Selected is now properly set when changing selection during runtime.
FIX GraffitiWebHTMLEditor’s SelText property now uses correct indices for updates to the browser.
FIX GraffitiWebHTMLEditor should no longer throw Javascript errors when performing multiple operations that alter the SelStart/SelLength.
FIX GraffitiWebHTMLEditor now properly handles most non-English characters by converting them to HTML entities, thanks to GraffitiHTMLExporter.
FIX GraffitiWebHTMLEditor no longer collapses long strings of spaces to a single space.
FIX GraffitiHTMLExporter now respects &nbsp; tags.
FIX GraffitiHTMLExporter.HTMLEntityEncode and GraffitiHTMLExporter.HTMLEntityDecode should now behave better on a wider range of mixed strings.
FIX GraffitiWebPDF now supports calling Download after using FromHTML to create a PDF.
FIX GraffitiWebPDF now better handles multiple pages when using FromHTML.
FIX GraffitiWebPDF once again honors HorizontalAlign and VerticalAlign properties of GraffitiWebPDFCellStyle objects.
FIX GraffitiWebPDF once again properly applies table header styles.
FIX GraffitiWebPDF now uses arrays for generating table JavaScript instead of concatenation for speed.
FIX GraffitiWebPDF no longer throws deprecation warnings to the browser’s JavaScript Console.
FIX GraffitiWebPDFCellStyle.HorizontalAlign is now spelled correctly.
FIX GraffitiWebPopupMenu’s SetItemSelect should now be more dependable.
FIX GraffitiWebPopupMenu no longer uses a shadow property for Enabled.
FIX GraffitiWebPopupMenuItem now uses UUID strings rather than integers for ID.
FIX GraffitiWebSlider no longer expects height of 210px for vertical, or width of 210px for horizontal.
FIX GraffitiWebTabPanel no longer changes the HashTag when clicking on a tab.
FIX GraffitiWebTabPanel now pushes containers to the page when hidden, and reloads them on Shown. This addresses an issue where Xojo will set height of child controls to 0px is the Display style of the parent container is ‘none’ upon showing a page.
FIX GraffitiWebTabPanel no longer references GraffitiWebAccordion items.
FIX GraffitiWebTabPanel pages now properly size to fill the control.
FIX GraffitiWebTextField labels should no longer be taller than the input element.
FIX GraffitiWebTimePicker now only sends those events to the server that are necessary or have event handlers implemented.
FIX GraffitiWebToggle no longer resets True and False value text when disabled/enabled.
FIX GraffitiWebToggle no longer ignore the Visible property if set in the Open event.
FIX GraffitiWebUploader now only sends those events to the server that are necessary or have event handlers implemented.
FIX GraffitiWebUploader no longer improperly reports that files cannot be uploaded in the UI after programmatically adding a file.
FIX GraffitiWebWall now only sends those events to the server that are necessary or have event handlers implemented.
FIX GraffitiWebWall now exposes the UpdateDisplay() method for forcing GraffitiWebWall to refresh when GraffitiWebWallPanel containers change dimensions.
REM GraffitiWebUploader’s RemoveFile(theFile as String) has been removed.
NOTE GraffitiWebCalendar events are no longer required to have titles. But they should have titles. Seriously.
NOTE GraffitiWebPDF’s .Save method has been deprecated. Use .Download
NOTE GraffitiWebUploader updated to rely on objecs rather than filenames to avoid collisions when multiple files are uploaded with the same name.
NOTE Resolved analysis warnings.