ReleaseNotes:Planimate 5.21 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search


  • NEW INI file option
    Sets how many characters code blocks get indented
  • CHANGE Copying from clipboard routines now use a temporary filename in the system TEMP folder and delete it after they are finished with it
  • CHANGE The standalone EXE packager will pull in DLL files into the DB as long as the "Always load DLLs from external files" option is not on.
  • CHANGE Column width limit increased to 255 characters
  • FIX Paint button images were not being updating when the image name was dynamically set due to the cached image not being flushed
  • FIX Removed bogus 'n' introduced into single line column titles with numbers shown
  • FIX Fixed a leak/attref scan error (thanks again Tom) in the routine editor. This one occured when a condition that was just a value was being translated into a comparison, as required for compatibility with the graphical editor
    eg: if (p.attribute) becomes if (p.attribute != 0)


  • NEW No clip option for table columns (experimental)
  • NEW Transparency for icons supported
    This is specified as a value from 0..255
0   = fully transparent
255 = fully opaque (default)
For objects (portals etc) the object attribute ObjectTransparency can be read/set (a repaintobjects is needed to update the screen)
For items System attribute s.ItemTransparency can be read/set

  • NEW System item attribute s.ItemRotation can be read/set to set the angle of the item's icon
    The value is in degrees

  • CHANGE Removed y offset being applied to items on a multiserver showing as "road". This keeps animation of single width roads straight
  • FIX Fixed cause of "AttRef Scan Count" errors (also could cause system error 1139)
    The field editor was not handing-off editing to the old skool condition editor dialog (eg using F2 in an IF condition), causing a leak of some undo data.
    Another thanks to Tom who tracked down the culprit
  • FIX Fixed ongoing issue of a model in an endless loop not being pauseable. PL was not clearing enough events from the Windows[tm] queue so it never got to the keypress events as other events (eg: timer) would pre-empt them.
    PL now clears the OS event queue upon every poll it makes. This should not affect model performance much but will make PL more responsive to redraws, moving its window etc even when it is simulating.


  • This version has new features and changes. Please test carefully.
  • NEW Table click broadcast enhancement
    Previous versions of PL had a "Send Broadcast AFter Edit" option which controlled how cell click broadcasts behaved.
    This has been changed into 2 new options:
    "Send Cell BC Before Edit" "Send Cell BC After Edit"
    Modellers can now select both these options and receive a broadcast both before and after a cell edit is performed.
    The table cell click broadcast includes a new attribute: "_beforeedit" which is non zero when the broadcast is being initiated "before" the cell edit.
    This is useful in this scenario:
