Smart Mobile Studio 3.9.1 is released
We are proud to release Smart Mobile Studio 3.9.1. This is the first Alpha release of the upcoming Smart Mobile Studio 4.0. The biggest improvement is the new WYSIWYG Designer, which takes developing visual applications in SMS to a new level. The compiler was updated with a new version of DWS (Delphi Web Script) and the IDE uses an updated Chromium component. On top of this, there are new components and improvements to the RTL.
We’ve attempted to keep this release as much backwards compatible as possible, so old projects should compile and run without changes.
The new Designer is written from scratch in Smart Mobile Studio itself and runs inside the IDE in an embedded Chromium browser. It uses Websockets to communicate with the IDE itself. As the Designer is an HTML4 application, it’s able to display accurately what all the components look like, instead of the dull old boxes in the old designer. You can set Align, Anchors, Angle, styles and any other properties and see exactly how they look like visually. You can also add a TW3TabControl and add and edit contents inside any tab.
The new Designer also supports non-visual components. Out of existing components in the RTL, TW3Timer, TW3HttpRequest and TW3WebSocket were added to the component palette in this release, but many more can also be added easily. This brings Smart Mobile Studio a lot closer to the way developers are used to work in Delphi.
The new Designer also has proper Undo-support and extensive copy-paste, even between multiple instances of SMS.
The RTL contains a new TW3PopupMenu-component along with a Menu Editor. The popup menu can be added to any component easily, by using any button as a Hamburger Menu or by using it as a traditional popup menu by right-clicking on a component. The designer itself uses the new TW3PopupMenu for any editing actions.
There is also a new TW3FormResizer-controller, which can be used to make any component resizable and draggable. It’s used in Designer’s Wizard forms.
The biggest changes in the RTL are related to constructing of forms when the application is starting. The code that the IDE generates for all the visual components makes sure that the components are ready before setting properties or creating child components. The RTL also properly waits until every single component is created, initialized and sized before calling InitializeForm. This eliminates tricky situations where a component was accessed, resized or hidden at the wrong time.
Some big changes were also made to TW3Application.ShowModal. In previous versions the OnInit(), OnOk() and OnCancel() -callbacks passed Dialog: TW3CustomForm as parameter. This was changed to passing ModalInfo: TModalInfo. You can access the modal form through ModalInfo.ModalForm to set and read parameters. Finally, call ModalInfo.Close in the OnOk- or OnClose-callback to properly close the modal form. There is also a new Application.ShowModalForm()-procedure, which lets you show any form as modal.
This Alpha-version can be downloaded with the SmartUpdate utility. Select the ALPHA -channel for this version.
Known issues and limitations
– The IDE may not always close properly leaving an extra SmartMS.exe or CEF4Delphi.exe process hanging. If this happens, they can be terminated through Task Manager.
– The designer currently only uses the default theme.
– Selecting multiple components for moving/editing is not yet implemented.
– TW3StringGrid does not yet have a Wizard.
– More advanced components like the Ace editor, TW3GoogleMaps and TW3LeafletMap do not show a WYSIWYG designer component. This is by design as they’d bloat the designer with huge amounts of external code.
Changes since 3.0.2
– New WYSIWYG Designer, which is a huge improvement over the original visual designer
– Made in Smart Mobile Studio itself.
– Visualizes every property including align, anchor, angle, styles
– Supports non-visual components like TW3Timer and TW3PopupMenu
– Allows advanced editing of controls, like TW3TabControl pages and contents
– Supports Wizards (TW3PopupMenu)
– Supports cut/copy/paste correctly using System clipboard
– Has extensive Undo-support
– Improved code generator for generating Form impl-code
– When an event is created, add missing dependency units for function parameters too
– Improved handling of Anchors
– Anchors can be set in the Object Inspector
– Added two new properties: AnchorGapRight and AnchorGapBottom.
These are set by the Designer to the distance of the bottom right corner
from the parent bottom right corner.
– Add new Welcome Page, which was made in Smart Mobile Studio itself.
– Update internal Chromium browser
– Update DWS to version 20190215.0
Most important RTL-changes:
– Improvements to constructing of forms when the application is starting.
– The code that the IDE generates for all the visual components makes sure
that the components are ready before setting properties and creating
– The RTL makes sure to wait until every component is created and initialized
before calling InitializeForm.
– These changes eliminate tricky situations where a component was accessed
or resized at the wrong time or a form was hidden while it was being built.
– Callbacks in ShowModal changed to pass ModalInfo as parameter instead of Form.
– You can still access the form through ModalInfo.ModalForm
– Close the modal form in OnOk() or OnCancel() by calling ModalInfo.Close
– New TW3Application.ShowModalForm
– Application.FormsArray will now only contain the forms that were automatically
created and registered during application startup.
– Change GetVisible to only check visibility-style from the component itself
– Add new IsVisible, which checks any other reasons for a component’s visibility,
like for example if the parent is visible.
– Change GetTop, GetLeft, GetHeight and GetWidth to read values from computed style,
which lets us read these values also when the component or form is hidden.
– New TW3PopupMenu, which can be added to any component easily, by using a button
as a Hamburger Menu or by using it as a traditional popup menu by right-clicking
on a component. The new Designer has a Wizard for editing the menu items.
– Improvements to TW3ScrollBox
– AutoUpdate-property. If true, the scrollbox monitors changes in child components
and updates itself automatically.
– ForceParent-property. If true, child components are automatically moved
to the Content- component.
– Child components can be added to the ScrollBox in the new Designer.
– TW3TabControl: Tabs and Tab contents can be edited in the new Designer.
– New versions of TW3CheckBox and TW3RadioButton. Uses only CSS for resizing.
– Bug fixes to TW3ToggleSwitch
– Improvements to EventManager:
– Make OnAllMovement compatible with SetCapture
– Prevent extra OnClick when using SetCapture
– Make sure that more advanced components stop painting contents when the component
is not visible (for example: TW3ListBox, TW3TabControl, TW3ScrollBox)
– New TW3URL, which contains URL parameter handling like Delphi’s ParamStr, ParamCount etc.
– New controller: TW3FormResizer, which can be used to make a form (or any other control)
resizable and draggable.
– Move initialization of Label alignment styles to SmartCL.Css.Stylesheet,
so they can be used in other units as well
– Add TPoint.MoveBy
– Add DateTimeToLocal and LocalDateTimeToUTC to DateUtils
– Parent can now be changed, so components can be moved to different parents just like in Delphi
– Add support for Background position
– Change w3_getPropertyAsInt to return 0 if value is NaN
– Animations and some other browser specific CSS did not work properly in Firefox
due to wrong Browser-prefix.
– Bug fix to setting the cursor by name.
– Fix numerous bugs in TW3EdgeSenseController.
– Bug fixes to BringToFront and SendToBack
– Zip Entire Project did not include Form .sfm -files
– Bug fixes to TW3TabControl
– Anchors (and other sets) can be set in the Object Inspector
– Improvements to generated Form implementation code:
– Wait until created components are ready before setting properties and creating children
– Set Anchors last
– Prevent conflicting keyboard shortcuts from being saved
– Add new units to units defaults and improve formatting
– Add xml-js to Libraries.
– New ECMA.Promise unit from api docs
– Support for adding/setting JSON arrays
– Add TJSONObject.Delete
– Set form size to 100% before calling InitializeObject
– Add missing units to SmartCL.Controls
– Setting control’s angle did not work in Firefox
– Don’t raise an exception while freeing a form which is not registered
– Themes: default styles were not applied for all elements in Android and iOS
– Fixes a bug where textarea’s size is too big in TW3Memo
– Anchors and Align-support to the RTL.
– Support in the IDE is currently being worked on. Currently Anchors can
only be set in code. Align can be set in the Object Inspector, but the
changes are not reflected in the designer.
– Bug fix to BoundsRect
– Themes: New background for highlighting errors: bsErrorBackground
– New event for setting custom row borders and backgrounds: OnDrawGridLineTheme
– Improvements to TW3StringGrid:
– New columns types:
– Added sorting
– New event: OnCellChanged
– TStringList and TObjectList: Add Sort() with CompareFunction.
– Fix CSS browser prefix for Firefox
– Themes: Use normal size and style text in buttons.
– New control: TW3StringGrid
– New featured demo for the StringGrid.
– New TW3CustomScrollControl, for developing scroll controls with scrollbars/indicators-support.
– New border types: btLightBorderTop, -Bottom, -Left, -Right, -Horiz and -Vert
– EventManager: Check TouchPreventDefault before trying to prevent extra artificial mouse events from touch events
– Improvements to TW3BlockBox and Modal dialogs:
– TW3BlockBox did not trigger a resize
– Dialogs did not get resized when window was resized or device flipped
– Make sure the dialogs are not too big
Bug fixes and improvements to the IDE:
– BringToFront and SendToBack will now affect component creation order.
– Opening files from Project Search Path is fixed.
– New controls: TW3SpinButton, TW3ArrowUpButton, TW3ArrowDownButton, TW3ArrowLeftButton and TW3ArrowRightButton.
– Add 1px margin to TW3ButtonBorder to prevent the border from being clipped.
– Bug fixes to Tween.Effects
– Bug fixes and changes to renaming of forms:
– Renaming in Project Manager will not change form class any more.
– Form class name can be renamed in Object Inspector.
– Improvements to Project Statistics:
– Only count Total time when Smart Mobile Studio IDE has focus.
– Only Count Design time when changes are made in Form Designer.
– Add clear button.
– Component Palette:
– Added new controls
– New icons for many existing controls