|  | SmartClient™ SDK Change Log Version v9.1p_2021-05-18/LGPL Deployment (2021-05-18)

##### Jump to changes in 9.1 9.0 8.3 8.2 8.1 8.0 Older Releases

## Changes in 9.1

#### New Features

##### Selenium and Automated Testing

- New Subsystem: The SmartClient TestRunner is a system for running a suite of Selenium tests on a periodic basis, comparing the results to previous results, and generating email alerts reporting on new test failures or fixes to tests that were previously failing.
  For more information search for TestRunner in the Reference Guide.
- Upgrade selenium webdriver support to use selenium 2.39 (which supports FF26)
- Allow choice of browser when using SeleneseRunner.
- Improve capability to record drag resizing and drag & drop to ListGrid
  operations in Selenium IDE, and have them play back correctly.
- Improve stability of Selenium playback.
- Added capability to generate Selenium commands for clicks into text fields.
- Improved Selenium IDE recording and playback of TreeGrids for which
  showOpener is not true.
- Generate a more stable scLocator for Menus.
- Add API Canvas.setTestRoot() to enable a common Selenium script to be used for
  groups of widgets with identical hierarchies underneath different root widgets.

##### Maven Support

- Provide official support for Maven dependency management with POMs suitable for use with SmartClient and SmartGWT

##### DataSource and DataBound Component

- Introduce new textMatchStyle "exactCase" and review and harmonize textMatchStyle implementations in the client and each of the three server-side DataSource implementations (JPA, Hibernate and SQL)
  RELEASE NOTE:
  This modification introduces a new textMatchStyle, "exactCase", which is a case-sensitive exact match, unlike the existing "exact" textMatchStyle, which is case-insensitive. Also, textMatchStyle now defaults to a new defaultTextMatchStyle property on the DataSource, rather than the old value of "exact". The default value of DS.defaultTextMatchStyle is "exact", so there are no behavior changes unless you configure them.
  A number of behaviors around textMatchStyle have been changed in the server-side DataSource implementations, for the sake of consistency amongst themselves and with the client code. For full details read the detailed discussion in the client-side "TedxtMatchStyle" documentation, but some of the headlines:
  - textMatchStyle "exact" is now case-insensitive in SQLDataSource, as it is in all the other impls; previously this was database-specific
  - JPA and Hibernate DataSources now support the ignoreTextMatchStyle flag; previously there was no support in these two implementations
  - JPA and Hibernate DataSources now treat bad date criteria as "always false"; previously they were treated as "always true"
  If you have application code that was depending on these old behaviors, we have left the means in place to switch some of them back on. Please read the "TextMatchStyle" documentation referred to above.
- Exposing property DSResponse.affectedRows
  Implementation in HB/JPA data sources.
- Implement optional support for preserving millisecond precision in times and datetimes across client/server roundtrips
- Introduce formal support for an emptyDisplayValue property on DataSourceFields.
- Added server-side criteria handling for fields with multiple:true
- Added support for client side filtering on datasource fields with multiple=true
- Allow validator criterion <applyWhen fieldName="foo" value="bar"/> shorthand that assumes "equals" operator.
- Added criteria flattening class methods: isFlatCriteria, flattenCriteria, canFlattenCriteria.
- Added support for Java Persistence Query Language on JPA data sources using the new <customJQL> tag on operation bindings.
- Spring BeanFactory now available as 'beanFactory' in DMI context
- Implement optional tableName quoting in SQLDataSource
- Add support for "start" and "end" attributes in operationBinding <criteria> tags
- Don't require a "value" element for <criteria> in the .ds.xml file for the unary operators "isNull" and "notNull"
- Added support for GoogleCloudSQL in Admin Console
- DataSourceField.lenientXPath no longer needs to be set since the framework now defaults to suppressing errors for null values in the middle of an Xpath, and only an invalid XPath will log a warning.
- Added new operator matchesPattern with equivalent case insensitive version iMatchesPattern which allows for filtering using a glob style search pattern with multi character wildcard and single character wildcard matching.
- Added native support for matchesPattern and iMatchesPattern when using a JPA or Hibernate datasource.
- Added native support for matchesPattern and iMatchesPattern when using a SQL datasource.
- Reading support for java.io.File type properties in JPA and Hibernate data sources.
- If external code attempts to subclass DataSource, a log notifies that direct subclassing of DataSource is not allowed, and that BasicDataSource should be subclassed instead. If the warning is ignored, isValidSubclass() must be implemented and return true.
- Changed signature of DSRequest.setGroupBy to accept a List<String> and created a new overloaded method to accept one or more strings as varargs.
- Added new property to ValidationContext: encodeBinaryFields.
- New $editedRecord variable in Velocity template.
- New API SQLDataSource.executeAsBatch()
- Support for byte[] in dsField.encodeInResponse.
- In the DataSourceLoader servlet, a special DataSource ID "$systemSchema" can now be requested, which will
  cause output equivalent to the loadSystemSchema JSP tag. This allows easy access to the system schema outside
  of a JSP environment.
- Enhance ExcelDataExport to support all the possible ways of expressing a CSS Color: #rrggbb, #rgb, rgb(r, g, b), rgb(r%, g%, b%) and named colors like "darkblue" and "papayawhip". Previously we only supported the first of these.
- When validating a DynamicForm or ListGrid record against a DataSource with multiple
  fields with server validators, send a single validation request to the server rather
  than one request per field. Applies to standalone validation without save.

##### RestDataSource

- Added the ability for REST DataSources to handle groupBy and summary functions.
- Support AdvancedCriteria with the REST "getParams" and "postParams" protocols

##### DataSource and Data-bound Component Export

- New ListGrid property "exportWrapHeaderTitles"
- Export field widths to Excel
- Export header heights and headerSpan heights to Excel if new flag listGrid.exportHeaderHeights is set
- New date and number formatting feature. Provides similar facilities to Java's DecimalFormat and SimpleDateFormat both in components on the client and when exporting to Excel/JSON/XML/CSV
- Provide explicit control over background colors used when exporting to Excel/OpenOffice format

##### Visual Builder and BMML importer

- Add property VisualBuilder.canAddRootComponents to improve new-user experience.
- Allow children of Layouts to be drag resized in Visual Builder.
- Support editing the generated XML code and screen is rebuilt upon confirmation.
- Various improvements to Balsamiq importer

##### Developer Console

- DeveloperConsole RPC tab now shows requests and response side by side with resizeable layouts to make better use of space.
- DeveloperConsole RPC tab now also shows raw output for scriptInclude transport requests

##### Browser

- Added support for SplitPane.deviceMode and pageOrientation to configure the layout
  of the SplitPane UI. By default, the selected layout will dynamically adapt to the
  browser/device.
- Added support for the isc_spriting global variable to turn off spriting in the Enterprise,
  EnterpriseBlue, and Graphite skins.
- Added support for using native HTML5 drag and drop. See Canvas.useNativeDrag.

##### Class

- Added advanced Class methods markUnsupportedMethods() and isMethodSupported()
  to mark methods of derived classes which do not support certain parent class methods
  as unsupported.

##### Event Handler

- Better support for horizontal trackpad scrolling where available. Also added EventHandler.getMouseWheelX() / getMouseWheelY()

##### Drawing

- Added DrawOval.getRadiusX() and getRadiusY().
- Added support for DrawPane.canDragScroll, which allows users to drag-scroll the
  DrawPane to move the viewport around for a large drawing.
- Added utility method DrawSector.getArcMidpoint().
- Added support for DrawItem.cursor.
- Added support for DrawItem hovers. Like the corresponding Canvas attributes/methods,
  DrawItem now supports the canHover, showHover, and prompt attributes, the hover() event,
  and getHoverHTML() to customize the contents of the hover.
- Added support for the DrawGroup.useGroupRect setting which affects whether the
  DrawGroup itself or its individual items receive event notifications.
- Added a new DrawItem type, DrawShape, for drawing complex shapes defined by executing a series of drawing commands.
- Added the DrawItem.setMoveKnobOffset() API to update the offset of the move knob at runtime.

##### FacetChart

- Added the FacetChart.drawnValueContainsPoint() utility method to check whether a
  given DrawnValue contains a point.
- Added method FacetChart.getDrawnValues() to retrieve DrawnValues for the given
  FacetValueMap (or all DrawnValues if the FacetValueMap is null).
- Added utility methods FacetChart.getDrawnValueAtPoint() and getDrawnValuesAtPoint(),
  which are similar to getNearestDrawnValue() and getNearestDrawnValues() except that
  DrawnValues returned by the new API methods must be under the given coordinates.

##### SimpleType

- Added client side summary functions:
  - concat, which will string concatenate all record values together, and
  - first, which works exactly the same as min.
- Added Smartclient server enum for summary functions and refactored DSRequest API to take these instead of strings.
- Added new Grouping-related i18n attributes: weekNumberTitle, timezoneMinutesSuffix and timezoneSecondsSuffix

##### Calendar

- Fixed combination of eventWindow properties for new windows and made changes to allow TimelineWindows that show their header to also show a close button
- Added Calendar.showDayLanes - uses calendar.lanes to render a number of columns showing events for the same day - for example, the daily schedules of a number of staff members.
- Added renderEventsOnDemand for all calendar views
  Optimized event rendering in views other than timeline
- Reworked eventWindow drag-and-drop subsystem in all views except month
- Added Calendar.getDateFromPoint(x, y, useSnapDates) to return a date instance appropriate for a given offset into the body of the selected calendar view
- Added new public APIs, showEventEditor() and showEvent/NewEventDialog()
  Added new timeline attribute overlapSortSpecifiers - allows overlapping events in each lane to be sorted vertically - default remains as it was (by startDateField, earliest appearing top-most in it's lane)

##### Canvas

- Deprecated canvas.parentElement and canvas.masterElement and added new getter methods canvas.getParentCanvas() and canvas.getMasterCanvas()
- Added the Canvas.momentumScrollMinSpeed attribute to set a threshold for the
  minimum speed in pixels per second required for momentum scrolling to kick in. Only applies to touch devices.
- Added parameters "canOcclude" and "skipAnimation" to canvas.animateShow() method to give developers greater control
  over this method's behavior.
- Created public APIs getOuterElement() and getContentElement() for retrieving the DOM elements associated with a SmartClient Canvas.

##### StatefulCanvas

- Added StatefulCanvas.iconStyle to set a CSS class on the icon image.
- Added support for StatefulCanvas.showRTLIcon, to signal that RTL media for the icon
  is available.
- Added StatefulCanvas.ignoreRTL.

##### CubeGrid

- Expose properties facet.height and facet.labelHeight to allow more control
  over the minimum height of facet header rows in a CubeGrid.
- Added capability to load facet values from a DataSource - developer is no longer required to define them up front in the CubeGrid definition.

##### EditMode

- New public classes for improved Edit Mode support, allowing apps to react to user-created content: EditNode, PaletteNode, EditPane, EditTree, ListPalette, MenuPalette, TilePalette, TreePalette
- When creating palette nodes in EditContext, correctly protect existing
  global IDs from being overwritten and support using global IDs where
  specified.
- Added JSON format support in EditContext for serializing and recreating palette nodes
- DrawItems are now automatically wrapped in DrawPanes in
  EditMode.

##### FieldPicker

- Add minor enhancements to the AdvancedFieldPicker:
  - A double-click in the left hand list now adds the field as the last field on the right
  - A context menu in the right hand list provides an option to remove the field
- When using the FieldPicker with a TreeGrid, you can now specify "firstOpenLeaf" as a value for sampleRecord to use
  the first open leaf record for sample values. This is often desirable in trees where the
  first record may be a folder that's used for organizational purposes only and hence would have no
  actual data for columns other than the tree column).

##### HiliteEditor

- Altered so that Hilite Rules that have criteria relying on a field which is no longer available will not show the Operator and Value formItems, but will instead show the human readable description of the criteria, indicating the missing field. The "Remove" buttons for both simple and advanced Rules are now available in this situation.

##### Layout and SectionStack

- New attributes on Snapbar / Splitbar class to control whether we show the "closed" image for an expanded or a collapsed target
  in the case where the target is rendered after the bar.

##### Window

- Added support for printHeaderStyle and printBodyStyle customization for Windows
- Added Window.close() / Portlet.close() methods called by closeClick to give devs a simple way to call the
  default behavior.

##### ListGrid

- New feature attribute: listGrid.hiliteHTMLAfterFormat and listGridField.hiliteHTMLAfterFormat. Allows developers to
  cause hilite HTML [htmlBefore, htmlAfter and replacementValue] to apply before or after cell formatters run.
- New attribute ListGrid.canEditTitles (false by default) for allowing users to edit titles in the Advanced Field Picker
  If set to true we also pick up field titles as part of getFieldState()
- Optimize ListGrid.getFormulaFieldValue() and ListGrid.getSummaryFieldValue()
  so that the results are cached inside the records.
- Improved ListGrid.recalculateSummaries() in the presence of a grouped ListGrid
  with group summaries to only update the summaries for the passed records.
- New selectRange() API on ListGrid for selecting a contiguous set of rows
- Added ListGridField.hidden attribute to indicate field is initially hidden. This is a shortcut for specifying a showIf function which returns false.
- Add ListGrid and ListGridField property showHilitesInGroupSummary to control display
  of hilites in group summary rows.
- Added support for alternate column styling in GridRenderer and ListGrid
- Support grid initialization with groupState attribute.
- Added some properties to customize the appearance of the ListGrid header hover
- New ListGrid "focusInCell()" / "focusInRow()" methods to put keyboard focus into a particular cell or row.
- Added LG.fieldState and LG.viewState initialization attributes.
- Added support for customizing the base style for group nodes via new attribute groupNodeBaseStyle
- Added attribute ListGrid.showAsynchGroupingPrompt - set to false to prevent the system prompt dialog being shown at all when asynchronous grouping begins
- Added support for Tab / Shift+Tab navigation through listGrids with canSelectCells enabled

##### RecordEditor

- Exposed the formerly internal RecordEditor class used by the listGrid filterEditor subsystem. This allows for
  cleaner customization of the filterEditor.

##### Portal

- Change the default for PortalLayout.canResizeColumns to "true".
  Prevent resizing a Portlet at a column boundary, if canResizeColumns is false.
  Allow drag-resizes to be initiated in the space between Portlets.
- Add portletMinimized() and willMinimizePortlet() to PortalLayout.
- When a Portlet is minimized, resize other Portlets to take up the available space.

##### Rich Text Editing

- Added support for RichTextEditor.moveFocusOnTab to control the behavior when the
  user presses the Tab key (whether focus moves away or a tab character is inserted).
  Fixed a bug in Chrome on Ubuntu where pressing the Tab key in a RichTextEditor
  did nothing.

##### TabSet

- Added support for string-based tabBarConstructor and for tabBarAlign: "center"
- Exposed the new property Tab.canReorder for disabling drag-reorder of specific tabs when TabSet.canReorderTabs is true.

##### DynamicForm

- Added dynamicForm.autoFocusOnError flag to allow developers to disable auto-focus on validation error behavior

##### FormItem

- Added attributes FormItem.showRTL and FormItemIcon.showRTL to enable RTL-mode-specific
  styling of forms.
- New FormItem feature: Avoid applying specified formItem height to the text-box for an item in cases where the
  text box is not visually distinct to a user - for example StaticTextItem or a formItem with canEdit set to false
  where readOnlyDisplay is "static". This makes the vAlign property behave intuitively, effecting the aligment of
  the text value.
- New API 'getPixelWidth' / 'getPixelHeight' for FormItems - allows developers to retrieve the pixel width/height
  for items where size was specified as a string
- Add FormItem.showFocusedErrorState property.
- Made "formItem.storeValue()" available as a method rather than just having this method be available on the
  CanvasItem class. This provides developers with a way to have a custom UI for changing the value of any item.
- Added optional showValue parameter to FormItem.storeValue to allow display to be updated at the same time.
- Added loading message for fetchMissingValues FormItems.

##### MultiComboBoxItem

- Added support for MultiComboBoxItem.addUnknownValues.
- Added MultiComboBoxItem.alwaysExitOnTab to control the effect of pressing the
  Tab key within the text field of a MultiComboBoxItem.

##### DateItem

- Added support for DateTimeItem.browserInputType to enable the use of a native HTML5
  datetime input.

##### CanvasItem

- Added support to CanvasItem for handling asynchronous generation of its canvas' print HTML.

##### MultiFileItem

- Support for customizing the minimum / maximum number of uploadFields to display in a MultiFilePicker.

##### SpinnerItem

- Added increaseIcon and decreaseIcon AutoChildren to SpinnerItem, enabling the use
  of different SpinnerItem looks in different contexts.

##### TimeItem

- Added support for TimeItem.browserInputType to enable the use of a native HTML5
  time input.

##### MultiSortDialog.js

- Allow sort configuration using hidden fields

##### FilterBuilder

- New properties to simplify customization of FilterBuilder autoChild components, including- fieldPickerWidth,
  - operatorPickerWidth,
  - valueItemWidth
  - topOperatorItemWidth
  And support for using autoChild patterns for customizing the topOperatorForm, topOperator item,fieldPicker item, operatorPicker item
- Added modeSwitcher to FilterBuilder.

##### Server configuration

- Added new Velocity variables:
  rpc: the current RPCManager instance (with synonym "rpcManager")
  log: a Logger instance in category "velocityTemplate"
- Added a {CLASSPATH} token that can be used in server.properties when specifying paths to datasource and app files.
- Improvment of Long / BigInteger / BigDecimal handling. Optional conversion to String to preserve precision.

#### Bug Fixes / Other Changes

Bug fixes for release 9.1 listed here are changes made relative to the previous SmartClient version (9.0) original release.
Wherever possible, bug fixes are also applied to the previous version's patch branch, so bugs listed here are often already resolved in the 9.0p branch.

##### Selenium

- Updated version of selenium-java.jar to 2.37 to support more recent versions of browsers. Required slight change to
  isomorphic-webdriver.jar as selenium API had been altered. Added profile injection to SmartClientWebDriver implementations
- Remove older selenium-jara JARs
- Fixed problem where Selenium IDE may generate invalid locators for FF20+.
- Improve reliability of manually added keyPress commands.
- Scrolling improvements:
  - add capability of Selenium scroll command to scroll left/right
  - improve Canvas.scrollToPercent() so that you can scroll x and y
  axes independently of each other, by not promoting nulls to 0
- Fix issue where Selenium "open" command may not wait for page to load.
- Enhance SmartClientWebDriver implementations to allow injection of configuration (profiles etc).

##### AutoTest

- Improvements to Selenium autoTest locators
- Fix parsing of SC 8.2 and previous SectionHeader locators. Change also applied to 9.0p branch.
- Improve scLocator generation for RadioGroupItem and MultiComboBoxItem.
- For scLocators, be more strict matching canvii by name or title.
- Improve stability of scLocator generation for Tabs and FormItems. Change also applied to 9.0p branch.
- Remove possible Developer Console warning when TabSet is drawn. Change also applied to 9.0p branch.
- Correct functionality in WebDriver support where findElements() didn't return correct results in some cases.
- Fix possible crash while recording with Selenium IDE.
- Ensure a stable locator is generated for drops into a ListGrid, no matter
  how ListGrid.recordDropAppearance is set.
- Improve scLocator generation for TreeGrid by adding a title if present in the
  underlying Tree record.

##### DataSource

- Added "criteria" parameter to DataSource.copyCriteria(). Change also applied to 9.0p branch.
- Fix problem "excel"-pasting into ListGrid if XPath notation is used in the
  data definition. Change also applied to 9.0p branch.
- cacheAllOperationId and cacheAcrossOperationIds were mis-documented as being attributes of DataSourceField. They are
  actually attributes of DataSource. Fixed. Change also applied to 9.0p branch.
- Added a warn message telling the reason why we are setting the condition to FALSE when trying to match a Date or Boolean using a CONTAINS criterion. Change also applied to 9.0p branch.
- Fix a couple of minor bugs in the email subsystem. Change also applied to 9.0p branch.
- Fixed an issue where some datetime values could be serialized incorrectly when being passed from the server to
  the client, if they happen to fall on the boundary of a Daylight Savings Time change in local server time. Change also applied to 9.0p branch.
- Fixed a memory leak that occurs when ResultSets are continually created. Change also applied to 9.0p branch.

##### MultiSortDialog

- Fixed an issue where canSort false fields would show up with an incorrect title in the multi-sort dialog

##### RPCManager

- Fix ComponentXML loading so no exceptions are thrown when they contain non-component definitions also (like DataSource). Change also applied to 9.0p branch.
- Fixed problem where Canvas.getByLocalId() from a canvas loaded by
  RPCManager.loadScreen() was always returning null. Change also applied to 9.0p branch.

##### Visual Builder and EditMode

- Fixed an issue when dragging a MenuItem into the edit tree.
- - Restore correct outline selection after using Action menu.
  - Minor tweaks to layout.
  - Fixed issue during DataSource creation and foreignKey selection.
- Fixed issue with dropping components on vertically small components like dropping
  a Menu on a ToolStripMenuButton.
- Fixed issue serializing Editable ListGrid. Change also applied to 9.0p branch.

##### FileLoader

- Fixed errors caused by window.execScript() being unavailable in Internet Explorer 11. Change also applied to 9.0p branch.

##### Event Handling

- Fixed a few issues affecting touch devices where StatefulCanvas-based widgets could
  be left in the "Over" state when the user performed certain gestures or touch event
  sequences.
- Fixed a regression where a "Member not found" error can be raised in Internet Explorer 8
  when drag selecting ListGrid cells.
- Fixed an issue where grid rollover highlighting would remain in place when a click mask came up and the user moved
  off the grid. Change also applied to 9.0p branch.
- Fixed the issue that mouse events were not firing on DrawLines. Change also applied to 9.0p branch.
- Fixed an issue in Internet Explorer where the first attempt to drag-reorder a tile
  of a TileGrid having canReorderTiles:true would not work; the user would have to
  drag-reorder the tile again. Change also applied to 9.0p branch.
- Fixed a bug where calling isc.say() or a similar function within a mouseOut() handler
  could result in a stack overflow. Change also applied to 9.0p branch.

##### Button

- Fixed the regression that a Button would render as if align were "left" whenever
  align was "center" and overflow was "hidden". Change also applied to 9.0p branch.
- Fixed a bug in Internet Explorer 9+ where moving the mouse on top of and then off of
  the "Available Fields" header button of a HiliteEditor's fieldList would cause the
  fieldList to "bounce". Change also applied to 9.0p branch.
- Fixed an issue where canSelectText could be ignored for canFocus:true labels
- Fixed a bug in Internet Explorer 9+ where a border applied to a button in the
  "Focused" state via a CSS class would fail to be cleared when the button lost
  focus. Change also applied to 9.0p branch.
- Fixed a bug where the style names of a button's inner cells were not updated when
  the button was disabled.
- Fixed the positioning of button icons in RTL mode. Change also applied to 9.0p branch.

##### Calendar

- Fixed several bugs related to the drag rect when dragging CalendarEvents in Day and Week views
- Fixed eventWindowStyle implementation when reusing pooled EventWindows. Change also applied to 9.0p branch.
- Calendar: rework of overlap-tagging and eventWindow rendering
- Fixed headerClick for weekView when showDayLanes is set
- Fixed selected cell styling, in conjunction with both workday and alternateRecord styling
  Fixed scroll-position retention across calls to setShowDayLanes()
- Fixed handling of failed event saves (when the server returns a non-validation error, so dsResponse.errors is not set)
- Better handling of complex overlap tagging for Timeline Lanes when overlapSortSpecifiers are in use. Change also applied to 9.0p branch.
- Add eventAutoArrange support for Timelines. Change also applied to 9.0p branch.
- Fixed overlap calculations for timeline events when overlapSortSpecifiers have been applied. Change also applied to 9.0p branch.
- Ensure HTMLFlow is used as the body for EventWindow instances.
- Fixed a couple of JS errors from Calendar, when clicking the last column in a monthView, and on any column in the monthView when showQuickEventEditor is false
- Added new public API calendar.showNewEventEditor() and fixed several bugs around event editing
- Fixed cancellation of the eventClick() event for Timelines.
  Fixed timeline event left-offsets and table-cell widths and prevented overflow on timeline event windows in print-preview
- Added Calendar.backgroundMouseUp(). Change also applied to 9.0p branch.

##### HiliteEditor

- Improved behavior within FilterBuilders and HiliteEditors for fields with a specified displayField
- Fixed the issue that an Advanced Hilite Editor window could be placed partially
  off-screen in RTL mode. Change also applied to 9.0p branch.
- Fixed a bug in Hilite Editor where save would fail if there the editor was loaded with some hilites but all of them were removed before attempting a save. Change also applied to 9.0p branch.

##### Canvas

- Documented Canvas.hideUsingDisplayNone as a way to work around browser bugs where
  iframe or plugin content burns through despite being invisible. Change also applied to 9.0p branch.
- Fixed the issue that the group label of a grouped Canvas could be mispositioned if the grouped Canvas is resized (RTL mode).
- Fixed an issue where a PDF export of a ListGrid using value icons would be missing
  the icon images. Change also applied to 9.0p branch.
- Fixed the issue in Internet Explorer 8 Quirks mode, and IE 6 & 7 Quirks/Strict,
  where the scroll position of a ListGrid would reset to hard right in certain cases,
  such as when using the scroll left scrollbar button (RTL mode). Change also applied to 9.0p branch.
- Fixed an issue where css box-shadows would not display properly on certain SmartClient components
- Fixed an issue in RTL mode in Internet Explorer 8, strict mode, that vertically
  scrolling a ListGrid having a filter editor would affect the horizontal scrollbar
  position. Change also applied to 9.0p branch.
- Fixed an issue in Internet Explorer when showCustomScrollbars is false (e.g. the Simplicity
  skin is being used) where overly long menus did not have vertical scrollbars. Change also applied to 9.0p branch.
- Disabled Mobile Safari's tap highlight effect on SmartClient components.

##### CubeGrid

- Expose CubeGrid.showFacetValueContextMenus property.
- Prevent the menus controlled by ListGrid.showHeaderMenuButton and
  ListGrid.showHeaderContextMenu from showing up for a CubeGrid. Change also applied to 9.0p branch.
- Fix hideEmptyFacetValues not working for non-databound CubeGrids. Change also applied to 9.0p branch.
- Fix issue where a CubeGrid may not have all of its data properly indexed.
- Improve how CubeGrid assigns row and column positions to very large datasets.
- Fix possibility of superfluous DataSource fetch when toggling open facets on
  a CubeGrid with rowHeaderGridMode: true.
- Fixed two problems affecting CubeGrids configured for Load on Demand.
  First, prevent problem where server reply ordering can cause blank rows or
  columns to show up in a CubeGrid where valid data should be present. Second,
  fix separate issue affecting only CubeGrids with hideEmptyFacetValues: true
  where entire row or column facets may be missing after the initial load.
- Fix problem where CubeGrid facet might not expand after collapsing it, if
  CubeGrid.hideEmptyFacetValues is set to true. Change also applied to 9.0p branch.
- Fix incremental loading for CubeGrids with hideEmptyFacetValues: true.
- Fix possible blank regions when scrolling a CubeGrid with rowHeaderGridMode:
  true.

##### DateChooser

- Fixed default time value for RelativeDateItems when used in a range-based item, according to the rangePosition. Change also applied to 9.0p branch.
- Added DateChooser.showSecondItem as a shortcut for using pickerTimeItemProperties and exposed DateItem.pickerProperties as DateChooser Properties. Change also applied to 9.0p branch.
- Fixed a bug in TimeItem where midday/midnight would use the wrong AM/PM indicator. Change also applied to 9.0p branch.
- Fixed auto-sizing of DateGrid in DateChoosers with a custom size. Change also applied to 9.0p branch.
- Added support for DateChooser.weekHeaderStyle and DateChooser.fiscalYearHeaderStyle

##### DetailViewer

- Fix possible crash when DetailViewerRecord.showIf() is called with the
  documented arguments. Change also applied to 9.0p branch.

##### Drawing

- Fixed the issue that a DrawImage would change in the stack order when the referenced
  image was loaded. Change also applied to 9.0p branch.
- Improved the documentation of drawing Gradient objects.
- Fixed the numerous warnings logged when drag-resizing a DrawItem via resize knobs. Change also applied to 9.0p branch.
- Fixed the issue that tick lines on a Gauge widget could disappear. Change also applied to 9.0p branch.
- Fixed the issue that the labels of a Gauge widget could overlap the dial. Change also applied to 9.0p branch.
- Clarified the documentation on which knob types are supported by each of the DrawItem classes. Change also applied to 9.0p branch.
- On iPhone and iPad, fixed the DrawLabel methods: moveTo(), moveBy(), setContents(),
  and setFontSize().
- Fixed an issue on iOS devices where value-axis, data-axis, and legend labels were misplaced. Change also applied to 9.0p branch.
- Fixed resize knobs on a DrawImage. Change also applied to 9.0p branch.
- Clarified the documentation of DrawItem.computeAngle().
- Improved the performance of scatter charts having many data points in Internet Explorer 6-8.
- Fixed an issue where resize and other DrawItem knobs could fail to appear in certain
  cases when using bitmap drawing. Change also applied to 9.0p branch.
- Fixed a bug where DrawItem events would stop working properly if the DrawPane was scrolled. Change also applied to 9.0p branch.
- Fixed the bug that draw knobs of a DrawItem were mispositioned if the item's DrawPane has padding. Change also applied to 9.0p branch.
- Fixed the issue that "resize", "move", and other draw knobs were unusable in Internet Explorer 9 and 10. Change also applied to 9.0p branch.

##### FacetChart.js

- Clarified the documentation of FacetChart.showDataValues and fixed an issue where
  data values were incorrectly shown on a dense pie chart. Change also applied to 9.0p branch.
- Fixed an issue where FacetChart data axis labels could overlap each other instead
  of being rotated. Change also applied to 9.0p branch.

##### FieldPicker

- Fixed error dialogs "clientOnly add operation failed" and "clientOnly remove operation failed"
  that could be displayed when fields were dragged and dropped to and from the Available
  and Visible fields grids of a field picker.
- In the FieldPicker, display field records for fields with no title more
  gracefully, and hide hidden fields if ListGridField.canHide is false.
- Avoid popping up an error dialog in FieldPicker where logging a warning suffices. Change also applied to 9.0p branch.

##### Layout

- Ensure that Layout margins are updated whenver the Layout's styleName changes. Change also applied to 9.0p branch.

##### ListGrid

- Fixed an issue whereby toggling group folders would fail while the editor is visible. Change also applied to 9.0p branch.
- Fixed a bug where embeddedComponents could be drawn in the wrong column in grids with frozen fields
- Fixed an issue with a few reserved keywords for field names (including "size") potentially breaking some "getField(...)" calls. Change also applied to 9.0p branch.
- Fix issue where formula fields may not be calculated for ListGrid.
- Fix possible error when ListGrid.showGroupSummaryInHeader is true.
- Clarify documentation for ListGrid.recalculateSummaries()
- Added RTL media for ListGrid expansion field images to the Enterprise, EnterpriseBlue, and Graphite skins. Change also applied to 9.0p branch.
- Fixed the issue that a ListGrid's headerMenuButton would partially overlap the
  field name of a left-aligned field in RTL mode. Change also applied to 9.0p branch.
- Fixed the issue that the sort arrow icons and multilevel sort indicators in ListGrid
  header buttons were not properly mirrored in RTL mode. Change also applied to 9.0p branch.
- Fixed an issue in Internet Explorer where pressing the Enter/Return key within a
  form item of a ListGrid filter editor form could introduce a horizontal scrollbar
  on the page and shift the ListGrid to the right. Change also applied to 9.0p branch.
- Fixed a problem where autoFit of all column widths could miscalculate sizes when grouped
- Improve stability of ListGrid.getRecordDropPosition().
- Fix (non-TreeGrid) ListGrid so that we properly implement the documented
  default for recordDropAppearance.
- Fixed a bug where setFields() could cause an unnecessary resort(). Change also applied to 9.0p branch.
- Ensure correctness when records with a cached user formulae are copied
  between ListGrids.
