ReleaseNotes:Planimate 4.23 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search

Release notes, bug fixes and misc enhancements to Planimate 4.23



I'm releasing this version to get out some minor fixes and enhancements, the Sockets/XML stuff is still not completely integrated (so dont go to Edit->Sockets yet)

  • Have implemented a new option on panels

"Act Modally When In Own Window"
This will cause the panel to act as a modal dialog if modeller code opens it in its own window ("Show Panel" routine operation)

  • Have added a new panel option "Ignore Modeller Redraws" which prevents the panel from redrawing upon a model-initiated redraw of all screens.

This may be useful in reducing flicker when a model generates many redraws, particularly if the model runs in zero time

  • Breakpoints now have a master control in the DEBUG menu

By default this option is OFF (disabling breakpoints) and it is turned off in InterDyne mode.
This option works in addition to the model-controlled master breakpoint control and the individual breakpoint control attributes

  • fixed a bug in the attribute editor which caused long label names not to match (was not setting width for combo drop down properly)
  • trace animation control is a system attribute
  • activity state can now be set using a value from 0..1 using a new system attribute
  • Have reworked a lot of code to make platform more capable of handling multiple open windows (includes viewports) This impacts
  • mouse co-ordinate tracking, click detection
  • object movement, positioning, clipping

Look out for any problems in these areas (significant more rework is still needed in this area)


  • implemented US format date display/parsing (for the HH:MM:SS format only)


  • "Release Item" dispatcher message no longer generates bogus messages at normal dispatchers


  • Have removed the "pre-init pause" state

The old "Pause After PreInit" option is now called "Pause After Run Start" and it pauses the model immediately after the "_run start" broadcast is sent and the model is completely initialised.

  • No longer give the "No Paths" warning if a model with no flows is started. The model will just start the engine and become "ready"
  • Redrawing of screen when model starts changed
  • Fixed updating of "advance" time box
  • fixed vertical queues/dispatchers (were still hairline)
  • indirect attribute references now are properly scanned for operations like table rename.
  • dragging a paint object no longer resizes, to avoid accidental resizes

Use the "Bounding Box" option in the popup to enable resizing

  • Pressing <ESC> during a resize cancels the change and restores the original box
  • New Label routine operations give the min/max index of a label list if available for the list type. If the list is empty they return -1
  • Advanced Find Enhancements
  • Finds Tables that are Fixed Length
  • Finds routines that display a dialog or contain breakpoints
  • Item/dynamic tables can still be selected even if there are no direct table references available
  • attref editor now defaults the "column" field to a column reference when selecting "Lookup" mode
  • bugs in attref select dialog when dealing with tables (and reselecting tables) fixed
  • Warning is now given if a fixed length table option (not variable length) is edited.

You should start removing "Fixed Length" tables from models as I plan to handle all tables using the "Variable Length" code in the future.


  • crashes when navigating using viewport click through should be resolved now
  • Splitters with the "Transfer Item Attributes" option "on" will now also transfer table references. The transfer is name matched and partial transfers are always allowed (the Allow Partial Transfers option is ignored for table references).
  • "Set" operation on tables now handles differently sized tables

1. IF the column count is the same but rows differ, then rows are added/removed automatically to the target table to make them the same size before the copy
2. If the column count is different as well, then columns will be copied from the original table *as long* as the target table has no columns to start with
note: column labels will not map properly if the table columns are rearranged

  • Directed Message Enhancement

A dispatcher or Routine line sending a message to a portal will now first attempt to match a message entry with the same name as the sending dispatcher/change object. If this fails, then the default entry (_!message) is looked for, as previous. If this also fails, then the platform looks for a Portal called _!message and forwards the message to it. Within this portal, specific entries may extract the message.
This enables
1. Many message types to be directed at a portal and then individually handled within via separate entries.
2. Message handling to be encapsulated in a hidden portal (must be called _!message) rather than having to have message entries/flows right at the top portal, which may be visible to end users.

  • Dispatcher and Queue capacity increased

Note: performance will decrease with more than a few thousand items in a queue or dispatcher

  • New dispatcher mode: Wait For Specific Release