user clicks a cell
model receives a cell click with _beforeedit = 1
model determines whether cell should be edited and sets
s.EnableTableCellEdit if it should
PL edits the cell
PL sends a second cell click BC with _beforeedit = 0
so the model can deal with the consequences of the edit

  • NEW Tables have option to show column numbers on their own row Note though the number will follow the alignment of the column labels. Also you need to set at least 2 column label rows for this to be useful
  • CHANGE Table view options will not show broadcast related options if there is no cell click broadcast assigned yet.
    When a cell click broadcast is selected, PL will automatically show the options dialog so the user can select WHEN the broadcast is to be sent, as there is no default before/after now, any combination of before/after/row and column broadcasts can apply to cell click broadcasts
  • NEW Portals can be renamed by their context menu (and also sidebar) this is useful in busy network models there portals are too close together to click under them
  • NEW Routine operations "FindColumnLabel" and "FindColumnTitle"
    This enables a column label/title to be located in a table based on any other formatted text (eg: another label list)
    Unlike the "Column Index" reference, they are not cached so they will work even if the table is changed at runtime.
  • CHANGE Object context menus display object list name if set
  • CHANGE Some tweaks to the route step editor
  • FIX Reworked some of the time code to remove pedantic compiler warnings
  • FIX Fixed a nasty couple of bugs where pasting smaller tables into the table editor would cause crashes in table editor and/or views
    Greetz go out to Tom for his efforts in finding a replicate procedure for this one


  • NEW Support "CONTINUE" routine operation
    This is used in a loop and causes the rest of the code to be skipped and the next iteration of the loop to be tested/performed.
    Its useful to filter out particular iterations from being processed
  • NEW Support "RETURN" routine operation
    This causes the routine to immediately exit (if used in a subroutine it will go back to its caller).
    Its useful to get-out fast if something isn't what you expect (avoids wrapping a lot of code in IFs)
    Consider readabiltiy when using this and CONTINUE; they should be used in clear up-front testing to avoid having to wrap all your code in an IF. Avoid burying them deep in core logic
  • FIX Bogus comma in search line text removed
  • FIX The time a model becomes paused is measured before the "animation starting" dialog is presented. This is useful when profiling an "advance to time" and you aren't around when the advance finishes
  • SPEED Cleanup and Inlined FEC code, went back to one list with priority regions Cleaned up the way PL tracks when changes during lookahead cannot undo Optimise SET operation Fast lookup for subroutine call Reduce paramters being passed around using routine handlers Inlined and optimised LinkedList (FEC uses it) Cache some routine line properties to avoid determining them dynamically Clean up iterate code Poll testing for events when advancing to time now uses new loop-end test system


  • NEW Table Columns have a new option "Dynamic Combo List" When used with the "Edit With Combo" option, it causes the combo box to dynamically generate and show a list of all the options that match what is typed by the user.
    This can be useful where there are many options making the full list too long to select from
    The "Select Existing Labels" option is also supported in which case the user must match an existing label before the field edit will close (or escape out).
  • NEW New option "Create Path Folders" for a change object->File operation configured to "Create folder".
    This will create every folder specified in a multi-level folder specification.
  • NEW System string attribute s.LoadFileNamePath
    This string attribute is set (for compiled PL app exes only) to the name of the first parameter passed to the EXE (whether from the command line or a file dropped using explorer).
    This enables a Planimate compiled application to respond to data files associated with it or dropped on its shortcut.
    The run start broadcast of an application can check the length of the attribute (routine op FormattedWidth) and then use it or format it into a label for file operations. It will be zero length if unset.

  • CHANGE Paint Button Broadcasts have a new _location attribute is set to the model object index of the
    closest portal up the hierachy that has an index set, 0 if none

  • CHANGE  the panel index that used to be sent with paint button click was always for closest dynamic panel. So if the button was on a "view panel" you did not get its index but rather the panel index of the owning dynamic panel. This has been corrected so the panel id is the actual id for the panel that the button is on.