- ListGrid default header context menu won't allow you to hide all columns any more. At least one column must always be visible.
- Fixed keyboard-based scrolling through the values in a PresetCriteriaItem used in a ListGrid's FilterEditor. Change also applied to 9.0p branch.
- Fixed ListGrid.getEventColumn() in the presence of a frozen body. Change also applied to 9.0p branch.
- Fixed an issue which could cause ListGrids with frozen fields to render incorrectly when setAutoFitMaxHeight was called. Change also applied to 9.0p branch.
- Change to show a Static item rather than a file upload item for binary type fields in Filter forms. Change also applied to 9.0p branch.
- Fixed issue where adding a record to a ListGrid against a DataSource with
  serverCustom validators performed the server validations multiple times when
  none were actually necessary because of the add operation. Change also applied to 9.0p branch.
- Fixed a problem that caused a JavaScript error to be thrown when one of the fields in the FilterEditor of one ListGrid was focused while using frozen fields.
- Fixed the issue that it was difficult to drag-rearrange ListGrid headerButtons on
  iOS devices.
- Prevent facets of a CubeGrid from showing popup menu indicators unless they
  are also header buttons when the CubeGrid is considered as a ListGrid. Change also applied to 9.0p branch.
- Fixed an issue where overriding listGrid.getRollOverCanvas or listGrid.getRollUnderCanvas to return null could cause an error. Change also applied to 9.0p branch.
- Fixed an issue where saving a new, edited record in a grouped grid could cause the record to disappear from view. Change also applied to 9.0p branch.
- Fix for a case where listGrids with autoFitData set to "vertical" or "horizontal" could incorrectly render the header. Change also applied to 9.0p branch.
- Fixed the bug that titles of fields having shouldPrint:false would show up in ListGrid
  print HTML in the header row(s). Change also applied to 9.0p branch.
- Fixed a bug where selectHeaderOnSort would be ignored for programmatic sort. Change also applied to 9.0p branch.
- Fixed a bug where drag re-ordering the columns of a ListGrid could make the header
  menu button non-functional in Chrome on Windows. Change also applied to 9.0p branch.
- Fixed issue where rollover canvas on ListGrid could trigger the first field to
  be resized if there are frozen fields. Change also applied to 9.0p branch.
- Fixed a display issue on Windows where the checkboxes in the checkbox field of a
  ListGrid were not correctly centered vertically and were off by 1px. Change also applied to 9.0p branch.
- Fixed a bug where embedded record components in one field could effect the
  drawn width of another field.
- Disallow editing of canEdit:true rows in the listGrid summary if showGridSummary is true. Change also applied to 9.0p branch.
- Fixed an issue where tabbing into a grouped ListGrid could fail to allow the user to interact with rows as expected.
- Fixed an issue where after freezing fields in a listGrid the grid body would be dropped from the page's tab order. Change also applied to 9.0p branch.
- Fixed crash in printHTML generation when grid contained frozen columns. Change also applied to 9.0p branch.
- Changed a behavior introduced in 9.0: If a user drag-resizes a field, and subsequently an unrelated event
  resizes the grid as a whole, fields with width specified as "*" should have their width recalculated to fit
  in the viewport. Change also applied to 9.0p branch.
- Fixed a case where groupSummaries could sometimes fail to be displayed with multi-level grouping enabled. Change also applied to 9.0p branch.
- Fixed an issue where an expanded ListGridRecord could get into a bad state if it was filtered out of the list and then re-appeared later - record could no longer be expanded or collapsed. Change also applied to 9.0p branch.
- Fixed an issue where a click *anywhere* in the removeField would fire removeRecordClick(), even if the click was in empty space (ie, not on a record)
  Fixed a JS error when refreshFields() was called during init/before setFields() (so that this.completeFields was still null). Change also applied to 9.0p branch.
- Fixed an issue whereby with cell selection enabled, doubleClickOnEnter / doubleClickOnSpace could fail to fire
  the double click handler.
  Also fixed a related issue where if clickOnEnter / clickOnSpace was set as well as the double-click equivalents,
  the doubleClick methods wouldn't fire even if the cellClick / rowClick handlers returned true. Change also applied to 9.0p branch.
- Improved how keyboard navigation interacts with editing, particularly with canSelectCells enabled. Change also applied to 9.0p branch.
- Fixed a bug whereby ListGrid field drag resize was unreliable with autoFitFieldsFillViewport enabled
- Fixed a bug where hiding the last filterable field in a grid with a filterEditor would fail to render the filterEditor body. Change also applied to 9.0p branch.
- Fixed an issue where fields hidden via "showIf" could in some cases remain visible in the summary row for a grid. Change also applied to 9.0p branch.
- Fixed a JS Error that could occur in markRecordRemoved() if cellSelection is enabled. Change also applied to 9.0p branch.
- Allow Enter to be passed through the ListGrid if editing a field using an embedded SpinnerItem. Change also applied to 9.0p branch.
- Fixed so that selectionChanged() fires correctly due to arrow-key navigation while a record-editor is showing, and ValuesManager.setValues() fires valuesChanged() on individual member-forms that have values updated. Change also applied to 9.0p branch.
- Fire selectionUpdated event when selecting all records using the checkbox in the header. Change also applied to 9.0p branch.
- Fixed the bug that a SelectItem showing long values (to the point where a horizontal
  scrollbar appeared) would center its contents upon first display in various
  circumstances (e.g. allowEmptyValue:true). Change also applied to 9.0p branch.
- - Fixed issue with spinner in grid not behaving like it would outside of inline editing.
  - Fixed issue with startEditing() throwing error when called from changed() if tab is pressed when a listgrid cell is being in edit mode with editor being combo box. Change also applied to 9.0p branch.
- Fixed the bug that ListGrid rollOver support and header button context menus were
  not working properly in Internet Explorer if the window was scrolled. This could
  happen if the ListGrid had position:"relative", for example, and it was placed
  after some HTML content. Change also applied to 9.0p branch.
- Fixed a problem where calling "autoFit" on a field in a grouped grid could cause the
  field to render wider than required to fit content.
- Reworked ListGrid printHTML generation to support gridComponents.
  Also fixed a bug where if showHeader was false on the grid, the header would still show up in printHTML. Change also applied to 9.0p branch.
- Optimized ListGrid.expand/collapseRecord(). Change also applied to 9.0p branch.
- Fixed a bug where the last row in a grid with a frozen body and a horizontal scrollbar might not be rendered
  Fixed a manual resize bug around fields with "within" type recordComponents
- Fixed an issue where having 'showRecordComponents' enabled on a ListGrid would unnecessarily force
  fixedRecordHeights to be false
- Added new ListGrid and GridRenderer geometry methods - getColumnLeft(), getColumnPageLeft(), getColumnWidth() and getCellPageRect()
- Fixed the bug that a custom ListGrid or TreeGrid cellHoverHTML() implementation,
  or field-specific hoverHTML() implementation, was not overriding the clipped value
  hovers enabled by showClippedValuesOnHover:true. Change also applied to 9.0p branch.
- Fixed an issue where the filter icon of a ListGrid filter editor would be cut off
  when narrower-than-default custom scrollbars are being used. Change also applied to 9.0p branch.
- Fixed a problem where filterEditors could be broken for some fields with a defined foreignKey. Change also applied to 9.0p branch.
- Fix for a problem where FilterEditor criteria could be lost when showing/hiding columns. Change also applied to 9.0p branch.
- Improve default summaryFunction for a new field created in the FormulaBuilder.
- Eliminate unwanted duplicate calls to evaluate user formula fields
  for a ListGrid that is grouped and has summary rows. Change also applied to 9.0p branch.
- Fixed an issue in Firefox where expansion components of a ListGrid could be mispositioned. Change also applied to 9.0p branch.

##### Selection

- Fixed a bug where Selection.dataArrived could cause a JavaScript error in some cases.

##### Tree

- Fixed the issue that top-level TreeGrid folders were improperly indented in PDF exports. Change also applied to 9.0p branch.
- Fixed and optimized TreeGrid RecordComponent management when drag-moving. Change also applied to 9.0p branch.
- Fix for an issue where ListGrid grouping could cause specified sort to be lost. Change also applied to 9.0p branch.

##### Menu

- Menus now properly resize to stay within page boundaries when page is resized. Previously, once a menu size was
  calculated, it was cached and reused regardless of page size.
- Fixed the strict mode bug that menu items are taller in Firefox than in Internet Explorer, Chrome, and Safari. Change also applied to 9.0p branch.

##### Portal

- Restore backcompat of return type for Portlet.closeClick(). Change also applied to 9.0p branch.

##### RichTextCanvas

- Fixed an issue in Firefox where an NS_ERROR_FAILURE can be raised when using a
  RichTextEditor. Change also applied to 9.0p branch.
- In Safari and Chrome, fixed the firing of change/changed events when the value
  of a rich text editor is changed as a result of pressing the backspace or delete
  keys, or text is cut from or pasted into the editor. Change also applied to 9.0p branch.

##### Scrollbar

- Fixed a bug when Scrollbar.showTrackButtons is false where a scroll down/right
  would cause the thumb to jump initially by the track button size. Change also applied to 9.0p branch.

##### SectionStack

- Fixed an issue where resizing a section in a section stack would cause odd visual behaviour when the stack contains hidden sections. Change also applied to 9.0p branch.

##### StretchImg

- Fixed a bug in Firefox and Internet Explorer 8+ in strict mode where StretchItem
  styles would be applied incorrectly to the images on state change, rather than just
  the table cells. This affected Scrollbars and other StretchImg-based widgets in
  these browsers. Change also applied to 9.0p branch.

##### TabSet

- IE10: Fixed an issue where two or more tabs in a tabset pulling in frameset pages would cause the tabs to obscure each other due to a native issue in IE10.
- Fixed an issue where a TabBar control could fail to appear if its visibility was
  changed from "hidden" to "inherit". Change also applied to 9.0p branch.
- Fixed a couple of JS errors that could occur in SimpleTabButton when a tab is added with visibility:"hidden". Change also applied to 9.0p branch.
- Set default value for Tab.iconSize to 16.

##### TreeGrid

- Fixed a problem where in IE9, treeGrids with checkbox selectionAppearance could misrender cell values when the user
  clicked to select / deselect entries. Change also applied to 9.0p branch.

##### DynamicForm

- Fixed an issue where in Internet Explorer, if a form was redrawn while a user was typing in a text field, keystrokes
  could be dropped. Change also applied to 9.0p branch.
- Fixed the issue that a FormItem's valueIconLeftPadding and valueIconRightPadding
  were not mirrored in RTL mode. Change also applied to 9.0p branch.
- Fixed an issue which could rarely cause items within a form to show a value applied to a different item. Change also applied to 9.0p branch.
- Fixed issue with integer field with optionDataSource or displayField being rendered
  as an IntegerItem instead of SelectItem by default. Change also applied to 9.0p branch.
- Fixed recursive call in DataSource.compareValues. Change also applied to 9.0p branch.
- Fixed readOnlyDisplay usage when a form is initially canEdit: false. Change also applied to 9.0p branch.
- Fixed a cross-site scripting (XSS) issue where values of certain FormItem types
  could be displayed as HTML if the value was clipped and showClippedValueOnHover
  was true (the default). Change also applied to 9.0p branch.
- Fixed the issue that the calendar picker icon of a RelativeDateItem had the wrong
  position in Internet Explorer, strict mode. Change also applied to 9.0p branch.
- Avoid crash if an invalid FormItem.editorType is provided.

##### ValuesManager

- Fixed an issue where ValuesManager validation could fail to refresh errors in some cases
- - Prevent separate server validation call on ValuesManager when saveData() called. Matches
  operation of DynamicForm.
  - During ValuesManager validation, send all server validation requests in a single queue.
  Also matches operation of DynamicForm. Change also applied to 9.0p branch.
- Made a change to ensure dynamicForm.showErrors() is envoked when validation fails on a form managed by a valuesManager. Change also applied to 9.0p branch.

##### FilterBuilder

- fixed an issue where subClauseButtonTitle / subClauseButtonPrompt wouldn't be propogated to nested subclauses. Change also applied to 9.0p branch.
- Fixed ability to set the width of the FieldPicker in FilterBuilders. Change also applied to 9.0p branch.
- FilterBuilder now initializeable without a dataSource (but a dataSource needs to be provided later
  via setDataSource() for this component to be usable)

##### FormItem

- Fixed an issue where the increase and decrease icons of a SpinnerItem might not
  line up exactly in Internet Explorer 11. Change also applied to 9.0p branch.
- Improved behavior and clarified documentation around how formItems handle percentage sizes. Change also applied to 9.0p branch.
- Fixed a bug where the in-field hint of a MultiComboBoxItem would be cleared after
  calling setValueMap(). Change also applied to 9.0p branch.
- Updated the documentation of TextItem.getSelectionRange(), TextAreaItem.getSelectionRange()
  with notes about the method's behavior for edge cases involving lost focus. Change also applied to 9.0p branch.
- Fixed the ability of SelectItem.pickerIconSrc to override the picker icon's image. Change also applied to 9.0p branch.
- Fixed the issue in Internet Explorer 8+ that a disabled LinkItem was sized differently
  than an enabled LinkItem. Change also applied to 9.0p branch.

##### TileGrid

- Fixed a runtime error when dragging records into a TileGrid. Change also applied to 9.0p branch.

##### CanvasItem

- Fixed the bug that a CanvasItem's canvas was positioned incorrectly if the form
  was showing scrollbars and was vertically and/or horizontally scrolled. Change also applied to 9.0p branch.
- Fixed the bug that a CanvasItem's canvas was positioned incorrectly if the DynamicForm
  had borders. Change also applied to 9.0p branch.
- Fixed a bug where the TreeMenuButton canvas of a PickTreeItem would not show as
  disabled if the entire form was disabled. Change also applied to 9.0p branch.
- Some subtle CanvasItem sizing fixes, and improved behavior for setting the canvas at runtime. Change also applied to 9.0p branch.

##### CheckboxItem

- Modified the default width of CheckboxItems to match that of TextItems rather than having the clickable area extend to the edge of the column containing the item.

##### ComboBoxItem

- Fixed the issue in Internet Explorer, RTL mode, that the pickList of a ComboBoxItem
  was positioned incorrectly. Change also applied to 9.0p branch.

##### ContainerItem

- Fixed an issue where TimeItems could fail to output their value in print HTML. Change also applied to 9.0p branch.

##### DateItem

- Fixed retention of the time portion in DateItems with useTextField is false and type is "datetime". Change also applied to 9.0p branch.

##### TextAreaItem

- Fixed TextAreaItem.getSelectionRange() in Internet Explorer 6-8, and added to the
  documentation of this method to clarify that the returned indices are indices
  within the entered value as opposed to the TextAreaItem's value. Change also applied to 9.0p branch.

##### MultiComboBoxItem

- Fixed the issue that MultiComboBoxItem.setValue() would erroneously fire change events. Change also applied to 9.0p branch.
- Fixed the bug that a MultiComboBoxItem created with layoutStyle:"verticalReverse"
  was actually displayed in "vertical" layoutStyle. Similarly, a MultiComboBoxItem
  created with layoutStyle:"horizontal" was actually displayed in "horizontalReverse"
  layoutStyle. Change also applied to 9.0p branch.

##### MultiFileItem

- Fixed application of i18n attribute MultiFileItem.pickerUploadProgressLabel. Change also applied to 9.0p branch.
- Fixed a problem where multiple MultiFileItems on a page could interfere with each others' user interface. Change also applied to 9.0p branch.

##### PickList

- Fixed a bug where a ComboBoxItem's pickList would be rendered too tall on the first draw after a filter. Change also applied to 9.0p branch.
- Made changes to improve keyboard navigation behavior in SelectItem pickLists where multiple selection is allowed. Change also applied to 9.0p branch.

##### RichTextItem

- Fixed a bug where change/changed events were fired when a RichTextItem was initialized. Change also applied to 9.0p branch.

##### TextItem

- Fixed the padding around TextItems and TextAreaItems in Internet Explorer, which
  was not the same as in Firefox and Chrome. Change also applied to 9.0p branch.

##### DataSource server-side fixes

- Fix incorrect SQL WHERE clause being generated if an "inSet" criterion is added to the criteria via the server-side API dsRequest.addToCriteria() and the "values" object passed to that method is not a java.util.List
- Change the AdvancedCriteria operators selected when uplifting simple critieria to AdvancedCriteria, to correctly reflect the simple criteria textMatchStyle's case-sensitivity behavior. Change also applied to 9.0p branch.
- Fix an exception in SQLDataSource when inserting CLOBs or binary field(s) with an explicit NULL value into an Oracle database. Change also applied to 9.0p branch.
- In the "inSet" criteria-handling logic, accept any type of Number object rather than insisting on a particular concrete type. Change also applied to 9.0p branch.
- Correct a problem when adding full-formed AdvancedCriteria objects as sub-criteria via the DSRequest.addToCriteria() API
- Add support for fields that express a customSelectClause when they are the target of an includeFrom. Change also applied to 9.0p branch.
- DataSource.enumTranslateStrategy is now correctly applied to relatedUpdates.
- Ensure that non-key <criteria> values on an operationBinding do not get trimmed off during DSRequest processing. Change also applied to 9.0p branch.
- Fail with a meaningful exception if we are passed an invalid operationType. Change also applied to 9.0p branch.
- Skip processing JPA/HB relations properties in DataSource.getProperties() if provided responce data is list of maps.
  XPath processing is reintroduced. Change also applied to 9.0p branch.
- Skip property processing (relation and XPath) in DataSource.getProperties() if provided responce data is list of maps.
- Fixing ConcurrentModificationException while creating data source with pooling disabled. Change also applied to 9.0p branch.
- Skip all declarative security checks for server-created DSRequests (previously, we were going through the checks if the request called setRPCManager() in order to add the serv-ercreated request to the automatic database transaction). Change also applied to 9.0p branch.
- Solved concurrency issue while loading data sources. Change also applied to 9.0p branch.
- Support the "useSubselectForRowCount" flag properly in Postgres. Change also applied to 9.0p branch.
- Correctly handle a boolean sqlStorageStrategy of "singleChar" and its variants with REST client requests. Change also applied to 9.0p branch.
- Change the way binary values are updated when the value we're updating to is NULL. Fixes a SQL-Server-specific problem. Change also applied to 9.0p branch.
- Fix a bug where Long values were down-cast to Integers when generating SQL for certain AdvancedCriteria clauses. Change also applied to 9.0p branch.
- Prevent output of time elements when exporting specifically "date" fields to CSV. Change also applied to 9.0p branch.

##### Other server fixes

- Fix content-type for multipart MailMessage.
- Fix problem using JSR223 server-scripting with the "java" scripting language under Tomcat 7 with parallel deployment in force. Change also applied to 9.0p branch.

##### Skinning

- Numerous small skinning fixes and improvements

##### Many documentation improvements and new samples, including but not limited to:

- FacetChart: Documented DrawnValue.radius - the radius of the segment for the data value (in pie mode).
- Documented Menu.iconBodyStyleName, which is used to skin menus when there is an
  icon field.
- Documented ValuesManager.addOperation, updateOperation, and removeOperation.
- Documented optional parameters for validateData.
- Improved DataSource documentation around Spring bean-scope issues
- Updated the Integration with PhoneGap page of the SmartClient Reference for
  PhoneGap 2.9.0.
- Added information about isc_isTablet to the Mobile Application Development documentation page.
- Updated the documentation of Canvas.getPrintHTML() to note that a callback should always
  be passed and that a direct return value from this method is a deprecated feature.
- Documented Canvas.groupLabelBackgroundColor for changing the background-color of
  the grouping label of a grouped Canvas.
- Update documentation for ListGrid.fixedRecordHeights to make it clear that
  this mode is not supported for CubeGrids.
- Documented TreeGrid.transferNodes.
- Corrected documentation for filterBuilder.getFieldOperators() to show that this API takes a single argument 'fieldName' that is
  the field for which to return the set of available operators
- Additional documentation around the use of server-side DSRequest.setPartOfTransaction()
- JavaDoc for server-side Messaging classes
- Added documentation for several new TestRunner command-line options and
  logging-related Selenium commands.
- Added a new Feature Explorer sample demonstrating HTML5 Drag & Drop of portlets
  across windows. See Drag & Drop -> Cross-Window Drag -> Portlet across Windows.
- Added a native Drag & Drop sample to the Feature Explorer showcasing HTML5 drag
  and drop of ListGrid records. See Drag & Drop -> Cross-Window Drag -> Records
  across Windows.
- Added an example to Feature Explorer demonstrating the "circleto" DrawShape command.
  Available at: Drawing -> "circleto" Command.
- Added new sample of using FacetChart.getNearestDrawnValue() to create custom interactivity

## Changes in 9.0

#### New Features

##### DataBoundComponent.js

- New AdvancedHiliteEditor for editing advanced hilite rules for DataBoundComponents
- Expose APIs for using the FieldPicker with ListGrid and DetailViewer.
- New API DataBoundComponent.shouldIncludeHiliteInSummaryField() to govern whether hilite HTML for some field should be rendered in a summary field displaying the value from that field.
- Added support for configuring a DataBoundComponent's hiliteEditor via the AutoChild system. See DataBoundComponent.hiliteEditor.
- Add capability to pass String field name to DBC.getFormulaFieldValue() and DBC.getSummaryFieldValue() rather than the actual ListGridField.
- Added support for databound listGrids reselecting updated records on cache sync via listGrid.reselectOnUpdate
- Added support for a databound CubeGrid being updated from its DataSource.
- Added new feature - DynamicForm/FormItem.readOnlyDisplay - supports different modes of rendering for items that are canEdit: false

##### DataSource.js

- Add new feature, TextExportSettings.nullValueText to allow configurable behavior when a field value is null. Default settings of "" shows empty string for null field. If property is set to null, then the default value for the type is used for field value.
- Added a public method to DataSource to extract a field value from a record using name or dataPath and respecting any specified SimpleType method for extracting the atomic value.
- Support for specifying multipleValueSeparator string for displaying multiple field values
- New framework property datasource.allowClientAdditionalOutputs, which allows or disables additionalOutputs sent in request from the browser.
- Added includeFrom + groupFunction feature which allows to have aggregated values from related data source:
  - in an "order" DataSource with related orderItem DataSource having an FK to order (many orderItems to one order):
  <field name="total" includeFrom="orderItem.price" groupFunction="sum"/>
  <field name="lastShipDate" includeFrom="orderItem.shipDate" groupFunction="max"/>
  - supports all groupFunctions that are supported for groupBy fieldFunctions, plus:
  - "first" - selects first value
  - "concat" (SQLDataSource + Oracle only) - combines all values textually via field.joinString, so that you get a display like "Updated by: Roger Parks, Lewis French"
  <field name="updaters" includeFrom="user.fullName" groupFunction="concat" joinString=", " joinSuffix="" joinPrefix=""/>
  - default value for joinString is ", ". It can also be set to empty String explicitly
  - default vlaue for joinPrefix/Suffix is empty string
- Enhance indirect include handling for SQL, Hibernate and JPA data sources.
- Add new DataSourceField property dataSourceField.precision.
- Add declarative group by feature for SQL, Hibernate & JPA data sources - it is now possible to request aggregated query.
- Added opportunity to configure groupBy & fieldFunctions directly under the root of DataSource tag in ds.xml.
- Introduce new framework property defaultCustomSQLProgressivePaging - determines the paging strategy to use when we have a customSQL operation that doesn't specify an sqlPaging property and progressiveLoading is in force.
- Added feature for a clientOnly DataSource to track changes to a dataset and be able to provide them as a set of DSRequests on demand.

##### DataSource.js RPCManager.js

- Added extra logging categories to the detailed timing measurements
- Added optional detailed timing data for both client- and server-side DSRequest processing to the Developer Console RPC tab
- New API RPCManager::startSQLTransaction()
- Added RPCManager.exportImage() for exporting SVG graphics in PNG or JPEG format.
- Added RPCManager.loadScreen() with RPCRequest.suppressAutoDraw: false to allow autoDraw.

##### RestDataSource.js

- support for "invalidateCache" flag for RestDataSource added

##### ResultTree.js

- Added support for explicitly determining whether open state should be preserved when fresh data arrives within a databound tree via ResultTree.autoPreserveOpenState attribute

##### RPCManager.js

- If a request is configured to block user interactivity a new RPCManager.promptDelay property controls the delay in milliseconds before a visual indication is shown to the user that interactivity is blocked.
- Added support for RPCManager.exportContent to accept an array of canvases.
- Documented PrintProperties.printForExport and added information about using printForExport when preparing DrawPanes and FacetCharts for export.
- Added the DrawPane.getDataURL() API which converts the DrawPane to a PNG image and calls the given callback with a data URI representing the PNG. In modern browsers and if using <canvas>-type drawing (the default), the data URI is generated without contacting the server.

##### Tree.js

- Added support for "showCollapsedGroupSummary" attribute for showing group summaries even when the group is collapsed.

##### TabSet.js

- Added support for drag reorder of Tabset tabs.

##### AutoTest.js

- Add new TestRunner feature that allows users to run their own Selenium IDE scripts against SmartClient or SGWT pages, and record the results to a SC DataSource and/or send an email report.
- Add new 'Getting Starting FAQ' section to deal with common issues with using the new TestRunner API/Feature.
- Added ResultViewer application to allow quick access to test results from TestRunner, and the capability to filter it effectively to see specific tests.
- Add getElements() method to AutoTest. Improve logic in getElement() to allow ListGrid rows to be returned.

##### Calendar.js

- Added calendar.scrollToTime()
- Added Timeline support for HeaderLevel.headerWidth (innermost level only) and Lane.height
- Added support for customizable, date-specific workday hours
- Added Calendar.columnsPerPage, which dictates the number of columns by which a Timeline will scroll when using the next and previous buttons

##### DrawKnob.js Drawing.js

- Added the property DrawItem.keepInParentRect to constrain a DrawItem to the visible area of its DrawPane. Added DrawItem.dragResizeMove() (for SmartClient) and DragResizeMoveEvent and DragResizeMoveHandler (for SmartGWT) to respond to drags of "resize" control knobs.

##### FacetChart.js

- Added x- and y-axis-specific value formatters to FacetChart.
- Deprecated FacetChart.autoRotateLabels in favor of a new property rotateLabels, which offers the option to always, never, or automatically rotate the X-axis labels by 90 degrees.
- Added an optional "metric" argument to FacetChart.getNearestDrawnValue() that, for a multi-axis chart, causes the method to return a DrawnValue from the specified metric.
- Efficiency additions and drawing improvements for FacetChart.
- Generalized FacetChart line smoothing to all line-type charts.
- Added support for labelling the x-axis of a "Scatter" FacetChart by setting the
  title property of the metric facet value of the x-axis. The label properties
  are specified using FacetChart.dataAxisLabelProperties.
- Add FacetChart.setShowScatterLines() API so that showScatterLines can be modified after chart creation.
- Improved the FacetChart axis label layout algorithm in the case of multiple value axes. In particular multiple value axis charts may now have a zoom chart.

##### Gauge.js

- Added new properties and setters to configure a Gauge's border, and set the list of GaugeSectors.

##### ListGrid.js

- Added ListGrid support for canDropBelowRecords - set to false to prevent drops in the empty area of a grid's body
  Fixed ListGrid support for showDropLines: false
  Fixes to canDragRecordsOut and canAcceptDroppedRecords implementations for TreeGrid
- Added support for groupStateChanged notification on ListGrids
- New ListGrid API "getDefaultFormattedFieldValue()"
- Added support for ListGrid.applyFormulaAfterSummary for determining how userFormula field values are calculated in summary rows
- Added support for additional escapeKeyEditAction - we now support cancelling the edit, exiting the editor and leaving edit values intact, or quitting the editor and saving the edits on escape keypress.
- Added listGrid.isGroupNode() for determining whether a record is a group header node in a grouped listGrid
- Added support for record property excluding a record from UI removal.
- New APIs to simplify customizing header button appearance:
  - ListGrid.setFieldHeaderBaseStyle()
  - ListGrid.setFieldHeaderTitleStyle()
  - ListGrid.setFieldButtonProperties()
  - ListGrid.setHeaderSpanButtonProperties()
- Added support for custom baseStyle / titleStyle for individual headerSpans via HeaderSpan.headerBaseStyle and HeaderSpan.headerTitleStyle
- Add new API ListGrid.configureGrouping() for configuring multi-grouping mode.
- Added showClippedValuesOnHover, cellValueHover(), and cellValueHoverHTML() to ListGrid to control displaying a hover for a cell whose value is clipped. Also added a utility method, ListGrid.cellValueIsClipped(), to determine whether a cell value is clipped.
- Added ListGrid.showClippedHeaderTitlesOnHover to control whether to show a hover if a field title is clipped, and added ListGrid.headerHoverHTML() to customize the HTML displayed in such a hover.
- Added new feature ListGrid.autoFitHeaderHeights. If this property is set to true, we will expand header buttons for fields or headerSpans to fit their titles, and expand the header as a whole to accomodate this if necessary.
- New ListGrid property canMultiGroup.
- Added support for configurable horizontal space around checkbox in ListGrid checkbox field.

##### DateChooser.js DateItem.js RelativeDateItem.js TimeItem.js

- Added an 'Apply' button to DateChoosers that allow editing of the time portion and fixed so that am/pm based TimeItems show hours 1-12, rather than 0-11
- Added several new APIs to TimeItem and DateItem, as well as a new useTextField: false mode.
- Added DateChooser i18n attributes fiscalYearFieldTitle and weekFieldTitle.
- Added new public APIs to RelativeDateItem from DateItem to properly control the new-style DateChooser.

##### Canvas.js

- Added new public methods Canvas.focusInNextTabElement() and Canvas.focusInPreviousTabElement().

##### Button.js Canvas.js ImgButton.js ListGrid.js StatefulCanvas.js StretchImgButton.js

- Added support for title clipping to Button, SectionHeader and ImgSectionHeader in the presence of section controls. Enabled by default, if the title is too long to fit in the SectionHeader, the title is clipped by an ellipsis. If showClippedTitleOnHover is true (the default), then a hover is shown when the user holds the mouse pointer over the component and the title is clipped.

##### Menu.js

- Added MenuItem.disabledIcon property to allow a different icon to be used when item is disabled.

##### RichTextCanvas

- Added support for getting and setting the RichTextEditor.fontNames and fontSizes maps.

##### ScreenReader.js

- Enhanced screenreader support: Added support for setting ariaRole for formItems and setting arbitrary ariaState attributes for both Canvases and FormItems

##### Scrollbar.js

- added Scrollbar.showTrackButtons to control visibility of the buttons above/left and below/right of a scrollbar track

##### TabBar.js TabSet.js

- Added two methods to TabSet, setCanCloseTab() for changing a Tab's canClose property and setCanCloseTabs() for changing the TabSet's canCloseTabs property.

##### TreeGrid.js

- Added support for attributes openerIconWidth and openerIconHeight to TreeGrid. This enables opener icons (typically a [+] or [-] symbol) to be non-square.
- Implemented clipping of TreeNode titles by ellipses if the text is too long to fit within the tree field column.
- Added new TreeGrid flag "leaveCheckboxSelectionGap" governing whether if checkbox selection is happening but a node is non selectable we should write out a spacer instead of a checkbox.

##### TreeMenuButton.js Menu.js

- Added PickTreeItem.dataProperties (Tree : null : IR) For a PickTreeItem that uses a DataSource, these properties will be passed to the automatically-created ResultTree. This can be used for various customizations such as modifying the automatically-chosen tree.parentIdField.

##### BlurbItem.js HeaderItem.js StaticTextItem.js

- Added support for setting "canSelectText" on StaticTextItems, BlurbItems and HeaderItems

##### ComboBoxItem.js FormItem.js TextAreaItem.js TextItem.js

- New attribute for TextItem and TextAreaItem: formatOnBlur - if set to true, static formatters will be applied while the item does not have focus (and cleared when the item receives focus)

##### ComboBoxItem.js PickList.js

- Added ComboBoxItem feature to only perform search once a minimum number of characters have been entered.

##### ComboBoxItem.js PickList.js SelectItem.js

- Added new attributes SelectItem.openOnSpace and openOnDownArrow
- Added support for explicit "useClientFiltering" attribute for databound SelectItems and ComboBoxItems. Also cleaned up some documentation in this area.

##### FormItem.js

- Exposed formItem.iconHSpace and formItemIcon.hspace attributes to customize horizontal spacing of FormItem icons.
- Added support for the HTML accept attribute as file/uploadItem.accept - a comma-separated list of valid MIME types that are applied as available filters in the file picker window

