Release notes: Embedded Wizard 13
Version 13 contains the following changes and improvements:
Improvements of Inspector to group and sort properties by categories
In order to provide better overview, Inspector window has been improved to group and sort the displayed properties by their associated categories. This improvement is especially useful when an object contains many properties. You can choose between three modes: (1) Sort properties by their names, (2) Sort properties by their categories and (3) Group properties by categories as demonstrated in the following screenshots. For more details and the usage of the new modes please see the section Sort and group properties:
The first mode (Sort properties by names) exists for compatibility purpose with older versions. The properties are sorted alphabetically. The third mode (Group properties by categories) groups the properties in categories which can be expanded and collapsed individually. It is ideal for users who already know the properties and where to look for them. The second mode (Sort properties by categories) displays all properties arranged in groups and expanded permanently. It provides the complete overview of all properties.
To specify the categories, the property member has been enhanced by a new attribute Category. There you can enter text identifying the category of the property. All properties belonging to the same category are thereupon grouped together. Furthermore, by using the attribute Category the sorting of the property within its category and the sorting of the category itself can be controlled.
Properties belonging to the Mosaic framework are already categorized. The grouping and sorting of Mosaic properties correspond to the typical workflow how views, widgets, etc. are used. For example, the usual workflow is to specify first the position of a view, then its content (e.g. Bitmap), then its colors and finally other visibility attributes. The categories specified in Mosaic are fixed predetermined and can't be changed.
In turn, properties which do not belong to any category are automatically associated to a dummy category named Custom Properties. When you open an older project with the new Embedded Wizard Studio and you wonder where are all your own properties disappeared, then look for the category Custom Properties as shown below:
When you start Embedded Wizard 13 for the first time, the Inspector will per default use the mode Sort properties by categories. If you prefer the old functionality, simply select in the menu the item . This corresponds to the default behavior of Embedded Wizard 12 and older.
Add support for multiple Code Editors
The Code Editor window has been enhanced by functionality to manage multiple editors. For this purpose all recently opened Code Editors are displayed as tabs in a new navigation bar on top of the Code Editor window. By clicking on a tab you can simply switch to the respective editor:
The new bar works similarly to the Navigation bar of the Composer window. In particular, the tabs can be rearranged (moved) using the mouse and undesired tabs can be closed again. To better recognize Code Editors belonging to the actually opened Composer, the tabs of all other editors are slightly faded out as shown below:
This new functionality replaces the old behavior of the Code Editor where the editors were associated to their Composer pages. Navigating between Composer pages had then the effect of automatically switching between the editors. This behavior is not available anymore. When you navigate between the Composer pages, the state of the editors don't change except the tabs which are faded-out or in depending on whether the editor belongs or not to the actual Composer page.
For compatibility reasons, when an old project is loaded, all Code Editors associated originally to Composer pages are immediately listed as tabs in the navigation bar. The most recent Code Editor is then the active one. When the project is saved, the list and state of the opened editors is stored in project's setting file. Next time when you open the project again, the state is automatically restored.
To navigate between the tabs new shortcuts CTRLSHIFTF6, ALTSHIFTLEFT and ALTSHIFTRIGHT are available:
•Using CTRLSHIFTF6 the user can navigate to the recently viewed Editor content. Single usage of this shortcut just toggles between the both recently visited Editor contents. When holding down the CTRLSHIFT keys and pressing multiple times the F6 key the Code Editor navigates back in the history of recently visited Editor contents. This command is also available in the menu NAVIGATE.
•By using the shortcut ALTSHIFTRIGHT the user can navigate to the Editor on the right of the currently opened Editor.
•By using the shortcut ALTSHIFTLEFT the Editor on the left of the currently opened Editor is activated. .
On the left of the new navigation bar is found a button. Toggling this button connects the Code Editor window with the Inspector window or disconnects them again. This new button provides a convenient access to the already existing functionality where Inspector contents can be read and modified within the Code Editor window what is useful in particular when you need to enter long text for an attribute or property:
Add new dialog to configure fonts and colors in Code Editor
Embedded Wizard Studio has been enhanced by a new Editor colors and fonts dialog. This dialog is intended for user who want to adapt the appearance of the Code Editor to their own preferences:
The new dialog is accessible via commandin the menu . The settings are stored locally in a Windows settings area dedicated to user. The settings are not stored in the project files. That prevents conflicts with several users working on the same project.
Other improvements in Code Editor
★Code Editor enhanced by a tool tip window to display information about the text portion below the mouse pointer. When the user rests in the Code Editor the mouse pointer over a word, the context of the word is evaluated and the declaration together with description of the corresponding project member, Chora built-in construct or Chora statement are displayed in a tool-tip window:
★Code Editor has been enhanced by a new command to comment on/off selected text lines by using the comment signs // .... Main menu provides for this purpose a new command . Analog the local menu of the Code Editor has been enhanced by a new menu item . For more details see Comment out code lines and code blocks.
★Code Editor has been enhanced by a new command to comment on/off a selected code block by using the comment signs /* ... */. Main menu provides for this purpose a new command . Analog the local menu of the Code Editor has been enhanced by a new menu item . For more details see Comment out code lines and code blocks.
★Improvement of the Search and replace text operation in Code Editor. The Search Panel (found below the Code Editor) has been enhanced by a new button . This restricts the replace all operation to be applied on the selected text area only:
★Improvement of the Search text and Search and replace text panels. The panels existing in the lower area of the Code Editor have been enhanced by an info text area. This text displays the number of text fragment matching the search condition and after the operation the number of affected occurrences. The info is updated when the user modifies the content of the editor or the search condition:
★The and buttons in the Search text and Search and replace text panel are now not disabled anymore when the caret has reached the begin/end of the document. If there is no following/preceding search match, the new info text in Search Panel (see above) displays Text end reached or Text begin reached and a message beep is played. When the user activates the command again, the search operations wraps around the text end/begin.
★Improvement of the selection in Code Editor. Handling of key combination UP, SHIFTUP, PAGE-UP and SHIFTPAGE-UP is adapted to skip to the begin of the row if the caret is already in the first row. Similarly handling of key combination DOWN, SHIFTDOWN, PAGE-DOWN, SHIFTPAGE-DOWN is adapted to skip to the end of the row if the caret is already in the last row.
Other workflow improvements in Embedded Wizard Studio
★Add Reset window layout command to the Embedded Wizard Studio menu . Using this command the position and visibility of all Embedded Wizard Studio windows are restored to the default (initial) state.
★When the user overrides an inherited method, the overridden method is now filled with dummy code containing the super() invocation and further inline comments and hints. This ensures that unintentionally overridden methods don't break the functionality. If not desired, the code and comments can be removed from the overridden method. This enhancement follows the recommendation to invoke from an overridden method its inherited version.
★Better indicating errors in Composer. When an error occurred in Composer (for example due to a syntax error in an initialization expression), the Composer functionality was distorted. In worst case the Composer appeared empty confusing so the user. Many user didn't understand that there is an error which has to be fixed even if the error was listed in Log window. Now, if errors are detected during execution of code in context of the Composer window, a dedicated message dialog is displayed explaining the user what happened:
★The appearance of all message boxes in Embedded Wizard Studio has been adapted to appear analog to all other Embedded Wizard Studio windows. This replaces the old Windows look.
★Better naming members when duplicating them via copy/paste. Originally when the duplicated member ended with a number in its name, the number was incremented to estimate a new unique name of the duplicate. Now, the number can be found also in the middle of the name. For example, when duplicating the member Text1View you will get a new member named Text2View.
★Improve Search in Project operation. Originally, the found locations listed in Log window could became invalid easily when the user has modified the content of the affected method or attribute. The problem was that the found location limited to store the position as a pair of line+column info. Now, the location stores the context of the affected text fragment. The user can modify the text and the location can still find it - as long as the context can be found in the text. This improvement also affects warnings and error messages listed in the Log window.
★In case of Search in Project operation, the found occurrences are now selected in Inspector and Code Editor. That means, if the Code Editor is connected with Inspector, the navigation to the affected text position and evtl. selection is also performed in Code Editor.
★Improvement of Inspector Assistant and Code Editor Assistant windows to promote local members. Originally all members were sorted strictly by their names. Finding the right local member was difficult if the name was unknown. Now, the sorting within Assistants lists first local members, followed by class members and then by global members. New icons added to visually distinguish local, class and global members. Furthermore, the Code Editor Assistants have been enhanced to also include local variables valid at the actual caret position.
★Embedded Wizard Studio has been modified to avoid accidentally activating the Outline View Mode and, if the mode has been activated, notify the user about its effect. We learned that the Outline View Mode may confuse less experienced users. They don't understand why the Composer remains empty. Now, new message dialog informs the user when the user has activated the mode as demonstrated below. Additionally, the Outline View Mode is is not stored anymore in the project setting file. After opening a project the Outline View Mode is generally disabled for all Composer pages. Also, the convenience key E has no function anymore in the Composer:
★Add support for the shortcut CTRLSHIFTZ for the EDIT Redo operation. Usually Redo is triggered by the shortcut CTRLY. Under Windows it is however common to use also the alternative shortcut CTRLSHIFTZ. This shortcut is now available in the entire Studio.
★New message dialogs added for the case of the just opened project being created with an older version. The message dialogs notify the user about the old version and evtl. performed adaptations in the project. Additionally the same message is logged in the Log window. This should prevent the user from being surprised when Embedded Wizard Studio asks to save units which have not been modified by the user but automatically updated to the recent version.
★The old navigation commands and from the menu have been replaced by the single command . The reason is that the navigation was inconsequent confusing users. With the new command the user can now toggle between the latest two visited Composer pages. The command can also be controlled via shortcut CTRLF6. Single usage of this shortcut just toggles between the both recently visited Composer pages. When holding down the CTRL key and pressing multiple times the F6 key the Composer navigates back in the history of recently visited Composer pages. The forward navigation is not supported anymore.
★Originally by using the shortcuts ALTLEFT and ALTRIGHT the user could navigate to the previous or next Composer according to the order in which the Composer pages were viewed. The effect was thus not very well predictable. Now the navigation works according to the order in which the tabs are listed in the Navigation bar. Using ALTRIGHT the user navigates to the Composer page on the right of the actually opened Composer page. Using ALTLEFT the user navigates to the Composer page on the left.
Enhancement of the existing Mosaic views
★The view Filled Rectangle has been enhanced to display the corners of the rectangle rounded. To configure the rounding a new property Radius is available. It affects the rounding of all four corners at once. By using the properties RadiusTL, RadiusTR, RadiusBR and RadiusBL the rounding can be configured for each corner individually. This enhanced allows the creation of rounded rectangles without using bitmaps. Even displaying circles is possible with this enhancement:
★The view Border has been enhanced to display the corners of the rectangular border being rounded. To configure the rounding a new property Radius is available. It affects the rounding of all four corners at once. By using the properties RadiusTL, RadiusTR, RadiusBR and RadiusBL the rounding can be configured for each corner individually. This enhanced allows the creation of rounded borders without using bitmaps. Even displaying circles is possible with this enhancement:
★New view Shadow has been added to Mosaic. This view is intended to display a blurred rectangle with optionally rounded corners. It is thus ideal to create simple shadow effects without depending on bitmaps nor the Filter views. Furthermore, the new Shadow view is supported on all target systems unlike the Filter views which are not working on target systems using RGBA4444, LumA44 and Index8 as native color format:
Enhancement of the existing Mosaic widgets
★All ready-to-use widgets (except the Value Display widget) have been enhanced by new properties permitting you to configure the appearance of the widget without depending on bitmaps. Now, you can specify the desired colors, size parameters, corner rounding and shadow effects directly in the configuration object of the respective widget. In order to be more flexible, all widgets have been enhanced by new visual elements, like Thumb or Accent. This new functionality can of-course be combined with the old functionality involving bitmaps, if desired. For more details please read the documentation describing the respective widget.
★Based on the above mentioned new functionality, the set of widget configurations have been enhanced by a new, modern looking style, we call Mono. When while working with Embedded Wizard 13 you add a widget to a component, this widget uses now this new style automatically. If you prefer the old style (we call now Lime), just adapt the property Appearance of the widget. Following figure demonstrates some of the widgets in the style Mono. All these widgets are displayed without using any bitmaps:
★The naming of properties in widget configuration classes has been adapted to be consistent. Properties referring bitmaps have been renamed to contain Bitmap in their names. Properties identifying the upper/lower margins were renamed to follow the name convention with MarginTop and MarginBottom. Automatic refactoring added to Embedded Wizard Studio to ensure that older projects are updated to the new names just in the moment when the project is loaded.
★All interactive widgets have been enhanced to perform state transitions with animations. For example, when the user presses a Push Button, the alternation between the original and the new state will be performed with a smooth animation. To configure the duration of such animation all affected configuration classes have been enhanced by a new property named StateTransitionDuration. From technical point of view, during the animation the widget calculates its actual appearance by applying a linear interpolation between the parameters specified for the states before and after the state transition took place. Please note, that the animations affect all widget configuration parameters except the specified bitmaps. See for example Configure the Push Button state transition animation.
★The widgets Push Button, Radio Button, Toggle Button, Vertical Scrollbar and Horizontal Scrollbar have been enhanced by the property OnUpdate. When a slot method is assigned to such property, the widget will signal the slot method each time the state or the visual appearance of the widget changes. Within the slot method your implementation can update associated decoration views. This approach permits the appearance of existing widgets to be enhanced. See for example Combine the Push Button with decoration views.
★All interactive widgets have been enhanced by new methods to query the current state and progress of a state transition animation (GetCurrentState(), GetTransitionStartState(), GetTransitionEndState() and GetTransitionProgress()). This information can be used to animate decoration views associated to the widget. See the above mentioned OnUpdate properties. See for example Combine the Push Button with decoration views.
★Similarly to how widgets provide the OnUpdate property to implement code for updating associated decoration views, the configuration classes for all widgets (except the Value Display widget) have been enhanced by an OnUpdate property. This allows the user to implement a common slot method responsible for updating decoration views associated to all widgets using this configuration. The decorations can then be added and controlled in the slot method associated to the configuration object's OnUpdate property. See for example the Enhance the Push Button configuration by additional decoration views.
Add propagation for the Enabled state in Mosaic
The property Enabled controls whether the component is able to react to user inputs or not. Setting this property to the value false disables the component. As consequence the component not only ignores user inputs but also the state of the component changes. The component is not Enabled anymore what may affect its visual appearance. For example, disabled Push Button may appear faded-out. See also Common component states.
Disabling a component affects also all of its subordinated components. If the superior component is disabled, the subordinated components are not able to handle any user inputs. However, when working with Embedded Wizard Studio 12 or older, the state of the subordinated components remained Enabled. This because the state was managed locally by each component with the consequence of any state alternation not being propagated to subordinated components. The appearance of the subordinated components was not updated.
With Embedded Wizard Studio 13 we have modified this behavior. Now, changing the Enabled property of a component can be propagated automatically to all subordinated components. These assume thereupon the state not enabled and the appearance of the subordinated components is updated automatically. For example, subordinated Push Buttons appear thereupon faded-out. When the superior component is enabled again, the state of the subordinated components is restored according to their own enabled state.
To control whether a component should derive its enabled state from the state of the superior component, set the property DeriveEnabledState of the affected component to the value true. For example, to force a button to appear disabled when its superior component is disabled, set the button's property DeriveEnabledState to the value true. Per default, the new mode is disabled.
Other improvements in Mosaic
★The class Core::Group has been enhanced by a new property named ClipViews. This is a convenience property which if set false deactivates the clipping of the affected component completely. In other words, all views lying outside the component's boundary area are visible. For example, a shadow view contained in such component can appeaar outside its boundary area. See also Control the visibility of nested components.
★The class Core::Outline has been enhanced by a new property named ClipViews. This is a convenience property which if set false deactivates the clipping of the affected Outline Box completely. In other words, all views lying outside the Outline's boundary area are visible. See also Use Outline Box to group and clip views.
★The class Core::Group has been enhanced by a new method named ExtendClipping(). Using this method the clipping area of the affected component can be enhanced so that contents lying outside its original boundary area can be displayed on the screen. Unlike the above described ClipViews property, the method does not disable the clipping. Instead, it enhances it so that it has lower impact during screen update.
★New method FindViewWithStackingPriority() added to Core::Group. It is helpful to find views with dedicated stacking priority what is often the case with custom own decoration views added to widgets. See also Enumerate and search views existing within the component.
★New method FindViewWithStackingPriority() added to Core::Outline. It is helpful to find views with dedicated stacking priority what is often the case with custom own decoration views added to widgets. See also Enumerate and search views controlled by the Outline Box.
★The Mosaic class Resources::ExternBitmap has been enhanced by a new property Asynchronous. Setting this property to the values true instructs the Extern Bitmap to perform the loading operation in non-blocking mode. Additional properties OnLoaded, OnFailed and OnUpdate allow you to handle events associated with the asynchronous loading operation. See also Load image contents in asynchronous mode.
★The Mosaic class Resources::ExternBitmap has been enhanced by a new method GetInfo(). It is intended to query an information string associated to the loaded image content. See also Query optional information associated to the loaded image content.
★The above mentioned asynchronous loading mode and the new GetInfo() method require the interface to the underlying Extern Bitmap Loader to implement additional functions. These functions are needed to create, control and evtl. cancel the pending loading requests. For more details please see the section Support asynchronous loading.
Improvements in Chora
★Chora has been enhanced by a set of new built-in functions math_mix( aValue1, aValue2, aFactor ). The new operations interpolate linearly between aValue1 and aValue2 controlled by aFactor. The new operations support data types: int32, uint32, int64, uint64, float, point, rect and color data types.
★The behavior of the postsignal statement has been modified to report the error 308 only when the signal is posted again for more than 3 times. This still prevents the endless signal delivery but gives the user more flexibility.
★The optimizer has been enhanced to detect and eliminate equal switch-case branches. Equal case branches within one and the same switch are merged together if there is no dependency to preceding or following branch caused by fallthrough. case branches containing a fallthrough are merged together with the next following case branch.
★The optimizer has been enhanced to eliminate the conditional expression (?:) if its both operands are equal and the condition expression has no side effects.
★The attribute Multilingual has been removed. All classes are now implicitly multi-lingual. For compatibility reasons when reading unit files, the attribute is accepted by it is ignored. When you have an application case where you expect to suppress an initialization expression from being re-evaluated even if this expression involves a multi-lingual operand, please prefix the expression by the operator %- as described in section React automatically to language selection.
★Improvement in usage of multi-variant constants, resources and autoobjects. Originally, an initialization expression was automatically re-evaluated only if the expression contained a multi-lingual operand (e.g. a constant with multiple, language depending values). Now the re-evaluation is also performed when the expression contains a multi-variant constant, multi-variant resource or a multi-variant autoobject. In the simplest case it is sufficient to switch on/off a Style to trigger the automatic update - similarly to how the language is changed. This improvement simplifies significantly the implementation of color themes, where different color versions are stored as constants and their variants.
★For compatibility reasons, the above described automatic re-evaluation of initialization expressions involving multi-variant operands is performed only, when the Style controlling the variant selection is configured with its new attribute InstantUpdate equal true. See also Managing variants.
★Chora compiler adapted to perform automatic re-evaluation of initialization expressions belonging to an autoobject when the language or styles are switched and the affected expression involves multi-lingual or multi-variant operands.
Integration with external shaping engines to support for Thai and Devanagari
External shaping engines, such as Monotype's Spark engine, can now be used to perform complex text layout shaping. Shaping, in particular, is essential for the correct display of text in Thai and Devanagari scripts. In co-operation with Monotype, their stacks have been successfully pre-integrated and validated with Embedded Wizard 13. For more details please contact us via firstname.lastname@example.org.
★Menu component template has been modified to easily change the menu layout from vertical to horizontal. The templates have been adapted to support the horizontal layout. In the simplest case it is sufficient to change the Formation property of the Outline member existing in the Menu component to some horizontal value e.g. LeftToRight.
★All Menu Item component templates reworked to trigger the superior menu to update its layout when the item's caption has changed. Additional hints added in the inline description.
★The Platform Packages for the native color formats RGBA4444, LumA44 and Index8 have been adapted to include the blur operation between two ALPHA8 surfaces. Unlike regular blur operations performed on NATIVE surfaces, this operation does not suffer from data loss in the intermediate blurring steps. The results have good quality to be used on targets with restricted color space.
★The Platform Packages have been reworked to support the IL32P64 data model of 64-bit target systems. This permits the user to compile the generated code for 64-bit Windows as target system.
★Problem with the lowest negative literal for int32 value -2147483648. To suppress C warnings the int32 literal -2147483648 is represented in C code now as (int32)2147483648. Special handling of the Chora expression -2147483648 added to prevent warnings. The result is valid int32 literal. Warning messages adapted.
★Crash when in vector graphic a sub-path is initialized to store data, but no data is provided. Add condition to detect and ignore empty sub-paths.
★Rasterizing of vector graphic produces shifted results. Add additional offset of half of a sub-pixel.
★Rasterizing vector graphic on WebGL target into an off-screen bitmap produces incorrect results when the resulting image is used for warp or blur operation. The off-screen bitmap has been enlarged to include a transparent 1-pixel thick border.
★Path drawing operation reports an 'out of issue buffer' error 187. The estimated area to use for path data in an issue buffer was smaller than the later allocated area. The estimation was correct. The problem was the allocation which tried to reserve too much memory. If there was sufficient space for the estimated area but not for the later allocated area, the operation failed with error 187.
★Disable diverse C compiler warnings.
★The number of edges calculated in Mosaic Graphics::ArcPath class was not precise for arcs with small radius resulting in ugly looking arcs.
★Crash in Embedded Wizard Studio with nested assignment operation when the expression evaluates a variable which is about to be initialized. This could allow the expression to refer the not yet existing local variable. For example: var Core::Group errorDialog = errorDialog = new SomeUnit::SomeComponent;
★Reloading a unit modified externally did not clear the Undo/Redo history. Performing the Undo-operation could then fail.
★Crash in Embedded Wizard Studio with a sequence decrement/increment operators (--/++). Missing error handling added.
★Incorrect warnings because of recovery files. Now, recovery folders are deleted when they don't contain any relevant files.
★The area displaying attributes and properties in Inspector window was not correctly scrolled. When selecting between members, sometimes the Inspector window appears empty because its content was scrolled away.
★Not correctly working bool( rect ) and bool( point )type-cast operator.
★Missing Inspector update while reordering members. The Inspector window implemented a 50 ms delay to cumulate updates. The delay has been modified to 5 ms.
★Views configured with Embedded=true property cause the 'Can not post again the signal' warning when the view changes its size/position during the regular UpdateViewState() operation. In case of a view configured as Embedded or the Outline view itself, all owner updates are now delayed by an additional postsignal.
★Compilation of OpenGL Shader Programs takes too long. Implementation adapted to defer the shader compilation until they are used for the first time.
★Chora compilation errors when using operator is_member() with a single identifier. The condition to check for the closing ) sign has been corrected. Additionally, the is_member() and is_intrinsic() operators have been reworked to correctly evaluate macros found in the expression.
★Code Editor scope assistants are not evaluating correctly expressions containing math_min(), math_max(), math_rand() operands. As consequence, the type resulting from the expression is unknown and the scope assistant can't estimate which members should be displayed. The implementation has been adapted to evaluate the types of operands found in invocations of math_min(), math_max(), etc.. Based on the estimated operand types, the resulting type of the built-in function can be extrapolated. Please note, the operation is not able to evaluate the types resulting from nested arithmetic expressions. It limits to estimate the type of a variable or literal used in the built-in function invocation.
★Overflow in Animation Effects when changing the animation direction. When calculating the elapsed time for an animation effect configured with very short duration (~50 ms), the elapsed time may become too large depending on the runtime behavior of the application. This may result in overflows of the calculated animation progress value, especially when the effect is configured with one cycle and the animation direction is changed at the runtime. To correct the behavior the calculated progress value is now limited to the range 0.0 .. 1.0.
★Crash during warp bitmap operation with very large source bitmap. The warp algorithm has been enhanced to check the source surface coordinates at the left and right edge of each drawn pixel row. If the coordinates address outside the source surface, the affected pixel are discarded.
★Code Editor did not update the scroll position properly during a Search/Replace operation. As result the found text fragment was not visible in the editor and the user needed to scroll the editor manually.
★Navigation in Code Editor did not work when pressing the END key and caret was inside virtual whitespace. Additionally, the function of the ESCAPE key in Editor was restored. Now, pressing ESCAPE clears the selection.
★Accessing a property in Inspector window of a recently renamed object causes an error message. The composer was not correctly updated after renaming the member. Additionally, renaming the objects updates entries in the observers list, so that eventual notifications triggered afterwards are delivered to the objects correctly resulting in expected screen update.
★Using Immediate Garbage Collection is producing a lot of log messages. The log messages are now displayed only when the RTE is recompiled with the macro EW_PRINT_MEMORY_USAGE being defined.
★Loading very large images used by bitmap resources takes long. The implementation has been optimized.
★Bad performance when opening a project with large unit files. When loading files, all \r\n end line sequences are replaced by \n. This operation was inefficient implemented. The time necessary to process the file content was in exponential relation to the file size and could take several seconds.
★Scope Assistants not displaying $if .. $endif, etc. compiler directives nor macros. Originally the $if, etc. directives were listed only when there was already a $ sign entered. The Global Scope Assistant has been fixed to not expect the $ sign.
★The Scope Assistants have been corrected to correctly include the operators is_member() and is_intrinsic(). These operators are usable only when the current line starts with a $if or $elseif directive. Furthermore, if a line starts already with a $if, $elseif or $endif directive, no other directives are listed in the Assistant windows anymore.
★ToolTips in Embedded Wizard Studio are working unreliably. Depending on the timing of the mouse interaction the ToolTip control might fail and it didn't appear. Also flashing of the tooltips was observed with HiDPI mode.
★Incorrect description of Core::Formation items.
★Incorrect time base during prototyping. In version 12 we have modified the Prototyper to subtract the time elapsed during the loading of resources or compilation of methods. This should improve the animation behavior of the GUI application when it is tested in the Prototyper. This correction, however, contained an error which could result in time values with 1 ms difference.
★Crash in Embedded Wizard Studio when using ++ operator without operands. Error handling and error messages for the case of not specified operand added.
★Crash in Embedded Wizard Studio when while searching the recovery files the directory containing the files is deleted at the same time.
★Crash in Embedded Wizard Studio when using an object named Class.
★The files Strings.ewu and Strings.xls in StringTable example are renamed to avoid warnings when the generated file strings.h is included.
★Error in generated code using INF or NAN values. Adding special handling to Code Generators.
★Incorrectly calculated position for items in Vertical or Horizontal List configured to use items with flexible size.
★Embedded Wizard Studio has been adapted to detect errors occurred during startup of Embedded Wizard Studio. In the past we have observed that sometime the Studio is not correctly started and/or workspace settings and not correctly loaded. This could provoke crashes in the Studio. To prevent such seldom error situations, when the error is detected the Embedded Wizard Studio is automatically restarted.
★When working with Code Editor, the combination CTRLSHIFTUP or CTRLSHIFTDOWN caused the Composer to reorder the actually selected project members. Now the key combinations are caught in Code Editor to prevent the Composer from restacking the project members.
★The optimization added in Embedded Wizard Studio 10 suppresses the elimination of OnGet methods. The optimization has been improved to not enforce the usage of OnGet method when the OnGet method is reduced to return X with X corresponding to the initialization value of the property.
★The Gauge widget has been adapted to correctly respect the Min/Max angle range also when the widget is configured to perform elastic animation. In the original implementation the needle and consequently the tracks could exceed the predetermined movement range.
★The Horizontal Scrollbar and Vertical Scrollbar widgets have adapted to keep the thumb touch area and the track touch area equally sized. In the original implementation the track touch area could become bigger than the thumb area. As consequence, the thumb did not react to touch events if the user touched slightly outside the thumb area.