Items entering the dispatcher wait there until a routine oeration message -> "Release Item" is used to release them from the dispatcher.
The "Release Item" routine operation takes 2 parameters
"Item Index" the Item ID of the item you want released from the dispatcher
"Scope Panel" If non zero, this specifies a dynamic panel which will define the dynamic scope under which the release will work. IF 0, the release will work for any dispatcher in the model.
Using this value cuts down the search space in looking for dispatchers to release the selected item from.
the operation sets a target attribute to 1 if the item was found and released, otherwise it sets the target to 0

  • Attributes are checked for any references before the "update references" dialog is displayed
  • The "Display" menu contains a "Purge Attributes" option which deletes all unreferenced portal attributes (and any views) from the model.

(attributes referenced in Billboard tables are not purged)
Use this option with care (back up your model) as it needs beta testing


  • sort alpha option now selectable for sub label list
  • log driven graphs can now have a "_mode" column. This is interpreted on-the-fly and enables the graph's mode to be changed on an overlay by overlay or even a point by point basis

A value of 0 leaves the graph in its last state, which will be the default (edit) mode at the first row.
The graph mode is global to all the overlays. If you want each overlay to have a different style, then you must specify the appropriate value in the _mode column for each point in each overlay.
The _mode values are mapped as follows:
0: no change 1: no plot 2: smooth 3: stepped 4: horizontal bar 5: histogram 6: area 7: gantt style

  • row/column operations on tables now validate for -ve row counts


  • Fixed redraw bug during animation due to the change in redraw handling (was incorrectly handling redraw of the non-client area of the main window)


  • fixed crash bug caused by error reporting code when a matched row lookup failed on a column which includes cell specific formatting
  • LabelList for attref element in Label mode can be viewed/changed with a new "List" button, avoiding having to change it back to value and back to label list
  • I prevent redraws during file dialog boxes being open. This should prevent missing paint BMP messages while browsing directories, but will lead to messy screens if the file dialog is moved. To implement this i had to change the event polling code which could lead to other reentrancy problems.
  • no longer get a refs scan error if adding a portal attribute while editing a file access target
  • editor for attrefs referencing an entire labellist now works
  • Meta Panels are now called Application Panels
  • implemented code for restart dispatcher (restart dispatchers are only available in Application Panels)
  • minor rework of background menus to make mode selection easier


  • combofield in attref editor now properly holds long labels
  • have cleaned up handling of string buffers for long labels etc. as it was too complex
  • Changing a routine steps mode does not automatically re-edit the target unless the new mode expects a different target type


  • more tweaks to default button/field handling in attribute reference dialog
  • <Dynamic> attribute references are annotated with the table selection index/attribute name
  • "Step" button in routine calculation edit enables steps to be inserted, duplicated and deleted.

Inserting a control operation (IF/While/Iterate) etc. also inserts the corresponding end-op, changing an existing operation to a control operation or duplicating a control operation does not insert a correspoinding end-op

  • crash on deleting a table from 4.23H has been fixed
  • Y scale width for gantts and train graphs can be now edited. Its an option in the Scale Parameters


  • shared routines can are now selected, setup and made private using the "Sharing" button in the routine editor.
  • New combo box drop down is used in attribute reference selector. This holds the names of the possible selections for portal/item/routines instead of having to use the browse button

Typing a partial name and pressing down arrow autocompletes and enables selection of matching completions
The [Add] button when present enables a new attribute to be added. IF the name typed in the field does not exist, the new attribute dialog will be preloaded with that name

  • Routine editor tab ordering changed

The comment field is selected by default if it is empty
A single [tab] from the comment field takes you to the OK button

  • Change to click on GANTT and TRAIN GRAPH

row1/row2 clicks were one less than expected, now they count from 1

  • I have rewritten the code which positions combo-boxes (drop downs) so it is compatible with normal fields. This means combo-boxes in dialogs would be out of alignment but I have implemented an automatic translation which will get applied the first time an old dialog appears during a run.

If the dialog is edited instead, the offset isn't applied since the editor cant tell apart combo and normal fields - you will have to fix the alignment of combo boxes yourself.


  • Routine editor now requires selection of a calculation type upfront before the routine object is added

