View-as-list forms are now supported, with some restrictions as follows: Text Editor objects may be used, but only for display, not editing. Push buttons, Data Buttons (checkboxes and radio buttons), and Pop-up Menu buttons all work, but only for the currently selected record. In other words, you first have to click on a record to select it, then you can click on the button. Text Display objects will not work as buttons.
Added view-as-list options for Alternating Background Colors and Grid Style.
Form object “Z” (front-to-back) order now works correctly. Now you can properly bring any type of object to the front (except for report tiles), and conversely, things like text and buttons are properly objscured when they are behind shape objects. Transparent buttons can now be overlaid on top of other objects (though this isn’t recommended for new applications, since code can be attached to any form object). Note: There is still an issue with some image objects, which now always appear on top even if you send them to the back.
Now any type of object can have a tool tip, even basic shapes.
Object handles and the drag selection marquee now always display above all objects, they are no longer obscured by objects on top of them.
Implemented a new way to specify Text List columns (the old way, using the ∆ character, still works). New method –
<allfields> to mirror all database fields.
<width:nn> for points,
<width:nnc> for columns (also
<w:nn> will work).
<align:left/right/center> for alignment. Can still use `@fieldname~ to mimic database field attributes (width and alignment). Also updated TextListTableOptions to generate specification using the new format.
Text List objects now have an option to use the first line of the data to specify the column names (and optionally width and alignment, see previous item).
Text List objects now support rich text (bold, colors, etc.) in the data.
Clicking on an already selected row in a Text List now triggers the associated procedure (it used to only trigger if you clicked a different row).
Text List no longer triggers the associated procedure when the data changes, only when it is actually clicked on.
Major rewrite of Matrix objects. Completely eliminates the “race” problems that occured with earlier versions – CPU usage now stays low under all conditions. Performance of single column matrixes optimized so that even matrixes with thousands of rows will be very fast.
New Matrix feature: If the name of the frame is not specified, you can use a data tile as the frame (you don’t need to set the object name of the tile). Now you don’t need to fiddle with object names if you only have one matrix in the form. (If there is more than one matrix in the form, you’ll need to specify the frame name the old fashioned way.)
New Matrix feature: If # of columns is 1 and fixed height is zero, will automatically use the height of the frame object as the row height.
New Matrix feature: You can now include a separate header frame that creates a header at the top of the matrix. This only works with single column matrixes. If there is no frame name, the header frame must be a Header report tile. If there is a frame name, the header frame object must have the same name as the main matrix frame but with
_Header appended to the name. You can also specify a third frame, the Corner frame, that will be displayed above the scroll bar of the matrix (otherwise this area will be white). This is either a
Header (Corner) report tile or an object with the same name as the main matrix frame but with
_Corner appended to the name.
New Matrix elastic mode: off. This only works with single column matrixes. In this mode, the row width matches the width of the frame object. If this is wider than the matrix, you can enable the horizontal scroll bar and the matrix can scroll horizontally as well as vertically. If the matrix has a header (see above), it will also scroll horizontally in sync with the main body of the matrix.
Added PassThru and Navigate options to Matrix and Text List objects (Text List objects do not allow these to be activated separately, only together). These options can only used when the Matrix or Text List object is set up to scan a database, the options will be ignored if there is no scan database. When PassThru is enabled, actual database fields can be referenced by objects inside the matrix frame, just like a view-as-list form. In other words, you don’t have to use info(“matrixcelldata”), you can just use the field names directly, and use Text Editors, checkboxes, etc. (though they will be display only) in the frame. When using PassThru mode, the info(“matrixdata”) function will return "", so don’t use that!
When Navigate is enabled, clicking on a matrix or list row will cause the database to jump to the corresponding record, just like clicking on a row in the data sheet. In addition, changing the current database row will change which row/cell is selected in the matrix/list object. In other words, the matrix/list will mirror the data sheet. If the current database record is moved to a record that is not currently included in the matrix, then no row/cell will be highlighted in the matrix/list. When Navigate is enabled, you don’t need to set up a variable to hold the selected value. If you do, the value will be based on the formula for the matrix. Changing the variable value will NOT affect the matrix/list selection – the only way to affect that is to move to a different database record.
You can now use the new MatrixFrameForm property in a blueprint to move the frame object to any form in the current database. In other words, the matrix frame doesn’t have to bee in the same form as the matrix object (it does have to be in the same database). This is especially handy for use with Tab Panel objects.
The new Matrix Draggable option only affects single column matrixes. When this option is enabled, the attached procedure starts immediately, you cannot roll down to select a different row. Use this for dragging or triggering a pop-up menu.
New command to refresh all of the matrix objects on the form is available in the Objects menu, the context menu, and via a tool that optionally can be added to the tool bar. Use this command if you have changed the contents of the matrix frame to update the appearance of the matrix.
New matrix related functions (note that some objects in a matrix header, like buttons, will trigger their internal code rather than the matrix code, in which case these info( functions are not available.). These functions also work with Text List objects.
Added the ability to limit the number of cells in a text list/matrix object. This limit only affects database scans, it doesn’t affect direct array display (in that case you can use arrayrange( to limit the number of cells). There is no user interface for setting this limit, but in a blueprint it can be set with the MaxCellCount property. The default for new objects is 5,000.
You can now specify a border (bezel or line) around Matrix and Text List objects.
New statements for Text List objects:
Matrix and Text List objects will now accept cr, lf, or crlf as the separator if line break is specified as the separator.
Changed the way
.Initialize works. Instead of trying to run the procedure immediately, it waits and runs it after all current activity has stopped. Also, the statement
topdatawindow <database> is prepended to the front of the source code. If you open multiple files at once (for example by selecting multiple files in the Finder and then selecting Open or dragging them onto the Panorama icon), the files will ALL open, then Panorama will go back and run each
.Initialize procedure. The topdatawindow statement ensures that the correct window is active. This change insures that the
.Initialize procedure runs in the normal runtime environment, so that it can do things like stop and display dialogs. (I discourage that kind of usage, but people do it anyway.)
.PreInitialize procedure that runs before windows are opened. This should not do anything except initialize variables. It definitely should not perform any UI changes or display, so it should NOT contain showvariables, and it should not modify the values of any fields. Just use this for setting up fileglobals. Also, don’t make any assumptions about what window is currently open – it should not reference windows at all.
.CurrentRecord “hidden trigger” procedure. Note that this procedure will NOT be triggered if a procedure is running – if the procedure wants the
.CurrentRecord to run, it must call it explicitly.
Added new blueprint Form options dialog sheet, makes it easy to edit the form options (view mode, background color, report options, etc.) without having to mess with editing all of the objects also (especially important if the form contains a lot of objects.)
Added rounded corner border option for text editor, text display and image display object. Matches the Yosemite/El Capitan rounded corner used for search fields.
New options for margins on text editor and text display objects. Left, Right, Top and Bottom margins can be set independently, but only thru blueprints – there is no access to these values in the property inspector.
Text Editor prompts are now positioned properly for #SystemFont for sizes between 9 and 18 on Yosemite (these are the light gray prompts that can appear if the text is empty). This may need further tweaking for El Capitan. Also, the vertical position can be tweeked with the EmptyPromptVOffset blueprint option (there is no interface for this in the property inspector).
Added ability to generate prompts in CONSTRUCTFORMDATAEDITORS. The
<autoprompt:yes/no> tag causes each text editor to use it’s field name for the prompt value (if yes/no is missing, yes is assumed). The
<prompt:text> tag sets the prompt for the current line (overriding the default if autoprompt is turned on).
Added NewSearchGadget statement, which constructs a search gadget in the current form.
Added new TopDataWindow statement, which opens the topmost data window (data sheet or form in data mode) for the specified database.
The time( and seconds( function no longer try to guess am/pm if the input time contains colons, spaces, or other separators. It will only try to guess am/pm if a single number is entered. For example
time("2:09") is 7740 (~2 am) but
time("209") is 50940 (~2 pm). This is different from the time( function in Panorama 6, but I think that was a bug in Panorama 6 – it doesn’t match the documentation. I’m pretty sure previous versions of Panorama did work this way at some point.
The superlookup( function improperly cached results. This worked with the lookup( function but will not work with the superlookup( function. Bottom line, the superlookup( function no longer caches – it will do a new search every time it is used.
The Find command now works even if the data sheet is not open (only a form window).
The openplain statement now works correctly.
New pointsval( function, which converts a dimension from inches, centimeters or points into points.
New FindID statement, which provides a faster way to search for a record by it’s ID number.
Updated the way the Panorama icon is linked to the system. This makes the correct icon show up in the dock menu, and hopefully will fix any outstanding problems with database document icons.
Drag receiver object now continues to work after being resized in data mode (by elastic form or changeobjects), or if a new drag receiver is created with the newformobject statement.
Fixed broken DefineHotKeys statement.
Removed some extraneous options from newformobject statements in CONSTRUCFORMDATAEDITORS statements, hopefully will make it a bit faster. Also fixed height of first generated editor, it wasn’t correct if the size had been changed from the default
Fixed low-level problem that was probably causing occasional mysterious crashes.
Multiple additional bug fixes (see Bitbucket issue tracker).
Brand new features implemented in this release (features that were not included in Panorama 6):
Features implemented in this release that work differently than they did in Panorama 6.
Features implemented in this release that work exactly the same as they did in Panorama 6.
ALL features that were added or changed in this release: