# Smart GWT Release Notes

- 4.0
- 3.1
- 3.0
- 2.5
- 2.4
- 2.2
- 2.1
- 2.0
- 1.3
- 1.2
- 1.1
- 1.0 b2

## Release Notes for Smart GWT 4.0

#### New Features

##### General

- Added support for SmartGWT reflection.
- Much improved and extended support for configuring AutoChildren
- Added classes LogicalDate and LogicalTime to represent SmartClient logical dates and times, respectively.

##### SpinnerItem

- Added SpinnerItem.setNextValueHandler() and setPreviousValueHandler().

##### DataBoundComponent

- Added support for configuring a DataBoundComponent's hiliteEditor via the AutoChild system.
  See DataBoundComponent.hiliteEditor.
- 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.
- Expose new feature, UserSummary, configurable in ListGridFields.
- Exposed DBC Hiliting classes HiliteRule, HiliteEditor and AdvancedHiliteEditor for SGWT

##### DataSource

- 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
- Fix DataSource reference not being cleaned up after addData() for clientOnly DataSources.

##### RestDataSource

- support for "invalidateCache" flag for RestDataSource added

##### ResultTree

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

##### RPCManager

- Added additional RPCManager.exportContent method overloads.
- 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.
- 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.
- Added extra logging categories to the detailed timing measurements
- Added RPCManager.exportImage() for exporting SVG graphics in PNG or JPEG format.
- Added optional detailed timing data for both client- and server-side DSRequest processing to the Developer Console RPC tab
- New API RPCManager::startSQLTransaction()

##### Drawing

- 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.

##### Date

- 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".
- Expose Date.get/setWeekendDays()

##### Tree

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

##### Gauge

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

##### AutoTest

- Add new 'Getting Starting FAQ' section to deal with common issues with using the new TestRunner API/Feature.
- Improve AutoTest.isGridDone() to detect more cases of pending loads,
  such as from ListGrid.scrollToRow() for unloaded rows.

- Add getElements() method to AutoTest. Improve logic in getElement() to allow ListGrid rows to be returned.

##### Button SectionStack StatefulCanvas

- 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.

##### Calendar

- Calendar.getDateLabelText is now a valid override point, allowing customization of the date label text
- Added i18n attributes for eventStartDate/EndDate/Description/LaneFieldTitle
- Prevent timeline events from being dragged beyond the end of the timeline; have the drag target and event overlapping cater for timelineEventPadding; added support for creating events by clicking in the timeline, and for backgroundMouseDown and backgroundClick
- Exposed timelineEventMoved and timelineEventResized and redoc'd eventSnapGap to cover Timelines
- 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

##### CubeGrid

- Allow creation of custom method for CubeGrid.makeChart().

##### DateChooser

- 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

##### FacetChart

- 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.
- 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 x- and y-axis-specific value formatters to FacetChart.
- Documented PrintProperties.printForExport and added information about using printForExport when preparing DrawPanes and FacetCharts for export.

##### FieldPicker

- Up/Down buttons added to move visible fields in FieldPicker.

##### ListGrid

- Add capability to pass String field name to DBC.getFormulaFieldValue()
  and DBC.getSummaryFieldValue() rather than the actual ListGridField.
- Access to the GridSummary and GroupSummary functionality on the ListGridField has been exposed through SmartGWT.
- Added new API headerSpan.setHeaderButtonProperties(), and modified signature of listGridField.setHeaderButtonProperties() in order to support customization of header buttons for fields / header spans even when the button constructor is
  not a subclass of Button.
- 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.
- 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 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
- 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.

##### ListGrid TreeGrid

- 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

##### ScreenReader

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

##### Scrollbar

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

##### TabSet

- Added two methods to TabSet, setCanCloseTab() for changing a Tab's canClose property
  and setCanCloseTabs() for changing the TabSet's canCloseTabs property.
- Added support for drag reorder of Tabset tabs.
- added TabSet.defaultTabHeight as corollary to defaultTabHeight and improved docs
- Notification for tab reordering event: tabsReordered()

##### TreeGrid

- Added support for attributes openerIconWidth and openerIconHeight to TreeGrid. This
  enables opener icons (typically a [+] or [-] symbol) to be non-square.

##### TreeMenuButton

- added TreeMenuButton (for localization only)

##### TreeMenuButton Menu

- 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 DynamicForm FormItem StaticTextItem TextAreaItem

- 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.

##### BlurbItem HeaderItem StaticTextItem

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

##### ComboBoxItem FormItem TextAreaItem TextItem

- 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 PickList

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

##### ComboBoxItem PickList SelectItem

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

##### FileItem FormItem UploadItem

- 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

##### 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.
- Exposed formItem.iconHSpace and formItemIcon.hspace attributes to customize horizontal spacing of FormItem icons.
- Added setAutoChildProperties() for FormItem and Canvas, and well as getters to return the autochild for a FormItem or Canvas.
- Added changeAutoChildDefaults() for FormItem and Canvas as well as Canvas.setAutoChildConstructor().

##### FormItem TextItem

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

##### SelectItem PickList

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

##### Validators

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

##### PdfExport.java ResourceLoader.java

- 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.

##### DSRequest.java

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

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

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

##### 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.

##### BuiltinRPC.java DataSourceTools.java

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

#### Bug Fixes / Other Changes

##### BmmlImporter

- 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.
- Fixed the "The file is not in BMML format." warning when attempting to import a file from the local disk in BMML Importer.

##### DataBoundComponent

- Fixed an issue where calling "getRecordList()" on a DynamicForm would return a broken RecordList object
- 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.
- 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
- 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.
- Added missing i18n attributes dataBoundComponent_editHilitesDialogTitle and hiliteRule_iconFieldTitle

##### ValuesManager

- Fixed the issue that DynamicForm.updateOperation was not honored for implicit saves when using a ValuesManager.
- Implement method ValuesManager::getMemberCanvases(), and redoc getMembers() as a convenience method that can only be used if all members are DynamicForms

##### KeyPressEvent KeyDownEvent KeyUpEvent

- isAltKeyPressed, isCtrlKeyPressed and isShiftKeyPressed helper methods added to KeyPressEvent, KeyUpEvent and KeyDownEvent events for FormItems.

##### DataBoundComponent DataSource

- 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

- Fix issue where certain field types in a DataSource, if present, may cause an error in
  DataSource.recordsAsText().