##### BlurbItem.js DynamicForm.js FormItem.js StaticTextItem.js TextAreaItem.js

- Implemented support for clipping values of FormItems and displaying a hover containing the full value if the value is clipped. See FormItem.clipValue, FormItem.valueHover(), and FormItem.valueHoverHTML() for more information.

##### FormItem.js TextItem.js

- Added support for controlling the native HTML "autocorrect" and "autocapitalize" attributes on TextItems via browserAutoCorrect and browserAutoCapitalize

##### SelectItem.js PickList.js

- Added support for arrow key navigation in dataBound SelectItems even before all options are cached.

##### Validators.js

- Add the ability to specify "criteriaFields" on the isUnique validator, to reduce the scope of the uniqueness check

##### DSRequest.java

- Added related updates functionality for JPA and Hibernate data sources.

##### SQLDriver.java

- Introduce new server.properties attribute, defaultTimeFormat, to control the format of the string we use when generating SQL to update "time" fields. Operates in exactly the same fashion as the existing defaultDateFormat and defaultDateTimeFormat properties. Note, if defaultTimeFormat is not set, we fall back to the defaultDateTimeFormat, because this is what was being used before the introduction of this new property.

##### SQLTableCreator.java

- Fields defined as type="clob" in DataSource definitions will now generate a clob field in the DB when used with the sql generator regardless of the field.length setting. Previously a field had to have a length > 4000 to auto-generate a clob.

##### SQLTransform.java

- Added support to handle epoch values.The epoch values must be handled in a different way, because an epoch value can't be parsed as a SimpleDateFormat string directly. Users must set sqlDateFormat="epoch" or sqlDateFormat="epochms" and sqlStorageStrategy="number" to their fields which will handle epoch values.

##### PDF Export

- PDF Export: added support for automatically downloading and using custom fonts specified in CSS.
  This new feature allows the users to declare new font files within a CSS file, which is loaded by the PDF export.
  The following extensions are supported: .otf, .ttf and .ttc.
  If a font resource is detected, the procces will attempt to look for the font within the fonts directory by default. The fonts directory must be located at the same level as of the .CSS file loaded. If there is no a fonts directory, the font files must be located where the .CSS file is.

##### BuiltinRPC.java DataSourceTools.java

- Hibernate data source generation now uses Hibernate configuration internals to acquire complete mapping information.

##### ISCMessage.java MessagingConnectionHandler.java MessagingServlet.java

- Added server-side support for the use of Server-Sent Events with the Real-Time Messaging module.

##### visualBuilder.js

- Re-orient VisualBuilder around a "project" file, providing UI for editing multiple screens.
- Make the DataSource pane of VisualBuilder show a per-project list of DataSources.

#### Bug Fixes / Other Changes

##### ActionMethods.js

- Fix a bug whereby oldValues are not correctly maintained after a saveData() if the dsRequest was a sparseUpdates request
- Fixed the issue that DynamicForm.updateOperation was not honored for implicit saves when using a ValuesManager.
- Modified getSaveOperationType() to handle being passed no requestProperties

##### ActionMethods.js DataSource.js

- Fixed issue with binary metadata fields when the underlying binary field is mapped via nativeName - Have DynamicForms switch to edit mode after a successful add, even if the form contains a FileItem

##### BMMLImporter.js

- Added code to BMML Importer tool that checks for whether certain BuiltinRPC functions are enabled and disables parts of the UI appropriately.
- Fixed a bug in BMML Importer where a different BMML file from the local disk could not be imported after importing a BMML file from the local disk.

##### DataBoundComponent.js

- Fixed issue where a dropped record on a grouped grid did not receive the correct criteria.
- Fixed an issue whereby if a formula field depended on another formula field, an error would occur if the first field was hidden
- Fixed the issue that the titles of a DataBoundComponent's fields were not overriding the data source's field titles when using the DataBoundComponent.exportData() API.
- Fixed the issue that formula and summary fields were not being exported by default when using the exportClientData() API.
- Fixed a server-side IndexOutOfBoundsException when exporting a subset of fields via the DataBoundComponent.exportClientData() API.
- Expose new feature, UserSummary, configurable in ListGridFields.
- Fixed an issue where the presence of a sortField in a databound select item could cause callbacks passed to "fetchData()" to fire multiple times.
- Fixed a bug where 3 or more hilites applied to the same record and field would not all be displayed.
- If listGridField.canExport is false, respect this when assembling default list of fields for formatted export using exportClientData() [Was already respected for standard "exportData()" flow].
- Fixed header spans quoting while exporting client data from ListGrid.
- Fixed issue on ListGrid where setting canDragSelectText:true still results in a drag tracker representing the starting record.
- Fixed field availability in HiliteEditor vs AdvancedHiliteEditor
- Altered so that Simple field-lists in hilite editors always include fields that are used by visible Summary fields, even those other fields are themselves hidden

##### DataBoundComponent.js DataSource.js

- Fixed an issue where a ListGrid having an expansion field and the ability to reorder records would show the arrow image of the expansion field on reordering records unless an appropriate titleField was set.

##### DataSource.js

- Fix issue where certain field types in a DataSource, if present, may cause an error in DataSource.recordsAsText().
- Documented the special DataSourceField.sqlDateFormat values "epoch" and "epochms".
- Added a note to the Java Module Dependencies section of the SmartClient Reference on how to use iText 2.1.7 with the Server Framework's Content Export module.
- Fix error in DataSource with cacheAllData: true set.
- Updated the "Java Module Dependencies" section of the SmartClient Reference to note that the Batik JARs are also needed if RPCManager.exportImage() is to be used.
- Updated the "Java Module Dependencies" section of the SmartClient Reference to note that the xml-commons External Components JAR, xml-apis-ext.jar, is required in order to use the 'exportImage' built-in or for PDF Export of DrawPanes in IE6-8.
- Fix a contradictory assertion in the docs that DataSource.useAnsiJoins is the default - it is not
- Documentation for DSRequest.generateRelatedUpdates property.
- autoCacheAllData will now set cacheAllData:true when a request with no criteria receives all rows.
- Document that a primaryKey is required for DataSources with a binary field
- Mark the "data" parameter of DataSource::performCustomOperation() as optional
- Changed module dependency documentation to note that commons-fileupload is a required library of isomorphic_core_rpc.jar, even if you aren't using the upload features of the framework
- Fixed JS Exception in DataSource code for certain same-origin policites.
- Fixed infinite recursion in isc.clone() for some objects built by a DataSource.
- In DataSource.sendDSRequest(), prevented preparation and execution of the cache resultSet for any non-fetch requests.
- Switched to count(beanName) SQL syntax for single primary key JPA DataSources for compatiblity.
- Fixed available Operator list for Date fields in FilterBuilders

##### DataSource.js DataBoundComponent.js

- Resolved an issue using a blank AdvancedCriteria when calling ListGrid.fetchData() would not return any matches and calling it a second time would throw an exception.

##### RestDataSource.js

- Updated the sample JSON responses in the RestDataSource documentation. JSON responses now strictly follow the JSON standard and no longer include 'Date.parseServerDate()' calls.

##### ResultSet.js

- Fix DataBoundComponent.find()/findAll()/findIndex()/findNextIndex(), so that they return the correct results for datetime fields from the DataSource.
- Log warnings on attempts to modify data in (readonly) ResultSets

##### ResultTree.js

- Fixed a problem whereby databound treeGrids with loadDataOnDemand set to true could be confused if passed initial criteria in AdvancedCriteria format

##### Browser.js

- Enabled CSS3 mode by default in IE 9 standards mode and IE 10 and later when using the Enterprise, EnterpriseBlue, or Graphite skins.

##### Comm.js HiddenFrame.js

- Fixed the endless "Waiting for" statusbar message and regular "phantom click" sounds when using Real-Time Messaging.

##### Comm.js Messaging.js

- Fixed the endless "page loading" indicators in Safari 4 and 5 and Firefox 3 when using Real-Time Messaging.

##### FileLoader.js

- Fixed an issue whereby FileLoader.cacheFile() could append an unexpected query parameter onto the URL passed in while attempting to cache images.

##### HiddenFrame.js

- Fixed Real-Time Messaging in Internet Explorer if ActiveX is disabled.

##### Messaging.js

- Fixed the continuous loading "throbber" in Chrome when using RTM.
- Enabled the use of Server-Sent Events with Real Time Messaging in Firefox and Opera.
- Fixed the endless spinning loading indicator ("throbber") when using Real-Time Messaging in Safari 4 and 5.0.x.

##### developerConsole.js

- Fixed a problem where the developer console would not show up properly in IE10

##### Log.js StackTrace.js

- Improve stack trace generated for IE10 and Firefox.

##### EventHandler.js

- Fix issue where ListGrid in a modal window may blank out after having launched a child modal window that calls ListGrid.setFields().
- Fixed a bug where the hover of a button would not appear in Internet Explorer if the mouse started on the button's icon.
- Fixed a bug where a DynamicForm with one column and one item at width/height 100%, with no title, but with a prompt, would never show the FormItem prompt in a hover
- Fix issue where clicks that start a modal operation can misbehave in Selenium RC scripts.
- Fixed an event handling issue: MouseWheel events were being sent to disabled canvases, allowing the user to scroll widgets that were marked as being non-interactive.
- Fixed some issues causing keyboard-triggered context menu events to fail to be properly handled
- Correct processing of extended characters in TextItem when using masking.
- Fixed a case where Chrome would not react properly (scroll) to small trackpad scroll gestures Corrected EventHandler.getWheelDelta() - method returns a float rather than an integer.

##### Array.js

- Fixed a JavaScript error occurring in multi-facet, zoomable FacetCharts that use labelCollapseMode "time".

##### Date.js

- When parsing a datetime specified in a JSON string, handle an explicit timezone specification in the format "+H:MM" as well as "+HH:MM".
- Added showPickerTimeItem flag to DateItem and RelativeDateItem, allowing developers to suppress the time field from being displayed in the DateChooser popup for fields with data type "datetime".

##### RelativeDate.js

- Fixed an issue where when a relativeDate was converted to an absolute date due to DataSource.autoConvertRelativeDates being set to true, you could end up with a datetime rather than a logical date being passed to the server for a field of type "date"
- Fixed updating of Grid-level summaries after a record-removal and altered Date.getWeek() to consider the default firstDayOfWeek from the current locale if one isn't passed
- Fixed RelativeDateItem inputFormat issue when using a custom formatter function
- Fixed a JS error from _isDatetimeString() when the inputFormat is a function
- Update RelativeDateItem.baseDate accordingly from updateValue as well as setValue and fixed a bug where any value prefixed with a "$" was interpreted as a valid relativeDate
- Fixed firstDayOfWeek support for Timeline
- Reworked Timeline.setTimelineRange() and fixed interactions with the DateChooser button and Next/Previous buttons
  Added new attribute Calendar.defaultTimelineColumnSpan, default 20 - this is the number of innermost headerLevels (grid columns) we will show if no endDate is provided on creation, or later via setTimelineRange()

##### SimpleType.js

- Fixed display values in group summaries for avg, min and max, when the data contained nulls, or all zeros
- Fixed example link in SimpleType documentation

##### Tree.js

- Fixed ListGrid sorting behavior when the grid is both grouped and sorted on the same field
- Fix sorting of Grouped ListGrids with multiple GroupBy fields.

##### pngExport.js

- Fixed the translation of <canvas>-style radial gradients to SVG ≶radialGradient>s.

##### builtinTypes.xml

- Fixed warning for 'image' data type.
- Removed warning message generated for type="link" DataSource fields.

##### DataSourceField.ds.xml

- Fixed an issue where decimalPad / decimalPrecision, if specified for a field within a .ds.xml file, would fail to be respected within the application.

##### AutoTest.js

- Improve AutoTest.isGridDone() to detect more cases of pending loads, such as from ListGrid.scrollToRow() for unloaded rows.

##### Button.js

- Fixed a bug where in pages running with strict or HTML5 doctype, specified Label padding would not be displayed.
- Fix for an issue that would cause buttons containing icons to intermittently render poorly in Firefox 18

##### Canvas.js

- Fixed an issue with form item labels of a DynamicForm within a ToolStrip not being vertically centered.
- Fixed Canvas.enforceScrollSize() in Firefox.
- Exposed the canvas "showShadow" property as being settable at runtime
- Fixed an issue whereby Firefox version 18 would incorrectly size elements containing images when those images are first loaded and not present in the browser cache.

##### Canvas.js ListGrid.js

- - Added support for ListGrid.booleanBaseStyle, which can be used to apply a CSS style to checkbox icons displayed for "boolean" fields and the checkbox selection field. - Extended ListGrid.booleanTrueImage, ListGrid.booleanFalseImage, and ListGrid.booleanPartialImage to support the special value "blank", which means that no image is shown.

##### Calendar.js

- Fixed timeline event rendering for timelineGranularities greater than "day"
- Altered to hide the drag target for timeline events before calling the cancellable Moved and Resized events
- Fixed event descriptions not showing up in print preview if the default name ("description") had been changed in code
- Fixed JS error after editing an event in the Month View, when all other views have been hidden
- Fixed Event Editors when event field-names have been overridden in code. Altered to create a default HeaderLevel for Timelines that don't specify any.
- Improved mouse-based event creation for timelines by having the start and end dates rounded to the eventSnapGap
- Fixed JS errors in getDateFromPoint() (monthView only) and dateIsWorkday() and corrected bad style used for event-windows when showEventDescriptions is false
- Fixed the date being passed to calendar.getDateCSSText()
- Fixed a bug where styling was not being correctly updated after creation when an EventWindow was reused for events with different baseStyles
- Fixed a couple of redraw issues for overlapping events in Calendar
- Fixed bugs that caused getActiveTime() to return the wrong value and Calendar-level drag events to be incorrectly fired by eventWindow movements
- Added Calendar.canReorderLanes, fixed so that timeline events don't show the description in the header when showEventDescriptions is true, and fixed so that removeEvent(), setLanes() and addLane() properly refresh events
- Fixed a bug where events could render a column-width beyond the end of Timelines.
- Fixed a drag-repositioning bug in Timeline
- Fixed an issue where events that ended before 1am would be extended to 11:59pm
- Fixed custom workday styling in Day and Week views by ensuring that dateIsWorkday() is passed the correct date
- Fixed handling of null startDate and startDate > endDate for Timeliine
- Fixed a bug where when a long event is overlapped in its very last unit (30 mins by default) by another event which is exactly that long, both events would render at full width, but one after the other, partly obscuring the next column in the grid
  Fixed a bug where dragging an overlapping event into a different column did not correctly render the original column because the event being dragged was still being taken into account
- Fixed placement of overlapping calendar events when one or more ends at 00:00.
  Fixed JS error when showing event hovers in the MonthView
- Fixed JS error when showing the quick event editor in non-timeline views
- Fixes: timeline event drag-drop in all cases, events drawing past the end of the timeline, column rebuilding after selecting a date with the picker, bubbling of dragReposition events for timeline events - also adds two optimizations and fixes two JS errors

##### ColorPicker.js

- Fixed a bug where ColorPicker defaultOpacity would not always be respected

##### ComponentEditor.js

- Fixes issue in VisualBuilder where the "Events" editor would not maintain values.

##### CubeGrid.js

- Fix issue where CubeGrid.getSelectedCells() returns null rather than the proper CellRecord[].
- Fixed hiliteFacetValue() for column-facets and enhanced to allow hiliting of any facetValue, not just innermost ones, for rows and columns

##### DateChooser.js

- Fixed an issue where the body of DateChoosers in the Simplicity skin would size wrongly in Chrome and show unwanted scrollbars
- Fix issue where DateChooser for dateTimeItem doesn't show time picker widget(s).

##### DetailViewer.js

- Support for DetailViewer setViewState() / getViewState()
- Fixed a bug where DetailViewer field.height could fail to be respected

##### Drawing.js

- Fixed an issue with FacetCharts possibly not drawing when used in a TabSet.
- Fixed the translation of <canvas>-style linear gradients to SVG <linearGradient>s.
- Fixed a bug that calling DrawPane.erase(), adding a DrawItem to the draw pane, and then calling hide() on the draw item caused a JavaScript error in IE.
- Fixed a bug in DrawPane that, after changing the zoomLevel, the screen area over which the mouseover handlers were active did not match the locations of the DrawItems handling the mouseover.

##### DrawKnob.js Drawing.js

- Fixed a bug that knobs of DrawItems could stop working after DrawPane.zoom().

##### EdgedCanvas.js

- Fixed the appearance of large gaps in the rendering of canvas shadows in Firefox.
- Fixed the background-size CSS applied to EdgedCanvas edge cells in IE9.
- Fixed the background size and display of bottom edge in IE9 strict mode when canvas size is less than 100px.

##### Element.js

- Fix issue where widgets may not respond to clicks in Firefox when Standards Mode is active.
- Fix issue in Firefox Standards Mode where grid borders may disappear unexpectedly.
- Fixed FormItem.showIcon() and showAllIcons() in IE.
- Fixed a display issue in Opera 12.x where the DateRangeItem's form was not visible in the date range selection dialog of a ListGrid filter editor.

##### Chart.js

- Fixed a Javascript error that occurs in the expression `this.facets.length` in
  Chart.isMultiFacet() when a FacetChart has no data.

##### FacetChart.js

- Fixed a bug where FacetChart.getNearestDrawnValue() would return the wrong data point in the presense of null-valued data.
- Fixed a bug that the record argument of FacetChart.getPointHoverHTML() is always null when hovers are enabled for the "Measurement Data" zoom chart sample.
- Implemented FacetChart.labelCollapseMode "time" for column charts.
- Fixed a bug that "Area" and "Line" FacetCharts could fail to draw all of the data points, while showing labels for the missing points in the top-left corner, in a case of all numeric data-axis values.
- Fixed a bug that switching the chartType of a FacetChart from "Column" to "Pie" and then back to "Column" causes extra space at the bottom of the chart.
- Fixed a bug that the bars in a column FacetChart with all negative values could be drawn over the chart title.
- Fixed a JavaScript error issued on bar/column FacetCharts that have some null data values.
- Fixed a JavaScript error in FacetChart in IE9 when showValueOnHover is true and the chart is changed to the "Column" chartType and is made unstacked.
- Fixed a bug that the legend in multi-facet pie FacetCharts could display values of the wrong facet.
- Fixed a JavaScript error in FacetCharts with `showValueOnHover: true` occurring when the chartType, stacked, filled, or data properties are changed in IE9.
- Fixed a bug that FacetChart pie charts could be drawn inconsistent with their legend and that non-stacked column/bar charts could have overlapping clusters.
- Fixed a bug that the scale on an extra axis of a FacetChart might not be updated after changing the data.
- Fixed FacetChart.getNearestDrawnValue() for clustered bar and column charts.
- Fixed a bug that FacetChart may fail to update the scale on the value axis after the stacked property is changed.
- Fixed a bug that radar FacetCharts with gradient fill might be only partially filled when drawn on an HTML5 canvas.
- Included the data record in the DrawnValue objects returned by FacetChart's getDrawnValue() and getNearestDrawnValue().
- Fixed a bug that the data points shown on line and area plots in a multi-axis chart could fail to line up with the center of bars in the main FacetChart.
- Improved display of error bars for FacetCharts.
- Prevented FacetChart from causing a JavaScript error in mouseMove() or prepareForDragging() if the chart rect. has not been calculated.
- Fixed a bug seen in FacetChart that the first data-axis gradation line of a zoom chart could be drawn at an angle instead of vertically.
- Fixed a FacetChart bug that vertical DrawLines with non-"solid" linePattern are not drawn under the bitmap drawingType.
- Fixed a FacetChart bug to allow scatter plots to have logScale in only the y-axis.
- Fixed a bug that FacetChart could incorrectly draw the data of a single-facet line chart as a flat line at value zero.
- Fixed a bug that a line FacetChart can display a blank zoom chart if the values are negative.
- Fixed a bug in FacetChart that stacked bars of a multi-facet bar chart whose lowest gradation is greater than zero could be drawn over the chart title.
- Fixed a bug in single-facet "Pie" and "Dougnnut" FacetCharts that data value
  labels for the biggest pie slices might not be displayed.
- Fixed a bug in stacked "Bar" and "Column" FacetCharts with showValueOnHover
  enabled that the hover could appear on a bar even while the mouse is hovering
  over the next bar.
- Fixed a bug in FacetChart where swapping the facets can cause the zoom chart to
  display the wrong data labels.
- Fixed a bug where a column FacetChart with `showDataValues: true` failed to
  display the data value labels after the chartType was switched to "Pie" and
  then switched back to "Column".
- Fixed a bug that the context menu of a FacetChart is not destroyed when the
  chart is destroyed.
- Fixed a bug that the zoom (selection) chart was not automatically cleared when
  the chartType of a FacetChart is switched to "Pie", "Doughnut", "Radar", or
  "Bar" (which chart types, along with "Scatter", do not support zooming).
- Fixed a bug that FacetCharts that have zero values for all of their data points
  draw gradations lines at +/-0.01 instead of simply showing a gradation at zero.
- Fixed a bug where adding a RangeChangedEventHandler to the zoomChartSlider of a
  FacetChart prevented the chart from redrawing the data after manipulations of
  the slider.

##### FieldPicker.js

- Add capability to use FieldPicker by supplying a DataSource rather than a DataBoundComonent in FieldPickerWindow.fieldPickerProperties.
- Fix issue where record (field) in FieldPicker can't be expanded to access editing of a summary/formula field if DBC.fieldPickerFieldProperties is null or an empty list.
- Add ability to delete a user summary or formula field in FieldPicker.
- Up/Down buttons added to move visible fields in FieldPicker.
- Enable focus styling for FieldPicker transport buttons.

##### FormulaBuilder.js ListGrid.js

- Fix issue where Formula/Summary Editor generates error if opened after field in active formula/summary is removed.

##### GridRenderer.js

- Firefox version 17 changed how heights are applied to TD elements in HTML5 rendering mode. Fixed an issue that caused our listGrid cells to render too tall, causing unnecessary scrollbars in CubeGrids.
- Fix CSS styling for rollovers/selection in TreeGrids in IE8/IE9 Standards Mode.
- Fix issue in IE8 in Standards Mode where ListGrid cells are wrapped even though wrapCells: true is not set.
- Fix case where autoFitFieldWidths yields widths that are too narrow for certain fields for a ListGrid where autoFitData is "vertical" or "both".
- Fixed vertical centering of text in ListGrid cells in IE 7+.
- Fixed an issue where multiple rapid repeated clicks in the same position on a TreeGrid could cause a JavaScript error
- Clean up grid column sizer after use. Removes surplus (off screen) DOM elements
- Fixed an issue where cells would start to wrap, and expand their rows on rollover in IE8/IE9, with strict doctype set even if wrapCells was set to false.

##### HiliteEditor.js

- Fixed a JS error in HiliteRule.getHilite() that occurred if the value of the criterion was left blank.

##### Layout.js

- Fixed a sizing bug where layouts with shadows were not properly resized down if set to fill 100% of a parent and the parent was made smaller.

##### Layout.js TabSet.js

- Fixed an issue where hidden tabBarControls left a gap in the initial layout of the TabBar controls layout.

##### ListGrid.js

- Fix for a bug where response to dataChanged would fail to update a grouped tree if grouped by primary key.
- Fixed the issue that the ListGrid.dateFormatter was not applied if the record value was a string.
- Fix issue where ListGrid header context menu button press shows info from wrong column.
- Fixed issue where trying to hide or unhide ListGrid columns may hang the browser with 100% CPU.
- Fix issue where freezing or unfreezing ListGrid columns with autoFitData set to "horizontal" or "both" can lead to an infinite loop.
- Performance improvements for ListGrid autoFitFields behavior
- Fixed a case where focus could be dropped from the filterEditor while filtering in Mozilla FF only.
- Improved the placement and sizing of SelectItem and ComboBoxItem dropdowns so that the form item is not covered by it.
- Fix for an issue where when cell selection is enabled and the visible columns in a grid change, interactions such as drag selection could fail.
- Fixed a bug whereby headerBaseStyle was not being properly applied to header buttons in some cases.
- When alwaysShowEditors is true, render out the error icon for cells with validation errors
- Fixed a JavaScript error in ListGrid.saveEdits() when a new, unsaved row is edited and then marked for removal.
- Fixed issue with ListGrid corner sort button not showing the correct sort state.
- Fixed a JavaScript error when calling ListGrid.saveAllEdits() on a ListGrid with deferRemoval enabled.
- Fixed a JS error in ListGrid.getRecordComponent() when passed no column number.
- Fixed an issue where ListGrid.getGroupState() would exclude groupingMode and various other advanced grouping properties.
- Fixed issue where styling in a ListGrid can get broken when updated on a rollover after scrolling.
- Fixed a JS error when a ListGrid has both expansion components and other fields with frozen: true.
- Fixed behavior of ListGrid when a user drag-resizes a field - the widths of all fields now become "explicit" so they aren't automatically reflowed.
- Fixed ListGrid issue where our logic to apply group summary info and group titles to group header nodes was breaking in a few cases because it wasn't truly recursive.
- Fixed problem where ListGrid.datetimeFormatter format "toSerializeableDate" didn't produce the doc'd output format of YYYY-MM-DD HH:MM:SS.
- Fixed bug where listGrid.saveOperation, addOperation and updateOperation were not actually affecting the request operationId.
- Fixed a bug where groupByMaxRecords was refusing to group if the data length actually matched the max-records specified.
- Modified ListGrid to fire fieldStateChanged rather than viewStateChanged when sorting.
- Fixed issue that a TimeItem for a "time" column in a ListGrid filter editor form could reset the element value to "0:00" in certain cases.
- Fixed a bug in ListGird where error icon hover prompt wouldn't show when there were frozen fields.
- Fixed an issue where print/export to PDF of ListGrids with canExpandRecords: true and sparse data would generate an empty document
- Optimized the code for remapping recordComponents when data changes and recordComponentPoolingMode is not "data" - significant improvement when removing a record or fetch-scrolling
- Fixed initialSort for ListGrids with a DataSource but no specified fields array
- Fixed redraw issue with paged grids following a page-changing scroll and an export to PDF
- Fixed a JS error that could happen if expandRecord() was called before the grid was drawn
- Correctly flag the result of ListGrid.getFilterEditorCriteria() with a _constructor if its an AdvancedCriteria

##### RecordEditor.js

- When showing the filterEditor for a listGrid, suppress the checkbox image from appearing in the filter editor of boolean type fields marked as canFilter:false. This is a more obvious UI for a non-interactive field than an unchecked (and non-interactive) checkbox image.
- Fixed an issue filtering a tree grid with a substring search.

##### RichTextCanvas.js

- Fixed a sizing issue for RichTextItem that resulted in perpetual redrawing of scrollbars in Chrome
- Fixed mouse-initiated focus/editing for RichTextCanvas in Chrome
- Fixed RichTextItem editability in Opera
- Fixed key handlers in RichTextEditor in Chrome
- Fixed the Font and Font Size rich text editor controls in Chrome.

##### RichTextItem.js

- Prevent RichTextItem from firing an unnecesaary changed event during initialization, and thus prevent forms including its value from getChangedValues() when it hasn't really been changed

##### ScreenReader.js

- fixed ListGrid aria-posinset accessibility attribute to be 1-based rather than zero-based as mandated by the WAI-ARIA specification

##### SectionStack.js

- When trying to remove the expanded section in section stack, only half of it items are removed

##### TableResizePolicy.js

- Resolved an issue where certain FormItems, including SectionItems, could render too wide, causing the DynamicForm to overflow its specified size unnecessarily.

##### TabSet.js

- Fixed an issue where if a tabBar control is made visible after having been hidden, the newly-visible tabBar control was placed incorrectly beneath the first tab.
- Notification for tab reordering event: tabsReordered()
- Fixed a stack overflow occurring when an invisible widget is added to a TabSet's list of tabBarControls.
- added TabSet.defaultTabHeight as corollary to defaultTabHeight and improved docs
- Fixed an issue where tabSet.tabDefaultWidth could impact width of left/right positioned tabs and tabDefaultHeight could impact height of top/bottom positioned tabs, contrary to documentation. Now these propertes effect the "length" of the tab-buttons but not the "breadth" of them, as intended.
- Handle selecting a tabset tab whose pane has been destroyed.

##### TileGrid.js

- Fixed a problem where "invalidateCache" was failing to behave correctly on databound TileGrids.
- Fixed Hilite handling for TileGrid

##### TileLayout.js

- Fix an issue where TileLayouts that are not TileGrids show hidden tiles.

##### FilterBuilder.js

- Fixed a bug where a "between" operation on a date field in FilterBuilders would not properly set the time on the end-range date to 23:59
- Fixed sortFields: false for FilterBuilder

##### CanvasItem.js

- Fix problem where with CanvasItem, arguments were not passed to createCanvas().
- Resolved some issues around Tab-index handling of CanvasItems [especially visible within modal windows]
- Modified CanvasItem so that if showTitle is true and titleOrientation is "top" we now render the canvas at the specified size rather than shrinking it to accomodate the title text. This matches the behavior of other form items - the form item element doesn't shrink in order to leave more space for the title - and was reported as a bug on the forums.
- Fixed the orphaning of an externally created canvas used as the canvas of a CanvasItem and then reused in another CanvasItem passed directly into DF.setFields()

##### ComboBoxItem.js

- Fix for a bug where if you show a ComboBoxItem with a filter-editor on its picklist, certain interactions with that pickList filter editor would inappropriately dismiss the entire pickList
- Fixed pick list on ComboBoxItem with filter not allowing mouse click into filter.

##### DateItem.js

- Fixed an issue where a DateItem's textBox could render too wide, obscuring or shifting the date-picker icon

##### DynamicForm.js

- Fixed so that a DynamicForm initialized with a string valuesManager auto-creates a global VM instance
- Fixed an issue where validateOnChange could cause focus to be removed from the field the user is currently editing
- Fixed a JS error from item-event handling code when, for instance, a form-item has a click-handler that removes its item from the form, via form.setItems(), partway through the event chain
- Fixed the issue that DynamicForms were spacing form items apart so as to take up the entire height.

##### AutoFitTextAreaItem.js

- Fixed vertical autosizing for AutoFitTextAreaItem in css3 mode

##### FileItem.js FormItem.js MultiFileItem.js

- Inhibit multiple selections in the native file selector window shown when the user clicks a "Browse" button in a MultiFileItem component

##### FormItem.js

- Fixed a bug where SpinnerItems with no default value would fail to react to clicking on the spinner in some cases.
- Fixed a bug with characterCasing:"upper" in IE 10 where spaces would disappear.
- Fixed the "Unknown runtime error" thrown in IE 8-10 when FormItem.hideIcon() or hideAllIcons() was called.
- Fix issue where setting icon.neverDisabled: true has no effect for icons associated with a Formitem.
- - Added support for FormItemIcon.baseStyle to apply a CSS style to the icon, and which is suffixed according to the state. - Added support for setting FormItemIcon.src to "blank", which means that no image is shown for the icon.
- Allow validateOnExit FormItems to perform validation on a standalone form without the value being changed. This primarily affects the required validator.

##### FormItem.js TextItem.js

- Exposed the TextItem.browserInputType attribute.
- Fixed value hovers over TextItems in Firefox when the value is clipped.
- Fixed a bug where pasting a value into a masked TextItem sometimes caused characters to be lost.
- Fixed so that FormItems do not show icons or pickers and largely render with TextItem.texBoxStyle when printing
- Fixed show/hide cycle for formItemIcons in IE

##### FormItem.js TextItem.js TextAreaItem.js

- write out aria-readonly flag for non editable form items with screenReader support enabled

##### MultiFileItem.js

- Fix issue in MultiFileItem whereby deleted files are sometimes not removed from the visible list

##### PickList.js

- Fixed an issue with the pickList of a SelectItem not moving with its SelectItem if the SelectItem is moved (for example, if the browser window is resized and the containing form is moved).
- Fixed a bug where a databound PickList for a FormItem with an explicitly specified sortField shows horizontal scrollbars instead of expanding to fit the data.
- Removed spurious Combobox/SelectItem warning "fields and completeFields are null and there is no DataSource"
- Fixed a case where a dataBound pickList with custom optionOperationId, and a specified sort field, could cause 2 fetches - one with the wrong operation ID.

##### PickTreeItem.js

- Fixed the widths of PickTreeItems with icons when displayed in FilterEditors

##### RelationItem.js

- Fixed a bug where MultiFileItems would fail to be properly disabled when the disabled attribute is set to true.

##### RelationItem.js MultiFileItem.js

- Modified MultiFileItem to always show the picker modally (so click outside the picker will not dismiss it). Previous behavior would show the picker modally only if the user was editing an existing record - not when editing a new record.

##### RelativeDateItem.js

- Fixed a problem tabbing through RelativeDateItems when the clickMask is up (For example when embedded in a modal Window)
- Improved consistency of behavior within a RelativeDateItem when 'type' is not explicitly specified as either date or datetime.
- Altered RelativeDateItem to reset it's baseDate from setValue() - fixes a bug where calling setValue("$now") after init would have no apparent effect
- Fixed availability of the dateChooser icon in RelativeDateItems across enable/disable cycles
- Altered RelativeDateItem.setValue() so that, when called with an actual date string, it parses the value and stores the date itself - fixes a bug where getDate() would return an unformatted date-string

##### SectionItem.js

- Fixed a bug that SectionItem failed to open or close after Space or Enter keypresses.

##### TimeItem.js

- Fix issue where timeItem.hint is not displayed if timeItem.useTextField is false.

##### DSRequest.java

- Fix a problem where database connections are remaining open until GC for a DSRequest that is executed multiple times

##### BasicDataSource.java

- Fixed i18n support in a Component XML that uses <dataSource> tag in between <fmt:message> tags.

##### BasicDataSource.java

- Fix ClassCastException arising when a SQLDataSource autoDerives from metadata derived from an unannotated Java class

##### RPCManager.java

- Enable the Export options (XML, Excel, etc) and streaming responses when the response's data model is a JSONFilter

##### DeclarativeSecurity.java

- Only check operation-level security for related DataSources for fetch requests - it is inappropriate to do so for updates because we are never updating anything in the related DataSource

##### framework.properties

- Switch DataSource pooling on by default

##### DataSourceAnnotations.java

- Performance optimizations - remove a bottleneck in the getCaller() method when deriving DataSource definitions from annotated classes

##### FileAssembler.java

- Fix rare and intermittent NullPointerException during FileAssembly

##### TestRunner.java TestRunnerLauncher.java

- Fix TestRunner alertEmail/repeatEmail functionality for reporting batch results.

##### StatefulCanvas.js

- ScreenReader fix - ensure that if a Button or subclass has its title changed, the new title shows up as the aria-label and is read by ScreenReaders.
- Ensure that a custom mouseOver implementation of a StatefulCanvas subclass (like button) only prevents standard showRollOver styling behavior if the implementation explicitly cancels the event (returns false)

##### SvgImage.java

- Fixed a bug in the 'exportImage' RPC built-in where padding around the drawn content of a DrawPane was not preserved.

##### AdvancedCriteria.java

- Guard against a NullPointerException in server-side AdvancedCriteria

##### AdvancedCriteria.java Criterion.java

- Fixed a bug in getFieldCriterion() / getFieldCriterions() where certain Criterion types would not be found (for example, isNull)

##### DataSource.java

- Fix a bug where fields of type "creatorTimestamp" were having their time elements stripped
- Strip "serverObject" and "serverCondition" elements of validators defined in .ds.xml files out of the version of the DS that is delivered to clients

##### DataSource.java DataSourceDMI.java

- Fix over-zealous licensing enforcement that was preventing Pro users from using the "criteria" and "values" properties of an operationBinding

##### PoolableDataSourceFactory.java

- Clear out a ThreadLocal variable to prevent Tomcat from issuing a warning during shutdown

##### HibernateDataSource.java

- Corrected query generation for JPA/HB data sources served from framework pool.
- Fixed additionalOutputs for pooled data sources (JPA/HB).

##### IJSParser.java

- Modify RestRequestParser to preserve literal null values passed up from the client. Fixes this issue: http://forums.smartclient.com/showthread.php?t=25492

##### JPADataSource.java

- Fixed count query syntax to satisfy JPA/JPA2 specification.

##### JSParser.jj

- Fixed RESTHandler's ability to handle "postMessage" requests containing Unicode.

##### DataExport.java

- Fixed line breaks when exporting to CSV for unix/mac systems.
- Fixed export data issue when line break setting was ignored.

##### ExcelDataExport.java

- Fixed an issue with Excel exports via exportClientData() where the field names were shown instead of the titles.
- Fixed background colors when exporting to Excel.
- Fix issue with the header row sometimes being blank in Excel exports, due to an apparent bug in POI
- In Excel export, do not attempt to parse a value that ends with an alphabetic character as a number, to avoid a quirk of the Java number parser which treats a trailing "f" or "d" as a designator of precision (float or double) that should be ignored

##### RestRequestParser.java

- Fixed a bug in RESTHandler's handling of DS requests containing Unicode when using the "postMessage" data protocol.

##### ISCJavaCompiler.java

- Throw a more specific and helpful exception if we cannot find a Java compiler when processing a server-side script where language="java"

##### SQLOrderClause.java SQLServerDriver.java

- Fix a problem when using sqlPaging:"sqlLimit" with MS SQL Server and sorting by a valueMapped field

##### SQLTableClause.java

- Fix a bug in SQL generation where includeFrom fields and non-ANSI join style could lead to us generating invalid UPDATE and INSERT queries

##### SQLTransform.java

- Declaring SQLDataSource field type as text always converts value to string.
- Declaring DSField type as text forces conversion to String for decimal/numeric DB types.

##### SQLWhereClause.java

- Extend the RESTHandler wire format so that datetime values may be specified as JSON strings in three additional formats: "yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-dd kk:mm:ss", and "'$$DATE$$':yyyy-MM-dd'T'HH:mm:ss". Additionally, date values may be specified in "yyyy-MM-dd" format and time values may be specified in "HH:mm:ss" format.

##### SQLImport.java

- Change HSQLDB binary storage strategy to BLOB(1G)
- Change HSQL binary type from "binary" to "varbinary"

##### DataTools.java

- String ""false" were converted to Boolean.TRUE instead of "yes".

##### skin_styles.css

- Added the pickListCellDisabledDark and tallPickListCellDisabledDark styles to the Enterprise, EnterpriseBlue, Graphite, and Simplicity skins.

##### load_skin.js

