Yes, it is true! Not a beta, not a release candidate – we have finally published The Real Thing!
For the impatient
Download and run the installer.
Portable installation
Smart Mobile Studio 2.2 can also be downloaded with the SmartUpdate utility [more information]. To get the final release, you should download from the (default) Release channel.
If you already have a SmartUpdate-installed Beta channel on your disk, you can simply upgrade it to a Release by running the SmartUpdate.exe with the /changechannel switch.
What’s new
In two words: A Lot. Version 2.2 started out as a small upgrade, but as we worked on it we added tons and tons of stuff. A long list of changes since the 2.1 release can be found below.
What about the future?
We are already working on two fronts. A version 2.3 with revamped RTL (much faster visual component library and other goodies), support for search paths in the compiler and more is already in the work. At the same time we are triaging the issue list to determine which feature and bug requests will be fixed in the 2.2.1 hotfix.
List of changes since release 2.1
Compiler
- Updated to latest DWScript.
- Improved Date/Time handling.
- DateTimeZone scoped enumeration (.Default, .Local, .UTC).
- FormatSettings.ShortDateFormat, LongDateFormat, ShortTimeFormat, LongTimeFormat, Zone.
- An extra “utc” parameter of DateTimeZone type on many DateTime functions.
- A new ParseDateTime function, which acts as a reverse FormatDateTime
- ISO8601 functions (were declared but missing from the codegen)
- FormatSettings.Zone allows setting the default behavior between Local & UTC, and the utc parameter of DateTime functions allows to override that.
- FormatSettings does not yet expose short/long day/month names, but these are used for Formatting & Parsing dates.
- Fixed date/time rounding issues in the JS RTL.
- JDateHelper was moved from W3C.Date to System.Date.
- Added VarIsArray & VarIsClear.
- Supports “export” qualifiers for functions (use in libraries).
- Added support for ‘~’ in asm sections.
- Added option to generate RTTI for objects in the implementation section.
- Added missing error message for an invalid lambda syntax.
- Added support for floating point modulus. (see https://www.delphitools.info/2015/10/29/floating-point-modulus)
- Added support for sets in constant records.
- Stricter enumerations type checks.
- Integer operators are now more “strongly” typed, facilitates use of helpers over aliased integer types.
- Case..of type matching is now more tolerant with variants.
- Made code suggestions in a local scope more resilient to syntax errors in that local scope.
- Compiler displays a hint about empty then/else blocks.
- Compiler supports comparing Variant to nil with = and <> operators.
- Conditional compilation symbols can be passed to the smsc compiler by using -defines=list.
- Fixed: Source files with the UTF BOM header $FEFF are supported.
- Fixed array add type-checks for classes & sub-classes.
- Fixed array assignment typechecks.
- Fixed an issue which caused a slight increases in memory usage after each compilation (a leak that was not strictly a leak).
- Fixed “Invalid variant operation” error.
- Fixed codegen for some class parameters.
- Fixed codegen for StrBeginsWith.
- Fixed method type detection bug.
- Fixed issue with external class fields being assigned in an initialization section.
- Fixed issues with incorrect array assignments.
- Fixed handling of overloaded methods & override.
- Fixes related to syntax errors in connectors (like Variant / JSON).
- Fixed codegen bug with interfaces across inherited classes.
- Fixed issue with nested contexts.
- Fixed missing support for “set of” record fields.
- Fixed bug with nested constant arrays.
- Fixed obfuscation support.
- Fixed some bugs and memory leaks.
- Fixed compiler bug related to strict helpers.
RTL
- Redesigned component management resulting in much faster redraw.
- All visual elements now has a new procedure: ObjectReady() which you should override and use to adjust and set object values.
- Added the property “ComponentState” as used by Delphi and FreePascal.
- Added Indexed Database API W3C.IndexedDatabase (http://www.w3.org/TR/IndexedDB/).
- Added System.Memory.
- Marshaled pointer support, combined with support for Move, FillChar and all the other “memory” methods.
- Added System.TypeCon containing data conversion classes.
- Added System.DateUtils, capable of handling both local and UTC time.
- Added System.Dataset unit containing in-memory database.
- Added new system units: System.Streams, System.IO, System.FileUtils, System.Messages.
- Added Pixi.js library.
- Added SmartCL.Legacy.pas containing Delphi-style TCanvas, TBitmap, and file path functions.
- Added SmartCL.PageDiv unit, for managing a fixed buffer of abstract elements divided into pages. This is used by database navigators, thumnail viewers and anything which displays a fixed number of items out of a large whole.
- Added simple label control SmartCL.Components.SimpleLabel.
- Added TSimpleButton, a simple, rounded iOS standard button without gradients.
- QTX Effects added to SmartCL.Effects.pas
- Screen API wrapped in the TW3Screen class (accessible through the TApplication.Screen property).
https://developer.mozilla.org/en-US/docs/Web/API/Screen - Improved TW3Image.
- Defined ‘file’ input type for TEdit.
- Added “Element” property (exposes the JXMLHttpRequest object) to TW3HttpRequest.
- Added ResponseToMemory and ResponseToStream to TW3HttpRequest.
- Added TW3WebSocket to SmartCL.Inet.
- Added mousewheel support to scrollbars.
- Added support for the Page Visibility API.
- Added WebVR (Editors Draft) API.
- Added font loading API (see http://www.w3.org/TR/css-font-loading/).
- Added events OnActivate and OnDeactivate to TW3CustomForm.
- Added cryptographic header translations (Cryptography API and “DRM” API).
- Added neural network libraries Brain and Synaptic.
- Added APIs: W3C.Console, W3C.Push, W3C.ServiceWorkers, WHATWG.Fetch
- Added AAC audio file support
- Separated external objects defined by the JavaScript specification itself to a separate namespace ECMA. New units: ECMA.Date, ECMA.Json, ECMA.Math, ECMA.RegEx. RegEx class now lives in th ECMA.RegEx unit and global JSON object in the ECMA.Json unit.
- Added System.Nullable containing nullable primitive types (see http://smartmobilestudio.com/2016/01/16/nullable-types/).
- JEventHandler renamed to TEventHandler as it is not a native JS type. JEventHandler still exists, but is marked ‘deprecated’.
- Completed overloads for the JJSON class.
- Improved several of W3C APIs.
- Updated Node.JS units.
- Minor changes about accessing the audio tag from the Web Audio API.
- Improved WebSocket support with binary and BLOB messages.
- Redesigned REST API. REST API appends random number to the end by default (unless .NoRandomize is called).
- Extended TypeScript header translation.
- JUInt8ClampedArray was replaced with JUint8Array which has better browser support.
- Fixed: touch events must not prevent default handler.
- Fixed Scope confusion with CTRL + Click (namespace unit was opened instead of implementation unit).
- Fixed modal dialog handling.
- Fixed: Problem with ClientWidth & ClientHeight in document->body.
- Fixed: Scrollbar math.
- Fixed: Removed bug in ToggleSwitch where we used a “hack” to invoke a resize. This is no longer needed with the new system, so the bug and insertion of was removed.
- Fixed “double free” bug in TW3Component.Destroy.
- Fixed implementation of TMath.PI and TMath.E in Espruino.System.
- Fixed System.Date/JDateHelper.SetAsDateTime and .SetAsLocalDateTime.
- Fixed w3_getStyleAsFloat.
- Fixed TW3Label positioning bug.
- Fixed wrong declaration of JEventHandler (changed to ‘TEventHandler’ as it is rather a Pascal type declaration and not a JavaScript type).
- Fixed TW3Dataset.Back.
- Fixed Application.Document.ClientHeight.
- Fixed TW3Slider component.
- Fixed problems with TW3Label positioning.
- Fixed TW3ScrollInfo.ScrollX and .ScrollY.
CSS
- Added ‘None’ theme to allow CSS free simple demos using browser default.
- New theme for Scrollbars.
- Added CSS for TSimpleButton
- Fixed: CSS3 form-background for Internet Explorer
- Fixed: focus rectangle is now GONE for all themes.
IDE
- Added: Metrics
- Added: Project statistics
- Added configuration option “Legacy support for IE9 (and below)”.
- Added IDE setting to automatically save the project every N number of minutes (N is settable from 1 to 60).
- Uses DCEF3 revision 2069 for built-in browser.
- Improved UI with new (more) icons and a more consistent usage of fonts (now uses Segoe UI for all dialogs)
- Improved JSON support.
- JSON files can be added to the project.
- Unit map shows JSON structure.
- JSON files are available in the project generator API.
- Improved Snippets management
- Sort snippets after insertion
- Renaming snippets
- Snippets are not trimmed anymore (-> may contain leading spaces for indention)
- (Incremental) search feature added
- Doubleclick now pastes the snippets into the source code
- Added: Close all tabs to the right
- Added: Open file (tab) in explorer
- Added: Only compile if necessary (when the project has been modified).
- Added: Source code export tool.
- Added: Search text highlighting.
- Added SynEdit keystroke configuration to the IDE Settings/Keyboard page.
- Added preferences page for internal browser configuration.
- Added option controlling whether to add unit to the project’s uses section to the ‘new unit/form’ dialog.
- Added unit name validation to the ‘new unit/form’ dialog.
- Added option to have the internal browser log reversed (newest information at the top).
- Added support for bulk deletion of several project files.
- Added dialog to ask whether an unlinked external should be deleted upon making a project file all internal.
- Added basic Cordova support.
- New forms/units are external by default (on new installations).
- Allows opening more than one file at once.
- Introduced option for resource file path handling
- Improved working with icons.
- Implemented the sort project file feature.
- Redesigned IDE Settings dialog.
- Redesigned Project Options dialog.
- Color is shown next to clXXX constants in the Code Insight window.
- Implemented incremental searching in Project Manager.
- Pressing Escape closes the Goto Line dialog.
- Monitoring external files for changes can be turned off in IDE Settings.
- The forms component list is now sorted
- Welcome page can be closed.
- Improved background compiler triggering and performance (ignores hidden designer implementation code)
- Improved: [Enter] in project manager now opens file
- Improved (IDE) compiler performance
- Locate JS source code position in case of an error
- Revived: Class browser, which now directly operates on the source code allowing to show even recent changes (in the editor).
- Improved: Tightened XML files used by the IDE (less junk and empty tags) -> faster loading
- Improved handling of open files that are not part of the project.
- Improved ‘Normalize’ refactor.
- Serial number is displayed in Help, License info.
- Form name rename now calls rename refactoring.
- ‘Mobile Manifest’ renamed to ‘AppCache Manifest’.
- Marked handled exceptions as expected so they don’t trigger EurekaLog dialog.
- Fixed: ‘Asm’ highligher can be configured.
- Fixed: Pressing Enter in Project Manager did not open selected unit.
- Fixed: Search was not working for HTML source in the internal browser.
- Fixed: If project was saved under a different name, it was not recompiled until it was modified in same other way.
- Fixed: WriteLn messages were not always visible in logs.
- Fixed: Switching from Project Manager to code could cause an access violation.
- Fixed: Projects in the RTL/library folder won’t crash anymore
- Fixed: Error in component name check (reserved words were possible)
- Fixed: Extraction of units (in uses section) failed when comments were present within this section
- Fixed: Automatic adding of new units now consider the right edge properly
- Fixed: Unit scoping (namespaces) were not considered when adding new units to the uses section
- Fixed: Node.js empty project generator created an invalid project (did not compile and needed manual tweaking of .sproj file)
- Fixed: Messages window was visible when program was started
- Fixed: Unit source is correctly displayed if new project or unit is created when no tabs are visible.
- Fixed: When a new project is created, existing Unit1/Form1 files are no longer silently overwritten.
- Fixed a problem when project files for a newly created project were not monitored for changes.
- Fixed a problem when change was not detected if a form file (.sfm) was modified on disk.
- Fixed issue where background compilation was performed twice on project load. The fix not only removes an internal exception, but also speeds up project loading as it only updates editor states once.
- Fixed wrong icon for external resource files
- Fixed: Double-clicking on a ‘folder’ icon crashed the program.
- Fixed icon preview.
- Fixed: Failed compilation didn’t always focus the editor.
- Fixed issue with codegen which could crash on invalid source.
- Fixed small issues with ‘Find in files’.
- Fixed problems setting the linker output path.
- Fixed ‘Open in browser’ button.
- Fixed unnecessary limitations in ‘Keywords’ and ‘Homepage URL’ editors.
Editor/Designer
- Updated CSS highlighter.
- Syntax highlighting for JSON files.
- Added visual designer guidelines.
- Added simple ruler to the visual designer.
- Added visual designer option to show the form’s bounds.
- Added tool ‘Limit precision’ to the editor’s pop-up menu. This tool limits precision of numbers in the selected code.
- Added ‘Wrap string’ feature to the editor to wrap a string which is longer than the right edge (Editor.RightEdge) to the next line(s).
- Caret position change causes less workload (improved performance during source code navigation).
- View state (editor/designer) is preserved in the <project>.dsk file.
- Better live preview (less flickering).
- Corrected ‘Show parameter’ (Shift + Ctrl + Space).
- Improved Find&Replace dialog behaviour when executing ‘Replace all’.
- Improved code completion.
- Improved Ctrl+click behaviour.
- Editor is refocused when internal browser window is closed.
- Fixed source highlighting when double-quote was the first character in a line.
- Fixed: Deletion of components in the designer did not mark the project as modified
- Fixed DWS syntax highlighter for double quoted strings (did not highlight properly where delimiter was the very first character of a line).
- Fixed: Form is marked as ‘modified’ when an event handler is created by double-clicking on a component.
- Fixed: All controls on the form were duplicated when form was edited outside of the program while it was open in the editor.
- Fixed event generation problem on secondary forms.
- Fixed problems with Property Inspector and event generation (general crashes, “Invalid property value” exceptions).
- Fixed the bug which occurred when several replacements were done in one line.
- Fixed searching in RTL files (Find in Files, Include RTL/Library path).
Demos
- Added DataSnap client/server demo.
- Added DataSnap FishFacts demo.
- Added DateTime demo.
- Added HTML5 DOM demos.
- Multiple demos corrected & adapted to the new RTL.
- Added simple example for the Page Visibility API.
- Added Splash Screen demo (http://smartmobilestudio.com/2015/09/27/writing-small-splash-screen-pre-loader-code).
- Added a simple geolocation demo.
- Added simple geolocation-based sunrise/sunset calculator.
- Added a few examples to test certain cordova features (back button, audio playback [hooking its data for further processing]).
- Improved Web Audio ABX Test demo.
- Updated web audio examples and added new lessons.
- Added third, manually created form to the `Multiple forms’ demo.
- Added Layout Manager to the ‘Multiple forms’ demo to show how it is correctly used in a multiform application.
- Updated REST demo.
- Fixed Canvas Application demo.
- Fixed: OnPrepare handler was not properly forwarded in SmartCL.Inet.REST.
Other
- SmartUpdate program.
- Unified installation for all editions.
- Added support for “portable” installations that don’t require installation.
- Cleaned-up default .spr file.
- New icons.
- Added a snippet that shows how to create a form in runtime.