- Fix error in DataSource with cacheAllData: true set.
- Fixed available Operator list for Date fields in FilterBuilders
- Documented the special DataSourceField.sqlDateFormat values "epoch" and "epochms".
- Added a note to the Java Module Dependencies documentation on how to use iText 2.1.7 with the Server Framework's Content Export module.
- Updated the "Java Module Dependencies" documentation to note that the Batik JARs are also needed if RPCManager.exportImage() is to be used.
- Updated the "Java Module Dependencies" documentation 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
- Fixed criteria produced by RelativeDateItem and DateRangeItem
- 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 a loop-counter bug in validateJSONRecord
- Fix DSrequest.getSort() so that exception is not thrown.
- Fixed a JS error occurring when DataSource.cacheAllData is set to true.
- Fix a bug whereby oldValues are not correctly maintained after a saveData() if the dsRequest was a sparseUpdates request
- Modified getSaveOperationType() to handle being passed no requestProperties
- Fixed issue with binary metadata fields when the underlying binary field is mapped via nativeName. Also have DynamicForms switch to edit mode after a successful add, even if the form contains a FileItem
- Fixed an issue where decimalPad / decimalPrecision, if specified for a field within a .ds.xml file, would fail to be respected within the application.

##### DataSource DataBoundComponent

- 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.

##### MultiSortDialog

- Fixed i18n hover prompts for the Level Up and Level Down buttons in the MultiSortDialog

##### RestDataSource

- Updated the sample JSON responses in the RestDataSource documentation. JSON responses now strictly follow the JSON standard and no longer include 'Date.parseServerDate()' calls.
- Re-doc RestDataSource.dataProtocol, detailing that, to control the format in which inputs are sent to the dataURL, you must specify a replacement OperationBinding

##### ResultSet

- 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

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

##### Visual Builder

- Make the DataSource pane of VisualBuilder show a per-project list of DataSources.

##### Browser

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

##### Messaging

- Fixed the endless "page loading" indicators in Safari 4 and 5 and Firefox 3 when using Real-Time Messaging.
- Fixed Real-Time Messaging in Internet Explorer if ActiveX is disabled.
- Fixed the endless "Waiting for" statusbar message and regular "phantom click" sounds when using Real-Time Messaging.
- 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.

##### FileLoader

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

##### Developer Console

- Fixed problem with icon display in the Developer Console's "RPC" tab.
- Fixed a problem where the developer console would not show up properly in IE10

##### EventHandler

- Correct processing of extended characters in TextItem when using masking
- Fixed an issue with the SGWT application freezing if dialogProperties specifying an ID
  were passed to SC.askforValue() or one of the other dialog-showing utility methods.
- 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.
- 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
- 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
- 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.

##### 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 Date.toSerializeableDate() for datetimes
- 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
- Update types in the DateUtil.createLogicalDate(), createLogicalTime(), getLogicalDateOnly(), and getLogicalTimeOnly() overrides.

##### RelativeDate

- 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 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, o later via setTimelineRange()
- Fixed issue where a RelativeDate's rangePosition was getting dropped in the communication bewteen SGWT and SmartClient.

##### Selection

- Don't fire selectionUpdated with selectionType: "single" when re-selecting the same record in a DBC

##### SimpleType

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

##### Time

- Fix a date/time formatting issue seen in SGWT Dev Mode with RelativeDateItem
- Fixed incorrect title for the top-most time-label in Calendars

##### Tree

- Fix sorting of Grouped ListGrids with multiple GroupBy fields.
- Fixed single/multi sorting on fields that are also involved in a multi-grouping situation, with and without rowSummaries of either type.
- Removed logWarn() from inside the script of the internal sort-normalizer for Trees
- Fixed ListGrid sorting behavior when the grid is both grouped and sorted on the same field

##### PNG Export

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

##### Built In Types

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

##### Button

- 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

##### Button Canvas ImgButton ListGrid StatefulCanvas StretchImgButton

- Added to Button, ImgButton, and StretchImgButton support for the showClippedTitleOnHover attribute to control whether a hover containing the full button title is enabled if clipTitle is true.

##### Button DateGrid FormulaBuilder

- Fixed an issue where the body of DateChoosers in the Simplicity skin would size wrongly in Chrome and show unwanted scrollbars

##### Button Element

- Fixed a bug in Button.showClippedTitleOnHover support. In IE 9 Strict Mode, the
  hover could be displayed even if the title was not clipped. This affected Button
  and all classes derived from Button such as ImgSectionHeader.

##### Calendar

- 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
- Fixed timeline event rendering for timelineGranularities greater than "day"
- 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

##### Canvas

- 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.
- Defered generation of automatic widget IDs for SGWT widgets until the JS object is actually created.

##### Canvas ListGrid

- Optimized _remapEmbeddedComponents() so it checks if a record has changed or moved before searching the data for it

##### Chart

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

##### ColorPicker

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

##### ComponentEditor

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

##### CubeGrid

- Fix issue where CubeGrid.getSelectedCells() returns null rather than the proper CellRecord[].
- Fixed CubeGrid.hiliteFacetValue()
- Fixed a JS error in the SGWT wrapper for CubeGrid.hiliteCell()

##### CubeGrid ListGrid

- Fixed hiliteFacetValue() for column-facets and enhanced to allow hiliting of any facetValue, not just innermost ones, for rows and columns

##### DateChooser

- Added new feature - DynamicForm/FormItem.readOnlyDisplay - supports different modes of rendering for items that are canEdit: false
- Fix issue where DateChooser for dateTimeItem doesn't show time picker widget(s).

##### DateGrid ListGrid

- Fixed interactive styling for disabled weekday and weekend fields in the DateGrid

##### DetailViewer

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

##### Drawing

- Fixed a bug that DrawLabel.getBoundingBox() can fail to return the correct
  coordinates if the method is called after DrawPane.destroyItems() or after
  getBoundingBox() is called on another DrawLabel.
- 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.
- Included the data record in the DrawnValue objects returned by FacetChart's
  getDrawnValue() and getNearestDrawnValue().
- 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 Drawing

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

##### EdgedCanvas

- 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

- 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.

##### FacetChart

- 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.
- Added MultiComboBoxItem.getValues() and setValues(Object...) for getting and setting the selected values.
- Fixed a JavaScript error occurring in multi-facet, zoomable FacetCharts that use
  labelCollapseMode "time".
- 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 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.

##### FieldPicker

- 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.
- Enable focus styling for FieldPicker transport buttons.

##### FormulaBuilder ListGrid

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

##### GridRenderer

- 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 print/export to PDF of ListGrids with canExpandRecords: true and sparse data would generate an empty document
- 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

- Fixed a JS error in HiliteRule.getHilite() that occurred if the value of the criterion
  was left blank.
- Exposed the DBC Hiliting classes - HiliteRule, HiliteEditor and AdvancedHiliteEditor

##### HiliteEditor TileGrid

- Fixed Hilite handling for TileGrid

##### Layout

- 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 TabSet

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

##### ListGrid