- Set an explicit defaultTabHeight of 22px for TabSets in Enterprise, Graphite and EnterpriseBlue (applied to browsers that support css3 and those that don't). This resolves a difference in height of left/right oriented tabs in tabsets between browsers.

##### Miscellaneous

- Fixed SQL Server quoting of sequence type columns in where clauses.
- Fixed handling of decimalPrecision/decimalPad for fields with type derived from float.
- Fixed handling of decimalPad/decimalPrecision in user formulas for DetailViewer and ListGrid.
- Fixed the styling of `NavigationButtons' widgets.
- Fixed the bug that setting IconAlign.RIGHT on a button did not actually right-align the icon.
- Fixed bug where FormItem.getValue() could fail to return the specified value if a valueMap was present and the value was not part of that map.
- Fixed UnconvertableException thrown by not skipping certain javaAssist properties for Hibernate instrumented classes.
- Fixed FormulaBuilder handling of missing fields in a user formula so that they only prevent execution if they're actually used in the formula.
- Fixed "reviver" function for parsing strict JSON responses to handle datetimes properly.
- (Security Fix) Removed a CWE-434 vulnerability in `SCUploadSaveFileDataSource'.
- Null check added in DataExport to avoid NullPointerException.
- Fixed issue where RelativeDate is shown as simple Date in a DynamicForm.
- Fixed ability to use aggregation functions on included fields for SQL select clauses.
- Fixed problem in TextItem for IE where if you change value on focus in some cases caret would jump to the first position.
- Fixed issue in Firefox where if a top-level Layout is "holding up" the height of the page, resetting the handle height causes Firefox to effectively scroll the page to the top.
- Made sure to skip fields marked with ignore=true so that lazy-loading properties are not initialized.- Fixed problem where databound PickList was incorrectly assumed to always be a resultSet, when it could be a tree.
- Fixed issue where Calendar may be broken if custom timezone is set.
- Fixed issue where clicking a menu row caused a JS exception under certain conditions.
- Fixed issue where TileLayout tiles could get "deleted" when transferring them to a different FlowLayout.
- Fixed range check handling of "lessThan" criteria for fields not in a DataSource.
- Fixed display issues in RTL more for Canvas, Window, and DateChooser.
- Fixed a bug with the scroll position being reset in certain circumstances for a top-level Layout with overflow:"auto" as opposed to overflow:"visible".
- Fixed cases where our override of Selenium.prototype.getTable() in user-extensions.js doesn't properly drop back to the native version when appropriate.
- Fixed the bug in Opera that the edges table of a Window was leading to incorrect layout.
- Eliminated spurious error reports from Hibernate Sessions when running in standalone mode.
- For BmmlImporter, fixed the handling of the "Drop Markup", "Trim Space", and "Fill Space" options.
- Fixed handling of time-related fields in SC SQL Server code and FormItem.
- Fixed the issue that SC Feature Explorer was failing to load in Opera 12.11.
- Fixed a bug where in IE9, strict mode, we could end up with overlapping text in FormItems.
- Fixed a bug where multiple:true pickList items would always show the first entry as selected in screenReader mode.
- Fixed issue where when RibbonGroup is disabled, icons are not toggled to disabled appearance.
- Fix RPCManager issue where queueing of useStrictJSON: true requests was broken.
- Fix the issue that buttons were not being removed by MultiComboBoxItem.showValue() for layoutStyle other than "flow".
- Fixed a JS error in certain use cases when MultiComboBoxItem's optionDataSource is caching records (for example, a client-only data source).
- Fixed a case where error icons would be ignored by screenReaders despite having specified aria-label that made them actually useful.
- Fixed the error "Object doesn't support this action" that occurs in IE 8 and 9 when PortalRow.removePortlets() is called.
- Fixed a bug that a `multiple: true` FormItem could fail to escape HTML display values of the initial value array.
- Fixed issue where XLS exportClientData exports were not including header spans.
- Added missing return type to the public API for Canvas.clickMaskUp().
- Fixed value-retention issue between RelativeDateItem and its DateChooser.
- Fixed the issue that a re-shown PickList will remember where it was last when using arrow key navigation.
- Fixed bug where in recent versions of Moz Firefox offset-positioning calculations could be incorrect, affecting CanvasItems.
- Fixed issue where circular references were not detected within formula or summary fields.
- Fixed issue where a TimeItem could overflow its width when useTextField: true.

## Changes in 8.3

### New Features

##### General

- Numerous improvements to documentation (reference docs and Quick Start Guide), and examples.
- Major skinning enhancements. Three standard skins (Enterprise, EnterpriseBlue and Graphite) have been reworked to take advantage of CSS3 features in browsers where this is supported (typically requires HTML5 doctype), to reduce the amount of media required to render attractive UI components, while retaining support for image loading based approaches for browsers where these capabilities are not available
- New Balsamiq Importer tool for importing Balsamiq mockups using the Visual Builder (requires SmartClient Pro or better).
- New "Workflow" subsystem implemented (See Process class)
- Numerous fixes and enhancements to drawing
- Various improvements to the AutoTest class (used for Selenium integration)
- Extended documentation on Selenium integration with SmartClient in the user-guide
- Revised and expanded the i18n documentation
- Add JUnit + Selenium RC java example to SmartClient/SGWT documentation.
- Reworked processing of JSON format responses to avoid a native Memory Leak introduced by IE9 http://support.microsoft.com/kb/2572253. This includes adding support for strict JSON formatted responses, and making use of these by default in IE9 for iscServer-format dataSources.

##### Component-specific features

- Various enhancements and features around ListGrid ExpansionModes, particularly wrt finer grained support for customizing the ExpansionMode.EDITOR component
- Support for row-spanning cells and per-cell selection in ListGrid
- Support for nested header spans in ListGrid
- ListGrid: Support for auto-sizing header spans
- Added a new interface for specifying multiple levels of grouping, launchable from a listGrid
- New calendar-based Timeline component
- Numerous improvements to Charting subsystem and FacetChart class
- New FormItems for editing criteria - PresetCriteriaItem and PresetDateRangeItem
- New property FileItem/UploadItem.multiple, which allows automatic uploading of multiple files
- Many fixes and improvements to the FilterBuilder component
- CubeGrid: Added support for hideEmptyFacetValues + load on demand. Previously all data was required up from to use hideEmptyFacetValues, now we support single-axis load on demand in combination with hideEmptyFacetValues
- DateChooser - reworked to be a grid-based component with some additional functionality
- Support for FiscalCalendar added (and integrated with DateChooser) and support for working with fiscal year, week and start-date data at DateItem, DateChooser, Date instance and Date static levels

##### DataBinding and data management features

- Extensive Support for server side scripting directly in DataSource files
- Support for composite primary keys in DataSources (client-side and in the server-side SQL, JPA and Hibernate DataSource)
- Support for simpleType.getAtomicValue() / updateAtomicValue() and related methods for mapping complex javaScript object to simple atomic object types within an application, allowing standard application features such as sort, filter etc to work with complex data.
- Improved and extended support for componentField.dataPath for extracting field-level data from nested data objects
- New DataSourceField "encodeInResponse" flag for delivering binary data as a Base64 encoded string
- Much improved documentation and support around Date / Time / Datetime type fields
- Enhanced support for data export in PDF, Excel, CSV formats
- Built in support for progressive loading of SQL and Hibernate-dataSource backed components. In this mode users can request more rows by scrolling off the bottom of the currently visible rows, but cannot cause direct movement to some arbitrary position in the dataset (as is the case with ordinary, non-progressive loading).
- Added support for Informix as an officially supported database with SQLDataSource

### Bug fixes / Enhancements

##### ListGrid

- Fixed an issue where modal editing inside a window was not truly modal
- Fixed a bug where with frozen fields, and scrolled unfrozen fields in ListGrids, a header-menu-button click could cause the header menu to appear for the wrong column
- Improved performance with selection while working with large dataSets (typically in ListGrids)
- Resolved some strange edge case behavior with ListGrid sorting (failing to respect field sort direction in some cases, etc)
- Fixed a bug where ListGrid filter-editor autoSizing would fail
- Fixed an issue where tabbing off a form item icon could sometimes take focus to the wrong place on the page while in grid editing mode
- Support for modifying standard ListGrid grouping modes at a default/class level.
- Fixed a bug where rollOver / rollUnder canvas wasn't working in conjuction with frozen fields.
- Added support for changing listGrid.canReorderRecords attribute at runtime
- Fixed a bug where showing/hiding the filterEditor at runtime could cause incorrect appearance
- Fixed an issue where certain automatically generated fields (such as the "removeField") could show up in data exported from ListGrids
- Fix for a bug where filtering of a grouped listGrid could behave incorrectly
- Fixed a bug where checkbox fields could appear in the wrong position for grouped grids
- Support for ListGridField.ignoreKeyboardClicks attribute
- Fixed for a bug whereby with alwaysShowEditors:true, in some cases a single click would fail to put focus into the clicked edit-cell (browser-specific bug visible on Chrome/Safari)
- Fixed some bugs and improved consistency and documentation around how grid summary values are formatted (using specified field-level formatters by default)
- Improvements in logic for recording, and reapplying listGrid view state
- New API listGrid.getDefaultFormattedValue() to simplify conditional overriding of cell value
- Ensure listGrid field hilights show up automatically when fields' visibility changes
- Fixed a bug in CanvasItem where, if the canvasItem contained a ListGrid, users could tab to ListGrid headers even with canTabToHeader set to false
- Improved performance with auto sizing of ListGrid field widths in grids with large numbers of columns
- Fix for a bug whereby hilites in a ListGrid would fail to be reapplied after a setData() call
- Changes to support ListGrid.canSelectCells mode with frozen columns
- If sorterContextClick returns false, return false to cancel the native context menu as well as suppressing our normal column context menu.
- ListGrid: If autoFitWidth is true on a field that has width specified as a string ("*" for example), calculate what that would be as a numeric value, then use that as a minimum
- ListGrid: in setSort(), if we don't find a field for a specifier by name, also check for one by displayField, before ignoring the specifier
- Set ListGrid.arrowKeyAction to null by default
- Fixed some issues around tabbing within ListGrid editing
- ListGrid: If autoSaveEdits is false, don't force 'saveEdits' on field change.
- ListGrid: added wrapper methods for setFieldIcon and setFieldCellIcon
- Fix a bug where deselecting the last item in a selection-appearance "checkbox" grid would fail to deselect the header
- Fixed some issues with the 'freeze' context menu items / behavior with nested header spans
- ListGrid: Fix unwanted scrollback if mouse pointer is over ListGrid during keyboard-navigation-induced scroll
- Fixed a bug whereby ListGrid with autoFitData:"horizontal" could get into infinte resizing loops when nested in parent layouts and sized to "100%"
- Fix JS crash when editing in a ListGrid and moving from a text field to a SelectItem by mouse-clicking
- New ListGridField property sortByMappedValue
- Bugfix: modified 'getRawValue' to use 'getRawCellValue' even if record[fieldName] exists since we do other stuff here like handling non atomic simpleType conversions
- Tweaking ListGrid._canFocusInEditor() to fix an obvious breakage of 'editByCell' grid where tab would move vertically rather than horizontally.
- Bugfix: mouse-initiated selections in TreeGrid, ListGrid, possibly CubeGrid weren't firing selectionUpdated()
- Call 'getFormattedValue()' rather than 'getStandaloneFieldValue()' when getting a field value for a formula
- Re-position embedded components when we showed or hid scrollbars in RTL mode
- Support for listGridField.headerTitle; deprecated listGridField.summaryTitle.
- ListGrid: Some fixes around RemoveFields, autoFit, and grouping
- Speed up the process used to look at a record's edit values when we check for it being marked as removed. Seems to resolve script running slowly dialogs in IE8 scrolling around large grids
- Fix for a bug where a ListGrid with selectionType:"single" could end up with two selected records
- ListGrid: Fix issues with interactions between expanded records and filtering the dataset
- Support for persisting formula fields
- Document parameters rowNum and colNum for ListGrid.getCellHoverComponent()
- ListGrid - prevented an infinite loop in mouseUp which could be hit while editing a grid with editMode "click", if you double-clicked
- Fixed bug where we wouldn't respect autoFitMaxWidth when autoFitData was set to horizontal or both and headers were showing
- Add large new doc on best ways to handle editing of unsaved records in grids (recurring question area)
- Resolve a bug where if you set ListGrid.alwaysShowEditors:true on a grid and click on a text box on a new edit row you have to click twice to put focus into the text box.
- Fixed a bug where after autoFitData expands a grid to fit its content it would then end up with body width de-synched from grid width on subsequent resizes
- Fixed issue in ListGrid where keyboard click (space keypress) wasn't selecting/deselecting checkbox selection field
- Improvements to ListGrid.destroy() to solve problem where methods were firing on destroyed grids
- Fixed problem in ListGrid where field set as autoFitExpandField won't resize smaller if entire grid is resized smaller
- ListGrid - Fixed issue where highlights applied to hidden field are not present when the field is shown
- Fixed ListGrid.dataArrived(startRow, endRow) to report endRow correctly; was off by one in several cases
- Add header span titles in the Highlight Editor for a ListGrid if they're present in the grid
- Fixed problem whereby grouping wasn't reset after removing a record from a databound ListGrid
- ListGrid - improved handling of Embedded Components
- Fixed issue where ListGrid headers/fields don't resize properly if frozen field present with explicit width
- ListGrid - fixed case whereby we could end up with the frozen body being rendered at a too-large width when autoFitting to data
- ListGrid - fixed standard grid summary formatters not beig applied to display value if custom getGridSummaryData() was provided
- ListGrid - fixed problem where auto-clean up of expansion components was not working when a record got dropped
- ListGrid - unobfuscated popUpTextAreaEditorTypes by customer request
- GridRenderer - suppressed cellHover if the timer fires for a null record
- Solved ListGrid issue - when using setOptionDataSource together with setAutoFetchData, any edited values disappear when editing another column in the same row
- ListGrid - explicitly exposed "record" as being available in formula text
- ListGrid - disallowed editing of userFormula / userSummary fields by default
- Added a hilitesChanged() event to fire when a user specifically modifies the highlights of a ListGrid with the Hilight Editor
- Added new API ListGrid.getRecordComponent(rowNum, colNum)
- DataBoundComponent - added fix for formula fields not being hilited properly
- ListGrid - fix to stop ignoring listGridField.groupingModes if field.getGroupValue() is defined
- Eliminated data corruption when editing a complex record (ie, one with nested objects) in a ListGrid described by dataPaths
- ListGrid - fixed hoverMode: "details" behavior so that it shows a detailViewer as doc'd with the fields not already shown in the ListGrid
- ListGrid - fixed how properties childExpansionMode and expansionCanEdit are propagated to child expansion components
- Fixed ListGrid.hoverMode: "detailField" by applying appropriate style and overflow
- Fixed bug where if displayField is set on field of a ListGrid with a FilterEditor, any explicit valueMap and filterEditorValueMap for the FilterEditor are therefore seemingly ignored
- For hoverMode: "related" fix ListGrid shown when no related records are present; grid's GridBody is squished; apply overflow: visible to fix it
- Added new doc'd API ListGrid.setHeaderSpanHeaderTitle()
- Fixed problem where the checkbox field header of a ListGrid can show a checkbox even when the selectionType is 'single'
- Made ListGrid.getSpecifiedFieldWidth() return something meaningful for hidden fields
- Fixed the issue that data export of a ListGrid with header spans may include `null's in the RPCManager request
- Fixed a bug that a ListGrid with `filterOnKeypress: true` and with a ComboBoxItem as the filterEditor of a field, did not update the text of the ComboBoxItem to the complete display value when an item is selected in the pick list
- Fixed problem where an empty/loading ListGrid is not detected and column auto-fit is improperly run anyway
- Fixed issue where, when a field header buttons of a ListGrid with autoFitData: true is manually drag-resized wider, the other columns shrink rather than the ListGrid growing wider
- Fixed issue where if ListGrid is explicitly disabled at launch but set to show the Filtereditor, FilterEditor will be hidden if grid is shown
- Fixed bug where, If a ListGrid contains a ListGridField which renders RecordComponents, the CellEditValueFormatter of all other ListGridFields is no longer invoked
- Fixed issue with ListGrid where autofit field widths are not being recalculated when fields are shown/hidden
- ListGrid - fixed a bug where setting autoFitData:"vertical" could cause RecordComponents to fail to be rendered for some rows
- ListGrid filtering: fixed an issue where if scrolling horizontally in a FilterEditor with incrementally rendered fields, advanced criteria (from expressions) could be dropped / misinterpreted as simple string values
- Added support for extracting groupingMode and other advanced grouping properties as part of listGrid getGroupState / getViewState()
- Fix for an error where listGrid.getRecordComponent() could cause a JS error if called with no colNum

##### TreeGrid, ColumnTree

- Fixed a bug where columnTrees would end up with orphaned content on filter
- Fix for a bug drag-reorder of unloaded folders within a tree would erroneously mark the folder as loaded with no children
- TreeGrid: Created a new public method 'isOverOpenArea'
- Fix: Tree.find() doesn't work if the delimiter is more than one character
- TreeGrid: don't clobber displayField specified on the 'treeField' with our 'getCellValue()' treeField override
- TreeGrid: new public method 'isOverExtraIcon' - returns true if the user is currently over the "extraIcon"
- Add new property TreeGrid.createDefaultTreeField to allow *all* of a TreeGrid's fields to be derived from DataSource, without automatically adding a separate "tree field"
- TreeGrid - some changes to make ResultTree filtering work better, by avoiding rebuilding the tree and performing a new fetch unnecessarily if the FilterEditor is shown
- Fixed a case where a dataBound TreeGrid could end up repeatedly fetching from server in endless loop with certain configurations
- TreeGrid - fixed problem where if FilterEditor is present with expansion components, upon filter components would be destroyed but expanded markers persisted
- ResultTree - fixed a bug where we were issuing double fetch requests on invalidate cache
- Fixed the issue that the initial draw of a TreeGrid with sortFoldersBeforeLeaves:true would not show the folders before the leaves

##### CubeGrid

- Fix for a CubeGrid problem where expand/collapse could fail for certain arrangements of facets.
- CubeGrid: fixed a bug where CubeGrid.exportClientData would crash if not passed a dsRequest properties block
- CubeGrid: with rowHeaderGridMode:true, observe selectionChanged() on the facet grids so we still select by row
- Update CubeGrid docs to reference the wiki articles on OLAP4j integration
- CubeGrid - specified a height on edit items so they don't cause rows to expand
- Prevented crash that blocks opening of minimized non-tree facets in a CubeGrid

##### Calendar

- Calendar: fixed a field-rendering crash when moving nextOrPrev in TimelineView
- Calendar: Fixed a bug where the monthView didn't show the first row of days for June 2012
- Calendar: Added an implementation of setRowHeight() that calls setCellHeight() and refreshEvents() on the child views (except monthView)
- Calendar: Changed timeline events to be dragAppearance:"none" and to use a separate dragTarget
- Added external notification method Calendar.eventsRendered(), which fires when refreshEvents() completes for a given view
- Fixed errors while saving a new Calendar event, and corrected validation that from <= to dates/times in the edited event
- Calendar - added new APIs getVisibleStart/EndDate() and getPeriodStart/EndDate()
- Fixed problem where Date.getWeek() could report an invalid result due to rounding errors
- Calendar - fixed a bug where hiding the weekView, creating a new event, and then trying to edit it later would cause a JS error
- Fixed rendering issue with overlapping events with a total length shorter than the Calendar.eventSnapGap
- Optimized overlapping-event rendering in the Calendar widget
- Fixed problem where JS crash occurs while trying to add new event to Calendar if event is edited immediately after creation

##### DynamicForms

- Fixed a bug where formItem.cleared() was not firing reliably in all cases.
- Fixed a bug where FormItem change handler was not being fired when both characterCasing and changeOnKeypress were set.
- Fixed a bug where emptyDisplayValue could end up being stored as actual data value for form items in some cases
- Fixed a bug where users could not tab to FormItemIcons in some browsers
- Solved some issues around TextItem masking behavior
- Improved support for non-editable textItems via the canEdit property
- Resolved an issue where bad values entered into a dateItem would display as a row of NaN values
- Fixed some bugs when attempting to work with 3-digit year dates (such as 650 AD)
- Fixed a case where items with shouldSaveValue:false would still have their values available as part of valuesManager.getValues() return value
- Fixed an IE9-specific bug where FormItem.setSelectionRange() could fail in some cases
- Support for FormItem editorEnter and editorExit
- Support for formItem icon showIf / dynamic show/hide of formItem icons.
- Fixed a bug where focus could get "lost" when dismissing ComboBoxItem pickLists in some cases
- Fixed some cases where CanvasItems could fail to be repositioned correctly when the containing form resized.
- Better support for LinkItem behavior (both readonly and editable modes)
- Added support for BCE dates
- Fixed a case where we could incorrectly show blue "pending" style for ComboBoxItems with addUnknownValue set to false
- Fix for an issue wehre clearing a SelectItem or ComboBox while the pickList is showing could cause a javascript error
- Fixed an issue where redraw of FormItems would cause refocus
- Fixed an issue where explicit formItem.valueMap was being ignored if specified in conjunction with optionDataSource and displayField
- New method to update selectItem optionDataSource at runtime (setOptionDataSource())
- Added support for formItem.saveOnEnter attribute on other item types than just TextItem
- Fixed a case where REST dataSources could fail to respect specified sqlStorageStrategy
- Fixed an issue where PickTreeItem.getSelectedRecord() was unreliable
- Fixed a bug where right click of pickList header from ComboBoxItem would dismiss the pickList rather than showing a context menu for the header
- Fixes around editing of custom CanvasItems
- TimeItem -- if the user hits Enter perform an update
- If 'getValue()' is called on a destroyed item, no-op
- Support for "space" triggering iconClick on a FormItem
- Turned saveOnEnter on for SelectItem and ComboBoxItem
- Added new FormItem class MultiComboBoxItem: a combo box that allows multiple selection
- Bugfix: When we get a DynamicForm-level click or doubleClick event, only fire the item level event if the event occured over the item that got a mouseDown
- don't show and hide the "calculated date" blurb item dynamically because it causes flickering of the UI when entering a date manually
- Fixed a display issue that DateItem.pickerIconHeight was set to the wrong pixel height in Enterprise, EnterpriseBlue, Graphite, Mobile, and Simplicity
- Fixed some problems with tab order and canvasItems / nested forms
- ComboBoxItem: support 'allowEmptyValue' property, so if 'addUnknownValues' is false the user can clear the text box and actually clear the form item value
- Bugfix: When form containing ComboBox is scrolled with PickList open, PickList doesn't move with underlying form
- Fix: when determining if we can focus in the edit item for a field, build the edit form if we never have done so rather than trying to work it out without a form to refer to
- Fixed issue: In a ComboBoxItem, if you pick a value from the drop down and the item is bound to an OptionDataSource with a display field, we'd put the display field value rather than the data value into generated criteria
- Fix for an issue reported in the forums, where DateRangeDialog can show a horizontal scrollbar
- Bugfix: returning false from a change handler was failing to properly cancel selection in PickTreeItem
- Publicly document CanvasItem property 'autoDestroy'
- FormItem.getCanEdit() was returning the inverse of what it should
- Modified canFocusInEditor to assume CanvasItem editors are focusable
- Tweaked various hover-related properties for FormItems (fixed align, which was using valign, and added support for valign, delay, showHover and wrap)
- Show the "hand" cursor over icons explicitly if they're enabled (previously we relied on the <a ...> tag to achieve this)
- Use IButtons rather than buttons in Forms in css3 mode as well as in non css3 mode so we get rounded corners in all cases for Enterprise/EnterpriseBlue/Graphite
- Added support for `multiple: true` FormItems having arrays as values
- Added new property FormItem.editPendingCSSText
- CanvasItem: Fix for bug resulting from complex sizing interaction that caused ButtonItems to render at 1px wide
- DateItem: fixed bug where padding between sub items wasn't present if the order wasn't MDY
- Fixed ValuesManager._setMemberValues() to notify member forms that values have changed
- DateRangeItem: Pipe the standard top-right close-click icon click through to 'cancel' click
- Pick up button width from the pickTreeItem specified item width by default
- Automatic validation of DateRangeItems' sub-components
- Various small dataPath-related fixes in ValuesManager, DataBoundComponent and DynamicForm
- Various fixes to MultiComboBoxItem and "multiple: true" FormItems generally
- Fixed a bug where formItems with setTitleColSpan set and width: "*" didn't render properly to the size of the containing cell(s)
- Fixed a bug, visible in IE, whereby validateOnChange would interfere with the cursor position
- Added support for 'setValueTree()' which updates the valueTree of a pickTreeItem
- Fixed behavior of TextAreaItem if implicitSave is set and editPendingCSSText present
- Improve how focus is moved around items in a DynamicForm when the clickMask is up to avoid skipping items in embedded CanvasItem subform
- Added explicit color for ComboBoxItem secondary style
- Add validation for DateRangeItem to enforce that the To date being greater than the From date
- SelectItem/FormItem - fixed bug whereby showHintInField could cause a real value to show up with hint styling
- Fixed problem affecting TextItem focus in IE browser where caret disappears
- Fixed SelectItem issues - empty value not reliably present, default value disappears when PickList empty value selected, multiple empty values crated in PickList when cascading filtering used
- Fixed a problem with databound FormItem where specified emptyDisplayValue is not passed through to associated PickList
- Exposed the fact that CheckboxIcon checkedImage et al are part of the ValuesIcon subsystem
- Fixed issue where ViewFileItems don't show the file to download
- PickList - fixed issue where a Menu's GridBody doesn't collapse down to the specified size after the user rolls over a menu item whose style causes it to temporarily resize the GridBody larger
- Fixed manual editing of RelativeDateItems on WebKit (Safari, Chrome, etc.) browsers
- Fixed the issue that with showHintInField:true, after exiting a ComboBoxItem without picking a value, the in-field hint disappears
- TextItem - fixed problem where a custom formatter (possibly with complex data types) that represents an empty value wouldn't show the hint in the field initially
- Fixed bug that MultiComboBoxItem could encounter a JS crash due to a null record while trying to update its display field values
- Fixed problem where, in Mozilla, UploadItem isn't displayed properly if height and font-size are both specified, by supressing the text box height
- FormItem - fixed problem where if we're writing out a disabled event mask for an item but we don't know the width of the item, we were writing out meaningless styling HTML which could effect appearance
- Fixed a bug that if the user cuts from, or pastes into, a TextItem with a mask, the mask is not applied
- SelectItem - Allowed "moveToChar" to "navigate" to the only entry in a single-entry list
- Fixed issue with ColorPicker where clicking on the black square prevents you from being able to subsequently select a color from the "swatch" UI subcomponent
- Fixed for an issue where initially undrawn CanvasItems could fail to have the form react to the required size-change properly
- Added doc'd property maxHeight for AutoFitTextAreas
- Exposed doc'd API: FormItem.redrawOnChange()
- Fixed issue where if two SelectItems had a dependency, and one was sorted, trying to the sort the other was having no effect.
- SelectItem - fixed issue that caused a sortField of 0 to be ignored
- PickTreeItem - fixed bugs where a PickTreeItem did not update its display after having its value set, PickTreeItem.setEmptyDisplayValue() was not working propertly, and PickTreeItem.setOptionOperationId() was not being respected
- Solved issue whereby descendents of a CanvasItem's canvas could lead to warnings about incorrect tab indices (exceeding the ceiling for user-specified tab indices)
- Documented new disabled style for showHintInField:true TextItems
- Fixed a Mac/Chrome-specific bug where in some cases a redraw of a LinkItem could lead to a "NOT_FOUND_ERR: DOM Exception 8" error message.

##### Printing

- Fix for a case where the print preview could fail to size correctly with a strict doctype specified
- Support a flag to explicitly print children of a component absolutely positioned within their parent
- Fixed a bug where ListGrid summary rows would fail to print.
- Fixed bug: getPrintFooters() can cause "undefined" to be appended if there's no data in the grid

##### Drawing

- Fixed an issue where DrawKnobs could fail to be drawn when draw() was actually called.
- Fixed a bug where drawGroups could cause errors if each item in the group did not have drawItem/drawGroup explicitly specified
- Fixed Pan and Drag for DrawPanes
- Fixed a case where arrowheads wouldn't show up on draw lines
- Fixed some drawItem rendering problems in IE
- Various rounded rect corrections/improvements
- drawSector.centerInPoint was incorrect when drawing multiple sectors
- Improved printing support for drawPanes/drawItems
- Drawing - support for new Gauge drawItem
- Fixed a bug where "masking" of drawItems with the clickMask would have no effect. Now events are suppressed on drawItems if the drawPane they're embedded in is masked.
- Drawing: add support for relative image-paths for DrawItem (via [SKIN] etc)
- Changes to DrawImage to avoid wrapped-native crashes in Firefox due to images not yet being loaded by the browser - essentially, delay even initial draw until image.onload fires
- Support for contextMenu and showContextMenu events on DrawItems
- Drawing.js: Fixed drawOval.centerPoint and drawOval.radius docs - they were documented as read-only but there are setters
- Drawing fix - prevent the TypeErrors caused by attempting to create linear or radial gradients before the SVG document has loaded
- Drawing fix - Correct some attribute names of generated SVG <text> elements
- Support DrawLabel.lineColor and fix DrawLabel rotation when drawingType is "svg"
- For DrawSector/SVG, improve drawing of large sector angles of more than 180 degrees
- Fixed issue with DrawSector not zooming correctly in IE/VML
- Introduce methods DrawPane.getSvgString() and DrawItem.getSvgString() which generate equivalent SVG source
- Added fix for NaNpx being returned by DrawPane.getSvgString() in IE8 during pdf generation
- Added DrawPolygon class extending DrawPath
- Fixed no arrowhead support in DrawPath
- Added arrowheads "open" and "block" to DrawLine and DrawCurve
- Added statistics functionality to FacetChart - mean/median of data, linear/polynomial regression, etc.
- Added support and docs for multiple value axes in FacetChart, including properties to control their spacing and number
- When printing VML-rendered draw panes, enclose in a relative positioned div so they flow in the print frame properly
- Added doc'd public APIs: DrawItem.moved() and DrawItem.resized()

##### Charting / FacetCharts

- FacetChart: documented all skinning-related property blocks
- New FacetChart APIs: getChartTop/Left/Height/Width(), getXCoord(), getYCoord(), chartDrawn(), chartBackgroundDrawn(), getGradations(), getChartCenter(), getChartRadius(),
- For FacetCharts, fixed invalid gradient IDs that were preventing Inkscape from drawing the SVG correctly
- Fixed issues with the Pie & Doughnut chart radial gradients when drawingType is "svg"
- Fixed charts when using a nontransitional DOCTYPE, drawingType:"vml"
- Fixed DrawPane SVG filter required by line charts to replicate the drop shadow on data lines that is drawn when drawingType is "bitmap"
- For FacetCharts, fix the radial gradient centers on Radar Charts
- In FacetCharts, fixed a display issue with rotated text in VML
- Fixed DrawSector rendering, drawingType: "vml" visible in IE displaying a Pie chart
- FacetChart - Add support for fractional coordinates in VML and bitmap drawing mode - This avoids having to round data points to the extent where they might all end up being rendered in the same spot
- FacetChart - fixed a bug that value axis gradation labels overlap and become unreadable in cases of large, negative values
- Added FacetChart.getNearestDrawnValue() API and docs
- FacetChart - showValueOnHover doc and API added
- Fixed the bug that "multiple copies" of a FacetChart may be drawn when the chart is embedded within a Portlet
- Fixed the bug that a FacetChart embedded within a Portlet which was maximized, then restored will be blanked
- FacetChart - added property and docs for showDataValues
- FacetChart - Support for Scatter chartType
- FacetChart - Added properties MetricSettings.valueTitle, showValueAxisLabel, and valueAxisLabelProperties
- FacetChart - added support for drawing vertical axis lines for extra value axes that are not adjacent to the chart rect
- Added new FacetChart/MetricSettings APIs: formatAxisValue() to format gradation labels and formatDataValue() to format values displayed in hover labels and via showDataValues
- Added doc'd APIs: MetricSettings.showDataValues and MetricSettings.showValueOnHover
- Fixed IE specific FacetChart bugs - most importantly that if there were multiple FacetCharts drawn on page load (but not in some callback) then, in IE, only the last FacetChart drawn would show data

##### DataBinding

- Fixed an issue where hidden search operators would not be respected for DataSources
- Fixed an issue where exportClientData() would fail to fire its callback
- Fixed issues around data types potentially getting confused by specified editor types.
- Fixed a problem where, with a form with a binary field, saving two new records in a row would result in nulls being submitted for fields that had not been edited, potentially leading to spurious validation errors.
- Fixed a bug where ValuesManager didn't correctly process server-side errors for dataFormat:"json"
- Fixed a bug where various DataSource field attributes (such as 'required', 'foreignKey', 'primaryKey') would be inherited on fields included from another dataSource via the includeFrom flag
- Ensure that we respect the appropriate property to mark a field as editable or not (typically canEdit vs canFilter). Updated documentation around how this should behave
- New dataSource.applyFilter() and resultSet.applyFilter() API
- Fixed an issue where willFetchData() could return false in cases where a fetchData(...) call would actually initialize a fetch
- New DataSource recordsAsText API for outputting data as a configurable text string (and recordsFromText for roundtripping back to record objects).
- Added support for new attributes DataSourceField.nestedFields, DataSourceField.nestedTitleField
- Fixed grouping on hidden fields (and those that appear only in the DS)
- Explicitly add a null replacement value for the case where we have a DS field that cannot be assigned inline and we have been provided with an explicit null value for that field
- Added support for RestDataSource.xmlNamespaces as a set of namespace prefixes that will be added to the document element when creating postMessage/postXML POSTs
- Reworked the meaning of the DataSource.allowAdvancedCriteria property and changed docs accordingly
- Formula support for export to Excel
- Added a callback argument to the Tree.loadChildren method
- Added new property DataSource.sendParentNode
- Fix: if user code attempts a dataSource.fetchData() that specifies downloadResult:true, that should imply hiddenFrame, ignoreTimeout:true and showPrompt:false
- Fixed issue where TreeGrid & DynamicForm share a DataSource but nulling out one of the DynamicForm fields doesn't remove that field from the TreeGrid row
- Fixed a problem loading component XML that specifies a DataSource by reference (ie, with a loadID tag rather than an ID tag)
- New ResultSet APIs: getAllCachedRows(), getAllVisibleRows(), usingFilteredData()
- Added new ResultSet API, getLoadingMarker()
- Added decimalPrecision and decimalPad properties to DataSourceField, ListGridField, DetailViewerField and FormItem
- Fixed a bug where a call to someDS.setOperatorTypes(typeName, []) would cause all subsequent calls to someDS.getFieldOperators(someOtherTypeName) to return no types
- Added a null check in applyHilites() - when we have a ResultSet, setData() can be called before fields have been created
- When building the whereClause for an inSet operator, work on a copy of the values list rather than the actual list passed in, to avoid reaching into the actual criteria object and modifying values
- Add new doc'd API: DataSource/DSRequest.useStrictJSON for true strict JSON formatted responses.
- Workaround IE9 memory leaks on eval() [http://support.microsoft.com/kb/2572253] when evaluating dataSource responses. Implemented 2 workarounds: Firstly - added support for using native JSON.parse() to parse strict-JSON formatted responses - and turn this on by default for iscServer dataSources in IE9. Secondly - added support for using hidden IFrames to evaluate responses that don't conform to strict JSON. This can be enabled by setting RPCManager.allowIE9Leak to false, but can not be used with certain data types, including Dates.
- Fixed handling of RestDataSource.jsonPrefix
- DataSource doc update - warn about the hazards of ignoring the recommendation to store the binary field metadata values
- Fixed problem in JSON DataSource response handling if not in SCServer mode
- For DataSourceField, declare field.prompt so it works with <fmt:message%gt; tags for i18n
- Added new DataSource properties and docs - DataSourceField.initRequiresAuthentication and DataSourceField.updateRequiresAuthentication
- Fixed type of DataSourceField.escapeHTML (should be boolean)
- Added new API and doc for DSRequest.getMissingPrimaryKeysForAdd() dealing with non-sequence primary keys
- Fixed crash in DataBoundComponent.getRecordHiliteCSSText() when records are grouped or when the DBC is a single record display component
- Introduced new DSRequest flag "pendingAdd", which is set on "validate" DSRequests when we are adding a record rather than updating one.
- New option "string" for DataSourceField.sqlStorageStrategy allowing arbitrary string values to map to boolean true and false.
- DataSource - fixed issue with imageWidth/imageHeight in the ds.xml being interpreted as strings
- DataSource - fixed bug where if we have a field with an includeFrom specification, then it's possible we would alias the field twice in the generated SQL
- RestDataSource - fixed bug where if error is encountered, we repeatedly make unneeded fetches
- DataSource - enhance auto-discovered native foreign keys so that they work server-side with the includeFrom system
- RestDataSource - fixed error where object returned from server was discarded incorrectly, resulting in another fetch
- RestDataSource - fixed parsing REST request - always check for request content type
- Added support for ANSI-style JOIN directives in SQLDataSource
- Added new API/docs AdvancedCriteria.getFieldCriterions()
- DataSource - changed the way numeric values are handled in WHERE clause - if we're looking for greater/less/equals, leave the comparison value unquoted; if we're looking substring-style matching, quote it
- DataSource - added doc sample of includeFrom syntax
- Fixed issue where we get a JS crash when exporting fields from a dataBoundComponent that has no dataSource if date fields are present
- Enabled the built-in DataSource and Component XML internationalization system for DS-defined valueMap values
- DataSource - implemented and documented new AdvancedCriteria operators client-side, and in SQL, Hibernate and JPA DataSources server-side: iEqualsField, iNotEqualField, iContainsField, iStartsWithField, iEndsWithField, notContainsField, notStartsWithField, notEndsWithField, iNotContainsField, iNotStartsWithField and iNotEndsWithField
- DataSource - added support for the following operators to the server-side SQL DataSource (was already present in client code and in the Hibernate and JPA DataSources): greaterThanField, lessThanField, greaterOrEqualFIeld, lessOrEqualField
- DataSource - Fixed null pointer exception in RPCManager.onFailure()
- DataSource - explicit support for dsRequest.outputs (may be set on the client or server)
- Added doc'd property DataSourceField.mimeType that specifies the mime-type of all files stored in this field - used in preference to auto-detection by file-name and in the absence of a *_filename metadata field
- DataBoundComponent - added logic to avoid calling 'field.getDataPath()' blindly in validateField() - that method isn't defined for all DBC fields so caused JS errors in grid editing
- Added a 'DataSource.getCacheData()' accessor since when we auto-cache all records we don't update DataSource.cacheData
- Separated JPA DataSource generation JPA1 from JPA2
- Fixed an issue whereby if 'DataBoundComponent.setFieldState()' is called, and the grid includes a hidden field that isn't listed in the new state, the hidden field is shown
- DataSource: Fixed a logic bug in the streamFile method if called with no a primary key value rather than full record keys

##### RPCManager

- Add new API RPCManager.requestsArePending()
- Fixed a potential memory leak for RPCRequests using HiddenFrame transport
- Documented rpcResponse.httpResponseText
- Officially documented rpcRequest.useHttpProxy
- RPCManager response handling fix - If we can't eval JSON while handling RPC response, treat it as text
- RPCManager support for canceling transactions
- RPCManager - don't warn about queued requests with params coming from multiple requests if the params are actually the transactionNum we're hanging on the request ourselves
- New RPCManager.loadScreen() API for loading SmartClient UI stored on the server in component-xml format.

##### Server Features

- Fixed possible null pointer exception in DataExport when called with a null output stream
- Fixed a case where pdf export would fail to pick up skinning information
- Fixed an issue where using Velocity templating to determine a list of recipients for an email message would fail to handle comma separated values correctly
- Fixed some edge cases in support for AdvancedCriteria on the server
- Server side support for DataSourceField.valueMapEnum
- When default dataSource operation criteria are applied via a velocity expression, handle combining (on the server) with the criteria passed from the client whether they are simple or advanced
- Fix for a Null Pointer exception that could occur attempting to save a binary field with no binary attachment
- Added support for rpcResponse.httpHeaders attribute
- Improvements to SQLDataSource inheritance behavior including configurable inheritanceMode
- Fix for a bug where the dataSourceLoader servlet could fail to process jsp localization tags in datasource definitions
- New API DataSource.loadWithParents() to load dataSource plus any dataSources from which the specified DS inherit at runtime
- Simplified and enhanced dataSource localization, including new documentation on how to localize dataSources.
- Fixed an issue where server side SQL dataSource import would inappropriately create columns derived from another table (IE with an explicit "tableName" attribute)
- Various improvements to the JMS messaging system
- Fixed a case where DataSource.autoDeriveSchema could fail to correctly derive schema for tables containing binary fields
- New public API setExportTo() on DSRequest and DSResponse (server-side)
- Give RESTHandler servlet the same encoding behavior as IDACall and DataSourceLoader (force UTF-8 by default, but allow a servlet init-param to override), and document it
- Implement and document new "mail" properties "contentType" and "encoding"
- Allow authenticated users to access operations that require roles but do not require authentication.
- Check dsRequest.allowMultiUpdate before rejecting a request with missing PKs
- Added support for outer joins when resolving includeFrom fields in SQLDataSource
- Add new ServletContextListener InitListener, and rework to use this as well as the Init servlet. New doc article on initializing the framework with special reference to interactions with Spring
- Provided a mechanism to obtain a Spring-configured Quartz Scheduler instance
- Avoid using request.getParameter() immediately before parsing the HTTP request during file uploads - reportedly causes problems with Glassfish
- Added a large new overview doc about binary fields and downloads
- A number of enhancements to server-side type-caching and related performance enhancements
- Enhanced support for binary data types server-side: binary features work in SQL and Hibernate when the data model is beans, JPA now has equivalent binary support with SQL and HB, all built-in DataSources can now work with byte[] and Byte[] as well as InputStreams
- Reworked server-side file upload handling to make all the streams available to user DMI code when multiple files are uploaded for a single field
- ExcelDataExport: Fixed bug where formula fields were exported into the wrong rows
- ExcelDataExport: Added cell formula Excel evaluation/validation; if formula fails to pass it is removed and regular cell value is set
- Enhanced docs for DataSource.schema, providing a great deal more detail about the meaning of "schema" and "default schema" for each supported database product
- New server-side APIs dsResponse.getExportObject() and dsResponse.setExportObject(Object)
- Change: the server currently rejects a request for an OperationBinding that appears to be a no-op; changed this to allow the op through, but log a warning
- Refactored transaction and resources handling in JPA data source: delegated freeResources() execution to DSRequest/RPCManager
- Fixed a bug where when downloading a file, the filename would need to be at the end of the URL or the server would not automatically provide the right content-type
- New feature - auto-Audited DataSources
- Move the default "modulesDir" used by <loadISC> and <loadModules> out into a properties file property
- Added server-side convenience method DataSource.recordsAreEqual()
- batchDSGenerator: make sure Hibernate is present before attempting to use it, otherwise just ignore it
- Server-side DSRequest: auto-create "values" for both add and update
- Server-side DSResponse: Added setFailure(String message) helper and added more docs around what errors mean
- Added new property dsRequest.exportHeaderLess. This property omits column names from CSV and Excel exports
- Modify HibernateDataSource to tolerate Spring using either Hibernate 3 or Hibernate 4
- JPADataSource and HibernateDataSource: when allowMultiUpdate is set, allow update and remove to affect multiple records
- New feature: Server Scripting
- Added a scripting engine implementation for the Java language that works correctly in a servlet environment
- Added missing support for declarative configuration of transactions at the provider level for JPA
- Reworked the way the ORDER BY clause is derived for SQLServer in limitQuery mode - prevents invalid CASE statement from being generated
- Stop isUnique validator from failing when attached to a DataSource primary key field
- Server-side DataSource fixes - fixed logic controlling when content-length header is added, and ensure consistent treatment of fields with DataSourceField.ignore set
- Fixed PDF export of DrawPanes with borders - the borders were always being cut off on the right and bottom
- Fixed PDF export of Pie and Doughnut charts in IE, drawingType: "vml"
- Feature - export headerSpans to Excel and CSV formats
- Improvements and expansion to JPA / Hibernate dataSource handling of relation fields (including updated documentation)
- DataSource - make exportClientData() capable of going through DMI
- Server PDF Export - added support to use an extra style sheet
- Button/Canvas - fixed bug where setting label.setWrap(false) was ignored by the pdf export
- Enhanced the auto-discover native foreignKeys feature so that now all databases are supported - MYSQL, HBQLDB, Oracle, SQL Server, Postgres, DB2, Firebird and Informix
- Velocity - changed ReferenceInsertionEventHandler to handle VTL formal notation
- Added support for multiple replyTo addresses in MailMessage, and updated docs to indicate all valid SMTP settings are passed on to Javamail
- Added fix for JPA and HB DataSources - always use exact matching in criteria for relation fields, ignore textMatchStyle
- Removed connection leakage when several JPA operations with different entity managers are executed during one request
- Added new DataSource and OperationBinding flag, "sqlUsePagingHint", to improve performance
- Set context RPCManager on the sub-requests we use to implement includeFrom on non-SQL DataSources
- Fixed logic for HibernateDataSources - create a primary key only when it's needed to avoid ClassCastException
- Fixed the bug that when a hidden field is exported via DataBoundComponent.exportData(), its column heading was just the field name
- Fixed the bug that the Excel file resulting from DataBoundComponent.exportData() had no column headings
- Fixed the bug that the result of DataSource.exportData() ignored `exportFields'
- For Hibernate, if Javassist is used, prevented invalid introspection in JSTranslator of handler JavassistLazyInitializer
- Added check to deal with problem where Hibernate returns Map object that incorrectly throws an Exception if you call keySet() on it
- JSTranslator: Escape tab characters to when escaping strings for strict JSON mode
- JSTranslator - made fix to extract real class from Hibernate proxy instead of skipping methods

##### Other UI components

- Fixed a problem where the FilterBuilder would show two DateRange controls rather than two Date controls for "between" operations on date fields.
- Numerous stability fixes and enhancements for FilterBuilders
- Improved support for formula builder user interactions (clicking on items to select fields, etc)
- Fixed a visual issue where MenuItems could appear to "bounce" (grow and shrink in size) as you roll over them in some browsers/skins.
- Support for setIcon() / setLargeIcon() APIs for toolstrip IconButtons
- Fixed an issue where vertical-alignment of toolstrip iconButtons was incorrect
- Fixed a bug where menuIconClick within a ToolStrip menu icon could cause the standard click handler to fire
- Reworked toolStripButtons in css3 mode to correct various visual problems
- Added support for hilite editors choosing icons for hilight rules
- Support for icons in SectionStack section headers
- Improvements around rendering of overlapping events in Calendar
- Add attribute PortalLayout.portletDropTypes, which acts like dropTypes except that it is propagated to the rowLayout and the rows. This lets the developer easily control what things can be dropped on the PortalLayout
- Reworked the DateChooser class to be Grid based and use standard SmartClient event handling (rather than embedded links/onclick events)
- Fixed a bug in TileLayout where addTile() would not insert the tile at position 0
- Add support for rendering fields of type "link" as actual links in DetailViewer
- FilterBuilder: new boolean flag "sortFields" tells the FB to sort the "field" drop down by name
- Fixed a bug where canEdit:false fields can't be edited in a filterBuilder
- Toolbar: Fixed a bug where getMouseOverButton index was wrong if the buttons didn't take up the full width of the toolbar in RTL mode.
- Added new property DetailViewerField.displayField
- HiliteEditor: Honor hiliteIcons when editing an advanced hilite rule
- Fixed dragging items out of section-stacks with showDragPlaceHolder:true
- Canvas.js: Fire resized notifications when draw completes if overflow is visible and drawn size exceeds specified size; fix problems with drawing TabSets arising from this change
- Fixed a couple of places where the wrong record was selected in a filtered selectionComponent
- For Button widgets, write border properties from widget/CSS directly into the div's HTML to work around IE9 border-radius bug
- Changed the UI for view/download of binary items in ListGrid and DetailViewer to make it field-specific
- Fixed problem when calling getSelection() within the "selectionChanged()" handler of a tileGrid
- Window.js: fixed a bug where toolbar could fail to show even if buttons were specified
- Added improvements to the FormulaBuilder/SummaryBuilder to improve layout and focus, and overflow more intelligently
- Enhancement - allow full titles to show in FormulaBuilder
- Improve layout/sizing for the Highlight Editor
- For Window and body with overflow: "visible", improve resize logic to explicitly resize the header to match body width
- For TabSet/TabBar, decoupled the selected-tab from the focused tab
- Improved autofitting of fields in FormulaBuilder to get better layout
- Improve state-handling for RibbonBar/Group and IconButton - make sure icon is set disabled when whole RibbonGroup is disabled
- Solved issue where no days for January show up in the DatePicker
- TileLayout - fix for unwanted scrollbars caused by a background spacer canvas at 100x100
- FormulaBuilder - fixed a typo that could cause JS errors if you modified a formula then hit cancel
- Improved Hilight Editor to autofit the grid containing field titles/header spans
- Added headerSpan-title amalgamation, similar to that already in Highlight Editor, to FormulaBuilder, SummaryBuilder and the Multi-sort config dialog, and added ListGrid flags to control it
- Window - Fixed where resizing a window with autoSize: true caused the header buttons to stay fixed (or disppeaar if the window is resized smaller)
- Fixed HighLight Editor to use the field.summaryTitle (if present) of a grid field rather than field.title in the field picker and rule editors (since field.title may contain HTML)
- Fixed problem where float fields in Highlight Editor cannot be configured to match (==, !=, >, <. etc.) another field
- Fixed problem where Layouts were misbehaving where padding was applied to a css-styleName
- When animating Layout member drags, prevent new drag events from being initiated on members which have been dragged out of the layout (and deparented), dropped unsuccessfully and are still animating back to their placeholder location
- Added new doc'd APIs: TileGrid.getTileIndex() and TileGrid.getCurrentTile()
- Added new doc'd APIs: Tab.paneMargin and TabSet.paneMargin to support per tab pane-margins in TabSets
- Fixed issue where even if ListGridField.canFilter is set to true, field is not editable in the FilterEditor
- Solved issue where ToolBar.setSelected() was crashing in JS if the ToolBar's parentElement was null

##### ScreenReader mode changes

- Some improvements around focus handling in screenReader mode.
- Fixed a bug where in screen reader mode, a button with title set to an Img tag would misrender
- Fixed an issue with multiple selects / screenReader mode
- Default to using prompt rather than title for aria-label if specified
- Streamline critical path code: have the calls to HTML escape aria props only care about the chars that really matter for our usage

##### Selenium Integration

- Added waitForGridDone() as available Selenium RC Script command
- Selenium - new command setImplicitNetworkWait()
- Update Selenium RC isGridDone() to ensure it waits until pending operations are complete before returning true
- Selenium: Add SmartClient versions of doOpen() and doOpenWindow() that insert a special URL variable into the location before calling the original Selenium functions
- Selenium: Fixed a bunch of function calls to use 'this' rather than Selenium.prototype
- Update Selenium JARs to version 2.21
- New documentation article discussing the fundamental differences between Selenium 1.0 and Selenium 2.0 / WebDriver
- Autotest.js: Fixed problem with Calendar.getEventFromLocatorConfig() where primary key is used as the index
- Updated the Selenium user guide and SmartClient / SmartGWT documentation
- For Selenium IDE (in user-extensions-ide.js), fixed ability of doKeyDown/doKeyPress/doKeyUp commands to work with modifier key commands such as controlKeyDown()
- Added support for AutoTest identifier for the HTML element containing inline errors
- Return null rather than false for invalid locators passed to AutoTest.isGridDone()/AutoTest.isElementClickable()
- Added new API AutoTest.isSystemDone() and docs - this function checks whether all ListGrids satisfy AutoTest.isGridDone()

##### Miscelaneous other changes

- Fixed a display issue with edged canvases on Webkit browsers
- A number of Tab-Index behavior fixes
- Fixed a bug where minimized windows could appear incorrectly rendered in Chrome
- Fix for a bug where animated scrollIntoView could cause things to scroll too far
- Fixed some longstanding edge cases around DST changeover times for various Locales, which could lead to dates mysteriously formatting off by one day
- Fixed a bug where willHandleError:true would fail to intercept a call to XMLTools.loadWSDL if the service was not available
- When resolving percentage sizes of Canvases, respect both maxHeight and minHeight
- Improved event handling for keyboard events in Safari and Chrome
- Fixed a bug where mobile browsers would automatically dismiss menus as soon as they are displayed.
- Various visual builder fixes.
- Improved keyPress event behavior for non-character keys in Internet Explorer when holding a key down (repeated keypress events)
- Some improvements in RTL support
- Fixed a Chrome-specific bug where accessKey would not work reliably
- Fixed a bug where the soft-keyboard would often auto-dismiss when selecting a text-input area in Android (touch) browsers
- Fix a bug where standard click (and related) events could fail to fire in iOS touch browsers
- Workaround for native browser bug: In IE9, with the HTML5 tag, if you redraw the element under the mouse while the mouse is down, subsequent mouseMove events report button as zero for a time
- Several cut/paste enhancements driven by Excel compatibility
- Create pickers for includeFrom and foreignKey, when editing DataSources in Visual Builder.
- Work around a memory leak in Google Chrome if you issue XMLHttpRequests against changing URLs
- In Safari/Chrome, don't use the 'cursorTracker' by default.
- Extend the i18n support we implemented for .ds.xml files to Component XML
- In Firefox strict mode, default font-size to 0px rather than 1px in the HTMl we write out for stretchImg's and button icons. Fixes a much-reported problem with missing bottom border on buttons in FF/Win7
- Numerous RTL fixes
- Removed the instruction to set FilesystemDataSource.enabled: true in the documentation about deploying VB in an application. This is no longer necessary.
- New samples: Persistent Reorderable ListGrid and Persistent Reorderable TreeGrid
- Use CSS3 opacity for IE9 in "IE9 Standards Mode"
- Added a source widget argument for the Canvas.scrollIntoView method
- Made isc.Browser.isIE8Strict be true for IE9 even if isc.Browser.isStrict is false since we require the same workarounds
- Fixed issue with containers missing edge borders in Enterprise/EnterpriseBlue/Graphite
- Bugfix: ScreenSpan class only wrote out a spacer at a fixed size so a very tall page could cause us to scroll past it, which was visible in IE
- HTML5 mode, Google Chrome requires explicitly sized iframes written into widget handles, rather than relying on the "100%" height
- Fix issue: When we change the style of a button such that the size of content changes and it should shrink, the content can fail to shrink properly and resize the widge
- Doc'd CSS3Mode and how to override the default of using it automaticallyfor non-IE browsers
- Streamline critical path code: modify String.makeXMLSafe to reuse regex's / string replacements, and to accept parameters specifying exactly what to replace
- Add new overview article on error handling to the documentation
- Fixed isc.isA.Array() check for arrays created in a separate browser frame
- If a developer specifies a hilite with a numeric ID then messes with the hilite editor we could easily get colliding ID's
- Bugfix: in setOverflow() trip the innerSizeChanged method if we go from a state with scrollbars to a state without
- Correct domain-syncing logic broken in Chrome/Firefox
- If DataSourceLoader is used on a page when SmartClient isn't loaded (or before it's loaded), prevent the JS crash that would normally occur
- Fixed the issue where h-padding could differ in over/down states for header buttons for Enterprise / EnterpriseBlue / Graphite skins
- Fix an issue on Android where "clicks" (touch events) on ListGrid records are not being acted upon properly
- Workaround native Mac/Firefox bug where scroll widths are misreported that was causing us to chop off the right edge of (some) buttons in the new css-3 enabled skins.
- Numerous small changes to correct color inconsistencies and less-than-pixel-perfect rendering in the EnterpriseSeries skins (Enterprise, EnterpriseBlue and Graphite)
- Escape single quote in filename when generating img html and when posting for download
- Fixed an issue preventing us from logging stack traces for Chrome specifically for the page load event; fixed some issues with Chrome stack trace parsing
- Fix a number of minor cosmetic issues and odd behaviors that have crept into in the dsGenerator and batchDSGenerator over time
- Fixed a problem where Chrome and Safari would not catch or report errors that occurred during eval()
- Fix for the corner images of EdgedCanvas components in IE9/HTML5
- Make the EventHandler.targetIsMasked() API public
- Added large documentation article on integrating third-party widgets
- Fixed isue with NestedEditorItem and opaque simpleTypes
- Add variable isc_useGradientsPreIE9 which can be set to false to fix ClearType for IE8 in IE8 Standards Mode; affects classes descending from Button and Img
- Fixed an issue where in IE the browser can navigate back unexpectedly if a FormItem with editing disabled receives a backspace keypress
- Significantly updated documentation for PhoneGap integration
- XML Tools - Fix for FF14 changing how XML attributes are represented
- Fixed bug preventing a SectionStack from being added to a TabSet
- Fixed problem with 100% sizing in later versions of Opera where Page.getHeight()/Page.getWidth() return wrong values
- Fixed drawing of EdgedCanvas's L/R image, and layout issue affecting CanvasItem, in later versions of Opera
- Prevented Canvas.getInnerContentHeight()/Canvas.getInnerContentWidth() from returning values less than one
- Added String.isValidID() to determine if a string is a valid JS identifier
- Added Canvis.validateFromFieldNames to enforce that certain APIs, such as DataSource.setFields() are passed valid JS identifiers, and updated docs to indicate which APIs are affected
- Add textItem.inputDataType support for Android platforms
- Add support for externalStylesheet for both PrintCanvas and PrintWindow
- Flashlet - updated flash version detection in IE to use newer method based on ActiveX
- Fixed an issue causing backspace problems on WebKit browsers if TextItems with a mask are present
- Fixed issue whereby fractional, positive timezones, such as India (+5:30) weren't getting zero'd out properly when rolling dates from logical dates to zero hour datetimes
- CanvasItem - fixed Bug with IE9 / sizing of ToolbarItem when Transitional doctype is used
- Fixed a bug where we would fail to get keypress event notifications for Ctrl-V/Ctrl-C in IE / Chrome
- Fixed ViewLoader callbacks for Safari/Chrome - they were not being called due to tripping error logic
- Fixed array sorting of records - null value in field of record array was being sorted equally with empty string value
- Improve debugging information provided to user when attempting to download an image in ResourceLoader
- Fixed forum-reported issue where DataBoundComponent.selectionUpdated() call doesn't happen for touch browers
- Fixed Mac + Safari 6.x only problem where TileGrids can show 'undefined' in each tile, in some cases
- Fixed issue where a large menu is jumping back to the top instead of staying at a particular scroll position when mousing over certain menu items if mouse-over styling can change the width of the items
- Fixed a bug where currency string formatter would fail to handle small negative numbers between zero and -1
- Fixed an issue where in Chrome / Safari, errors thrown but evaluated JavaScript would not be caught and reported correctly in some cases

