ReleaseNotes:Planimate 5.22 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search


  • FIX 5.22q had broken creation of standalone apps due to missing updating a call to a callback function. The standalone loader was being left with nothing to do.


  • NEW Added an "Over" button in the breakpoint dialog; the routine engine now supports stepping over blocks of code/subroutine calls
  • CHANGE When an iterate or while is interrupted, PL will open a breakpoint dialog instead of the model error dialog. This enables the run to be inspected and continued.
    If you want to stop the run, select the "terminate run" check box to force it to break out.
  • NEW Engine option "Globally Disable Panel Auto-Resize"
    This prevents the propagation of resize updates AND broadcasts for all panels which have the "Auto Fit Panel To Window" option on and make use of PL repositioning objects dynamically using the anchor settings.
    This makes it easier to disable this behaviour when panel sizes and layouts are being created/updated.
    Don't toggle this option whilst on a panel which has the "Auto Fit Panel To Window" option on, having the option change whilst a potentially dynamic panel is open has not been considered.
  • CHANGE Reworked file handling during load/save model.
    Implement a read only test:
- If a loaded model is read only PL will give a
warning but continue loading
- If a saved model is read only, PL will give a warning
and put up file dialog to enable selection of another file
This is useful where a source code management system is being used to manage multiple modellers editing MDL files.
  • FIX A leak in DLL calls where 'table direct' parameters are being passed (where the DLL directly interacts with PL's table memory).
    Every call was leaking (sizeof(ptr) * #-of-columns)) bytes
  • FIX The model hierarchy view could be selected whilst there was a combo box open in a table filter/cell view, changing panel would crash PL
  • FIX When a table filter caused no rows to be displayed, the row edit menu contained inappropriate options selected which could cause a crash if the actual table contained no data.
  • FIX Fixed cancelling when prompted for the name of an item to add to a DB
  • FIX jump To Block Start (shortcut [) in the routine editor now works at an ELSE statement
  • FIX Adding a table to the Data Object list updates the editor


  • NEW Routine operation CreateLabelAlias
    This enables an alias to be added to a specified index (which must be a normal label list). The routine returns a status code:
    0: Alias was assigned (or already existed for that label) 1: Alias failed (it is already another label or an alias to another label)
  • NEW Command line execute option "Keep Child Process At Front" PL will bring the child processes main window to the front if PL gets focus whilst waiting for the child process to complete.
    TIP:If possible, prevent the user minimising the child processes window
  • FIX SetViewportScroll() now works properly if the viewport has hidden scrollbars. Previously it would not update the view.
  • FIX "Wait For Process To Complete" command line execute would cause a fault if the menubar was hidden
  • FIX Enable setting the "Application Name" when building an Unkeyed Application. This field affects what is seen in the About box


  • FIX Typo in column option
  • NEW Implement inline multiline free text cell edit in tables to enable this format a column for free text, set the number of row lines to > 1 and enable the "edit labels with field" option.
    Instead of popping up a window to edit free text, the text will be edited in-place
    NOTE: no scrollbar is shown for the field as clicking it closes the edit (since it loses focus) and I have't found a way around it.
  • NEW Experimental options "Anchor Left" and "Anchor Top" These options were implicit when "Anchor Right" and "Anchor Bottom" were off respectively. They still are.
    However, if both Anchor Left and Anchor Right are selected (for the x axis) or Anchor Top and Anchor Bottom (for the y axis) then it indicates that you want to anchor both sides of the object so they stay the same relative distance from the panel border when the panel is resized.
    This is achieved by resizing the object as the poanel resizes.
    This is useful in cases where a single object (eg: a map or table) should stretch to fit the available space (width, height, or both)

Modeller code will be  required to support multiple objects sharing
a space since no attempt is made to share/apportion space between
multiple objects.
WARNING: Automatic resizing of objects works by maintaining the distance between the edges and the margins. If the panel is shrunk so much that the object becomes zero width, it cant shrink anymore and the object will lose its positioning even when the panel is later grown again.
So ensure you set the minimum panel width/height to reasonable values which will prevent the panel being shrunk so much as to squeeze the life out of your panel objects.
Also reminder that inheriting off a panel with anchored objects is a bad idea since the objects on the inherited panels will lose their positions relative to that panel's borders when the parent panel repositions the objects on it.

NEW Command line execution in change object can now build a command line out of multiple labels and literal text. This is enabled by selecting the "Command:Set By Expression" option.
The same processor as used for SQL is used, so a command line like:
"NOTEPAD " & '"' & p.attribute & '"'
will become (if p.attribute is label: test.txt
NOTEPAD "test.txt"
p.xxxxx can be used to substitute a portal attribute and

i.xxxx  can be used for an item attribute
A future version will enable more expression terms (eg: call references) and popup completions. The existing expression editor cannot be used directly as its set up for numerical expressions, not textual content.

  • CHANGE Removed end-ellipses from multiline text fields as it messed up text display when more lines existed than could be fit into the table cell.
    (DT_END_ELLIPSES option on DrawText() causes this oddity. My bad for trusting MS to render something instead of doing it myself)


  • FIX Hide Repeated Values option in tables was broke
  • FIX ResetBillboardTable option removed
  • FIX Fix customise ICO feature; the ID allocation had a bug that upset Win64


  • NEW Change->File Execute Program now has a new option: "Wait For Process To Complete".
    This will cause Planimate to wait until the executed process closes. PL will be non-responsive but will repaint and be repositionable while waiting.

  • NEW Installed a new random number generator. The new generator generates 32 bit values instead of the old 15 bit one (which had only 32768 possible values on a uniform value).
    The way the new generator is initialised has also been improved to use a statistically better initialising generator.
    For backward compatibiltiy, the original generator is still present and will be enabled when loading older models. This is controlled by the Engine Option "Use Old Random Number Generator".
    With this option on, a model should exhibit the same random number draws as in previous PL versions. If backward compatibility of random numbers is not required, this option should be turned off.
    Note that whilst models will experience the same random sequence with the old generator selected, the preview plots between current and previous PL versions will differ. This is due to the way the preview generator is seeded.
    (During editing generators are re-initialised when the distribution dialog is opened. This does not affect runs as the generators are reseeded at run start).
  • CHANGE Enhanced File->Model properties to report on scoped label lists and their contents in the model.


  • NEW The application compiler supports customisation of the compiled EXE. The Application icon (what you see in explorer) and the Window Icon (what you see when you alt-tab and in window corner) can be separately set.
    The fields require windows format ICO files, not ICO libraries or DLLs.
    A single ICO file may contains bitmaps at multiple resolutions and colour depths. These days 16 colour icons are obsolete but the different resolutions ensure the icon looks good in the different explorer views.
    Typical resolutions include: 16x16,32x32,48x48

Vista introduces huge  256x256 size icons. They are supported too.
For more info on creating ICOs for your app:
Note than when you select the application icon the window icon field is automatically set the same. You can subsequently set the window icon to something different if you so desire, otherwise leave it the same as the application ICO.

  • NEW The application compiler can have an alternative "base" Planimate EXE specified. This is useful if you want to compile both 32 and 64 bit versions of your application.
    Be careful not to select a PL exe version which your model is not compatible with.
    To use the default (running EXE) in the compilation, leave the field blank.
    PL analyses the internal structure of the EXE you chose to compile your application with. If its a 64 bit version, the created file name has "_64" appended to it to assist in keeping track of 32 and 64 bit versions of the same application.
  • NEW Application compiler settings are now saved in the MDL file so next time you make an application, most of the settings are already set up.
  • NEW Application compiler no longer prompts to save the model before opening the compiler dialog.
    Instead, if the model needs saving, it will be saved when you OK the configuration dialog. This is to ensure any configuration default changes in the dialog get saved (otherwise an annoying double-save would be needed). If the model is already saved and no changes are made in the fields, it wont need to be saved again.
    If the model hasn't been saved yet (creating an application from a newly created model) then you will need to save it explicitly before invoking the application compiler.
  • NEW The application compiler now offers to open the folder containing a compiled EXE, once it has been created.
  • CHANGE Removed "Application Name" from end user model info. This is now one of the settings retained for the EXE maker.
    Previous settings of Application Name are transferred to the defaults
  • --
  • CHANGE The no-mans-land area to the left of the column headings/filter headings is now background-coloured using the data area background colour instead of the column heading/filter background colours.


  • FIX Merging classes/paths between models was causing the order of paths to be reversed since 5.22a.
  • FIX Dataset2 load change in J would cause exception if the dataset contained items that were not specified in the DS configuration table.


  • NEW DATASET2 Enhancement : Include External Files
    It is now possible to package files outside of PL into a dataset2 file.
    This will facilitate inclusion of multiple images, databases and other content outside of the model into dataset2 files, with the content being compressed and encrypted.
    To enable this, an optional extra column must be present in the dataset definition table: _ExternalFile This column specifies the path/filename to use and can be a label or free text.
    For a row to reference an external file, the _DataSetComponent column must have a 0 value and the 0 value must not map to a data object, otherwise the data object will take preference.
    The modeller is responsible for providing a filename both for saving the dataset (file is read) and loading the dataset (file is written). The modeller is responsible for:
  • taking care not to overwrite user's files (DataSet2 will not prompt for overwrite)
  • proper use of absolute and relative paths (remember in an application, options exist enabling the user to navigate to a different default folder than the application).
  • Ensuring filenames provided are valid and writeable
  • Checking the return code and Database defintion table result code for any errors that could occur when dealing with external files and datasets
  • NEW Added "Disable Filter" option to table columns. This prevents the user being able to filter using that column
  • FIX When used with free text, "Edit Labels With Field" option now also accepts text when the field is closed by clicking rather than pressing ENTER or TAB


  • NEW The table column option "Edit Labels With Field" now works with Free Text formatted columns. This enables free text to be edited "in place" using a single line field.
    Multiple lines and using ENTER/TAB for text within the field is not supported, ENTER/TAB act as for other cells.
    This is useful where single lines of arbitrary text (that PL will not be processing) need to be stored in a table cell.
  • CHANGE Reworked the broadcast receiver code to optimise it
  • CHANGE Added a forced unload of model loaded DLLs when switching to flow/interact or paint modes.
    This is useful when developing DLLs and the engine option "Keep DLLs Loaded On Engine Restarts" is on. Without this, the only way to unload DLLs was to restart PL.

  • FIX Broadcasts sent from an event on a view panel were not being properly received by entries on the "closest" dynamic panel. Reworked things so the events are received as expected.
  • FIX "Dont Initialise Run" option removal in 5.22g was failing when reporting the location of a button with the option on upon load
  • FIX Panel close broadcast was not being sent with the proper internal flags for popup panels; it was OK for the main window Panel Close broadcast.
    This caused side effects of the panel close broadcast (eg: sending another broadcast that was deferred until later on the FEC) not to be properly cleared.
  • FIX When a popup window was closed by the user (instead of the platform) a Popup Close (not Panel Close) broadcast was not being sent.
    Consolidated the popup allocation management code so the close broadcast would be send for the popup window.


  • FIX Table views were not de-registering resize broadcasts properly which would result in a crash when merging models together that used them but did not carry across the views in the merge.


  • NEW Column filters can now match multiple items; separate the items with ;
    So for example in a list of the standard colours, entering: *Green;*Blue would match "Blue", "Green", "Light Blue" and "Light Green"
    Note that spaces immediately after the ';' are ignored
  • NEW Table editing data export/clipboard export has a new option "2nd Col Labels". If this option is enabled and the 2nd title row option for columns is enabled, the second title row will be written to clipboard copies as well as the main column titles.
    NOTE: Importing of second title row is not supported at this time
  • CHANGE CopyToClipboard now supports the following option bits
    1: row labels 2: col labels 4: formatted 8: 2nd column label row
    add together the options you want for the options value
  • REMOVE Removed the "Dont initialise run" options for broadcast buttons and portal clicks. This used to enabling handling of events without starting the run engine but it has become obsolete as most operations these days rely on the engine being properly initialised, including error handling.
  • FIX The s.AutomaticallyRestartAfterError flag now works for errors triggered from buttons sending a broadcast.


  • NEW Added "Log Normal" distribution to distribution dialog
  • NEW The change-file operation "Execute Command" now allows use of double quotes (") and a longer command string. This is useful when passing parameters to commands where quotes are needed.
  • NEW System attribute "LastErrorFileNamePath"
    This string is set to the filename where the last model stop error is written to. It is useful when s.AutomaticallyRestartAfterError is used and s.LastRunStopReason is set to 4 (error in model)
  • CHANGE The run error report file is now always written to the temporary directory. This reduces junk buildup in the work directory.
  • CHANGE The existing system attribute s.AutomaticallyRestartAfterError now has different behaviour in a compiled application.
    With an MDL, it causes PL to automatically restart the model after showing the standard error dialog, as long as the user does not click any buttons. This is useful for developers to "break in" to a broken model.
    With a compiled EXE, PL now automatically restarts without showing the error dialog. It is up to the modeller to test s.LastRunStopReason and if the model stopped because of an internal error, the modeller MUST warn the user that something unexpected went wrong and their in-memory data may now be a pile of steaming gibberish.
    Failing to give some warning will lead to inexplicable errors and likely data corruption since the user may be triggering bugs in the model that the developer is not aware of.


  • FIX Fixed an issue with item path management, introduced in 5.22a which caused crashes on saving models.
    Some bad code caused bogus item path records to be introduced into the model's datastructure. Normally these would be ignored and purged but in the case where a portal with no flows was deleted, a bogus record-manager class (for the now non-existent subsystem) was being created. This would then write junk to the saved model which would cause the model to load OK but then crash on subsequent save if some editing action didn't trigger the autopurge first.
    Apart from fixing the root cause (a missing test when looking up paths) a number of tests have been added to help identify bad path records upon load.
    Please contact ID if your model reports a strange message when loading your model and it cannot correct it.
    Thanks to Howard for identifying this and providing a repeatable procedure.
  • FIX View panels were not being correctly placed in the model hierarchy due This messed up the display of view panels in the sidebar particularly when they were arranged in hierachies. This did not damange the model but just made view panels appear in the wrong place in the list.


  • NEW Using set (=) you can set an item table reference to a data object reference which is pointing at a table
  • NEW Routine operation "GetColSecondTitle" enables the second title row for a text to be read and placed in a label
  • NEW The advance to time dialog has a new checkbox "Pause after advancing".
    This is only available when running in editing mode and is useful for advancing to a time for debugging without having to manually pause the engine.
  • FIX object co-ordinates are now represented using a 4 byte int which will prevent wrapping at +/- 32767
    This is useful where object co-ordinates are dynamically caculated over a wide range of zoom levels


  • FIX Pipes and Spatial Links could malfunction if they received an unblock message for their control attribute as a result of the modeller changing that attribute in the _preinit broadcasts.
    They have been reworked so they only start receiving attribute change broadcasts once they are fully initialised.
  • SPEED Subroutine calls had an overhead due to memory allocation for "stacking" subroutine attributes between recursions of a subroutine.
    A cache has been added so non-recursive subroutine calls will process faster.

  • SPEED Change objects need undo buffers for undoing lookahead changes; these were being allocated in very large chunks, wasting a LOT of memory when there are 1000s of change objects. The allocation bucket size has been reduced to a more reasonable level and all buckets are retained for the duration of the run
  • SPEED A few objects in PL need to keep track of items in a list. Where possible this list is built out of the items themselves but in some cases this isn't possible as an item needs to be in multiple lists.
    These lists (reneg queue, dispatcher release, track loop delay trains) needed list nodes separate to the items to be allocated/deallocated.
    A method of recycling this list nodes has been added, just as already occurs with items and FEC events.
    This enables big runs to proceed with very little memory reallocation needed when "advancing to time".


  • NEW New value formats:
    "Fixed", "Fixed x,", "Percentage x.x%"
  • NEW IF/CASE/WHILE do not show "Event Details" in routine listing as their condition is already shown after the expression rework
  • NEW End User Option "Dont Steal Focus If Not Active"
    If this option is turned on, PL will not activate windows that appear if it is not the active application. This prevents PL popping up windows in front of other active applications.
  • NEW LabelList option: "DataSet2 Loads Labels By Index Not Label"
    With this option off dataset2 loads label references by attempting to match the label text and adding new labels if a match fails
    With this option on, the load is by index and no attempt is made to match the label text. This is useful when labels have been renamed but not reindexed.
    NOTE If a label list is specifically mentioned in the dataset2 Load definition table, then it will be reloaded anyway, overriding the usefulness of this new option.

  • NEW Engine option "Keep DLLs Loaded On Engine Restarts"
    This prevents DLLs being unloaded when the PL engine restarts. This is useful where a DLL is storing persistent state for a model whilst the model is loaded.
  • NEW Attribute editor "Attribute" button menu has a new option that enables the views of the attribute to be inspected and the panels they are on selected.
  • NEW INI file [edit] option PathInTitle if set, shows the entire directory path of the loaded model in the titlebar
  • FIX Error result setting handled properly for saveimage routine operation
  • FIX Last path is set for saveimage routine operation
  • FIX Attribute Reference editor dialog value field allows longer text so single field expressions (eg: row reference for a cell reference) can be edited using the dialog
  • CHANGE Increased the limits before PL nags about linkedlist size, table resize. Tables can be resized to 0 columns in the editor.

  • CHANGE Migrating attributes to owner in the attribute editor now requires a confirmation
  • FIX Table Views were ignoring a specific title color, always using the generic Text Color


    NOTE: this change impacts dataset2
    As part of progressing the PL coding environment, the rules for naming things are being tightened.
    In this release, the names of all label lists (modeller and system defined) must only contain the following characters:
A..Z  a..z  0..9  and _ (underscore) Note this applies to the names of label lists NOT the labels inside the lists. Old models and datasets that were created with pre-559 file version PL EXEs will be translated on load using the following rules: Spaces and other characters no longer allowed are replaced by underscore unless its the first character - then it becomes a z.This prevents modeller label lists being prefixed with an underscore. More than one underscore in a row is replaced by a single underscore For example: _Model Objects    becomes _Model_Objects Users & Passwords becomes Users_Passwords (UI)Menu1         becomes zUI_Menu1 NOTE: DataSet2 data saved with this version will have problems being loaded with previous versions of PL *IF* it uses label lists that were renamed as part of the translation to this version of PL. EG: If a dataset had a column formatted for "User IDs" then an older PL will end up with 2 lists when you load the data: "User_IDs" and "User IDs" which is most likely not what you want. Please read and bookmark this page for reference on the naming strategy: This namespace cleanup is important to enable better readability and editing of routine code; spaces and other symbols make code unreadable and complicate the editor.
  • CHANGE Names of some of the pre-defined PL label lists have been renamed, as announced above. If you have created a label list of label list names, you will need to manually update it and also manage backward compatability with any dataset depending on this list-of-label-list-names. add duplicate check except for system list

  • SPEED Label list references are stored in memory more efficiently.
  • SPEED When attributes were renamed in large models, it took a long time for PL to find references, query for updates and perform the updates to references. This has been greatly sped up by:
    Faster testing of item attribute flow usage Better management of class path data Remove obsolete tests
    In one model search/update times have been reduced from >30 seconds to 1 second which is important when many attributes are being updated/purged
  • SPEED Formatting attribute references has been greatly sped up (60x faster) This is in addition to change above.
  • FIX Fix to import into view routine operation clipboard handling (as was backported to 5.21s). This fixes issue introduced in 5.21r


  • NEW Auto Fit Panels - a.k.a. dynamic layout
    A number of new mechanisms have been introduced into PL which when used together enable models to have panels which automatically size to the window they are contained in.
    Details here:
    Sumamry of enhancements:
    New Panel-Engine option "Auto Fit Panel To Window" Panel-Work Area dialog has new "Minimum" fields Paint,View and ViewPort objects have a new "Anchor" option New "_Panel "_Panel Resized" broadcast
  • NEW Properties of table views can be read and set. These include co-ordinates and colours (including the advanced custom colours)
    The routine operations are GetViewProperty and SetViewProperty.
    This is useful in enabling a model to reposition and resize table views dynamically, ie: dynamic layout.
    As for the similar label list properties, there is a label list you can use: "_tableview properties" to refer to the properties.
  • NOTE Further to the announcement on changing the PL random generator in
    5.22 on idbase, changes will be implemented in such a way to support
    backwards compatibility.
  • This will occur in an upcoming release, not 5.22 as suggested.