- Fix for a bug where response to dataChanged would fail to update a grouped tree if grouped by primary key.
- Optimized the code for remapping recordComponents when data changes and recordComponentPoolingMode is not "data" - significant improvement when removing a record or fetch-scrolling
- Fixed a bug where ListGrid.removeData() would be ineffective - altered the type of the 'data' parameter from "Object" to "Record"
- 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.
- Fixed initialSort for ListGrids with a DataSource but no specified fields array
- Performance improvements for ListGrid autoFitFields behavior
- Fixed redraw issue with paged grids following a page-changing scroll and an export to PDF
- 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.
- Fix functions LG.getSummaryFieldValue() and LG.getFormulaFieldValue().
- 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.
- Add new API ListGrid.configureGrouping() for configuring multi-grouping mode.
- Fixed a JS crash that could happen if expandRecord() was called before the grid was drawn
- Fixed a JS crash with multiple-grouping and groupSummaries
- Fixed a stack overflow when attempting to view/download a file from a record in a grouped ListGrid
- Correctly flag the result of ListGrid.getFilterEditorCriteria() with a _constructor if its an AdvancedCriteria
- Re-Introduced removeRecordClick(int rowNum). This may be called to programmatically simulate a user clicking the remove icon for a row.

##### Menu

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

##### RecordEditor

- 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

- Fixed the Font and Font Size rich text editor controls in Chrome.
- 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

##### ScreenReader

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

##### SectionStack

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

##### StatefulCanvas

- 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)

##### TableResizePolicy

- Resolved an issue where certain FormItems, including SectionItems, could render too wide, causing the DynamicForm to overflow its specified size unnecessarily.
- Fixed rendered widths for FormItems that span multiple columns

##### TabSet

- Fixed an issue whereby getTab() would return null for a tabSet defined directly in JavaScript (or via componentXML)
  once referenced in Java
- 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.
- Fixed a stack overflow occurring when an invisible widget is added to a TabSet's
  list of tabBarControls.
- 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

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

##### TileLayout

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

##### ToolStripGroup

- Fix stack overflow error during ToolStripMenuButton creation
- Fix for showing separate Disabled and Over menuIcons for IconButtons that are showMenuIcon:true

##### TreeGrid

- Implemented clipping of TreeNode titles by ellipses if the text is too long to fit within the tree field column.
- Fixed bug where TreeGrid.getNodeTitle() performs sometimes failed to properly format content in the tree-field.

##### AutoFitTextAreaItem

- Fixed vertical autosizing for AutoFitTextAreaItem in css3 mode

##### CanvasItem

- 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.
- Changed the behavior of CanvasItem.storeValue(Object) to be more like FormItem.setValue(Object).

##### CanvasItem DynamicForm

- 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

- Rename ComboBoxItem.setSort() as ComboBoxItem.setPickListSort() to match the
  SelectItem API, and mark the original API name as deprecated.
- 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.
- Fix class reference in SelectItem/ComboBoxItem.setPickListSort() effecting dev mode.

##### ComboBoxItem FormItem NativeSelectItem SelectItem SpinnerItem StaticTextItem

- Fixed so that FormItems do not show icons or pickers and largely render with TextItem.texBoxStyle when printing

##### DateItem

- Fixed a bug where DateItems would map one/two digit years to 1900
- Fixed an issue where a DateItem's textBox could render too wide, obscuring or shifting the date-picker icon

##### DynamicForm

- Fixed the issue that DynamicForms were spacing form items apart so as to take up the entire height.
- 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

##### FileItem FormItem MultiFileItem

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

##### FilterBuilder

- 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

##### FormItem