## Changes in 8.2

#### New Features

##### General

- Numerous ScreenReader enhancements and fixes, including aria-label support for all FormItems, Buttons, FilterBuilder, prompts on form items, improving native focus on elements (including listGrid), cross browser support
- Drawing module enhancements - much extended APIs and better examples
- Numerous improvements in support for mobile browsers (including Android Browser and iOS Safari)
- Charting module is now available in SmartClient Pro and has various fixes and enhancements
- show native focus indicators on Chrome and Safari browsers
- Schema files for various validator types, allowing server side declaration of validators in dataSource XML using validator names such as "DateRangeValidator" et al.
- Lots of skinning changes.

##### DataBinding

- Numerous enhancements, documentation improvements and stability fixes to server side dataSource logic
- Cross-dataSource features, including DataSourceField.includeFrom and request.additionalOutputs.
- Various enhancements around working with AdvancedCriteria.
- Support for transaction queueing for RestDataSources, both on the client side and the server (via the RESTHandler servlet)
- DataSource.dropUnknownCriteria feature - if set to true (the default) client side filtering will ignore criteria for fieldNames not explicitly present in the DataSource.
- customSQL enhancements, including support for velocity expressions in customSelectExpressions, field level customCriteriaExpression, and additional variables $criteriaValue and $criteriaOperator
- Support for customization of SQL data paging strategy
- SQLDataSource Support for Firebird database plus generic SQL92 connections (limited support)
- Hibernate integration improvements including support for includeFrom, valueXPath, custom HQL
- sqlStorageStrategy updates including support for "ntext" for Microsoft SQLServer
- Server: support for "strictJSONMode" on JS translator
- Server: support for DataSource::getPropertyJavaClass()

##### Miscellaneous Component / UI changes

- Support for new ToolStrip related components ToolStripGroups, RibbonBar, RibbonGroup
- PortalLayout and Portlet enhancements
- Support for exporting components' print view as pdf format
- support for formulaBuilder.messageLabel
- Respect "minWidth" / "minHeight" specified on a percentage sized component
- isc.showFadingPrompt() method
- ToolStrip and related components added to Visual Builder

##### ListGrid, TileGrid and TreeGrid

- ListGrid reworked to be a VLayout subclass, with support for customizing sub-components via listGrid.gridComponents
- Support for delayed / batched removal of records from a ListGrid (via deferRemoval attribute)
- Support for ListGridField.multiple
- listGrid.filterEditor autoChild publicly documented
- Support for recordContextClick on TileGrids
- Better support for cascading selection in TreeGrids with incrementally loaded data.

##### Forms

- Notification event for dynamic form asynchronous validation completion
- FormItem item vertical alignment support

#### Fixes

##### ListGrid and TreeGrid

- Various issues to do with filterEditor field order, sizing, visibility
- Fixed date formatting for excel export
- Fixed issues with criteria being ignored on export in treeGrid
- Various fixes around recordComponents' life-cycle management
- Fixed a bug where expansion components / record components could get "lost" on server side data change
- Formatted export would crash on grouped grid
- Fix for error dragging into a grid with all disabled records
- ListGridField autoFitWidth logic fixes
- Force a refresh when explicitly recalculating summary values even if data appears unchanged, and added support for recalculating grid level summaries without recalculating summaries at all levels in the grid.
- On 'setData()' on a grouped grid, reapply initial group open state rather than attempting to apply current tree open state to the new data
- Fixed an issue where frozen body could leave whitespace at the bottom when rapidly scrolling
- Fix for an issue where expansion components could interfere with the positioning of recordComponents
- fix for an issue where allowFilterExpressions could confuse checkbox-items in the ListGrid filterEditor

##### Forms

- Numerous fixes to the "allowExpressions" / "allowFilterExpressions" functionality expression items
- FormItem selectOnFocus won't override actual cursor insertion based on mouse click position.
- Various ComboBoxItem stability improvements / fixes around filtering, addUnknownValues false, showHintInField
- DataBoundPicktreeItem - support for initial criteria and invalidating cache
- Fix for possible memory leaks failing to clear up generated dateRangeItem dialog box and related components
- Fix for tabIndex issues around RadioGroupItems
- Several MultiFileItem fixes
- Fixed some formatting issues with DateItems showing error icons
- Fix for issue where cellHover component fieldNum could be incorrect while frozen fields were showing
- Fix for icon positioning with RelativeDateItems
- Fix for erroneous sorting of null entries in datetime type fields.
- Added workaround for native IE issue whereby assigning certain HTML strings to certain DOM elements' innerHTML at runtime can generate runtime errors. This came up setting StaticTextItem values
- Fixed a case where SelectItem/ComboBoxItem.fetchData() could fail to drop cached data
- Avoid writing out the title suffix for a form item with no title
- Support for applying "inSet" criteria to AdvancedCriteria via multiple:true selectItem
- Some enhancements / fixes around FormItems and optionDataSource
- Fixed some issues where RelativeDateItems could show the wrong absolute date value for some shortcuts
- Fix for an issue where dateItems could fire changed more often than necessary
- ComboBoxItem/SelectItem: Fix for an issue where the pickList header could fail to respect the height specified in pickListProperties
- Fix for an issue where ButtonItems could fail to show disabled state properly

##### Other

- Various visual builder fixes and editMode fixes
- Various improvements to Calendar
- batchDSGenerator fixes
- Realtime Messaging 'domain synching' code could cause (ultimately harmless) JS error in some cases
- Fix for an issue with ctrl / alt key detection in Windows (non US keyboard mappings)
- Various tab order fixes
- Fixed some interactions with modal prompts and click masks
- Some messaging servlet fixes around contentType
- Fix for DateChooser year menu positioning bug
- Chrome-specific fix for issue where tabSet close click could fail to remove unselected tabs in some skins
- Some fixes / other work on dataPath
- Fixed some issues around dragAppearance:"tracker" and dragResize/dragReposition
- Fix for a potential memory leak in RestDataSource when serializing requests
- Fixed an issue where valueMaps defined in xml (EG in a ds.xml file) could end up in the wrong format
- Fix for potential "Connection Closed" error when processing extremely large multi-operation update queues on the server
- Fix for an issue where "xsd:type" attributes on XML responses could confuse client side code to parse XML into Record objects
- Fixed a problem in DataSource loader where a bad DataSource ID would be echo'd back to the client, creating a possible exploit for applications deployed at well known URLs that do not implement general XSS (cross site scripting) protections, and where a user is fooled into clicking on a malicious link
- Fix for an issue where server side code required a DSRequest to have an associated dataSource (there are valid cases where it might not).

## Changes in 8.1

#### New Features

##### General

- IE 9 and Firefox 5 support
- ARIA/Section 508 accessibility compliance
- New dataPath Feature that provides a straightforward way to display or edit complex nested data
- Support for Expressions - allowing users to define complex filter criteria using simple strings
- Various timezone conversion, date, time and date-time formatting fixes and enhancements
- i18n enhancements
- Numerous additional enhancements and bug fixes that were logged in forums

##### ListGrid

- Added ListGrid allowFilterExpressions property to support use of expressions when filtering. For example "<50 or ==99"
- Support for multi-line summaries in groups and at the grid level
- Augment ListGrid state management such that get/setViewState also preserve hilites and grouping data, along with frozen field information
- New Group Title column feature; added new showGroupSummaryInHeader attribute
- Added support for specifying an array of summaryFunctions per field, which display as multiple lines in the grid summary or per group summary
- Support for ListGridField summaryValueTitle property and SummaryFunction type "title" to show arbitrary text in the summary row (or group summary row) for a field in a grid without having to write any code
- New viewStateChanged event fired from grouping, sorting, fieldState changed
- New sortChanged event fired from setSort() whenever the sorting changes
- Added ListGridField dataPath property
- Addition of new ListGrid.saveRequestProperties, to allow for customization of the properties sent on the save Request
- Enhance record summaries in grids by providing support for locally held data to be included
- New API ListGrid.getSelectedRecords() to return all Records that have been selected in a grid as a RecordList
- Added refreshRecordComponent() API
- New setAutoFitFieldWidths method to enable/disable autoFitFieldWidths at runtime
- Added showSortNumerals property
- Support for group summaries even when there are more than one groupByFields specified on the ListGrid (nested groups)
- New ListGrid boolean property editOnF2Keypress - if true, (the default) start editing on F2 keypress
- Support for sorting group headers by all fields when showGroupHeaderInSummary is true

##### TreeGrid

- Added TreeGrid showDisabledSelectionCheckbox property
- Respecting fetchDelay when a FilterEditor is used with a TreeGrid

##### Img

- Added support for 'altText' to Img

##### Menu and MenuButton

- Added MenuButton showMenuOnRollOver property

##### FilterBuilder

- Additional params passed to getValueFieldProperties() to make this a more useful override point
- Added support for filterButtonProperties to customize the actionButton on the filterEditor
- Added new Operator "iBetweenInclusive" client and server side - provides case-insensitive range searching for strings (for example: "a...f" in a formItem allows for a case-insensitive search)

##### DynamicForm / ValuesManager

- DynamicForm.allowExpressions and FormItem.allowExpressions added to allow expressions in formItems when producing criteria - for example "<50 or ==99"
- New property 'formatOnFocusChange' If set, formatEditorValue re-runs whenever the item receives or loses focus, meaning the developer can show a prettier string while the user isn't actively editing it
- Support for parse / formatEditorValue in DateItems where useTextField is true
- Added explicit 'innerTitleOrientation' to DateRangeItem
- ComboBoxItem : On focus, record the element value. On blur, only run mapValueToDisplay and reset the element value if it has changed since focus
- Enhanced FormItem.fetchMissingValues()to also manage optionDataSource events for retrieving a displayField value or selected record. Extended functionality will also maintain updates to these optionDataSource values
- Enhance DateChooser functionality to round to end of day if rangePosition is set to end
- Improvements to serialization of Date objects being produced by DateItem or RelativeDateItem types to serialize as logical Dates (excluding time) or datetime values (including) depending on the specified field type
- Improvements to CanvasItems click/double click events when clicking within an embedded canvas
- New date range elements improved to $weekAgo and $weekFromNow to allow the new rangePosition API to be usable for setting to beginning or end of day
- RelativeDateItem : New properties 'showPastOptions' and 'showFutureOptions' to disable past or future options if desired
- RelativeDateItem : New rangeRoundingGranularity feature - allows configuration, if selecting N Days Ago whether that's to the nearest day, hour, second etc.
- Added support for overriding the preset options in RelativeDateItem's
- CanvasItem now has a new showValue event to support customization of display values in embedded canvasses
- Added canTabToSectionHeaders property to DynamicForm and SectionStackSection
- Support null values for TimeItems

##### DetailViewer

- Added DetailViewerField.dataPath
- DetailViewer now respects the new field.dateFormatter, field.timeFormatter, component.dateFormatter, component.datetimeFormatter and component.timeForamtter pattern

##### TabSet

- Added TabSet.useSimpleTabs allowing a simplified appearance for Tabs that doesn't require multiple images

##### Canvas

- Added "moved" and "parentMoved" event handlers

##### DataSource

- Enhancements to serializeFields() to handle nested DataSources
- Support for DSField property nativeName in DataSource.getProperties() and DataSource.setProperties()

##### Selenium Support

- Drag and Drop recording / playback support for Selenium
- Double Click handling support for Selenium

##### Other

- getSelectionRange support added for Opera 11 with Windows to allow text masking to perform properly
- Added functionality to allow cross-frame scripting without security exceptions
- Simplified event switching for offline support to be a single click service

#### Fixes

##### ListGrid

- Improve performance of saveAllEdits() when processing a large number of edited rows
- Fix for a bug where calling setFields() with a subset of the currently visible fields in a ListGrid would fail to remove the fields not present in the new field-set
- Fix for a bug where if the summary row is visible and an h-scrollbar is introduced, a second h-scrollbar would display
- Fixed issue with grid.unsort() not correctly managing a cell selected for edit after a sort
- Fix to remove performance issue with colSpanning incorrectly rendering row cells and causing unnecessary redraws
- Improved arrow key navigation with grouping by not toggling the group when a group node is selected
- Fix to updateRollOverCanvas() to only perform necessary ListGrid canvas changes if there is an associated record or cell being rolled over
- Fix to ListGrid where if type-validation converted from string to number, and stored out the number value, a call to getEditValue() could replace the converted value with the original string value
- Fix for ListGrid.hasChanges() detecting a change in DateItem fields even if the user does not actually make any changes in the cell
- Fix to allow disable of the "configure sort" right-click menu item (in the sorting box at the top-right of the grid) in a ListGrid when multiSort is unavailable
- Fix for bug where valueMaps were not being picked up correctly when calling 'exportClientData' on a grid
- Checkbox in selection column header correctly updates to reflect record selection state
- Performance improvement : selectAllRecords() and deselectAllRecords() now avoids call API to refresh selection appearance on every row - instead performs a single refresh to display the new selection
- When refreshing for cleared edit values on new rows, if the body is frozen, refresh that as well

##### TreeGrid

- Fix to check if canCollapseGroup is false on TreeGrids, to avoid having to check open folder state on all folders
- Fix to TreeGrid dragging of a node from root and dropping it into root (in the white space). Causing an error message about duplicate names

##### Calendar

- Fix for an issue where overlapping events within a day could cause all the other events to assume they are also overlapping and render at half width
- Correction to calendar events heights where the events spans the midnight boundary
- Correction to calendar event resizing to disallow meaningless horizontal resizing
- Fix to timing of calendar refresh to avoid trying to refresh a calendar where the calendar is destroyed or is in mid-destroy

##### SectionStack

- Correction to bad printing of nested table components where SectionHeaders did not print correctly
- When destroying sections, if section.controls is specified but hasn't been added to the section as a descendant, explicitly destroy it

##### TileGrid

- Fix issue where invalidateCache could inadvertently load all of the data for a datasource

##### Menu and MenuButton

- Fix to avoid a possible crash during MenuBar draw if we have no menus
- Added MenuButton showMenuOnRollOver property

##### FilterBuilder

- Fixed bug with left align of the last field in filterEditor
- Correction to FilterBuilder editorType for correctly attributing field type to operator when defined as using a fieldDataSource rather than a normal DataSource
- Fix to ensure filterChanged() is fired in all cases when clauses are added and removed from filterBuilder
- Fix to ensure when using FieldValuesAreEqual in filterBuilder dates are compared by type correctly
- Correction to 'inSet' operator in FilterBuilder to handle when null or 0 criteria is returned
- Performance improvement when working with dataSources with a large number of specified fields - in getEditorTyper() avoid creating test formItems for all dataSource fields.

##### DynamicForm / ValuesManager

- If an item has an explicit validator of type 'required', show the required styling using setRequiredIf
- Fix to avoid a crash if a DynamicForm with no DataSource specified is embedded in a ValuesManager with a dataSource specified, and the form has explicit fields.
- validateOnEditorExit: For ComboBoxItems where completeOnTab is true, don't validate as part of handleEditorExit if a tab is pending completion, wait for that completion to actually fire, then validate.
- RelativeDateItem inner comboBoxItem width fixed to match that of other selectItems on the form
- Fix to focus/blur processing to avoid custom parsers firing twice on ComboBoxItems
- Fixes to RelativeDateItem to correctly use getValue()/setValue() methods
- Support for passing a RelativeDate right into setValue() at the form or item level
- Fixed an issue whereby when editing complex nested values in a ValuesManager (due to the dataPath feature), the saveData() callback was unreliable
- Fixes to sporadic ComboBoxItem.completeOnTab failures if the user tabs before data has loaded
- If request.willHandleError:true is passed to save method on a form or valuesManager, allow the callback to fire even if the response returned validation errors.
- Fix for an issue where DateItems wouldn't detect change and therefore wouldn't validateOnExit if the user picked the value from a picker
- Correction to ComboBoxItem.filterData() to ensure all data has been loaded before issuing the filterComplete() API.
- Fix to clear existing errors from an invalid date field in text mode (useTextField) when a valid date is then selected
- Improvements to Picklist positioning by directly looking at the data if the pickList isn't drawn yet
- Correction to remove a specific use case issue in FormItems where Focus/Blur on multiple fields caused a loop
- Correction to Values Manager managed form to remove a failure when the form contains fields that have neither a name of a dataPath reference
- Corrected an error when defining pickListFields to ensure that if the showIf attribute is set to false the pickList Headers for those fields are ignored
- Fix to a specific case on ComboBoxItems where a repeat fetch operation was triggered when a fetch was already in operation. Related to rapid data entry use
- Fix to always include times in relative date-range criteria
- Fix to correctly handle mouseOver on icons within form items
- Fix to correctly manage focus on Items within a canvas within a DynamicForm, where clickmasks are specified
- Fix to date logic to correct issue, where in some time zone(s) [seen in Brazil], DST adjustments happen at 00:00 and calling APIs to set a Date value to 00:00 on the day when the DST switch happens returns a Date one day earlier at 23:00
- Fix to setValue() to allow it to manage roundPrecision as well as roundValues
- Fix mask validators to not result in a exception if not passed a string, or specifically passed a exceptional value
- Fix of an issue where single DateItem fields in Dynamic/Search forms, can appear as double Date range fields
- Fix tabindex/tabbing behavior of the MiniDateRangeItem popup
- Fixed error-icons not showing up with itemLayout: "absolute"
- Improved CanvasItem focus management
- Enhancement to PickListItem sizing functions by using ListGrid functions autoFitData() and autoFitFieldWidths()
- Enhancements to FormItem field formatting behaviours by performing form and datasource type management
- Fix to minor LinkItem issue where, in certain circumstances, clicking to the right of the link still performed the link action
- New date range elements improved $weekAgo and $weekFromNow to allow the new range position API to be usable for setting to beginning or end of day
- If allowEmptyValue is true and multiple is true on a SelectItem, not showing the empty row at the top of the drop down
- Fixed a bug where expanding/collapsing SectionItems could cause forms embedded in scrollable / scrolled parents to jump scroll position back to zero/zero

##### DataSource

- Fix to DataSource.handleUpdate to clear last update information for ResultSets to ensure the dataChanged API fires correctly
- Correction to datasource.combineCriteria() to specifically mark the component criteria as advanced to stop the criteria being presented as separate criteria, but as one set of advanced criteria
- Fix to ensure that if transformInput modifies an item's value while the user is typing in the field, focus ends up at the end of the field

##### Other

- Corrected an issue with setStyleName() not rendering correctly if called after draw() on a Label
- Fix to an issue where browsers complain about mixed security content with Flashlets and https is now automatically detected and managed

## Changes in 8.0

#### New Features

- Selenium support
- Localization with 18 different language packs; numerous i18n improvements
- User-defined data highlighting: New HiliteEditor widget for editing hilites
- Significant performance improvements across the board; additional performance enhancements for ListGrid
- New skins "Enterprise Blue", "Graphite", "Simplicity"
- Updated Enterprise skin
- Wrapper components for Plugins: the components for managing browser plugins (Java Applets, Flash players, etc) are now part of the free product (formerly ClientBridges Optional Module)

##### Mobile device support and HTML5

- Support for Apple iPad and Mobile WebKit; new attribute "isc.Browser.isIPad"; new attribute "isc.Browser.isTablet" (currently equal to isIPad)
- Partial Android support
- HTML5 Offline support
- New ColumnTree attribute "showMultipleColumns"; when set to false, only display a single column at a time, showing a slide animation when moving between columns
- New HTML5 Charting engine (FacetChart) as an alternative to FusionCharts (requires Analytics module)

##### Grid/Viewer/Chart

- ListGrid: expandable rows; nested grids to show related records; custom embedded component support
- New TreeGrid attribute "showOpener"; if false, does not display any opener icons
- Support for Header Spans when printing
- Improved support for printing ListGrids with embedded components
- Show "ListGrid.configureSort" menu item on every field, not just on the corner sort context menu
- New ListGrid method "recalculateSummaries()", to force recalculation/refresh of grid and group level summaries
- ListGrid support for frozen fields and virtual scrolling with record components
- DataBoundComponent.exportClientData(): an explicit dataset to be exported may now be supplied as an argument
- New ColumnTree attribute "columnProperties"; applied to each generated columnTree column
- New ListGridField attributes "linkURLPrefix", "linkURLSuffix"
- New FacetChart attribute "valueTitle" (requires Analytics module)
- New ListGrid attribute "canPickOmittedFields". If all of the following are true for a ListGrid:
  - grid.canPickOmittedFields is true;
  - The grid is databound;
  - explicit fields are defined on the grid; and
  - grid.useAllDataSourceFields is false,
  ... then show all DataSource fields that aren't present in the explicit fields array in the column picker menu.
- ListGrid cell hover components: new method "ListGrid.getCellHoverComponent()"
- DataBoundComponent.duplicateDragMessage: may now be set to null to suppress the warning, silently discarding duplicates
- New ListGrid attribute "chartType"
- New ListGrid attribute "autoFitFieldsFillViewport"; enables/disables the autoFitExpandField behavior, where we grow one of the auto-fit fields to fill up the available space, if auto-fitting would have left a gap to the right of the fields
- Improved ListGrid Hilites
- New ListGridField attribute "autoFitWidthApproach"; overrides ListGrid-wide setting
- New ListGrid attribute "autoFitIconFields"; set to one of "iconWidth", "none" or "title". Defaults to "title". For "icon" type fields, or fields with valueIconOnly:true (including booleans), this turns on autoFit by default, and sets autoFitWidthApproach:"both" for autoFitIconFields:"title", or autoFitWidthApproach:"value" for autoFitIconFields:"iconWidth"
- Double-clicks on a ListGrid header menu trigger autofit
- New ListGrid "Auto Fit All" menu option
- New ListGrid attribute "autoFitFieldWidths"; may be overridden per-field
- New ListGrid/TreeGrid attribute "selectionProperty"
- Per-Column AutoFit: ListGrid/TreeGrid attribute "autoFitWidth"
- Multi-level sort for grids (client and server support)

##### Forms

- Masked text input: specify the mask in a regular-expression like format, and the rest is handled for you
- New FormItem attribute "displayFormat", for items of "date" or "time" type
- FormItem "inputFormat", for items of "date" type
- FormItem.setRequired() may now be called at runtime (after initialization)
- New DynamicForm, FormItem attribute "browserSpellCheck", for enabling/disabling native browser spell check feature on text boxes
- New DateItem attribute "defaultDateChooserDate", as a way to specify a default to show in the picker, without specifying a default value for the item as a whole
- Support for FormItem.value as an initialization attribute
- New DynamicForm methods "getChangedValues()", "getOldValues()", which allow access to values preserved by "rememberValues()"
- New FormItem methods "getLeft()", "getTop()" "getPageLeft()", "getPageTop()", "getRect()", "getPageRect()", "getVisibleWidth()", "getVisibleHeight()"
- New DateChooser attributes "startYear", "endYear": set upper/lower bounds for allowable year input
- New TextItem attribute "printFullText"; if true, expand the text box to fit content
- New TextAreaItem attribute "expandTextBoxForPrinting"; if true, when printing, fill the available space (width-wise) and expand vertically as required to fit its content
- New SelectItem attribute "textMatchStyle"
- "DynamicForm.getValuesAsCriteria()" and "DynamicForm.getValuesAsAdvancedCriteria()" now accept optional parameter "textMatchStyle", to support returning appropriate advanced criteria for a filter or a fetch
- New FormItem attribute "canFocus"
- DateItem.emptyDisplayValue may now be specified while in text mode
- DateItem.showHintInField may now be specified while in text mode
- SelectItem.multipleAppearance:"picklist" now supports comma separated formatted output (eg icons)

##### Client-side data binding

- Significant performance optimizations to client-side Advanced Filtering
- New DataSourceField attributes "imageWidth", "imageHeight", "imageSize"
- New DataSource attribute "sparseUpdates"; causes DynamicForm.saveData() to collapse the set of fields we send to the server down to just those that have changed, plus primary keys
- Shared caching: new DataSource attribute "cacheAllData"

##### Other client features

- Hover components on any Canvas: new attribute Canvas.showHoverComponents and method Canvas.getHoverComponent()
- Menus may be assigned data directly from a Tree: new method "Menu.setData(Tree)"
- User editing of Tab titles: new attributes "TabSet.canEditTabTitles" and "Tab.canEditTitle"
- Support for drag-scrolling of text selection widget when canSelectText is true for some Canvas
- New TabSet attribute "paneMargin"
- New TabSet attribute "prompt", to set the tooltip for individual tabs
- Menu attributes "cascadeAutoDismiss", "autoDismissOnBlur", and method "hideAllMenus()"
- SectionStack: If canCollapse:true, only show the "pointer" cursor
- New Calendar attribute "equalDatesOverlap": controls whether event ranges that share a common border at exactly the same date should be treated as overlapping or not
- MenuButton: Support menu:null; no menu is shown, and the arrow icon is suppressed
- Relative date filtering: enables date filters like “last 5 days” or “next week”
- Enhanced printing: more control over printed output (eg, number of rows to print in grids); more styling options
- Tree selection: cascades up/down, with visual indicator for partial selection
- Portal layout components: the drag and drop, multiple column portal-style layout manager previously shown as a sample is now an officially supported component
- Toolstrip: a comprehensive skinning overhaul, including toolstrip/toolbar-specific button and menu styling
- New Canvas attributes "loadingImgSrc" and "loadingImgSize", to customize the dialog box various widge

  ##### New server/premium features (Requires Pro, Power, or Enterprise editions unless otherwise noted)

- Declarative Security: protect operations by role by simply declaring requiresRole=”manager” on an operationBinding. Codeless integration with J2EE security and JAAS – if your security solution is causing httpServletRequest.isUserInRole() to return appropriate values, it just works. If instead you need to provide roles dynamically, you can do so with a single API call (RPCManager.setUserRoles())
- Declarative output restriction: declare which fields should be returned by the server on a per-operation or per-request basis (dsRequest.outputs / operationBinding.outputs). Use this to cut down on network traffic for combo boxes and other scenarios where only a few fields are needed from a record with dozens of fields. Or, combine it with Declarative Security to enforce data visibility rules.
- New server-side validators: “isUnique” makes it trivial to enforce common cases like having a unique user name. “hasRelatedRecords” can enforce that inter-record references are valid.
- Validate On Exit: declare that validation for a particular field should be run when focus leaves the field. This includes automatic trips to the server to run any server-only validators you’ve defined. Combined with the new isUnique validator, this makes on-the-fly unique username checks entirely declarative.
- Server-side declarative custom validators: write a Velocity expression right in your .ds.xml file, or declare a Java class to call (like DMI)
- Grid totals / summaries: whole grid and group level summaries. Several built-in functions (sums, averages, etc) and the ability to add your own.
- Automatic Transactions (SQL/Hibernate): batches of updates, such as a multi-row drag or mass editing of grid rows, are now automatically grouped into a transaction when using either the SQL or Hibernate connectors with Power edition or better.
- Deeper SQL customization: customize the SQL used for select, insert and update for an individual field while retaining full support for automatic query generation, efficient data paging, multi-level sort and all other features of the SQLDataSource.
- JPA DataSource
- Annotation-based configuration in Hibernate
- REST Connector
- Client-driven export: an alternative mode for exporting, this export preserves all client-side formatting. LGPL users note: upgrading to Pro gets you this export mode without having to rework any of your databinding code.
- Direct editing in Visual Builder
- WSDL enhancements: automatic loading of imported XML Schema and WSDL files, and support for services with portType vs binding elements in different files
- New WSDL Wizard: Visual Builder features a new WSDL wizard suitable for much less technical people.
- Added support for multi-column sorting to SQLServerDriver
- Server-side DSRequest methods getTextMatchStyle(), setTextMatchStyle()
- Server-side dynamic DataSources: Register a DynamicDSGenerator to have the framework call your code first whenever it needs to instantiate a DataSource
- Improved support for Oracle 11gR2 (11.2.x series) JDBC drivers
- Using simple class name in query (according to JPA spcification). Fully-qualified class names may be specified, to avoid namespace collisions, by setting "jpa.useQualifiedClassName:true" in server config
- Introduced a new sqlStorageStrategy "singleChar"; and supporting DataSourceField properties "sqlTrueValue" and "sqlFalseValue", so users can persist whatever characters they like rather than being limited to presets of T/F, Y/N or 1/0
- New Velocity context variable "$dsRequst"
- Added DataSourceField properties customUpdateExpression and customInsertExpression
- Official support for DB2 on IBM i5 (aka IBM iSeries, aka IBM AS/400)
- Extended DataSourceField.sqlStorageStrategy to provide transparent mapping for dates/datetimes to and from underlying numeric or plain text columns, with flexible formatting
- Changed DataSource "sqlColumnType" attribute to "sqlStorageStrategy"

#### Fixes