CHANGE Renamed change object file operations, removed spaces (evantually these will be converted to routine operations)

  • CHANGE ShowPopupPanel at (-2,-2) should centre the window
  • FIX Fixed an issue where a table view with customised columns was pasted into a place where a pre-existing table with less columns picked up the scope, causing the customised view to attempt to reference columns that were not there


  • REMOVE Removed the "Round Values To Integers" option for attributes. This should be done in routine code now, and views support rounded displays.
    PL will report any attributes which had this option on when loading
  • SPEED Reworked item attribute lookups and added a caching mechanism which enables references to lookup item attribute quicker if the same item class uses the object with the reference
  • SPEED Reworked the number comparison code to use an algorithm that avoids the need for branching which speeds it up


  • FIX Table View Filter notification broadcasts are now sent when the table view is regenerated so that the filtered rows are in effect.
    The previous table rework was causing the filter change broadcast to be sent before the filtered rows had been determined, so it wasn't possible for that broadcast to query which rows were being shown
  • FIX Fix drawing of table views when the title is hidden. The smaller margin is now filled and the table border is displayed
  • FIX Reworked the way PL detects breaking out of a loop. If you are in developer mode and a model gets stuck in a loop, press <ESC> once and PL should respond within a second or 2.
    Do not press hold or press other keys or mouse events as they will delay when PL gets to process the <ESC> keypress


  • NEW Table views can send a "column width broadcast" when their columns are changed. This is useful for applications which keep track of a user's column width settings for individual views
  • SPEED Since 5.20i Planimate by default supported international locales for comparing strings. Unfortunately this has been found to slow down runs significantly so is now optional, using the end user option "Support Locale For Strings (slower)"
    This option is off by default so needs to be enabled if you are dealing with labels etc which contain extended characters
    A model that uses a lot of item attributes will be typically 300% faster


  • NEW Gantt option "Dont Show Zero Labels" prevents the gantt showing label index 0 in a bar label
  • NEW There are 3 new routine operations for searching
    Search() ReverseSearch() BinarySearch()
    capability is the same as previous versions, the main difference is the editing interface; the searches are configured with parameters and a condition like most other routine operations instead of a customised dialog box.
    Existing models will be updated to use one of these according to the options that were selected in the old search dialog
  • NEW System->Other attribute "JobID"
    This gives access to the existing command line option /JOBID=xxx where xxx is a number.
    It can be useful in passing a number to a model from the command line.
  • NEW Help menu option to generate the top level wiki page for system attributes
  • CHANGE System attributes are now internally managed using a table to make adding new ones easier and assist in generating documentation.
    The system attribute selection popupmenu is rearranged as a result.
    Additionally a few items that were previously hidden are now exposed.
  • FIX Editing expression shows dropdown suggestion in more cases than it used to
  • FIX Function key broadcasts are now sent without pausing the run engine Note: broadcasts sent whilst the engine is running are sent with the main panel id, not any popups that may happen to be open.
  • CHANGE function key broadcast will send F2 if a table view with focus doesn't claim it first
  • CHANGE function key broadcasts are sent globally, not scoped


  • FIX Fixes a bug introduced in 5.21 where a table will lose its horizontal scroll after the panel it is on is left or the model saved/reloaded


  • NEW Engine option "Always load DLLs from external files" This is useful where a DLL wont load using the PL memory loader
  • NEW Added new EndUser option "Send _Key BCast for function keys"
    This enables PL sending a new "_Key" broadcast when the function keys are pressed.
    2 attributes are set, _panel and _keycode
    _panel is set to the panel which had the focus when the key is pressed The _keycode is defined in the new label list "_keycodes"
    A broadcast is not sent for F2 because this is used by PL tables and field editors.
    A broadcast is not sent for F10 because Windows uses it to move focus to an applicaiton's menubar.


  • FIX Model explorer is locked out during paste and replace operations to avoid flicker
  • FIX Free text columns properly sorted
  • SPEED The way label indexes were automatically allocated was very inefficient and one source of slowdown for big models that create many portals.
    Dynamically created portals now get object labels allocated faster
  • SPEED Copying many portals was being slowed down by the "unique name generator" which "munges" the copied object's name so it doesn't conflict with existing names.
    A better approach now makes it possible for PL to copy/paste many objects much more quickly.
  • SPEED Broadcast entries registered slowly for many portals with broadcast entries in them


  • NEW New value unit "Value No Decimal" Rounds any decimal to a whole value
  • NEW New column option "Ignore Hover Colors" prevents hovers affecting a column
  • CHANGE Made the table editor alternate row colour a light grey rather than yellow (CellBackground2 #f0f0f0) but if you have already migrated to 5.21f your INI file will still have the old value.
  • CHANGE Now allow longer Paint text and tips (255 chars)
  • CHANGE Ctrl-clicking the "Reset Routine Fonts/Colours" button now forces defaults for non inverted display (mainly useful for me so I can save a model with dark text/light background routine editor colours).
  • FIX Loading pre version 447 models which included tracks would crash, now they load (still need updating to new track code).
    Previous workaround was to use version 5.10p etc to bring them forward first
  • FIX Fixed crash/lockup when loading an older model that used local route assignments in change objects instead of the global route list ids.
  • A note on Color and Colour:
  • Where text is read by a user (eg:dialog title) I tend to use "colour" in
  • keeping with PL's Australian origins.
  • Where text is interpreted/parsed/compiled, "color" is used in keeping with
  • standard use of color for programming APIs.


  • FIX Fixed issue which caused unexpected options to be turned on for a table view using column filters when loading an older format model (pre 5.21)
    This was caused by an internal field being changed from 16 bit to 32 bit (to store more options). Since the filter option was using bit 15, it was being sign extended into the newly available bits, effectively turning all the new options "on".
    If you have already loaded your model to post 5.21, you might want to confirm the options on any table views that had column filters turned on.
    It was not intended to enable hover tracking and hide cell borders for these tables automatically.


  • FIX Tables with no rows will still process horizontal scroll updates
  • NEW Settings->Engine options:
    "PBA User cannot CTRL-T"
    This prevents a user of a PBA using CTRL-T to stop the engine. (a developer in user mode can still use it)
    "PBA User cannot CTRL-G"
    This prevents a user of a PBA using CTRL-G to continue a run (a developer in user mode can still use it)
    Note that if the engine is somehow stopped in the PBA, CTRL-G will then work.
    "Do not poll for pause during PBA run"
    This prevents a user of a PBA from pausing simulation runs using the keyboard or mouse.
  • NEW Routine operation "Clear Filter" enables table filter to be cleared for a view on a panel of a table (or all views if the panel id is 0)
    This is useful after new data has been imported into the table.
  • CHANGE ESC no longer interrupts a long PL loop in a compiled application (PBA) This prevents users from accessing what should only be visible to developers.
  • CHANGE PL polls for pause events less often. This change accomodates modern faster PCs where polling too often wastes a lot of time.


  • FIX Fixed routine line display in references display (broken in 5.21)
  • CHANGE Routine editor shows dropdown list when backspacing through name
  • CHANGE Routine editor handles nested tables
    eg: t.table1[t.table2[1][c.bbb]][]
    CHANGE Routine editor removed field-in-button editor in condition edit dialog


  • FIX Fixed a bug in the reference formatter caused by an attempt to optimise it for large strings that was not compatible with expressions


  • FIX Fixed some border line issues with new table views and validate against invalid border styles


Its exactly 20 years since Doug & I started work on what we now call Planimate so to celebrate I've given PL a refreshed table editor The Table view and editor have been largely rewritten

  • View Option for resizeable columns (drag right border of cell to resize column)
  • Separate options to enable resize from column/data areas
  • -Double click column separator to autosize/autofit column
  • Option for hover tracking for table views has been added. This causes the current selection to follow the mouse cursor. The row, column and cell colors for the hover can be set
  • Alternate row label colours for cells and row labels make data easier to read. This is supoprted automatically by the view, modellers dont have to code it
  • Many customisable colours for the table view have been added (in the Graphics configuration dialog)
  • The Graphics configurations can be saved to files and reloaded. This is useful now there are so many colour properties. The files are saved in with a "VW" file extention
  • Table Edit windows (not views) now appear with a graphical scheme that can be edited in the [TableEditorColors] section of the Planimate INI file. The data in this section is compatible with VW files. Currently there is no per-table-editor customisation since thats what views are for.
  • Filtered views update properly when rows are added/removed
  • Cell properties edited in filtered view now apply properly to the cells in the filtered set
  • mouse wheel scrolling whilst editing a cell would do silly things
  • if a table has 0 column rows set, the table editor will still one row to facilitate editing by the modeller
  • In "single click to edit" mode, clicking on an unselected cell whilst there is a selection will clear the selection rather than initiate edit
  • dragging a selection would have an initial lag if the drag was started on the currently selected cell
  • many cases of missing redraws/updates when the tables column labels were changed or other changes made in the table editor now update both the editor and the views properly
  •  Row label size calculation is much faster, especially if only row label numbers are used
  • Row labels update properly when a filter selection changes the rows such as not to display rows needing long row numbers/row labels
  • Table views edit cells faster and with less flicker on complex panels (eg: with a lot of paint/other graphics) in cases where edit fields/ combo boxes do not extend past the borders of the table. Implemented multiple stages of selective redraw to reduce flicker/processing time).
  • NOTE the new colour properties are not yet editable by model code. This will be eventually addressed along with other view property access.
  • NEW Labels can now be up to 16383 characters long. This is useful where long strings are being processed/generated by code.
    This has required some rework of buffer management to prevent stack overflows in complex routines.
  • NEW Planiamte's tool kit iFlow now supports both RGB and palette colours specified in the one value. The colour palette will be enhanced to enable selection of colours by palette index or RGB value throughout the platform's use of colour.
    In the Graphics "VW" files mentioned above and the [TableEditorColors section of the INI file, RGB colors are specified using #RRGGBB form (in hex) whereas palette colours are decimal numbers, with 255 meaning transparent. See the INI file generated by this version of PL as an example.
    By editing the VW files generated by the Graphics dialog, you can manually bring in RGB colours at this time.
  • FIX Pressing F2 when editing a condition/search using expression now opens the correct editor. Note however that the expression has to be valid (ie: generate no errors) before PL will transition.
  • FIX The way some iFlow co-ordiante boxes were translated to Windows GDI (eg: paint rectangles) was inconsistent. This manifested itself when displaying with a zoom apart from 100% and would probably
    affect printing.
  • FIX An extra pixel added to lines to make sure they always draw has been removed as it was inconsistent. This might manifest as missing pixels in certain graph views; if this occurs let us know.
  • CHANGE Have made the default font used for table cells bigger as it was too small and did not render cleanly on systems with 120DPI fonts
  • CHANGE The status line and icon chooser label font are now set to an internally managed font
  • FIX Ensure obsolete routine operations are not selectable
  • REMOVE Route "Distance" setting; was not used for anything
  • NOTE Wholesale code rework (internal)
    Report any odd behaviour. Beyond the changes above. it might be
    attributed to:
  • Global renames of functions (particularly string) to abstract away from
    posix/C differences and MS compiler complaints
    Global renames to add some naming consistency
    More 64 bit time cleanups
    Cleanups to reduce warnings from the picky new MSVC2008 compiler
    Formatting/processing buffer sizing and handling rationalised/cleaned up