- Fixed a problem with a char array being set as a form item's value if the FormItem#setValue(Object) method is used.
- Fixed an `UnsupportedOperationException' thrown by FormItem.setValue() when passing serializable objects.
- Fixed FormItem.getValue() by having it return a List if the value of the form item is an array (also, if the value was set to a List).
- Fixed FormItem.getValue() so that it returns a Java List object only if the form item accepts multiple values.
- Added FormItem.getValueAsRecordList().
- Altered the behavior of FormItem.getValue(). If the FormItem has multiple:true, there are some cases where the return type is now RecordList.
- Wrapped the StretchItem type, which allows the StretchImg.items array to be set in Smart GWT.
- Fixed a bug where SpinnerItems with no default value would fail to react to clicking on the spinner in some cases.
- Fixed show/hide cycle for formItemIcons in IE
- 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.
- Allow validateOnExit FormItems to perform validation on a standalone form without
  the value being changed. This primarily affects the required validator.
- Updated the Javadoc of FormItem.getValue() with additional information pertaining to the case where the form item has multiple:true.

##### FormItem TextItem

- 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.

##### FormItem TextItem TextAreaItem

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

##### MultiFileItem

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

##### PickList

- 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

- Fixed the widths of PickTreeItems with icons when displayed in FilterEditors
- Fixed a bug that a menu item of a context menu on a form containing a PickTreeItem could draw menu icons twice on redraw in IE9.
- Fixed race condition during initialization resulting in a crash that can occur if a PickTreeItem has a TreeMenuButton as its canvas.

##### RelationItem

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

##### RelationItem MultiFileItem

- 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

- Fixed a problem tabbing through RelativeDateItems when the clickMask is up (For example when embedded in a modal
  Window)
- Fixed 'Now' preset option when selected from the list
- 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
- Improved consistency of behavior within a RelativeDateItem when 'type' is not explicitly specified as either date or datetime.
- Fixed the RelativeDateItem's display of the selected date in certain locales (e.g. ru_RU), which also fixes the date range picker used by the ListGrid filter editor in those locales.

##### RichTextItem

- 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

##### SectionItem

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

##### SelectItem

- Added new attributes SelectItem.openOnSpace and openOnDownArrow

##### TimeItem

- Fix issue where timeItem.hint is not displayed if timeItem.useTextField is false.
- Fixed custom parseEditorValue implementations and unexpected behavior while typing in TimeItem

##### 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.

##### PdfExport.java

- Added documentation about how to configure .pdf export to international characters.

##### 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
- Fix a problem where database connections are remaining open until GC for a DSRequest that is executed multiple times
- Fixed i18n support in a Component XML that uses <dataSource> tag in between <fmt:message> tags.
- Fix ClassCastException arising when a SQLDataSource autoDerives from metadata derived from an unannotated Java class
- Enable the Export options (XML, Excel, etc) and streaming responses when the response's data model is a JSONFilter
- 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
- Switch DataSource pooling on by default

##### DataSource.java DataSourceDMI.java

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

##### SvgImage.java

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

##### DSRequest.java

- Do not complain about missing primaryKey values for fields that declare a customInsertExpression, because we can assume that the point of the custom expression is to provide the missing value...
- Fixed in-memory relations with composite FK issues.
- Fixed in-memory relations. If FK field declares joinType="outer" records with null value for FK will be removed from dataSet, otherwise "outer" joinType logic will be applied and record will stay in dataSet.

##### 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.

##### MessagingServlet.java

- Fixed an issue with Server-Sent Events not working in Firefox and Chrome depending
  on the value of the 'encoding' parameter to MessagingServlet.

##### 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".

##### Localization

- Fixed escaping of single-quote in Dutch localization.
- Fixed the selectorFormat for the French locale.

##### Skinning

- Added the pickListCellDisabledDark and tallPickListCellDisabledDark styles to the
  Enterprise, EnterpriseBlue, Graphite, and Simplicity skins.
- 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.

## Release Notes for Smart GWT 3.1

### 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 SmartGWT 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 SmartGWT 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
- Fixed a bug where EditCompletionEvent type would be misreported on grid events in some cases.
- Wrapped ListGrid sorterClick and sorterContextClick for SGWT
- Added ListGrid.getRemoveFieldDefaults() API
- Added ListGrid.setEditValue() API
- Fixed ClassCastException when calling RecordDropEvent.getDropRecords()
- Return null, not Java wrapper around null JS object, for RecordDropEvent.getTargetRecord()
- Avoid infinite loop in a SGWT app with ListGrid.alwaysShowEditors enabled
- Fixed sorting bug observed in SGWT when records in a ListGrid are sorted by Date - empty dates were sorting to epoch start (1970) instead of start or end of list
- Fixed doc typo breaking return type of SGWT version of ListGridField.getFieldTitle()
- ListGrid - add support for RemoveRecordClick event
- Fixed bug with sortChanged failing to wrap SortSpecifier params for SGWT
- Fixed a problem where calling ListGrid.setSort() before the underlying JS object is constructed, it forced construction of the object rather than just setting the SortSpecifiers attribute (i.e calling ListGrid.setInitialSort())
- Added doc'd API: ListGrid.setPickListSort() to allow SortSpecifiers to be directly assigned to a SelectItem or ComboBoxItem
- ListGrid - exposed doc'd APIs: scrollToRow(), scrollToColumn(), and scrollToCell()

##### 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
- Added missing API and docs for TreeGrid.startEditingNew()
- Fixed handling of FolderDropEvent for trees

##### 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
- Fixed a SmartGWT bug with cubeGrid.getData()
- Add APIs to allow programmatic collapsing/minimizing (or expansion) of fields in a CubeGrid, where the field is specified via facetValueMap

##### 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
- Enabled CalendarEvent.lane for SmartGWT

##### 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.
- Added support for updating SliderItem min/max value at runtime
- Improved CanvasItems' handling of Java objects such as java.util.Date instances
- Wrap FormItem.showPicker as PickerIconClickEvent
- FormItem - changes to allow setValueMap(LinkedHashMap) to work properly with non-string keys
- Fixed issue where FormItem.emptyDisplayValue is not properly used if a SelectItem with a non-string type has a null value
- Fixes a bug where setValueTree was appearing to be broken for PickTreeItems
- Wrapped FormItem.canEditCriterion(), getCriterion(), and setCriterion() as override points for SmartGWT
- Fix for a bug where FormItem.getValue() could fail to return a value if it was not present in the specified valueMap for the field

##### 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()
- Drawing: Enabled DragStart, DragStop and DragMove events for SmartGWT

##### 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
- Fixed a bug in SmartGWT that widget properties that are config. objects were not being left as JavaScript objects - observed in FacetChart
- Added a ValueFormatter class to be used by FacetChart

##### 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
- Fix for a bug where update of records within a clientOnly dataSource could end up applying changes to the wrong Java object
- Resolved an issue where attempting to access unloaded datasource records could cause crashes in SGWT apps in compiled mode (but not in dev-mode)
- Wrapped ResultTree for SmartGWT
- Ensure that SmartGWT-created DataSources that have not yet been created on the SmartClient side are auto-created if they happen to be required by some arbitrary Javascript code
- DataSource - added fix to avoid infinite recursion when custom ResponseTransformer/RequestTransform classes are defined
- Fixed issue where DSField.getCanEdit() would return false rather than null when the flag hadn't been set at the DataSource level
- Fix for an issue where DataSource.addData() could lead to classCast exceptions when accessing records in a ListGrid

##### 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 SmartGWT UI stored on the server in component-xml format.
- Support for RPCRequest.getDataAsMap(), getDataAsString() and getDataAsObject()
- Enabled RPCManager.sendProxied() API
- Fixed a ClassCastException thrown in RPCResponse.getDataAsString()

##### 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
- Added new class DMI to provide static wrappers around isc.DMI.call(); deprecated the DMI classes in SmartGWT commercial products in favor of a new SmartGWT DMI class

##### 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 SmartGWT 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
- Fixed a bug where overrides to warn() / ask() preferences would fail to be respected
- Made window.closeClick an cancellable event
- Fixed a bug where Menu.getItems() could fail to return meaningful data before the menu had been created in JavaScript scope
- TabSet - explicitly doc'd tabBarProperties to simplify customization in SGWT
- TabSet - exposed 'tabBar' class in SGWT and added a 'setTabBarProperties' wrapper to allow customization of tabBars for tabSets
- Fix for an IE9 specific issue where menuItems could appear doubled for PickTreeItems in some cases

##### 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 SmartGWT 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
- Support for JSONEncoder.decode()
- Fixed a problem where dynamic checking / enabling of menuItems was failing in SmartGWT
- Added method JSOHelper.convertToJavaScriptArray(Object[] array, boolean strict)
- Added a warning if when SmartGwt init() runs it fails to find window.isc (implying the libs probably haven't loaded)
- Improved internationalization documentation
- Added Croatian language translation (hr) and updated some others (es, it, pt_BR)
- Deprecate DateDisplayFormat, TimeFormatter and TimeDisplayFormat in favor of DateDisplayFormatter
- Rework some internal structures to make utilization of ComponentXML objects easier
- Increased the gwtc memory compile size from 256m to 384m for all samples (Commercial products only)
- Added new helper method JSOHelper.getClassName()
- SmartGwtEntryPoint: When converting a numeric value to Java check for Integer.MIN_VALUE as well as Integer.MAX_VALUE
- Added a warning that will show when developers fire up SmartGWT dev mode in Chrome linking to description of bugs in GWT Dev-mode + Chrome in FAQ's
- Added null checks and improved code to extract the primitive value in SGWT APIs that take Java Float, Double, or Integer
- Added a convenience method for getWheelDelta on MouseWheelEvent
- Clarified potential issue with directory structure in SGWT standalone mode in the DataSource docs
- Fixed crashes in echoFull() when called from SGWT and passed a Java object, or a JS object with a nested Java object
- Updated SGWT event wrappers to return false if a Java exception occurs during a user installed handler, thus cancelling the default handler
- Added support for the user getting at the grid on which a hover event tripped from the HoverCustomizer
- Added support for NormalDate/DateTimeForm being set in locale files
- Added a check that the as-built SC version number is the same as the loaded SC version number
- Added StringUtil.isValidID() as a wrapper of SmartClient's String.isValidID() class method
- Enabled field name validation in GWT Dev mode

## Release Notes for Smart GWT 3.0

### Backwards compatibility notes

Smart GWT upgrades are fully backwards-compatible unless otherwise noted. For all new APIs which replace existing APIs, the older versions will continue to be supported (though marked as deprecated), with the following exceptions:

- Smart GWT 2.5 introduced an erroneously named event and handler pair
  - `com.smartgwt.client.widgets.events.CloseClientEvent` and
  - `com.smartgwt.client.widgets.events.CloseClientHandler`.
  These have been removed, in favor of the correctly named
  - `com.smartgwt.client.widgets.events.CloseClickEvent` and
  - `com.smartgwt.client.widgets.events.CloseClickHandler`.
- The zero-argument method `DataSource.fetchData()` has been removed. This method served no useful purpose and led to a lot of confusion. For application code to meaningfully react to a `DataSource.fetchData()` call, a DSCallback must be passed to the method.

### New features and fixes

- The Drawing module is now open source (added to Smart GWT LGPL). Its API and examples have been greatly extended
- Browser support and skinning
  - Numerous improvements for mobile browsers (Android and iOS)
  - Show native focus indicators on Chrome and Safari browsers
  - Many skin changes
- ScreenReader enhancements and fixes
  - ARIA-label support for FormItems, Buttons, and FilterBuilders
  - Prompts on form items
  - Improved native focus on elements, including ListGrid
  - Cross-browser support
- Data binding and related functionality
  - Various enhancements around working with AdvancedCriteria
  - Support for transaction queueing for RestDataSources
  - New attribute `DataSource.dropUnknownCriteria` (defaults to true) — if true, client side filtering will ignore criteria for fieldNames not explicitly present in the DataSource
  - Fix for an issue where server XML responses are incorrectly parsed as Record objects if an `xsd:type` attribute is set in the response
- Miscellaneous Component/UI changes
  - Support for new ToolStrip-related components: ToolStripGroup, RibbonBar, RibbonGroup
  - Respect minWidth/minHeight specified on a percentage-sized component
  - ToolStrip and related components added to Visual Builder
  - Various Visual Builder and editMode fixes
  - Various improvements to Calendar
  - Fix for an issue with Ctrl/Alt key detection in Windows and non-US keyboard mappings
  - Tab order fixes
  - Fixed some interactions with modal prompts and click masks
  - Fix for DateChooser year menu positioning
  - Chrome-specific fix for issue where tabSet close click could fail to remove unselected tabs in some skins
  - Fixes and updates to dataPath
  - Fixes for `dragAppearance:"tracker"`, dragResize, and dragReposition settings
  - Fix a potential memory leak in RestDataSource when serializing requests
  - API improvements for Dialog customization
- 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`
  - Support for `TileGrid.recordContextClick`
  - Better support for cascading selection in TreeGrids with incrementally loaded data
  - FilterEditor fixes for field order, sizing, and visibility
  - Various fixes around recordComponents' life-cycle management
  - Fixed a bug where expansion components and record components could get “lost” on server-side data changes
  - Fix for dragging into a grid whose records are all disabled
  - `ListGridField.autoFitWidth` logic fixes
  - Force a refresh when explicitly recalculating summary values even if data appears unchanged
  - Added support for incrementally recalculating grid-level summaries
  - When calling setData() on a grouped grid, instead of attempting to apply the current tree open state to the new data, reapply the initial group open state
  - When rapidly scrolling through a frozen body, whitespace could be left at the bottom. This is fixed
  - 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
  - Fix for an issue where hilites could not be applied to a ListGrid before initialization
  - Fix for a bug where getBodyScrollLeft() and getBodyScrollTop() would throw an Exception attempting to convert int to Integer