- Fix for Month/Year Chooser windows dissappearing into the modal mask when shows from a DateChooser in MiniDateRangeItem's modal DateRangeDialog
- Handle strings starting with "-" correctly in Time.setDefaultDisplayTimezone()
- Grid inline editing of a field with a server-side validator would result in both a "validate" and "update" request sent to the server even though the "update" would perform validation.
- Fixed issue if DetailViewer was given just a singular object as data
- Fixed bug where dates already in UTC would be applied a UTC offset
- fixed IE only display issue of window headers having a "chopped" effect in Enterprise and Enterprise Blue themes
- Various fixes related to the display of cell components in a ListGrid
- Setting an editorType in a ListGridField's editorProperties was leading to a JS crash
- Fixed error when FormItem.focusInItem gets called on a form with no items
- If sectionStack.expandSection() is called, not showing the header unless section.showHeader is actually true
- Calendar fix for issue where two overlapping events less than half an hour in length would be incorrectly rendered
- Fix wrapping of multiple Form Item icons in strict mode
- Reworked the DateItem.inputFormatMask - fixed a bug where it'd fail to replace all separators
- Fix for a bug where calling Menu.addItem() any dynamic attributes would basically fail to run the dynamic logic for those new items
- Fixed getSummaryRowCriteria() returning criteria for the entire dataSet rather than the filtered dataSet when the data is grouped
- AdvancedCriteria related performance improvement in IE
- RTL related fix for CanvasItem positioning in IE
- Fixed issue where Calendar.scrollToToday scrolls too far
- Fixed a bug with ForItem.value was not being respected for form items with a specified fieldName
- Set RPCManager on the DSRequest we create for cache sync if the default fetch operationBinding is not the implicit one. This will ensure it runs in the same transaction as the associated update, if appropriate
- Added support for handling large number of rows in IE 8 non-strict mode
- Fixed a bug in dateItem whereby if showing a text field, if a user partially entered a value and a redraw occurred without the date item text field first blurring, the partially entered value would just get dropped
- Fixed warnings caused when dropping records between grids bound to DataSources with different PK-fields
- Fixed error when saving a Formula or Summary to a grid with no DataSource
- Fixed incorrect state for FilterBuilder remove button (wasn't updating the containing clausers removeButton when a new subClause was added)
- Fixed a bug where if you had a valueMap that was just an Array, if one of the values happened to match the name of a method on Array (eg "set") it would display the function from Array as the value
- Disable alternateRecordStyles on Menu's by default. Fixes a bug with some fields in the menu showing up unstyled in the Enterprise skin
- Fixed a bug where getHeaderButtonTitle could fail if there were multiple sort fields
- Fixed issue where ListGrid sortField / sortDirection was not reliable under certain conditions
- If FormItem.setValue() is called with the current value of an item, and there's an optionDataSource (and alwaysFetchMissingValues is true, or similar) - don't kick off another fetch to retrieve the selectedRecord from the optionDataSource.
- Fixed issue with color picker state for color picker shared between RichTextEditor and ColorItem.
- Fixed a bug where for ComboBoxItems the getSelectedRecord() method was hanging onto a selected record even after the user changed the value of the item by picking a new record
- Don't attempt to use edit-values from the displayfield of a record if the displayField is specified but matches field.name. This was leading to an infinite recursion crash in setEditValue()
- If SelectItem.fetchMissingValues is true, do a fetch if there's a formatValue or formatEditorValue override as well as if there's an explicit displayField name. This is required since formatValue may look at this.getSelectedRecord()
- Fixed DataSource CSV loading only working with DOS format CSV files. Also stripping quotes from CSV values if present
- Fixed TreeGrid.invalidateCache to handle loadDataOnDemand:false trees
- Fix for FormItem delete-key operation in a mask
- Calendar : Handle the user selecting 0 hours (midnight) for the end date and ensuring the date doesn't end up incremented by more than one day
- Fixed a DateItem bug whereby everyone in the eastern hemisphere would get off-by-one errors in dateTime items when picking dates from the chooser
- Fix a ListGrid issue whereby Enum fields would basically get blanked out in the filter editor if a date-range field was also present
- Print support for a ListGrid with more than one frozen fields
- Improved Calendar events overlapping logic
- Fixed gridSummaries for databound TreeGrids
- Fix for bug whereby entering dates into a DateTime item when the date crossed the Daylight Savings Time boundary would lead to the hours getting changed on blur
- Fixed issue where fetchData() on an undrawn LG would fetch twice when it had sorting specified via sortField or initialSort and no fields array specified
- Fixed TreeGrid.setViewState not re-selecting nodes
- Fixed TreeGrid.setSelectionType("multiple") selection behavior when selectionAppearance is "checkbox"
- Handle case where ListGrid.invalidateCache() is called before the ListGrid is drawn
- Fixed an issue where filtering a databound grid would fail to auto-fit to the newly arrived data reliably
- Fix for a bug in DynamicForm where double click wouldn't ever fire on a form (even if the double click occurred off any items)
- Fix IE specific "blinking" of ComboBoxes on initial select
- Fixed issue where tabbing into a DateItem in useTextField:true mode caused the value to be saved as null instead of left to default value
- Fixed Calendar issue where events that start and end in the hour starting at 12am caused an error
- For a cascadeSelection, loadOnDemand TreeGrid, push a full selection from parent down to the children upon load
- Fixed TileLayout issue where dragAppearance:"target" was breaking drag and drop
- Fixed TileGrid printing to work properly for orientation:vertical

##### Server Fixes

- Fixed situation where editing a row with a server-side validator causes a server validation request AND the row save. When a save is pending, the server-side validation step should be skipped - the server performs this validation anyway before saving
- DataSourceField.sqlStorageStrategy was not being correctly applied for boolean fields in criteria
- Fix to make date and datetime comparisons in AdvancedCriteria mirror the behavior for simple criteria
- Fix for SQLDriver types where the SQL limit query implementation requires an ORDER BY the column name was not quoted in the ORDER BY clause if quoteColumnNames was set
- Fixed issue where having an RPC queue containing a mixture of normal and clientOnly requests was failing due to the data returned from the server having fewer results in the response than requests in the transaction queue on the client side
- If schemaBean results in a field of "unknownType", dropExtraFields should avoid serializing values from that field unless the field has been explicitly re-declared in <fields>

## Changes in 7.1

#### Features

- added major new overview docs for 7.0 features
- new examples for Upload, BatchUpload, and Conditionally Editable [grid fields]
- support for asynchronous handling of databound drags
- listGridField.optionDataSource now handles automatic cache sync
- support for parsing of timezone offsets in XML/JSON wire format for dates and datetimes
- official support for "datetime" field type and support for a switchable display timezone for "time" and "datetime" fields
- added field type "imageFile" and DataBoundComponent behaviors for this field type
- added "Java Bean" DataSource wizard for generating a DataSource .ds.xml file from a Java Bean where persistence logic if any is assumed to be added later
- allow a callback to tree.openFolder() for databound Trees
- convenience method ResultSet/DataBoundComponent.findByKey()
- expand next visible section in a "mutex" SectionStack if an already open section header is clicked on
- added FlowLayout trivial subclass of TileLayout
- Server Log tab in Developer Console now supports dynamically changing server log thresholds
- added ability to suppress "select all" checkbox with selectionAppearance:"checkbox"
- added ability to set fixed criteria and other request properties for the requests caused by listGridField.optionDataSource
- TileGrids now automatically relayout if a tile resizes
- made history tokens more readable by not escaping chars that don't need to be escaped
- added support for configuring the Calendar's EventWindow as an AutoChild
- added support for grouping for formula and summary fields

  #### Fixes

- fixed dragging all records out of a TileGrid putting TileGrid in bad state
- fixed inability to filter for boolean false in FilterBuilder if field was declared as boolean type
- SQL DataSource wizard no longer adds redundant (implied) validators to generated DataSource
- search criteria changes are now preserved when grouping / ungrouping in grids
- fixed wrong colNum reported for contextClick events in grids with frozen columns
- fixed case where drag reorder was removing the dragged record
- fixed bug where contents in tiles would not be centered in IE
- fixed JS error if fetchData() was called on an undrawn grid with sortFieldNum set
- fixed JS error if you have a FilterEditor and call setFields() with all fields not filterable
- fixed extra checkbox icons with selectionAppearance:"checkbox" and a tree with expand/collapse animations
- fixed loss of current expand/collapse state in an editable grouped listGrid if editing caused a record to move to a different group
- fixed creating an initially disabled ListGrid not disabling the FilterEditor unless setDisabled() was called
- workaround for Firefox bug causing crash on very very large XML responses
- workaround for Firefox bug causing misrendering of image-based edges on some Linux distros
- fixed formatCellValue on CubeGrid not passing in the record
- fixed direct editing of color picker RGB values causing other fields to show NaN
- fixed emptyDisplayValue not working on a SelectItem with an optionDataSource
- fixes for visual glitches in IE8 strict mode
- fixed autoFitData:"vertical" not workign with frozen fields
- fixed context menu on ListGrid corner button sometimes sticking offscreen
- fixed export not working in a grid with selectionAppearance:"checkbox"
- fixed events in week view of Calendar sometimes showing on wrong day
- fixed firstDayOfWeek not being respected for display of weekends in DateChooser
- fixed firstDayOfWeek only being respected by some views of the Calendar
- fixed printing of RadioGroups not showing selection properly
- fixed tree cache sync issue when nodes had a parentId of 0
- fixed canFilter:false not correctly honored by FilterBuilder
- fixed very slow destroy() for ListGrids with optionDataSource set in Firefox due to native Firefox bugs with Array.toString()
- workaround for Firefox 3 regression breaking accessKey support
- fixed warped crosshair image in ColorPicker in IE
- fixed RadioGroupItems not refreshing on setValueMap()
- fixed JS error possible on server timeout when not using SmartClient Server
- fixed cases where FilterBuilder would inappropriately retain filter values across field name changes (and made the behavior of retain values optional)

## Changes in 7.0

#### New Major Subsystems

- Enterprise, SilverWave and BlackOps skins, three more professionally designed, free (LGPL) skins
- Calendar component: complete drag and drop, databound event editing similar to Google Calendar
- TileLayout & TileGrid components: display records as a series of tiles, with databinding, load on demand, filter and sort, and drag and drop capability
- Advanced Filtering: client- and server-side support for field-operator-value filtering of data, including arbitrarily nested queries
- Filter Builder: specialized form for end user construction of advanced filters of arbitrary complexity
- SQL Templating: customize the SQL generated by SmartClient's SQL connector right in the DataSource file. Clause by clause overrides make it easy to add simple and complex joins, grouping and aggregation while retaining full search features and database independence
- Transaction Chaining: a transaction where some operations depend on the results of other operations can be declared with simple XML in your DataSource
- DataSource Wizards: generate fully functional DataSources from existing Hibernate entities or SQL tables with a simple point and click wizard in Visual Builder
- Batch DataSource Generator: connect SmartClient to your entire object model in one step by generated DataSources from SQL tables, Java Beans or other metadata with a customizable process.
- CSV / Excel Export: just call grid.exportData() to export the current contents of the grid to Excel via CSV, including current sort, filter criteria, column order and column visibility
- Batch Uploader: provides an interface to upload a CSV, validate it and allow the user to make corrections before committing, all without coding.

  #### New client features

- ColumnTree component: ITunes™-like tree navigation (one column per level) relations declared in DataSources and automatically "do the right thing" for a databound drag
- Printing: comprehensive and customizable support for rendering printable views of SmartClient applications
- Formula and Summary fields: built-in wizards for end users to define formula fields that can compute values using other fields, or summary fields that can combine other fields with intervening / surrounding text. Available in all DataBoundComponents, easy to persist as preferences
- ColorPicker component: a full-spectrum color selection component similar to those found in graphics packages and other desktop software
- HeaderSpans: second level headers in grids, for grouping related columns
- Grid row rollover effects and controls: general purpose ability to attach SmartClient components to rows, allowing rounded selection, controls that appear on rollover, and more
- Grid header rollover: drop-down menus appear on rollover, offering column show/hide, freezing and grouping options that previously required right click to discover
- Data autofitting: horizontal and vertical autofitting to data for ListGrids
- AutoFitTextAreaItem: autofits to contained text as the user types
- DataSource: new dataProtocol:"clientCustom" for in-browser storage and third party transports like GWT-RPC
- Datasource: dsRequest.componentId for identifying source of requests
- SelectItem: new selectItem.selectOtherValue and selectItem.separatorValue
- i18n for messages related to ListGrid groupBy and freezen pane features
- Class: log methods available as both instance and class methods
- ListGrid: listEndAction and related properties available in Visual Builder (allows new record creation)
- ListGrid: support for selection represented as a special checkbox column (selectionAppearance:"checkbox")
- Tree/ResultTree: new property "discardParentlessNodes" allows simplified one-shot tree loading * DataSourceField: new attributes "javaClass", "javaCollectionClass", "javaKeyClass" for populating JavaBeans/POJOs
- ListGrid: new convenience method "toggleFrozen()"
- DataSource: new attribute "autoDeriveTitles" for simple user-visible titles auto-derived from typical field name identifer conventions (camel caps, underscore separator)
- FormItem: New properties "prompt", "iconPrompt"
- loadDS tag can now accept a comma-separated list of dataSource names
- DataBoundComponent: Added cell hilite system (from CubeGrid) for styling cell data without code.
- DataBoundComponent: support for databound dragging operations across all dataBoundComponent types
- DataSource: new methods for type:binary field data: downloadFile(), viewFile()
- DataSource: New attribute sendExtraFields for outbound data: if true, include fields that are not specified in .fields
- DataSource: New field types "datetime" and "time"
- DataSource: New property preventHTTPCaching
- ListGrid: groupBy uses displayField if set instead of the field itself, if no optionDataSource is set
- ListGrid: new helper methods invalidateCache(), willFetchData() - calls appropriate methods on .data.
- ListGrid: new notification method dataArrived() passed through from ResultSet
- DetailViewer: new methods DetailViewer.formatCellValue and DetailViewerField.formatCellValue
- CubeGrid: New optional method facet.getValueTitle() for facet titles autogenerated from data
- CubeGrid: New properties for better control over context menus
- RadioGroupItem: can now disable at item via new method setValueDisabled()
- Flashlet: new method setSrc()
- Dialog: new property messageStyle for skinning
- DateChooser: new override points todayClick(), cancelClick()
- DateItem: inputFormat no longer must be initialized if displayFormat is initialized to any of the standard short formatters
- CheckBoxItem: new properties for 3-state checkboxes (unset, true, false): new property "allowEmptyValue", new property "showUnsetImage"
- CheckBoxItem: new properties "showTitle", "labelAsTitle" for better control of title/label
- Canvas: new method setEdgeOpacity() for translucent edges
- Canvas: new string method resized()
- Canvas: new method markForDestroy() recommended as safer destroy() technique
- ListGridField/LinkItem: New target "javascript" for type:link - allows for link interception in relevant click method
- Selection: new i18n property selectionRangeNotLoadedMessage
- ListGrid/TileGrid: New property autoFetchAsFilter to allow autoFetchData to do a filter (search) rather than strict match (fetch)
- OperationBinding new property invalidateCache (this operation will always invalidate local cache if true)
- ResultTree: new property defaultNewNodesToRoot
- DataSourceField: new property childTagName (controls the XML tag used for each subelement during xmlSerialize(), if multiple:true)

  #### New server features

- PostgresDriver: Implemented SQL data paging
- XML: new utility method recordToXML()
- Config: new static method getProperty() to access server.properties
- DSResponse: New convenience methods getRecord(), getRecords(), getFieldValue()
- Visual Builder: SQL and Hibernate browser
- HibernateDataSource: new transaction management methods
- Server-side support of textMatchStyle:"startsWith" - SQL and Hibernate dataSources
- Support SQL access by connecting through Hibernate configuration files
- Workaround for MySQL 5.x bug with long fields and specified default values
- Client Bugfixes
- RPCManager: Convert error window text to HTML format to preserve line breaks in multiline errors
- Window.js: Correct operation of returnValue() when new dialogs are launched from the callbacks of other dialogs
- WSDataSource: populate .sortBy in returned data, in case a partial dataset is returned
- PickList: Fix for incorrect rendering of otherTitle
- GridRenderer: Fix for unnecessary scrollbars in scrolling menus with 1 row of content
- PickList: Fix for databound PickList causing spurious item selection when PickList is re-shown
- ListGrid: Several grouping issues fixed relating to record update/filter
- CubeGrid: Use DataSource fields as defaults for facets if databound
- CubeGrid: Fix for "stacked" checkbox in chart window showing wrong state
- Canvas: don't crash if border is incorrectly specified as numeric
- Canvas: Fix for calling setPadding()/setMargin() after create() but before draw()
- DataSource: allow defaultParams for protocol:"postMessage"
- FormItem: flags to control display of errors and allow custom display of errors
- ListGrid: fixed issue with ListGridField.optionDataSource causing queues to be immediately sent
- ListGrid: fixed edge case where manually set validation errors could be associated with wrong rows when inline editing
- ListGrid: fixed display issue with frozen fields and grouping when opening/closing folders
- ListGrid: Fixed setFieldProperties() not supporting some properties
- ListGrid: stopped spurious occurrence of "getCellRecord called with bad rowNum"
- ListGrid: Fix for startEditingNew with no existing dataset
- DataBoundComponent: support addData() for components with no DataSource
- Button: setIcon(null) now clears the icon correctly
- XML Serialization: escape XML special characters in property names in nested structures
- SectionStack: removeSection() now accepts section IDs
- SectionStack: programmatic expandSection() with visibilityType:"mutex" was not collapsing previously opened section
- TabSet: when tab is deleted, select the closest tab instead of the first
- Scrollbar: Respect showRollOver or showDown when applied to the scrollbar thumb
- Reference Explorer: searches now generated history entries for easier navigation
- HTMLFlow: Fixed bugs where certain <script> tags were not recognized correctly
- Visual Builder: Fixed deployment to non-root webserver locations
- DateItem: Fix when entering invalid values while enforceDate:true
- DateItem: Fix tabbing to date fields when editing ListGrids by cell
- Canvas: Improved rendering compatibility with future versions of Firefox (post-3.0)
- Canvas: Fix for htmlElement-embedded widgets that are both relpos and hidden
- DataSource: added SQL data paging support for SQL Server 9+
- JSONEncoder class for JSON serialization / deserialization
- RPCManager: switched fallback encoding for params to be strict JSON instead of just valid JavaScript
- RestDataSource: with dataFormat:"json" and dataProtocol:"postMessage", serialize to JSON
- RPCManager: added handleTransportError() API to make resending 503 and similar error codes simpler
- History: fixed an issue where History module would form a bad URL to empty.html in IE under HTTPS if window.isomorphicDir is an absolute URL
- Slider: support rounding to a specified precision when dragging over continuous range
- FileItem: fixed various cross-domain issues with FileItem if document.domain is set
- FileItem: allow FileItem to be clear()d
- ListGrid: fixed bug where recent FF would not render rows past 900,000 because Firefox changed maximum legal image size
- Dialog: added "Done" as a standard button, with doneClick() handler
- DynamicForm/FormItem: if user input is invalidated, do not reset the input to the last good value; leave the bad value in place unless rejectInvalidValues is set.
- DynamicForm/ValuesManager: Fix for useLocalValidators:false when databound
- SearchForm: generate appropriate criteria for a ComboBox with optionDataSource in a SearchForm

  #### Server Bugfixes

- HttpProxy: fix for sending long parameters when httpMethod=="POST"
- HttpProxy: Provide clear error status codes for server unresolvable or connection refused errors
- RPCRequest: Correctly encode the content-disposition filename when downloading so spaces work

## Changes in 6.5.1

- ResultSet: fixed dataArrived() not correctly receiving startRow/endRow
- ResultSet: fixed problem that prevented manual ResultSet instantiation
- ResultSet: fixed bug with neverDropUpdatedRows setting incorrectly integrating new/updated records into local cache even if they don't match the current criteria. This fixes the issue reported on this thread in the support forums
- ResultSet: correctly incorporate updated record into cache when the server changes the primaryKey of the record
- Re-Login: fixed JS error in obscure case where an iframe is used as a relogin window that ultimately targets loginSuccess.html
- Window: Fixed bug where an autoSize:true Window would abandon autoSize mode as soon as a drag resize interaction happened anywhere on any child. Now only applies if the Window itself is drag resized
- Canvas: fixed issue whereby components could get into a focused state when disabled
- ListGrid: fixed filterByCell not working on the filterEditor
- ListGrid: grouping media now uses TreeGrid opener (expand/collapse) media instead of folder media by default
- ListGrid: fixed bug where drag and drop onto a grouped grid would not fire dataChanged()
- ListGrid: fixed bug that allowed grouped nodes to be dragged out of ListGrid
- ListGrid: fixed missing disabled ListGrid header image in TreeFrog skin
- ListGrid: fixed JS error if setValueMap() is called ona hidden field while the inline editor is showing.
- ListGrid: fixed bug with inline editing that ensures rowNums don't get mismatched on successful save of multiple rows (reported on this thread of the support forums)
- ListGrid: when groupBy is used with frozen columns, the group name no longer appears twice (once in the frozen pane, once in the rest of the grid)
- ListGrid/ResultSet: fixed issue with newly added records not being grouped correctly when grid is in groupBy mode
- ListGrid/DateItem: fixed two issues related to DateItems in grids reported here
- ListGrid: improved handling of ListGrids that have frozen columns + incremental rendering + inline editor showing.
- ListGrid: providing missing ListGrid schema attributes "canFreezeFields", "canGroupBy" - affects XML->JS translation datatypes and availability of these properties in the VisualBuilder.
- ListGrid: fixed bug with inline edit mode where boolean fields would sometimes not respond to mouse clicks correctly when another edit field had focus (TreeFrog skin only)
- ListGridField: fixed field.cellAlign not taking precedence over field.align
- DataSource: added new API resultBatchSize that enables auto-chunking of large datasets returned by the server to avoid the 'script running too slowly' dialog
- TabSet: fixed tabs being erroneously selected on context click
- FusionChart (Charting): fixed bug where user defined colors weren't being used for single series charts
- DataSource: don't JS error if server returns null/error data as a json transport response.
- HTMLFlow: when parsing out embedded script blocks, correctly handle type='text/javascript'
- TreeFrog: made it easier to drag resize components with shadows by allowing shadows to be used as control points for the drag start interaction
- EventHandler: fixed a bug affecting Firefox 3 final that resulted in mouse coordinates being incorrect when the page was scrolled
- EventHadler: fixed a bug affecting Firefox 2 where drag and drop interactions could receive incorrect coordinates
- EventHandler: new API getDragRect() - returns page-relative coordinates of whwatever element is being dragged
- Time: Time.UTCHoursOffset now applied to stored value rather than having stored value be offset by this amount. This fixes a problem with potential negative time offsets in some rare cases.
- Improved Opera compatibility.
- Canvas: fixed the no-drop indicator failing to show up in some cases.
- DynamicForm: improved documentation around showErrorText/showErrorIcons/errorOrientation
- This release rolls up all addendums from prior versions, recorded here.

## Changes in 6.5

- HibernateDataSource: support ORs for multiple values on a single field (CubeGrid data fetching)
- HibernateDataSource: don't rebuild Configuration or SessionFactory unless necessary
- HibernateDataSource: explicitly close database connections
- HibernateDataSource: better exception handling and reporting
- CubeGrid (Analytics): support for inline editing with both UI and programmatic access
- CubeGrid (Analytics): significant performance improvements for large dataset rendering, smoother scrolling.
- CubeGrid (Analytics): support for yet larger client-side datasets (smarter indexing)
- CubeGrid: correctly reset selection on setData()
- ListGrid: default dragTrackerMode changed to the more visually appealing setting of "title".
- ListGrid: added 'quickDrawAheadRatio' which allows specifying a different drawAheadRatio when the viewport is being rapidly changed by the user (e.g. drag scrolling)
- ListGrid: significant performance improvements for large dataset rendering, smoother scrolling.
- ListGrid: added unsort() API.
- ListGrid: inline editing now correctly respects addOperation and updateOperation settings on the grid.
- ListGrid: new 'groupBy' feature allows grouping/ungrouping of rows by a particular column, aggregating rows by like values. Search for 'groupBy' in reference docs for relevant APIs and see the examples in the Feature Explorer under Grids->Grouping.
- ListGrid: fixed row numbering bug with inline edits triggered when multiple edit rows were shown beyond the end of the grid's data.
- ListGrid: header context menu titles can now be more directly internationalized.
- ListGrid: new APIs getCellValign(), getCellAlign() to enable programmatic control of cell alignment.
- ListGrid/ListGridField: cellChanged() now receives a reference to the grid as last argument.
- ListGrid: new API: headerMenuButton autoChild - When the user rolls over the header buttons in this grid the headerMenuButton will be shown over the header button in question. When clicked this button will display the standard header context menu. This headerMenuButton API is used to show the header menu button in all skins by default.
- ListGrid: new API: getHeaderContextMenuItems() - hook that allows specification of custom ListGrid header context menu items.
- ListGrid: new API: stopHover() - fired to clear Hovers that can be set programmatically.
- ListGrid: performance/look and feel: when ListGrid.leaveScrollbarGap is set, the grid now attempts to predict if hscroll will be introduced or not, removing the flashing hscrollbar.
- ListGrid, TreeGrid: frozen column support, compatible with inline editing. Search for 'frozen' and 'freeze' in the reference docs for a list of new APIs and see the examples in the Feature Explorer under Grids->Frozen Columns.
- TreeGrid: added setNodeIcon() API.
- TreeGrid: new API getDropFolder(). When the user is dragging a droppable element over this grid, this method returns the folder which would contain the item if dropped. This is the current drop node if the user is hovering over a folder, or the node's parent if the user is hovering over a leaf.
- SectionStack: new APIs: addItem()/removeItem() allows adding and removing items directly from sections.
- SectionStack: new APIs: itemIdent/itemStartIndent/itemEndIndent - enables easy indentation of items in a section.
- Menu: implemented 'submenuDirection' that controls switching media and location of the submenu icon.
- Menu: fixed keyboard navigation of submenus for submenues that opened to the left (will now correctly expand on left arrow).
- Menu: added autoDismiss property that allows the menu to stay up through several clicks on it. Used by the ListGrid header context menu to allow showing/hiding of multiple columns without having to re-open the context menu.
- Layout: fixed layoutMargin not being incorporated in dropLine position calculation in some case resulting in a slightly-off drop indicator
- Layout: new APIs showMember()/hideMember() that hook default animation for Layout.
- Layout: new API: leaveScrollbarGap. This setting avoids the layout resizing all members when the vertical scrollbar is introduced or removed, which can avoid unnecessary screen shifting and improve performance. Default is false.
- Layout: new API: memberOverlap enables overlapping of members.
- Layout: new API: stackZIndex: controls the relative zIndex of members that overlap.
- Layout: new APIs: getMemberDefaultBreadth()/getMemberOffset() - allows the manipulation of the calculated breadth/offset for members of the layout. These are advanced APIs generally intended for use by component developers.
- Fixed a rare case of drag and drop not correctly resolving the drop target when multiple dropTargets are stacked on top of one another with custom handlers
- ValuesManager: now supports 'disableValidation'.
- JSTranslater (server API): fix to correctly escape IE reserved words 'export' and 'debugger'.
- DataSource: sped up client-side filtering logic.
- DataSource: clientOnly DataSources now support a one-time fetch against their dataURL, if one is defined. Results are integrated into the client-side cache and that cache is used from that point forward.
- DataSource: in clientOnly mode, the DataSource will not auto-generate sequence values for
- DataSource: more lenient type conversion for startRow/endRow/totalRows after transformResponse().
- RPC DMI, DataSource DMI (Java Server): fixed re-throw of exceptions generated inside reflection call to application code - now handles subclasses of Error correctly.
- DataBound Components: local field specification now correctly overrides DataSource-derived field type.
- Initial offline mode support: various pieces of the system either work against cached data or queue deltas for later submission to server on reconnect
- Beta support for Adobe AIR runtime.
- Validators: new vlidators: notADate, notADecimal.
- New Taglib: <isomorphic:jsString> makes it easy to pull arbitrary content from a JSP or external file into a correctly escaped JavaScript string, making it easy to embed in SmartClient components.
- RichTextEditor component now part of LGPL package.
- ResultSet: new API willFetchData() allows you to check if your proposed filter criteria will result in a fetch to the server.
- ResultSet: refetch from server on change to textMatchStyle (percolates from higher-level APIs)
- ResultSet: application of more restrictive criteria always results in client-side filtering (unless it's disabled completely)
- Messaging (Server push): unsubscribe from JMS on unregister
- TabSet: improvied layout of 'controls' that can be placed in empty space past the tabs. Previously one had to explicitly size these to align with the TabSet edge in some circumstances.
- ResultSet: some configurations could result in multiple overlapping fetches to the server to fill the cache - fixed.
- Toolbar: optimized component init time for cases where members were added post creation, but before draw.
- TabSet: new API tabIconClick() - fired when the icon on the tab is clicked on.
- TabSet: new API closeCLick() - fired when the close icon on the tab is clicked on.
- TabSet: new API: getTabPane() - returns the pane for a given tab.
- TabSet: new API: showPaneContainerEdges - controls whether the paneContainer shows edges.
- TabSet: new API: getPaneContainerEdges() - allows specification of custom edges for the paneContainer.
- TabSet: new API: symmetricEdges - controls whether or not the same edge media will be used regardless of tab bar position.
- TabSet: new API: leftEdgeSizes/topEdgeSizes/bottomEdgeSizes/rightEdgeSizes - allows customization of edges sizes for assymmetric eges.
- TabSet: new API: showPartialEdges - allows custom specification of which edges are shown.
- TabSet: deprecated APIs: pickerButtonHSrc, pickerButtonVSrc, scrollerHSrc and scrollerVSrc - all still supported for backward compatibility, but replace with: pickerButtonTopSrc, pickerButtonBottomSrc, scrollerTopSrc, scrollberBottomSrc.
- TabSet: scrollers now correctly introduced if tab width overflows due to content change.
- TabSet: disabled tabs no loger selectable from the tab scroller dropdown.
- SimpleType: normalDisplayFormatter(), shortDisplayFormatter() APIs now make the entire record available as the fourth argument
- Improved Date validation to reject some invalid day values and prevent runaway CPU usage in IE6 for some very large values.
- Fixed memory leak that could occur with manually created ResultSet and ResultTree objects.
- ValuesManager: fixed memory leak related to this component.
- DynamicForm: fixed clearFieldErrors() incorrectly forcing redraw.
the field defined as the primaryKey even if its type is not set to 'sequence'.
- DynamicForm: automatically caches and reuses PickLists when safe
- DynamicForm: new APIs to help with reporting validation errors in alternate formats: getItemErrorHTML(), showInlineErrors, showErrorText, showErrorIcons, showErrors() errorOrientation, FormItem.getErrorHTML(), FormItem.showErrorStyle, FormItem.errorOrientation.
- DynamicForm: now supports initialCriteria, and autoFetchData.
- DynamicForm: added file upload support. See the 'Uploading Files' overview topic in the reference docs (search for 'upload') to get an overview of the available options.
- SpinnerItem: Fixed clicks on spinner buttons stealing keyboard focus from the field in Firefox.
- DateChooser: baseNavButtonStyle - enables styling of navigation buttons and date display at the top of the component.
- Server-side DSRequest object now returns values if getCriteria() is called for an 'add' operation, as a convenience.
- New skin: TreeFrog
- Scrollbar: media used by this component now configurable via the standard StretchImg APIs.
- ViewLoader: handleError() now called on eval() and XML->JS translation failure, not just failure to get components from the specified URL.
- Client serialization engine now correctly escapes \r to handle round-tripping to the server. This is generally irrelevant, but technically more correct.
- Window: new APIs: defaultMinimizeHeight, minimizeHeight control the resulting height of a minimized Window.
- Window: new APIs: modalMask, showModalMask, modalMaskStyle, modalMaskOpacity - allows styling of the modal mask that is shown for a modal Window. This can help focus the user on the modal window by showing the rest of the screen as greyed out or some other effect.
- Calendar: new UI component - search the reference docs and see examples int he Feature Explorer.
- History: fixed 'show non-secure elements on this page' dialog in IE6 when used with History module under SSL.
- SelectItem/ComboBoxItem: new API: defaultToFirstOption - Select the first option as the default value for this item.
- Canvas: new API: snapTo and related methods - allows configuration that forces children to 'snap to' various edges/corners of the Canvas.
- Canvas: new APIs: precentBox, percentSource - allows slaving the sizing of the canvas to another Canvas.
- StatefulCanvas: new API: overCanvas autoChild - Auto generated child widget to be shown when the user rolls over this canvas
- StatefulCanvas: deprecated API: showFocus, replaced by showFocused.
- StatefulCanvas: new API: showFocusedAsOver - if true, enables the use of over state when focused when showFocused is true. This is the default. This API is used in the new TreeFrog skin to show alternate focused icons on various UI components (e.g. Buttons, FormItems).
- DateChooser: new APIs: alternateWeekStyles, alternateStyleSuffix - enables alternating styles for the weeks.
- FormItem/StaticTextItem: new API: clipValue - allows control over clipping of the item if it exceeds the fields width.
- FormItem: new API: stopHover() - fired to clear any Hovers that can be programmatically set.
- XML serailizer (Java server): when serializing attributes, back off to using the getNodeName() API when getLocalName() returns null (e.g. Elements constructed via DOM level 1 APIs).
- FileAssembly Servlet (Network Performance): Now accepts HTTP POST (very rare scenario, but now available).
- FileDownload Servlet (Java Server): new API: stripPathComponents: Instructs this servlet to remove the specified number of paths components from the URI before looking for the file on disk. This is useful if you're injecting a version string into your URI that isn't actually part of the path and you can't stript this off more efficiently at a different layer (e.g. Apache mod_rewrite).
- HTMLPane/HTMLFlow: improved script block parsing performance
- HTMLPane/HTMLFlow: improved handling of inline script blocks and remote script loading
- HTMLPane/HTMLFLow: automatically skip loading of SmartClient modules, load all scripts via HTTP GET.
- HTMLPane/HTMLFlow: new API: transformHTML() - provides hook for transformation of retreived HTML.
- HTMLPane/HTMLFlow: now handle inline absolutely or relatively positioned SmartClient components.
- Support dismissal of SmartClient components bound to click masks when the user clicks on SmartClient-managed IFRAMEs in e.g. HTMLPane/HTMLFlow.
- New API: isc.addDefaults() - copies any properties that do not already have a value to the specified object.
- The embedded Tomcat servlet engine that's part of the SmartClient SDK now supports a '--maxThreads' option. Likely applicable only to those doing deep prototyping with the SDK.
- Developer Console now automatically backs off to the skin specified on the page it is launched from, if it can't load the 'SmartClient' skin. This allows for the use of the DeveloperConsole with deployments that push out only the custom customer skin.
- Beta support for Firefox 3.0 (beta 4)
- List: new API: removeEvery()
- DateItem: fixed issue with namespace mode.
- ResultTree: fixed potential for multiple firing of callbacks for auto-created ResultTrees.
- DateChooser: added new APIs for specifying custom media for date/month icons. Filter down for 'icon' when looking at DateChooser instance reference doc to see new APIs.
- XMLTools: ~10% performance improvement in toJS().
- ViewLoader: improved performance of repeated calls to same URL.
- HTMLFLow: suppress multiple calls to same URL between page load and draw.
- XML/WSDL: fixed problems of soap envelope not being generated in some cirumstances.
- XML/WSDL: fixed xsi:type being generated in SOAP messages that didn't call for it.
- XML/WSDL: allow complexElement and complexType definitions of the same name.
- XML/WSDL: fixed subelement namespace handling: use referenced element's namespace if it refers to another element or use parent's namespace if it refers to a type.
- XML/WSDL: improved compatibility with older xslt engines.
- XML/WSDL: improved support for loading a WSDL service from multiple files.
- XML/WSDL: fixed top-level element namespacing when loading an .xsd that would later be used with a .wsdl.
- Client-side XSLT: fixed client-side XSLT processing breaking with URLs that contain anchrors in Firefox 2.0.14 (recent Firefox regression).
- Drag and Drop: Improved performance of drag and drop interactions in Firefox.
- Debugging: worked around bug in Firebug that resulted in incorrect stack traces output by SmartClient.
- Beta support for Internet Explorer 8 (beta 1)
- Support for Safari 3.1
- Many documentation improvements.
- This release rolls up all addendums from prior versions, recorded here.

## Changes in 6.0

- SmartClient now also available under the LGPLv3!
- HTMLFlow: new evalScriptBlocks feature parses and evaluation include script blocks and included scripts
- ResultSet: user updates are now automatically integrated into paged datasets that have partial cache, without requiring new data from the server.
- SmartClient Server: Removed direct dependency on Xerces parser. As a result, if you are using JDK1.5+, you can omit the xercesImpl.jar and xml-apis.jar from your deployment. SmartClient will then use the native Java parser/serializer (or whatever is configured in your environment) to do its work.
- SmartClient Server: Java DMI methods will now be passed the ServletContext and RequestContext, if they ask for it in the method signature.
- SmartClient Server: Improved Java DMI error reporing.
- Significant improvents in GridRenderer performance in IE7 and lesser improvements in all other browsers. This improves ListGrid, TreeGrid, and CubeGrid rendering performance.
- Fixed edge case with SectionStackHeader drag-resize in some cases resizing the wrong component.
- A remove operation on a clientOnly DataSource that matches no records now no longer returns an error.
- DataSources marked `clientOnly: true` that do not specify any `testData`, but do specify a testFileName or dataURL will automatically fetch once against the specified URL with no criteria, then work against a local cache from there. This enables another mode of rapid prototyping.
- Large, pervasive improvements in documentation.
- Various Visual Builder improvements.
- Fixed some edge case glitches with animation.
- New APIs: ListGrid/TreeGrid.transferSelectedRecord(), transferSelectedRecords().
- The optional 'data' parameter to History.addHistoryEntry() is now documented.
- Improved HTMLFlow SCRIPT block parse and execute engine to accept all valid script declarations.
- New API: ListGrid.getEditedCell()
- Improved Plugin Bridges integration with Flash, Applets, custom plugins.
- Fixed issue with Reference Docs bookmarkability in some cases.
- Extensive new topic on SmartClient Skinning in the Reference Docs.
- Added extensive links from Reference Docs to Feature Explorer examples
- All bug fixes against previous versions posted in the Addendums have been applied to this build.

## Changes in 5.7.1

- Fixed context menu positioning in Safari 3.x Beta for Windows
- Fixed issue with ListGrid.chartData() failing on a databound grid
- Fixed issue with embedded Flash objects burning through elements positioned in front of them on the page
- Added example showing how to generate a DataSource dynamically from Java Bean (see /examples/server_integration/DataSourceGenerator.java).
- Fixed bug with TreeGrid animateOpen/animateClose of the root node
- Fixed bug with column show/hide on a TreeGrid causing the tree field to shift unexpectedly (only happens if tree field is not the first field).
- Fixed invalidation of multiple ResultSet caches on same thread causing all but the first invalidations to fail
- Enhancement: accept a single node in lieu of an array as node.children in Tree
- New API: DataSource.childrenField
- Fixed ListGrid.removeSelectedData() not working as expected on non-databound ListGrids
- Fixed issue with users being able to use Layout resizers to get into a state where the resizer is off the screen and page scrolling is inroduced.
- Fixed observation breakage with Canvas.scrolled()
- New APIs: ResultSet.getValueMap(), ResultSet.allMatchingRowsCached(), ResultSet.allRowsCached()
- Fixed bug with SmartClient reference not correctly showing the correct entry when linked to directly.
- Fixed sizing of Canvases created with Canvas.htmlElement on Moz/FF platforms
- Enhancement to Reference Documentation: show attributes and methods inherited from superclasses up to, but no including Class or Canvas in all components
- Support foreignKey definition pointing to another field in the same DataSource
- Fixed scriptInclude transport interperting wrapping a single argument callback in an array
- Enhancement: show the fully constructed URL for scriptInclude transport in the RPC tab of the Developer Console
- Fixed problem with selecting items in a native select box when the values contained HTML
- Enhancement: can now directly change the DataSource ID of SalesForce DataSources from the Visual Builder
- New APIs: DataSource.callbackParam, OperationBinding.callbackParam
- New APIs: DataSource.requestProperties, OperationBinding.requestProperties
- Fixed bug with dropOnShortening not working corretly in some cases
- Fixed issue with dynamic binding of TreeGrid to a new DataSource not correctly defaulting to a single tree field to match behavior of TreeGrid init with no fields
- Fixed bug with XML requests containing valid, but non-ASCII tag and attribute names being incorrectly encoded for SmartClient server consumption
- Enhancement: derive implicit foreignKey relationship between two datasources by finding first matching field name in lieu of an explicit foreignKey setting
- Enhancement: ListGrid.fetchData()/filterData() now accepts a DynamicForm as criteria and automatically calls getValuesAsCriteria() to derive the criteria
- Enhancement: Support trees being initialized with Tree.data for modelType: "children"
- Fixed issues with Window.dismissOnEscape when the window had a parent element
- New Kapow module: enables easy integration with the Kapow Technologies Mashup Server
- Fixed issue with showing menus inside windows breaking the window's modality
- Fixed DynamicForm checkboxes continuing to respond to clicks when disabled
- Fixed DateChooser not defaulting to today's date when shown on an empty date field after having been moved to a different month and/or year on another field
- Enancement: when RPCManager DEBUG threshold logs are enabled, automatically truncate log statements longer than 25000 bytes to avoid large data loads from freezing the browser temporarily. This limit can be removed by enabling another log category as specified in the message that warns about truncation
- Fixed: missing LayoutSpacer schema.
- Expanded documentation

## Changes in 5.7 Final

- Fixed issue with 'align:left' not working correctly if there was no icon in a button and iconAlign was set to 'right'.
- Visual Builder code panes switched from Canvas to TextArea to make selection for copy and paste easier.
- Fixed databound comboboxes losing data in certain edge cases.
- Fixed JSTranslater loop detection logic swallowing exceptions in some cases.
- Fixed ListGrid.draw() failing to poupulate the edit form properly if edit values had been set before draw.
- DynamicForm.setItems() after construction could fail to apply the current form values to the new items.
- Window now uses a Canvas for body instead of a Layout if the items object provided is raw HTML.
- Layout: new property 'defaultLayoutAlign' - applies to all Layout members. Previously to achieve this behavior, every member had to specify a layoutAlign to override the default.
- JSTranslater: when translating Maps, ignore any complex keys as they produce invalid JS.
- Window: supports contentsType 'page' and 'fragment' to allow Window.src to be specified as either compelte pages or chunks (similar to HTMLPane/HTMLFLow).
- Fixed RadioGroupItem/RadioItem handling of boolean keys in valueMaps.
- Layout: dropLine (shown when reordering or dropping into a Layout) is now user-configurable.
- Documented DateRange Validator.
- Fixed Visual Builder save/load breaking on pathnames that contained spaces.
- Additional functionality documented on Hover class.
- XML->JS translation: <children><children> on a field with multiple=true now produces an empty array instead of an empty object with an empty array.
- Fixed NPE in RPC DMI if client passed null for data.
- Fixed ListGrid firing selectionChanged twice when a record was selected in single selection mode.
- Fixed Hover positioning not taking its shadow size into account for auto-placement when re-shown.
- Enabled XPath support for Safari 3 series (beta support)
- Added more agressive caching of ResultSet filter criteria such that a more constraining filter is applied on the client instead of turning around to the server. Can be disabled with criteriaPolicy="dropOnChange" on the DataSource.
- HTMLFLow: additional hooks: loadingContent() and contentLoaded()
- HttpProxyServlet moved to comm.isomorphic.servlet, backcompat stub still present in com.isomorphic.tools.
- Support for headerBaseStyle, headerTitleStyle at ListGridField level.
- Extensive documentation on SmartClient JAR files and their dependencies in the 'Deploying SmartClient' overview topic in the reference docs.
- Exception wrapping in RPC DMI and DataSource DMI moved to IDACall handleDSRequest/handlRPCRequest so that end users can override this behavior. The default behavior remains the same as before.
- List.sortByProperty() now takes an additional, optional 'context' parameter that allows additional context to be passed into normalizers. Higher level constructs such as ListGrids now pass additional context to normalizers.
- Additional metadata now available on RPCRequest that are DMI-mapped. RPCRequest.getAppID()/getServerObjectID()/getMethodName()/getARguments().
- Support for low level dom element size matching via Canvas.htmlElement/htmlPosition/matchElement
- Maked Windows can no longer be dismissed with escape keystroke.
- Visual Builder: if an error occurs during load or import, warn, but make content that did load available for editing.
- Visual Builder: new Import feature allows import of any XML or JS file, so long as they conform to Visual Builder parameters.
- Documented ResultSet.invalidateCache()
- Visual Builder: FormItem IDs now user-editable.
- HibernateDataSource: fixed type='text' length > 1999 fields mapping to type 'string', thus producing fields that are too short. Now maps to type 'text'.
- HibernateDatasSource: fixed add opertions breaking on dynamic datasources in some cases.
- Lots and lots of new documentation system-wide.

## Changes in 5.7 RC1

- Fixed: calling 'setProperties' to update ListGrid.fixedRecordHeights, bodyStyleName, bodyBackgroundColor now successfully applies the updates to the rendered grid.
- Fixed: avoid an error if ListGrid.validateRow() is called with a rowNum beyond the end of the list
- Enhanced: support navigating through options in databound SelectItems by entering first character if the entire set of options has been loaded
- New: additional filtering APIs for DataBinding: ResultSet.applyFilter(), ResultSet.initialLength, ResultSet.initialData, ResultSet.neverDropUpdatedRows, DataSource.applyFilter(), dataSource.fieldMatchesFilter()
- Fixed: issue in Mozilla based browsers where setting opacity of a dynamic form could break change handling
- Fixed: resolved a case where styling including large negative margins could cause page coordinates to be misreported for relatively positioned widgets
- Enhanced: Additional ListGrid APIs for customizing header button appearance
- Enhanced: DynamicForm.getItems()/getFields() to make fields and items more truly synonyms
- Fixed: Fix for a bug where callback passed to saveAllEdits() could fire when multiple rows were being saved, some of which failed validation
- Fixed: Fix for a case where hitting the Escape key during RPC requests could cause the requests to fail in Mozilla based browsers
- New: DynamicForm/FormItem.selectOnFocus
- Enhanced: Have editable ListGrids pick up a number of additional editor properties directly from the field definition. See the editing documentation group in the reference document
- Fixed: FormItem titles now render focused state if showFocused is true for the item
- Fixed: fixed a case where a child widget could be clipped by its parent even with keepInParentRect set to true
- New: Canvas.showNextTo() method
- New: MenuItem.action()/Button.action() methods
- Fixed: resolved an issue where in some cases Layouts would fail to react to changes in member size due to content changes
- Fixed: avoid an error with `"isOneOf"` type validators applied to fields with no specified set of valid options or vauleMap
- New: new StatefulCanvas.showTitle property
- Fixed: PickList.optionFilterContext is now working properly
- Fixed: Fix for a case where hierachical menus could fail to display changes to their underlying tree of options
- New: SelectItem/ComboBoxItem fetchData() method to fetch options for databound items
- New: SelectItem/ComboBoxItem dataArrived() notification method for databound items
- New: ResultSet.updateCacheFromRequest allows DSResponses to omit successfully saved data from add/update requests.
- Fixed: resolved some issues with inline editing of TreeGrids
- Enhanced: support for databound TreeGrid drag and drop behavior for modifying the underlying data
- Enhanced: cache-sync for ResultTrees. Databound trees will now update to display changes made to the DataSource data via standard addData()/updateData()/removeData() APIs
- Fixed: in some cases a Menu could be rendered offscreen after being dismissed via Escape keypress
- Enhanced: various improvements to Window.maximize() / Window.restore() default behavior
- Fixed: Fix for a case where Slider value labels would be hidden inappropriately in some cases
- Fixed: ListGrid now behaves correctly if server does not provide a totalRows for paged results
- Fixed: Calling setButtons() on the ask dialog could cause errors in some cases
- Fixed: Fix for an issue where in some cases `position:"relative"` canvases with showEdges set to true could appear with mis-positioned edges
- Enhanced: FormItem.timeFormatter added for customizing Time values displayed in fields other than TimeItems
- Enhanced: ListGridField.displayFormat/inputFormat allows for consistent field-level control over display of dates and times
- Enhanced: added some FormItem properties for customizing hover appearance
- Fixed: minor visual "flash" when rolling over different parts of a SelectItem in some browsers
- Enhanced: support for specifying dragTarget as a widget ID as well as a live widget instance
- Enhanced: support for specifying tabBarControls as IDs in addition to live widget instances
- Fixed: avoid a possible error if a RadioGroupItem is specified with valueMap set to `["true","false"]`
- Enhanced: Major improvements made to the Visual Builder tool, particularly for saving/retrieving stored SmartClient projects
- New: Documented "autoChild" subsystem, used for customizing many automatically generated components.
- Fixed: Resolved an issue where TabSet scrolling controls would not be written out in some cases
- Enhanced: Improved support for custom handling of validation on hidden fields in DynamicForms and ValuesManagers.
- Fixed: avoid an error if a FormItem is specified with `colSpan:0` - treat as `1` instead.
- Enhanced: support for customization of SelectItem/ComboBoxItem pickLists via pickListProperties
- New: canvas.showDragShadow/dragOpacity for customizing drag appearance
- Enhanced: Improved logging capabilities on SmartClient objects: object.echo, object.echoAll, object.logEchoAll
- Fixed: SmartClient SQL prototyping: primaryKeys are no longer part of the values clause of a SQL Update
- Enhanced: FileAssembler servlet no longer sends expires headers for URLs it intercepts
- Fixed: ensure that when global servlet.compress flag set to false we don't serve compressed files even if fileAssembly.js enables compression for this URI
- Enhanced: Added CSS to the list of mime types that can be compressed - affects FileDownload servlet, CompressionFilter
- Fixed: Fixed loop detection logic in JSTranslater.toJS()
- Fixed: JMS RealtimeMessaging provider now rebinds correctly if server goes away, then comes back up.
- Fixed: CompressionFilter, could fail on some containers that did not provide a default charset
- Enhanced: added setProperties() transformers to BigDecimal, BigInteger, java.sql.Date, java.sql.Time, java.sqlTimestamp
- Enhanced: in setProperties(), if passed an inbound Map for a value that takes what looks like a bean, try to instantiate that type of bean using newInstance() and populate it via setProperties()
- Fixed: FileAssembler could serve stale assembled file if compression was previously enabled, but subsequently turned off.
- Fixed: in getValues() getValueSets(), if the operationType is remove, call through to getCriteria() getCriteriaSets(), just like we do for fetch.

## Changes in 5.7b1

SmartClient 5.7b1 is a beta release - partial list of fixes and enhancements:

- New: Beta level support for the Opera browser
- New: Beta level support for the Safari 3.0 beta for Windows browser
- New: Beta level support for the Adobe Apollo desktop runtime engine
- New: Support for drag and drop of records between databound ListGrids, supporting standard ListGrid dragDataActions
- New: Chart interface and FusionChart implementation, with ListGrid and CubeGrid integration
- New: APIs for retrieving and setting view state (tree open nodes, selected nodes, etc) on ListGrid and TreeGrid (see ViewState group)
- Enhanced: Toolstrip enhancements to allow vertical operation
- New: listGridField.canToggle for one-click value changing for boolean and valueMapped fields
- New: jsonPrefix/Suffix to enable easier wrapping of JSON responses to avoid spoof attacks
- Fixed: server bug where using Java null as a key in a Map would be serialized as JavaScript not acceptable to IE ("null" string key in Map already OK)
- Fixed: workaround for IE native bug when FileLoader loads dozens of JS files in a single FileLoader.loadJSFiles() call
- Fixed: issue where saving tree nodes would pull in entire Tree datastructure
- New: API DynamicForm.itemChange()
- Fixed: certain special characters hanging search in documentation viewer
- Fixed: simultaneous native tooltip and SmartClient hover if setProperties(prompt) called
- Fixed: inability to suppress prompt on filterEditor in ListGrid
- Fixed: a server bug that, with schemaless XML to JS transform, would drop the second and later elements of the same name
- Enhanced: dynamic WSDL loading (loadWSDL()) now works without the SmartClient server
- New: added example configuration for connectng Messaging module to Apache ActiveMQ
- Enhanced: expanded documentation on component schema
- Fixed: Admin Console: case where changing the default database would not update to display the new default database
- Enhanced: If a layout is initialized with a null slot in the members array, log a warning message and remove the empty slot
- New: support for dsRequest.useFlatHeaderFields
- New: WSDL tab in developer console now allows interactive testing of WSDL services
- Fixed: an issue where SpinnerItems allowed trailing alpha characters to be entered
- Enhanced: Modifications to the Time class and related systems to ensure that all Time type fields are stored and retrieved as UTC timezone times rather than local times. Avoids the need to adapt time values to browser locale
- Enhanced: MenuButtons now hilite the access key by default
- Fixed: disallow editing of fields marked as disabled in a ListGrid.
- Fixed: bug where relogin dialog could fail to be displayed after session timeout in Internet Explorer on HTTPS sites using document.domain
- Enhanced: expanded documentation of properties used to customize ListGrid headers
- New: implemented additional ListGrid styling control via ListGridField.baseStyle, ListGrid.recordBaseStyleProperty
- New: exposed FormItem.form - read only property to access a FormItem's dynamicForm.
- Fixed: an issue whereby user could not reliably tab through toolbar buttons on the SmartClient ask / warn dialogs.
- New: support for customizing the cursors applied to the SplitBar class
- New: troubleshooting documentation covering the most common issues arising during SmartClient installation.
- Fixed: Internet Explorer-only bug whereby list grid editing focus could unexpectedly be taken from the edit field in some cases.
- New: class RestDataSource provides cookbook integration with generic back ends (Ruby, PHP, Perl, etc) using XML or JSON communication over HTTP.
- New: exposed various advanced properties on the Class class which apply to expanding the SmartClient class system, including class.init() class.addPropertiesOnCreate
- Fixed: bug where a Canvas could be mis-detected as having been explicitly sized by the end user if setOverflow() was called with certain timing
- Fixed: bug where the view could not be automatically detected by a ViewLoader if the last created component auto-created peers
- Fixed: problem where getters and setters would not be automatically shown in documentation viewer
- New: ListGrid method 'focusInFilterEditor([fieldName])' to focus in the filter editor for a field (if showing)
- New: system helper methods isc.sortObject() and isc.sortObjectByProperties() for sorting javascript objects by key or property values.
- Fixed: case where old views would not be hidden in response to viewLoader.setViewURL()
- Fixed: issue in the ListGrid whereby if leaveScrollbarGap was set to false, when scrollbars were hidden, the space used by the scrollbar would not always be reclaimed
- New: publicly supported APIs DynamicForm.setValueMap() and ListGrid.setValueMap() for updating the valueMap of fields at runtime
- New: methods 'fetchData()' and 'filterData()' on the DynamicForm and ValuesManager class. Allows the developer to perform a fetch and display the first record returned in the editor
- New: API LinkItem.linkTitle
- Fixed: a number of minor platform-specific ListGrid inline editing bugs
- New / Enhanced: Menus now support items and setItems() as synonyms of data and setData()
- Fixed: a number of minor platform-specific ListGrid inline editing bugs
- Fixed: JavaScript error that could be caused by modifying the size of certain Layout widgets
- Enhanced/Fixed: TabIndex management improvements
- Enhanced: Reference Documentation expanded and improved
- Fixed: updating titles of SmartClient ask and warn dialgos
- Fixed: CubeGrid facet drag reordering in column headers could error out depending on mouse position on drop
- Enhanced: StretchImgButtons.wrap property applied to button titles
- Fixed: SectionStack.setSectionTitle() could fail to update the title in certain SectionStacks
- Fixed: SpinnerItems would allow trailing non-numeric characters to be entered
- Fixed: Format of values from SelectItems with multiple specified as true when committed to the server now matches format of native HTML multiple select items.
- New / Enhanced: New ListGrid attributes recordBaseStyleProperty and recordCustomStyleProperty allow for greater control of per-record styling.
- Fixed (platform-specific): FormItem.setDisabled(false); could leave items inaccessable in some cases
- New: Standard "mustBeExactLength" error message for lengthRange validators where max and min values match
- New / Enhanced: New filter-editor related APIs: ListGrid.filterOnKeypress and ListGrid.filterByFilterEditor()
- Enhanced: Improved support and documentation for dateFormatter (may be applied to ListGrids / ListGridFields or FormItems
- Enhanced: WSDL schema viewer in the developerConsole now allows interactive tests of WSDL services and generates sample requests and responses.
- Enhanced: Safari support for Messaging (server push) and limited support for XPath selection
- New: Tab.canClose and Tab.canCloseTabs properties
- New: Support for ListGridField.icon
- New: Support for Button.iconClick
- Enhanced: isOneOf type validators pick up any specified valueMap as the set of valid options by default.
- Enhanced: comboBoxItem pickLists now auto-size to their content by default
- Enhanced: Enforcing item.length limits for textual data in all form item types, not just TextItems
- Enhanced: Improved and expanded localization APIs and documentation
- Enhanced: Various documentation updates and additions, including HTTPProxy installation, clarifications on Skinning
- New / Enhanced: support for dataSource.schemaNamespace
- New / Enhanced: support for new dataSource / operationBinding dataProtocol settings "postXML" vs "postMessage"
- New: Added RPC tab to the Developer Console for improved RPC debugging
- Enhanced: Improved handling of optionDataSource, displayField and valueField on FormItems and ListGrid fields.
- New: Window APIs dismissOnEscape and shouldDismissOnEscape()
- Fixed / Enhanced: Text based form items where changeOnKeypress is true now fire change handlers in response to context menu cut/paste
- Enhanced: Support for building Hibernate dataSources in the dataSource wizard (visual builder application)
- New: isc.showLoginDialog() API to handle complete login flow
- New: ComboBoxItem.showAllOptions attribute
- Enhanced: APIs for finer control of accessKey hiliting in button title
- Enhanced: Improved support for menu fields
- New: Server side support for JDK 1.6
- Enhanced: SDK embedded servlet engine updated to Tomcat 5.5. Note that Java SDK is no longer required to run the embedded server.
- Enhanced: Numerous skinning improvements

## Changes in 5.6 Final

- Major new documentation on Visual Builder and XML component usage
- RichTextItem documented and exposed, examples added
- DataSource Wizard added to Visual Builder
- Ability to save multiple files in Visual Builder
- New "Extending" folder in Feature Explorer with several examples
- New Hibernate and Spring examples and docs
- New SalesForce module with source code, used as an extensive WSDL binding example
- Separated out Visual Builder palette data to allow customization
- New isc.askForValue() built-in Dialog, similar to window.prompt()

## Changes in 5.6b3

- New / enhanced documentation areas: custom SimpleTypes, WSDL binding, useFlatFields schema flattening, TreeGrid load on demand, comboBox custom filtering, XML schema chaining, custom drag trackers
- Enhanced: listGridField.optionDataSource can now be used to fetch valueMaps from other DataSources dynamically
- Enhanced: listGrid/treeGrid.dragTrackerMode now offers several different drag appearances
- Fixed httpProxy URL hardcoding
- Fixed issues with cross-file references from WSDL<->XML Schema files loaded at different times
- Enhanced: ViewLoader and HTMLPane can now use HTTPProxy from cross-domain content loading
- Enhanced: canvas.hoverWrap for controlling wrapping in hovers
- Enhanced: new XMLTools.xmlSerialize() API
- Enhanced: support for cross-domain relogin
- Enhanced: new API FormItem.changed() fires *after* a change has been committed
- Enhanced: better DMI error reporting
- Enhanced: DynamicForm now uses StaticTextItem whenever field.canEdit is false, not just for selected data types
- Fixed escaping of special chars in History entry titles
- Enhanced: ComboBox now has filterClientPickListData() override point for customized filtering and display rules
- Fixed inability to title first history entry in IE
- Enhanced: listGrid.getEditValue() and similar methods now get latest user-entered when called on current edit cell
- Fixed JS error resizing contentsType:"page" HTMLFlow before draw
- Fixed JS error possible when LayoutSpacer was last in a Layout (introduced in beta2)
- Fixed native text drag selection allowed in some form elements in FireFox
- Enhanced: DynamicForm/ValuesManager.setValues() now automatically handles an Array (uses first member if Object)
- Fixed ListGrid.startEditingNew wiping local datasets when DataBound
- Enhanced: ValuesManager.addMember()/removeMember() now takes String ID
- Enhanced: ValuesManager now warned about mismatched member form DataSource settings
- Fixed CubeGrid facetValue drag and drop issue when using raw Numbers as facetValueIds
- Fixed XML datetime parsing expecting exactly 3 digits for milliseconds
- Fixed hanging a drag by mousing up outside the Window (IE only)
- Fixed spurious error messages for isColor validation and other non-error XML transform cases
- Enhanced: Shortened XML messages for SOAP services by sharing namespace prefix definitions
- Fixed issues with tabIndex auto-assignment for multiple forms being added and removed from Layouts
- Fixed large margins causing click to not be fired in certain deeply nested components in FireFox/Safari
- Fixed spurious errors for private properties when serializing Java Beans
- Fixed titleOrientation:"top" causing some form layouts to overflow
- Fixed warning/alert dialogs being able to be dragged offscreen
- Enhanced: can now explicitly mark a SectionStack section or section.item resizeable
- Fixed deprecation flag sticking in SmartClient Reference
- Enhanced: SectionStack headers and other widgets now respond to two rapid click as two distinct clicks instaed of a double click, which would no-op
- Fixed JS error when hand-instantiating a ResultSet with a String value for resultSet.dataSource
- Fixed bugs handling XML Schema xs:extensions (XML Schema inheritance)
- Enhanced: ToolStrip now has built-in separators and resizers
- Fixed avoid spurious drag scrolling (eg drag scrolling triggered by dragging a scrollbar thumb of another widget)
- Fixed bug where manual calls to listGrid.validateCell() would not clear old errors
- Fixed dateTime values being sent in local time with some servers

## Changes in 5.6b2

- History module - in IE only you can now set the title of the history entry by passing a title to addHistoryEntry() and/or setting one via setHistoryTitle().
- Automatically apply an isOneOf validator on fields of type "enum"
- Drag reorder indicator now shown in all skins
- Fixed CubeGrid facet height not auto-adapting on h-resize.
- Support right-collapsing resize bars via resizeBarTarget: "next"
- Fixed erroneous introduction of scrollbars into IFRAME created by HTMLFlow/HTMLPane when (contentsType is "page")
- Menus whose overflow previously exceeded browser height (and made selection of some items impossible without a scroll wheel) now size to the browser height and automatically introduce scrollbars.
- Fixed TabSet.updateTab() erroring out in some cases if called before component is drawn.
- Fixed VLayout limiting scrolling when a LayoutSpacer was present at the end.
- Fixed Shift-F10 keyboard shortcut showing context menu on the wrong element in some cases.
- Isomorphic web.xml files now comply with strict dtd verifiers (for Geronimo)
- Improvements in web service binding compatibility
- Numberous ListGrid inline edit, validation API fixes, updates.
- Update APIs and docs for ListGrid.getFieldState()/setFieldState()
- Fixed Developer Console sometimes truncating logs on reconnect to main window (introduced in 5.5b1)
- Don't bother trying to call non-public methods (bean introspection) in DataTools.getProperties(). Harmless, but generated bogus errors.
- RPCRequest.paramsOnly deprecated in favor of useSimpleHttp. Old property still supported for backompat. Also fixed RPCRequest.params being dropped on a POST if RPCRequest.data was also specified.
- Improvements to Layout Drag and Drop interactions.
- Various documentation fixes.

## Changes in 5.6b1

SmartClient 5.6b1 is a beta release - partial list of fixes and enhancements:

- isc.FL alias for isc.FileLoader
- Ascending/descending images in TreeGrid skins were reversed in some skins. Fixed.
- Added default edge media for skins other than SmartClient.
- FileDownload configuration - added default expiration for mimeType image/x-icon: 1day
- Added collapse indicator on all Layout resize bars.
- Fixed some pickLists overflowing offscreen, introducing page-level scrolling.
- Improved stack trace reporting in IE7
- Fixed problem with Window maximize/minimize inside Layouts.
- Improved support for the Window.src attribute
- New API: RPCmanager/RPCRequest.promptStyle and related attributes.
- Improved i18n documentation - making it easier to determine localizeable strings in SmartClient components.
- New SmartClient module: History - supports synthetic history creation and navigation via back/forward browser buttons and direct history navigation in IE, Firefox.
- Various reference documentation fixes.
- Fixed certain kinds of links in the reference documentation view not working.
- Fixed TreeGrid dragTracker disappearing when dragged node had no icon.
- New APIs: ListGrid.getFieldState(),setFieldState(),fieldStateChanged()
- Added extensive documentation on performance optimization techniques. See Optional Modules->Network Performance and sub-topics in the reference docs.
- New API: isc.clone()
- Added example of integration with Hibernate and associated documentation in reference docs.
- Ensure that all DSResponse records go through valueXPath interpolation when returned via the Java RPCManager class.
- Embedded HSQLDB bumped to latest release version (1.8.7).
- DataSource DMI: provide DSRequest criteria as bean binding to target method if DSRequest values are null.
- Fixed TabSet.getSelectedTabNumber() reporting incorrect tab if new tabs were dynamically inserted before the currently selected tab.
- Significant usability, stability improvements to Visual Builder tool.
- Improvent to TreeGrid spring-loaded folders: allow spring-loading even if the current drop target will not accept a drop of the currently dragged data.
- Fixed keyboard navigation of Menus not starting at first menu item in certain circumstances.
- New API: ListGrid.autoSaveEdits and other multi-row edit properties.
- Support page setting document.domain. This case is automatically detected, no configuration is necessary.
- Support keyboard navigation on a closed, databound select iff all data is loaded.
- New API: TreeGrid.canDropOnLeaves().
- Fixed bug in ListGrid.cellHasChanges() side-effecting submitted values in certain circumstances.
- Callback supplied to ListGrid.saveEdits() now fired on validation failure and takes additional params.
- Added additional styling options to DateChooser.
- Various SelectItem/PickList fixes.
- Various ListGrid inline editing fixes.
- Fixed ListGrid.showField()/hideField() called before draw() would produce incorrect result.
- Fixed xmlNamespaces specified on DataSource operationBinding not being respected.
- Fixed slide/wipe animations of members with showEdges: true inside Layouts.
- Fixed single-section SectionStack having first section forced open even if it was explicitly marked expanded: false.
- DMI configuration - When serverConfig specifies lookupType="factory", the create() method of the factory is now dynamically passed the serverConfig configuration as a Map. This allows you to to retrieve custom attributes of the serverConfig object.
- Tab scroller menu on TabSet had problems with long tab names. Fixed.
- Fixed rendering issues with ComboBox icons.

#

©2013 and beyond Isomorphic Software, Inc. All rights reserved. Your use of this software is subject to the License Agreement. Isomorphic Software, SmartClient, and all Isomorphic-based names and logos that appear herein are trademarks or registered trademarks of Isomorphic Software, Inc. All other product or company names that appear herein may be claimed as trademarks or registered trademarks of their respective owners. This product includes software developed by the Apache Software Foundation (http://www.apache.org/). This product includes Hypersonic SQL.