We have completed a cycle of changes and fixes, and published the result to the Public Repository : Version 0.10 : 30174 Tests.
Note, there was a 0.9, but it turned out to have too many visual bugs. So the 0.9 changes are included in this release note.
What's new
Frame Optimization is now done. Thanks to Tamara and Martin for all their hard work on this. This is an internal change, where we now cache the window relative bounds of a Fractional (and Relational) frame. This is because these values are moderately intensive to calculate, doing it once, and then only redoing it when the bounds will change (on a possible window resize or enclosing pane resize), makes for much faster access in MANY places in the framework.
We have come up with a preliminary fix for those who reported problems with their international keyboards when entering [Alt Gr] keystrokes. Please let us know if we got it right.
We have removed (the never quite properly working) dynamic scrollbars from Widgetry. This was intended to provide the feature that if the dynamic scrollbar attribute was turned on, then on a Form, EnumerationPane or TextEdit, they would turn on or off, vs enable or disable, when the were needed. The design partially worked, but we have a test case where we could never get it working properly. Therefore, we decided to remove it, and re-address it in the future with a new design, instead of leaving a broken and fragile area of the framework in the system.
The TabControl was missing several standard keyboard shortcuts, such as Ctrl-PageUp and Ctrl-PageDown, Ctrl-Tab and Ctrl-Shift-Tab. These have been added.
Many navigation keys on the Native Mac VM weren't being recognized in a whole lot of places in Widgetry, particularly the TextEdit. These have been fixed for now. Additionally, a new VM change has been proposed for ALL VMs, so that the Mac VM supports and sends up the Command key. With that change, the unused "key lock state" will be removed from all VMs.
The Motif Scrollbars looked ugly and had black lines in them. We went in and redid much of the way they look. They are now a very close match to the OpenMotif look.
Right Align input of the InputField and SpinButton API was changed to support the future where we may have center aligned input. Changes were also made to the InputField Specification and SpinButton Specification. The API is now:
New Changed API:
alignment (answers #right, #left and in the future #centered)
alignment: <#left|#right|#centered>
leftAligned (answers aBoolean)
rightAligned (answers aBoolean)
Removed defunct API:
rightAlign
rightAlign:
Transcript messages about squashed menu (and tool item) dynamic configuration errors have been changed to match the ones currently in Wrapper. Additional, like in Wrapper, there is a new API on Agent where you can change how menu and tool item dynamic configuration errors will be handled. By default the value is true. When set to false, an actual error is raised instead of simply putting text to the Transcript:
Agent suppressMenuDispatchErrors
Agent suppressMenuDispatchErrors: <aBoolean>
The ToolInventory has been changed to be a container model like Menu. Thus, ToolItems no longer have a position. Instead, groups are defined as a ToolInventory in a ToolInventory, allowing many ToolInventories and loose ToolItems to be intermixed. The following API has been added and/or modified in ToolInventory in support of these changes:
New Changed API:
addToolItems: aCollectionOfToolParts beforeItemId: anObject
addToolItem: aToolInventoryOrToolItem beforeItemId: anObject
addToolItems: aCollectionOfToolItems
addToolItem: aToolItem action: anObject itemID: aLookupKeyObject
addToolItem: aToolItem
addToolGroupFromItems: aCollectionOfToolItems
addToolItems: aCollectionOfToolItems actions: aCollectionOfActions
addToolItem: aToolItem action: anObject
addToolInventory: aToolInventory beforeItemId: anObject
addToolInventory: aToolInventory afterItemId: anObject
addToolItem: aToolInventoryOrToolItem afterItemId: anObject
addToolInventory: aToolInventory
addToolItems: aCollectionOfToolParts afterItemId: anObject
toolItemAt: anIndex
indexOfToolItem: aToolItem
numberOfToolItems
toolItems
removeToolItem: aToolItemOrToolInventory
someToolPartWhichContains: toolPartTestBlock
toolItemWhich: toolItemAndActionTestBlock ifNone: exceptionBlock
Removed defunct API:
selectToolItemsWhich:
addToolItemGroup:actions:
addToolItem:atPosition:
addToolItemGroup:
addRawToolItem:
addSeparator
setGroupSizes:
newToolItemsWith:at:
assignBasePositions
toolItems:toolItemGroups:actions:
A full pass at class comments has been completed by Kevin, and these changes are also reflected in the new version... Thanks Kevin.
Additionally, there were MANY MANY bug fixes, including:
- Keystrokes based on ctrl: <aCharacter> now work properly.
- ReorderDragDrop has been updated to not show drop availability for panes outside the target pane.
- someMenuPartWhichContains: had a bug and is now fixed.
- Menu groupSizes fixed to deal with an empty menu being added.
- Menu addMenu: fixed to deal with an empty menu being added.
- UserInterface mainWindow is now lazily initialized.
- Fixed a number of ResizerSplitter issues where it was not performing correctly in a Form and with FractionalFrames
- Fixed problem with noDecoration on Buttons, which sometimes left parts of the decoration displaying.
- Fixed problem with Grid headers where the extended color of the header row would be wrong.
- Fixed a problem with some panes in a Form that wanted the background to be the same as the form, which doesn't itself have a background color via a new generic #background method in ArtistWithBorder.
- Fixed PluggableDragDrop to allow dropping into an empty List or Grid.
- Fixed MenuBar menus to automatically highlight the first item when first shown
- Fixed MenuBar menus to not highlight under the cursor if it is where the menu will show.
- Fixed (via override) hard coded references to TransientWindow in UI.InputState methods send:eventEnter: and shouldSendQuitTo:becauseOfClickIn:
- Fixed TabControl tabs to never show a tab "under" the scroll buttons.
- Fixed RadioButtons and CheckBoxes to properly steal the background color of their enclosing pane, even when the that is in a TabControl, unless overridden by the pane itself.
- Fixed DropDownList to properly use the "Object" selected from the list in the model, instead of the string representation.
- Fixed DropDownList to properly display resulting model object
- Fixed bug when at Scrollbar thumb seemed to have 0 extent
- Fixed bug where you could still technically resize a Grid column even when supposedly resizing was disabled.
- TextDisplayMangager was made to be lazily initialized
- actions and keystrokes now are now properly added to a Form when created from a UserInterface.
- New API: hasFocus added to Window and Pane
- Windows now lazily initialize agent, artist and eventDispatcher allowing the reopening of a closed window.
- The GroupBox's print string was updated.
- DisplayLabels with no strings now show '<no label>' in their print string.
- RadioButton and CheckBoxes are now self notified if the value of their labels are changed, and now properly update themselves.
- Helper API for TextEdit: extentWhenWordWrappedTo: anInteger
- Fixed RadioButtons and CheckBoxes to properly preserve their model values when the look changes.
- Fixed change Announcements not being sent when text is deleted from an EditingPane
- Fixed change Announcements not being sent when selection is changed for a DropDownList
- Fixed a CharacterBlockScanner bug which didn't properly handle both LF and CR.
What's Next
With luck: 1.0
And So It GoesSames