- Forms
  - FormItem item vertical alignment support
  - 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
  - MultiFileItem now available in Smart GWT
  - 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.fetchData()`/`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
  - CanvasItem click handler responds to mouse click or Enter keypress as with standard widget click handling
  - Fix for an issue where a call to getValues() before draw on a multiple select item could cause an Exception
  - New `FilterBuilder.getCriteria()` method, which takes a parameter allowing the developer to include null values in the generated criteria

## Release Notes for Smart GWT 2.4

- GWT 2.3 compatible
- ARIA Support
- New dataPath Feature
- ListGrid
  - Added ListGrid.allowFilterExpressions to support use of expressions when filtering. Allows expressions when producing criteria — for example `<50 or ==99`
  - Added ListGrid.autoFitWidthApproach
  - Added ListGridField.dataPath
  - Support for multi line summaries in groups and at the grid level
  - New Group Title Column feature, added new showGroupSummaryInHeader attribute
  - Added ListGridField.addSummaryFunction() API to allow set up of multiple summary functions per field, which display as multiple lines in the grid summary or per group summary
  - Support for field.summaryTitle and SummaryFunctionType "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
  - Exposed listGrid.getGroupByFields() — always gives back an array of strings
  - Augment ListGrid state management such that get/setViewState also preserve hilites and grouping data, along with frozen field information
  - 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
  - New viewStateChanged event fired from grouping, sorting, fieldState changed
  - New sortChanged event fired from setSort() whenever the sorting changes
  - Fix for a bug where if the summary row is visible and an h-scrollbar is introduced, a second h-scrollbar would display
  - Exposed 'getEditFormItem()' to get the live edit item currently displayed to the user during editing
  - Addition of new ListGrid.saveRequestProperties, to allow for customization of the properties sent on the save Request
  - Improve performance of saveAllEdits() when processing a large number of edited rows
  - Enhance record summaries in grids by providing support for locally held data to be included
  - 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
  - Enhanced record double click management
  - Fix to updateRollOverCanvas() to only perform necessary ListGrid canvas chnages if there is an associated record or cell being rolled over
  - Improved arrow key navigation with grouping by not toggling the group when a group node is selected
  - 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 to resolve an issue where using string values with setWidth(""*"" or “%”) with custom editors in FormItem or ListGrids threw an exception
  - 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 stop an error when calling setFields for a second time on a ListGrid but with one field less (to remove a field)
  - 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
  - New selectionUpdated event when ListGrid selections are updated
  - 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