Selection of a type falls into selection of the target (if one is needed)
The default target type is more appropriately initialised and previous types are used where possible

  • Have rearragned routine calculation selection flyouts into a more logical order (followup to review), new Numeric and Message sub menus to reduce the size of the Special submenu
  • If an object has no flows entering it, item attribute names for all item classes are added
  • Set Item Transit Time / Item Transit Target are now available as calculation operations (Spatial Link)
  • Meta panels no longer need to be named with prefix _META, they track their type internally
  • Speed up in switch between dynamic and meta/application panels


  • Fixed crash bug with spatial links

If a spatial link was deleted while an item was still on it, the pending FEC event for that item would crash the platform once processed.

  • Have started adding some defaults handling for the att-ref edit dialog.

Currently defaults for portal/item/routine etc references and tables referenced (cell/row/col/table) are retained, though the rules for more complex types and interchange of defaults between similar types will be extended.

  • row colours in tables can now use the new colours in the palette


  • Warning bug when navigating to paint owning screen fixed (was redrawing excessively)

Please report any missing redraws when editing paint objects.

  • Left click on an attribute view now performs in place edit as it used to
  • Track logic fix:

Sections were not being properly reset to "idle" after a loop entry delay completed, causing them to miss unblock messages and resulting in stuck trains

  • Track Sections Names

A new button "Update Names" in the Section Details dialog automatically sets the "internal" name of each section of track to one derived from its two end points. This assists in debugging where sections are identified by the internal name, not the full name generated from their two end points.

  • Have reworked way panels are deleted when a model is cleared/subsystem is deleted. This was done because the previous method was unreliable and could leave corrupted viewports during the deletion process which would crash the platform if a message had to be displayed during the deletion process.
  • messages reported in the "pause at event" debugging mode are now also logged


  • Writing a table with the fixed width column option now writes a totally empty cell if a column is formatted with a width of 0
  • Have increased custom colour count from 16 to 48 These are arranged in 3 banks of 16

The colour palette editor now properly updates the system when a colour palette is loaded

  • Gantt graphs now only show labels that are members of their label subset rather than showing them all
  • Fixed a bug when adding to sub label list - the list was incorrectly validating for duplicates when the Local Index option was on for a sub label list


  • To remove ambiguity from tupling names, I've changed

"Tuple Get" to "Put Tuple Into Item" "Tuple Set" to "Get Tuple From Item"
This makes the data flow more explicit but also swaps the point of view for the operation from the item to the table.
This makes more sense to me because the parameter specified along with the operation is the table, not the item.

  • Fixed attref scan bug in


  • Fixed labelling of file write "No delimiters" in dialog


  • Paint images can be stretched and scaled

Large images are now scaled down automatically rather than the system complaining about them..
Reselecting the image reverts to the original size

  • Paint images and avi objects now show the name of the target in their editing context menu
  • Ctrl-right click in paint mode always shows paint background menu even if a paint object is under the mouse
  • Have implemented right mouse button (extended keyboard) windows key for panel background
  • double clicking on a message dispatcher also flashes box around message entry to assist in locating it
  • can copy and paste most view types into panels and dynamic screens

(views pasted into dynamic screens will only paste if they conform to the scoping rules. Panels can contain views of any model data regardless of its location.

  • Off screen object location

control clicking on an object palette icon displays a popup if there are any objects of that kind on the screen. The popup names the objects and gives their co-ordinates (centre). Any objects off the screen are flagged with a '*'.
Selecting an object will highlight it with a flashing box. If the object is outside the current screen, a message is given and if confirmed, the object may be dragged into the current window area.
This enables review and retrieval of objects which have "fallen off" the modelling area due to changes in window size or positioning by model code.

  • Meta panels can now contain queues, dispatchers, in trays and out trays Meta panel switches can now block items in queues
  • Breakpoint control

Subsequent breakpoints in the same thread can now be disabled using a checkbox in the breakpoint dialog. They are automatically re-enabled upon "continue" of the run
In addition the model can read and set the "Break Point Master Control" system attribute which provides convenient control of any breakpoint(s) in the model. This works in addition to modeller defined breakpoint control attributes, enabling breakpoints at complex conditions or at certain stages in a long loop to be activated.

  • MAJOR REWORK of all object, view and paint object context menu handlers

Removed old code, all menus are now "one shot" (they dont stick around after one action. I did this to make the internal handling consistent between these objects as it was previously very messy.

  • Paint objects can be shift clicked and dragged along with other objects
  • you have to be in paint mode to shift click paint objects but the selection set is common
  • The paint Other Options -> Show All Hidden option is now fixed.
  • ANY selected objects can now be aligned and distributed using the new options in the Selection Click menu. This menu only appears when an object in a selected set is clicked with the LEFT button. The Right button always shows the individual object's context menu.
  • BUGFIX to item tables and tuples - the validation was preventing a Tuple SET
  • Migrating a routine attribute to a portal attribute now updates references in that routine to point to the portal attribute


  • multiple broadcasts with the same name no longer added
  • Update interval handling has been reworked again, implementation is now simpler and more robust
  • can handle unusual circumstances without clock advancing forward, eg: Table Driven Entries which are subsequently "cancelled"
  • Interactive View broadcasting was broken - if not all sent attributes had a matching item attribute, the received attributes may be scrambled.
  • overlay graph click now sends the original table column for _col, not the overlay column #.
  • billboard tables were not properly being terminated when the engine was stopped. This was causing a memory leak and possibly strange values in the table when stopped.


  • fixed crash due to not properly handling item cloning for itemtables


  • Fixed crash bug when a table with custom cell fonts was sorted. Sorting of formatted tables will now be much faster as well.
  • Implemented new table column option "Write Using Fixed Width"

When this option is turned on, the column is written/exported using fixed width formatting. With this option on the column width (if non zero) field and the column alignment (Left,Right,Centre) take effect when the data in that column is written.
If shorter than "width", the column is padded with spaces. If wider than "width", the column is cropped.

  • Button broadcasts no longer cause the _Run Pause / _Run Continue broadcasts to be sent when they are processed unless the "Continue Run" option is selected.



Itemc can carry references to table in a model so it can be referenced anywhere in the model.
To use an item table reference:
In the Item Edit menu, create a named table reference for the class, say called "test".
From now on, when editing a routine with that item flow involved and you select a table, you will now have "<item> test" available, enabling use of the item's reference to supply the table as well as the original tables and <Dynamic>.
Before you can use the reference, you have to point it to a table. Using a routine "SET", assign the reference as follows:

  • make "Target" a TABLE attref with the item table reference you want to set up (eg: <item> test)
  • make "Set To" a TABLE attref with the table you want to point TO

To actually use the reference, set up your cell/column/etc reference as normal but select the <item> table reference from the table list instead of a normal table.
You can clear an item table reference (so it points to nothing) by using the CLEAR operation with the target being set to a TABLE attref with the item table reference you want to clear selected. This will not clear the table itself, just the item's reference to it.
A item table reference only allows reading of the table
Clicking on an item with CTRL shows any item table references and what they are pointing to.
Column labels will be looked up on the fly but cannot be browsed in the editor, you have to enter the name manually.

  • tables can now be deleted even if references exist to them. This will assist in migrating tables around a model where a higher level table is to be deleted.

ITEM Table references

SET and CLEAR now implement for target which is an item table reference

  • vertical queues and dispatchers no longer display as hairlines if the overflow indicator is hidden
  • dynamic file name now supported for file operations file size, delete and save image
  • routine comments are now included in routine descriptions generarted via the Model Info menu option.
  • Log Driven Graph views now can send a broadcast when the graph is clicked

The following item attributes will be tupled to:
"_command" currently 1 for a click "_time" the x co-ord value (normally this is time) "_y" the y co-ord value

  • Grid View Graphs can now send a broadcast when clicked

"_row" the row clicked "_col" the col clicked

  • Overlay Graphs can now send a broadcast when clicked

"_command" 1 for a click on a point "_row" row, col of the point clicked "_col" "_x" graph x co-ord of point clicked (snapped to point) "_y" " y "

idkbase note 152