- TreeGrid
  - Added TreeGrid.showDisabledSelectionCheckbox
  - 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
  - Correction to rangeInEventRange API to prevent the use case where overlapping events within a day 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 prevent horizontal resizing when they shouldn't be
  - Fix to timing of calendar refresh to avoid trying to refresh a calendar where the calendar is destroyed or is in mid-destroy
  - Fix to Calendar events to correctly return the event details when adding or updating an event
- 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
- FilterBuilder
  - FilterBuilder reworked to make getValueFieldProperties() a more useful override point
  - Added support for filterButtonProperties to customize the actionButton on the filterEditor
  - Fixed bug with left align of the last field in filterEditor
  - Support for custom SimpleTypes
  - Change to filterBuilder to exclude all Datasource fields except the specifically required ones to improve performance
  - Correction to FilterBuilder.getEditorType() for correctly attributing field type to operator when defined as using a fieldDataSource rather than a normal DataSource
  - 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)
  - 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
- DynamicForm / ValuesManager
  - Added FormItem.optionOperationId and operator
  - Support for parse / formatEditorValue in DateItems where useTextField is true
  - 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
  - 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
  - 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
  - Fixes to sporadic ComboBoxItem.completeOnTab failures if the user tabs before data has loaded
  - 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
  - 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
  - Enhance DateChooser functionality to round to end of day if rangePosition is set to end
  - 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
  - Enhancements to relative date items by using the field type to ensure a date item serializes as a date rather than a dateTime
  - 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
  - Improvements to CanvasItems click/double click events when clicking within an embedded canvas
  - Improvements to serialization of Date objects being produced by DateItem or RelativeDateItem types to exclude time unless explicitly defined in the field type
  - 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
  - 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
- DetailViewer
  - Added DetailViewerField.name and DetailViewerField.dataPath
  - DetailViewer now respects the new field.dateFormatter, field.timeFormatter, component.dateFormatter, component.datetimeFormatter and component.timeForamtter pattern
- TabSet
  - TabSet / Tab — added getTabCanvas() method to get the live tab canvas
- Canvas
  - Added "moved" and "parentMoved" event handlers
- DataSource
  - Enhancements to serializeFields() to handle nested DataSources
  - 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
  - Various timezone conversion, date-time formatting fixes
  - i18n enhancements
  - getSelectionRange support added for Opera 11 with Windows to allow text masking to perform properly
  - Corrected an issue with setStyleName() not rendering correctly if called after draw() on a Label
  - Added support for 'altText' to Img
  - Fix to an issue where browsers complain about mixed security content with Flashlets and https is now automatically detected and managed
  - Fix to avoid a possible crash during MenuBar draw if we have no menus
  - Drag and Drop recording / playback support for Selenium
  - Double Click handling support for Selenium
  - Several additional enhancements and bug fixes that were logged in tracker

## Release Notes for Smart GWT 2.4

- GWT 2.1.1 compatible
- Added Smart GWT QuickStart Guide
- Touch & Mobile support : Support for iPhone, iPad and iPod touch devices with no code changes required
- Offline persistent storage support with seamless integration with DataSource's
- User Defined data highlighting
- Advanced Hover components with built-in hover modes
- New ultralight ‘Simplicity’ skin that is easily customizable and virtually image free
- Performance improvements across the board with significant IE specific performance enhancements
- Several new Showcase samples under the "New Samples" side nav
- ListGrid
  - Per field autoFitWidthApproach now supported
  - Added ListGrid "Auto Fit All" menu option
  - Support for frozen fields and virtual scrolling with record components
  - Various fixes related to the display of cell components in a ListGrid
  - Support for Header Spans when printing
  - Print support for a ListGrid with more than one frozen fields
  - Improved support for printing ListGrid's with embedded components
  - ListGridField's ChangeHandler event is now cancellable
  - Significant performance optimizations to client side Advanced Filtering
  - Added support for LinkURLPrefix and LinkURLSuffix on ListGridField
  - Added support for handling large number of rows in IE 8 non-strict mode
  - Added ListGrid.getCellHoverComponent() to support ListGrid cell hover components
  - New ListGrid flag 'autoFitFieldsFillViewport' to enable / disable the autoFitExpandField behavior
  - Handle a double-click on the ListGrid header menu context button the same as a double click elsewhere on the header button. This means basically auto-fit on double click over the menu button
- TreeGrid
  - Added TreeGrid.showOpener property to not show opener icons at all
  - Fixed TreeGrid.invalidateCache to handle loadDataOnDemand:false trees
  - Fixed gridSummaries for databound TreeGrids
  - Fixed TreeGrid.setViewState(..) not re-selecting nodes
  - Fixed TreeGrid.setSelectionType(MULTIPLE) selection behavior when selectionAppearance is "checkbox"
  - For a cascade selection, loadOnDemand TreeGrid, push a full selection from parent down to the children upon load
- Calendar
  - Added support for 24h based Calendars
  - Calendar fix for issue where two overlapping events less than half an hour in length would be incorrectly rendered
  - Fixed issue where Calendar.scrollToToday scrolls too far
  - 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 Calendar issue where events that start and end in the hour starting at 12am caused an error
- SectionStack
  - Only show the 'pointer' cursor over canCollapse:true sections in a SectionStack
- TileGrid
  - Fixed TileGrid printing to work properly for orientation:vertical
  - Fixed TileLayout issue where dragAppearance:'target' was breaking drag and drop
- DynamicForm
  - Fix wrapping of multiple Form Item icons in strict mode
  - Added support for 'setRequired()' on a FormItem at runtime
  - Exposed broswerSpellCheck property on DynamicForm and FormItem for enabling / disabling native browser spell check feature on text boxes
  - Added DateItem.defaultDateChooserDate as a way to specify a default to show in the picker without specifying a default value for the item as a whole
  - Added DynamicForm.getChangedValues() / getOldValues() -- allows you to get at the values remembered by 'rememberValues()'
  - Added FormItem.canFocus property
  - Added TextItem.printFullText attribute — if true, expand the text box to fit content
  - Exposed textMatchStyle on SelectItem explicitly
  - 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 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
  - Added support for specifying DateItem.emptyDisplayValue when in text mode
  - Added support for specifying DateItem.showHintInField when in text mode
  - Fix IE specific "blinking" of ComboBoxes on initial select
  - SelectItem with multipleAppearance:"picklist" now supports comma separated formatted output (eg icons)
  - 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
- DetailViewer
  - Fixed issue if DetailViewer was given just a singular object as data
- TabSet
  - Support for Tab title user editing (TabSet.canEditTabTitles and Tab.canEditTitle properties)
  - Added TabSet.paneMargin property
- Other
  - i18n enhancements
  - Improved Selenium support
  - Added support for hover components on any Canvas using Canvas.showHoverComponents and overriding getHoverComponent()
  - Fixed bug where dates already in UTC would be applied a UTC offset
  - 36 additional enhancements and bug fixes that were logged in tracker

## Release Notes for Smart GWT 2.2

- Selenium support
- Removed need for setting isomorphicDir variable in host html file
- Support for the prototype pattern where the default attributes of a given Canvas (or subclass) can be user specified by passing a prototypical instance to the static method [Canvas or subclass].setDefaultProperties(Canvas or subclass prototype instance)
- Added DateRangeItem, MiniDateRangeItem and Relative Date support to DynamicForm
- Javadoc enhancements : Over 200 API's now have relevant Showcase example in the @see links
- Several new Showcase samples under the "New Samples" side nav
- ListGrid
  - Performance improvements
  - Editable grid related fixes
  - Added ListGrid.isPartiallySelected(record) API.
  - Changed the default recordComponentPoolingMode to "viewport"
  - Enhancements to make grouping / editing / autoSaveEdits:false work better
  - Setting canFilter:false on an image field now results in no icon in filterEditor
  - With multi-level grouping and groupTitleField set, subgroups now shows indentation
  - Support for showHintInField for editable ListGrid fields
  - Make the "select all" checkbox header be disabled only when all rows aren't cached. As soon as all rows become cached, enable it.
  - For a user-created field, offer a "Remove [summary|formula] field" context menu item that removes the field (not just hides it)
  - Fixed row-numbering when grouped — now skips group-header rows when counting
  - Fixes for unnecessary fetches when scrolling to data provided via an ResultSet initialized with a sparse array
  - Fixed show/hideField and freeze/unfreezeField with recordComponents
  - Fix of issue where shorter total column length than overall grid length was causing the rolloverCanvas to be misaligned
  - Fixed sorting when grouped
  - Fix for issue where rollOver styling could get stuck on the first row edited if modal editing was true
  - Fix for issue where selectionState wasn't properly re-applied after grouping
  - Fixed recordComponentsByCell bug that misaligned controls on scroll
  - Fix getSortState() always returned null for the current sort-field
  - Fix virtualScrolling and recordComponents in the presence of a frozen body
  - Fix for issue where setViewState was not allowing user-shown fields to get passed as visible to the component.
  - With checkbox selection and summary rows, summary rows are no longer selectable (no checkbox appear)
  - Fix issue where checkbox field hover was wrongly appearing for all rows instead of just the checkbox header
  - Fix issue where collapsing a record that also had a recordComponent would remove the first component embedded on the record
- TreeGrid
  - Support separateFolders without forcing sorting by title
  - New attribute sortFoldersBeforeLeaves
  - New property Tree.indexByLevel causes us to maintain an set of indices of nodes, one for each level of the Tree
  - New method Tree.getLevelNodes() returns the set of nodes at a particular level of the Tree, or optionally at a particular level below an arbitrary node in the Tree.
  - Fixed Tree sort normalizer not handling floats correctly
  - Fixes related to reparenting nodes
- FilterBuilder
  - Various enhancements
  - Fixed occasional bad drawing problem in Chrome/Windows and Chrome/Safari/Mac
- DynamicForm
  - Support for FormItem cell height
  - DynamicForm editing of AdvancedCriteria now supported
  - Fix for validation errors not being displayed properly when a FileItem is included on a form
- Other
  - i18n enhancements
  - Multi-property sort support for ResultSet and RecordList
  - Improved TileView print support
  - In Safari / Chrome in strict mode we have to use "pointer" rather than "hand" to get the pointy-finger cursor
  - Fixed Development Mode issue with callbacks having a boolean return value
  - Fixed timezone bug with dateTime formatting
  - Better Transitional Doctype support
  - Dev Console Enhancements : Ability to capture Selenium scLocator string for last clicked element
  - Support DataSource.cacheAllData which causes a DataSource to load and cache all available data for a DataSource the first time there is a request to fetch data.
  - Added DataSource.cacheMaxAge
  - Allow reordering of ResultSets: implement the methods on ResultSet necessary to allow client-side reorder
  - Error reporting improvements. JS stack traces are logged for non-IE browsers as well
  - 20 additional enhancements and bug fixes that were logged in tracker

## Release Notes for Smart GWT 2.1

- GWT 2.0.3 compatible
- New Graphite theme
- ListGrid enhancements
  - Record RollOver controls
  - RollUnder Canvas support
  - Background components
  - Support for arbitrary widgets in cells
  - Ability to display row numbers
  - setMaxExpandedRecords(..) to control max. number of simultaneous expanded records
  - ListGridField.setCanDragResize(), setCanReorder(), setAutoFreeze(), setShouldPrint() API's
  - Checkbox selection with grouping
  - MultiColumn sort enhancements
- TreeGrid enhancements
  - Support for Checkbox tree with Cascade selection
  - Support for tri-state checkboxes (selected, unselected, partial)
  - Performance enhancements
- ToolStrip enhancements
  - Significant improvement in appearance
  - Added ToolStripButton and ToolStripMenuButton classes
  - Vertical ToolStrips
- Print support enhancements
  - ability to control which components display in print view
  - print styling on a per-component basis
  - support print window customizations
  - API for the number of records displayed in print view (can be different from UI view)
- Browser Plugins as widgets
  - Flashlet widget
  - Applet widget
  - ActiveXControl widget
  - SVG widget
- Other Widget enhancements
  - Window : support for footer controls
  - Calendar : control dragability of events
  - New IMenuButton & IPickTreeItem classes with improved appearance
  - AdvancedCriteria enhancements and support for programmatic construction
  - SectionStack drag reordering support
  - FilterBuilder support for working with very large number of fields
  - Convenience FormItem.setRequiredMessage(..) API
  - TileGrids now automatically relayout if a tile resizes
  - Added support for grouping for formula and summary fields
- Performance enhancements
  - Snappier TreeGrid expand / collapse
  - Faster Canvas resize
  - Faster Tab close (deferred destroy)
- Logging of warnings and error to the GWT Developer Console in addition to the Smart GWT Dev. Console.
- Improved exception handling and reporting.
- i18n enhancements
- Showcase enhancements and several new samples under the "New Samples" side nav
- 27 additional enhancements and bug fixes that were logged in tracker

## Release Notes for Smart GWT 2.0

- GWT 2.0 support
- New Enterprise Blue theme, and significant improvements to Enterprise Gray Skin. Other skins deprecated and will have replacements in a future release.
- Theme specific collection of standard Window Icons, Picker Icons and Transfer Button icons as part of the core library.
- MS Excel like MultiColumn sort capabilities for ListGrid
- Support for ListGrid row expansions with in built expansion modes like details, editable form, related records as well as allowing the user to display a custom widget via the override point ListGrid.getExpansionComponent(record)
- Exposed getGridSummary(field) as an override point. This allows you to return an entirely custom summary row value for any field
- Added the following methods to FormItem: setValueFormatter , setEditorValueFormatter and setEditorValueParser. These allow the user to customize the display and parsing of input in a FormItem.
- Enhancements to DetailViewer and TileGrid so better support working interchangeably with the Records from any other DataBoundComponent
- Disabled state of all components fully supported. Missing media added.
- Various enhancements to support IE8 and Safari strict mode
- Support for "center" Layout alignment setting.
- Added DateTimeItem form field type.
- Support for masking DateItem, DateTimeItem and TimeItem input fields.
- Added Canvas.showClickMask(..) to do an 'auto-dismiss on outside click' type behavior on a component
- Fixed overflow issue with ListGrid.addData() under certain circumstances
- Fixed XSD support regression on Chrome / Safari
- Fixed "Too much recursion" issue with ValuesManager
- Fixed WSDL regression
- Javadoc improvements to link to GWT and JDK Javadoc APIs respectively
- Numerous new samples and improvements to the Showcase demo main page
- Various additional enhancements and bug fixes that were logged in tracker
- See the detailed API Changes document

## Release Notes for Smart GWT 1.3

In this release the SmartGwt modules have been slightly refactored so that by default the compile output does not include debug sources, unused resources, developer tools etc. Some users were getting the wrong impression that the size of the compiled output was the size of their application. Most users are probably using either com.smartgwt.SmartGwt or com.smartgwt.SmartGwtNoScript and will be unaffected by this refactoring. You will only notice that the compile output is a lot smaller as it does not include the debug / readable source js files, and the developer console files. The most important change to keep in mind is that in order to use the Developer Console (ie SC.showConsole() ), you will now need to inherit the following module : <inherits name="com.smartgwt.tools.SmartGwtTools"/>

Users that happen be using com.smartgwt.SmartGwtDebug will need to inherit com.smartgwt.debug.SmartGwtDebug instead.

- Grid Summary support from group and columns
- Masking support for form text fields
- Support for user-defined reusable SimpleTypes for use in DataSources (eg ZipCode type)
- In-field hints support for SelectItem, ComboBoxItem and TextAreaItem
- Support for Finnish locale and other i18n enhancements
- TextAreaItem.getSelectedText() support
- Improved support for use of Smart GWT and MVP pattern
- FilterBuilder fixes
- RPCManager enhancements
- Ability to control order of month day and year selector in DateItem
- Various additional enhancements and bug fixes that were logged in tracker
- New examples including a Grid Summary example in the Smart GWT Showcase (see "New Samples" side nav item in the Showcase)

## Release Notes for Smart GWT 1.2

- Significant improvement in integration with core GWT widgets
- Hosted mode performance improvements
- GWT 1.7 support
- Updated Showcase sample to new GWT project structure
- Fully implemented the ResultSet API
- ListGrid performance enhancements
- Full support for Safari 4.0
- I18n enhancements.
- Support for Grid editing with all editors shown
- Auto-loading of dependent XML schema for loadWSDL() and loadXMLSchema()
- Extended WebService APIs to allow simplified input data and allow setting SOAP headers
- Numerous enhancements. See the detailed API Changes document
- enhancements to RPC Tab in Developer Console (shows component that initiated request, if applicable)
- Around 35 additional enhancements and bug fixes that were logged in tracker
- New examples including a mini-app in the Smart GWT Showcase (see "New Samples" side nav item in the Showcase)

## Release Notes for Smart GWT 1.1

- Unified DataBoundComponent interface which is implemented by DynamicForm, ListGrid, TreeGrid, Menu, ColumnTree, TileGrid, DetailViewer and Calendar.
- Consistent representation of a Record which can be used by any DataBoundComponent
- Support for GWT-RPC DataSource with DataBoundComponents
- Various component and skin performance improvements
- 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
- I18n support with resource bundles from 14 locales
- Significant improvements to Javadocs with tons of documentation on various concepts. (over 30MB on disk)
- API's to save and restore the display and selection state of various components to/from the server
- Automatic databound dragging behaviors: grids and trees will now inspect data relations declared in DataSources and automatically “do the right thing” for a databound drag
- Numerous enhancements. See the detailed API Changes document
- Over 50 additional enhancements and bug fixes that were logged in tracker
- Several new events and extension points on various components to allow advanced usage
- A helloworld-1.6 starter project for Smart GWT with GWT 1.6
- Several new examples in the Smart GWT Showcase (see "New Samples" side nav item in the Showcase)

### Key API's added

#### DateUtil

- Ability to globally set the Date input and rendered formats across the application

#### DataBoundComponent

- ability to select / deselect records, fetch / filter data and carry out various other operations on any DataBoundComponent

#### DataSource and DataSourceField

- ability to specify custom field value extractor logic for a given DataSourceField
- API's to control http caching and result batch size
- DataSourceField.setCanSortClientOnly

#### Window

- listeners for minimize, maximize, restore and close

#### Calendar

- support for customizing event edit dialog fields
- event remove listener

#### Forms

- convenience constructors for various FormItems
- support for customizing form field and title tooltips
- TextItem : support for character casing and entry restrictions (regexp based)
- TextItem : support for hints displayed in-field
- ComboBoxItem : fetchDelay setting
- AutoFitTextAreaItem: autofits to contained text as the user types

#### Column Tree (Miller Columns)

- added node selected listener

#### ListGrid

- Grouping modes: built-in and custom grouping modes, such as the ability to group a date column by week, day, month or year
- added header click listener
- added record drop listener
- ability to customize grid groupings by record values and also group title
- support for adding custom formula and summary fields on the fly
- ability to register custom handler to control visibility of a ListGridField
- added ListGridField.setCanFreeze, ListGridField.setCanSort

#### SectionStack (Accordion)

- added section header click event

#### TreeGrid

- added folder drop listener
- ability to override getIcon() / getNodeTitle() to allow users to have custom node icon / title logic

## Release Notes for Smart GWT 1.0 b2

- GWT 1.6 M1 and M2 support. GWT 1.5.3 continues to be fully supported.
- New lightweight Enterprise Gray skin
- Performance improvements
- various API enhancements and bug fixes
- complete support for WebServices (WSDL)
- Additional Developer Tools (Inspect DOM and monitor RPC calls from hosted mode)
- Portal support and samples
- HTML based Print Preview support. No longer requires JSP.
- Support for auto-arranging and overlapping Calendar events
- Support for checkbox selection for ListGrids
- improved support for users to wire DataSource's with GWT-RPC calls
- Improved javadocs
- Separated additional skins into a smartgwt-skins.jar
- Chrome, Firefox 3.1, and OSX hosted mode support

## Release Notes for Smart GWT 1.0 b1

Initial Release

- GWT 1.5.3 (or greater) required