Version 0.1.025 (released July 21st, 2016)
This release is mostly about bug fixes. Behind the scenes, there has also been significant work done on the Panorama X client/server system, but all of that code is disabled in the public release. Most of the new statements and functions that are listed below have been added as part of the client/server work.

- Now properly handles localization of floating point values in the data sheet, both for display and data entry/import (an empty pattern properly displays using the local thousands separator).

- Panorama now ignores commas when inputting or importing numbers (or, if you are in a region where the decimal separator is a comma, it ignores decimal points).

- Updated zip code data to June 2016.

- The lookup( function now works correctly if the key field name contains a space or other unusual punctuation.

- Fixed the Group Up by Quarter statement and the quarter1st( function, both of which were off by a month.

- New throwerror statement, works with try/catch and onerror.

- Added new dictionarydifference statement which compares the values in two dictionaries.

- Added new commonpath( function which returns the path of common folders (desktop, library, documents, etc), even on non-English systems where these folders have localized names.

- New info(“decimalseparator”) function returns the decimal separator character for the current region (period or comma).

- Added new functions info(“countrycode”), info(“currencycode”), info(“currencysymbol”), info(“languagecode”), info(“measurementsystem”) that return information based on the current system locale (as specified in the System Preferences Language & Region panel).

- Added StartBonjour/StopBonjour statements, and bonjour( function. These will be used by Panorama’s client/server system.

- Added new statements and functions for compressing, uncompressing, and accessing .zip, .tar.gz and .tar.bz2 archives. These will be used by Panorama’s client/server system.

- Matrix objects can now be printed.

- Matrix objects now work in the data tile of a View-as-List form (they must not have a scroll bar, though).

- Forms with multiple side-by-side tab panels now work correctly.

- Panorama now ignores clicks in the empty area of tab panels (instead of triggering the associated procedure). Only clicks in the actual tab panel buttons trigger the procedure.

- When printing a form with no Data Tile, Panorama now uses a white background (it was using a colored background in previous versions).

- Sorting now works correctly with Choice fields. Also, works correctly when the list of choices is modified.

- In a procedure, `formulafill zeroblank(0)` or `formulafill ""` will now correctly clear all cells in a numeric field. Also, now using `fill ""` also clears all cells in a numeric field.

- Panorama now keeps track of the current field separately for each form and for the data sheet, so that the current field internally always matches what the user sees visually as the current field.

- Fixed the matrixclick and info(“matrixclickedobjectid”) functions so that they work even when the matrix frame is in a separate form. Also added the new info(“matrixclickedframeform”) function.

- The Clear, Copy, Cut and Paste statements now work identically to the ClearCell, CopyCell, CutCell and PasteCell statements, all known bugs in these statements are now fixed.

- The CutRecord and PasteRecord statements no longer loop endlessly.

- Text Editor objects will no longer display white text for selection in a View-as-List form (you can’t select the cell, so it was incorrectly partially highlighting).

- The Database Options dialog now opens without an error message.

- The info(“windowtype”) and info(“windowview”) functions now return the correct value for View-As-List form windows.

- Now converts carriage returns to vertical tabs (\x0B) when exporting text, for compatibility with programs like Excel in exporting data that contains carriage returns.

- Made a change that hopefully fixes the problem of forms sometimes opening with the property inspector panel visible. But since the problem couldn’t be reliably duplicated, this may or may not fix the problem.

- Fixed problem where the first time a window is opened it would sometimes be the wrong height.

- Matrix objects now support the Sync Up/Down option.

- Fixed occasional incorrect display of Elastic Window objects in data mode.

- The List/Matrix constructor now displays a warning notification if the `<query>` tag is below one or more `<search>` tags (in which case the constructor will not generate the search wizard).

- The closefile statement now works properly with secret windows (or the setactivedatabase statement).

- The initializedictionary statement now works properly if a value is a lone local variable (it would work with more complex expressions).

- No longer can make elastic objects negative size my shrinking the window too far. The elastic object will still shrink almost to zero size, but not negative size – further shrinkage is ignored even if the window gets smaller. This also fixed a problem with the Help window.

- Fixed problem that would cause crashes when clicking on an empty area in a View-As-List form.

- When importing a database from Panorama 6, now correctly imports the background color of report tiles.

- When importing a database from Panorama 6, now correctly imports matrix objects (this wasn’t quite correct in the previous 2 or 3 releases).

- Now correctly opens View-As-List windows when importing a database from Panorama 6.

- The New Account panel of the Site License wizard now has links to help pages for frequently asked questions and passwords.

- Multiple minor changes and fixes in the Site License wizard.

- The goform statement now stops the procedure if you try to use it in a non-form window (instead of causing an Objective-C runtime error).

- Cleaned up menus in several wizards, including Help, Site License, View Organnizer, Memory Usage and Dialog Workshop. Disabled all print menu commands in these wizards.

- Panorama Help wasn’t correctly rendering the page type in the parameter section when you previewed, it always said “plain” instead of “statement” or “function.”

- Minor changes to processing payments and account management, including allowing 4 digit CVC codes (required for AMEX).

- Assorted minor documentation corrections.

Brand new features implemented in this release (features that were not included in Panorama 6):

- archivecontents( -- The archivecontents( function lists the contents of a compressed archive in *.zip*, *.tar.gz* or *.tar.bz2* format.
- bonjour( -- The bonjour( function returns a list of available hosts.
- commonpath( -- The commonpath( function returns the path for common folders (desktop, library, documents, pictures, etc.).
- compress -- The compress statement compresses a file or an entire folder.
- info("countrycode") -- The info("countrycode") function returns the country code for the current location.
- info("currencycode") -- The info("currencycode") function returns the currency code for the current location.
- info("currencysymbol") -- The info("currencysymbol") function returns the currency symbol for the current location.
- info("decimalseparator") -- The info("decimalseparator") function returns the current decimal separator character (period or comma).
- info("languagecode") -- The info("languagecode") function returns the language code for the current location.
- info("matrixclickedframeform") -- The info("matrixclickedframeform") function returns the form that contains the matrix frame, or `""` if the current form contains the frame.
- info("measurementsystem") -- The info("measurementsystem") function returns the measurement system for the current location.
- panoramaxservers( -- The panoramaxservers( function returns an array of available Panorama servers.
- panoramaxserverurl( -- The panoramaxserverurl( function returns the URL associated with a Panorama X server.
- startbonjour -- The startbonjour statement starts monitoring the local network for available hosts.
- stopbonjour -- The stopbonjour statement cancels monitoring of the local network for available hosts.
- throwerror -- The throwerror statement causes an immediate error.
- uncompress -- The uncompress statement uncompresses a `.zip`, `.tar.gz` or `.tar.bz2` file into a file or an entire folder.

Features implemented in this release that work differently than they did in Panorama 6.

- dictionarydifference -- The dictionarydifference statement builds an array that lists keys of dictionary values that are different between two dictionaries (see Data Dictionaries).

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:

- Managing Account Roles -- configuring a Panorama X account for a team, assigning privilege levels for administrators, developers, and general users.
- arraymultisort( -- The arraymultisort( function sorts a two-dimensional array on the key of one or more of its columns.
- arraymultisort -- The arraymultisort statement sorts a two-dimensional array on the key of one or more of its columns.
- clear -- The clear statement deletes the contents of the current cell without touching the clipboard.
- closefile -- The closefile statement closes the current database.
- compress -- The compress statement compresses a file or an entire folder.
- info("countrycode") -- The info("countrycode") function returns the country code for the current location.
- info("currencycode") -- The info("currencycode") function returns the currency code for the current location.
- info("currencysymbol") -- The info("currencysymbol") function returns the currency symbol for the current location.
- info("decimalseparator") -- The info("decimalseparator") function returns the current decimal separator character (period or comma).
- info("languagecode") -- The info("languagecode") function returns the language code for the current location.
- info("matrixclickedframeform") -- The info("matrixclickedframeform") function returns the form that contains the matrix frame, or `""` if the current form contains the frame.
- info("measurementsystem") -- The info("measurementsystem") function returns the measurement system for the current location.
- panoramaxservers( -- The panoramaxservers( function returns an array of available Panorama servers.
- panoramaxserverurl( -- The panoramaxserverurl( function returns the URL associated with a Panorama X server.
- regexmatchexact -- The regexmatchexact operator checks to see if the text on the left matches the regular expression on the right (see Regular Expressions).
- startbonjour -- The startbonjour statement starts monitoring the local network for available hosts.
- stopbonjour -- The stopbonjour statement cancels monitoring of the local network for available hosts.
- throwerror -- The throwerror statement causes an immediate error.
- uncompress -- The uncompress statement uncompresses a `.zip`, `.tar.gz` or `.tar.bz2` file into a file or an entire folder.

See Also

- Version 0.1.001 (released July 7th, 2012) -- Summary of Version 0.1.001 (released 7/7/2012)
- Version 0.1.002 (released August 12th, 2012) -- Summary of Version 0.1.002 (released 8/12/2012)
- Version 0.1.003 (released December 2nd, 2012) -- Summary of Version 0.1.003 (released 12/2/2012)
- Version 0.1.004 (released December 10th, 2012) -- Summary of Version 0.1.004 (released 12/10/2012)
- Version 0.1.005 (released December 21st, 2012) -- Summary of Version 0.1.005 (released 12/21/2012)
- Version 0.1.006 (released December 26th, 2012) -- Summary of Version 0.1.006 (released 12/26/2012)
- Version 0.1.007 (released May 1st, 2013) -- Summary of Version 0.1.007 (released 5/1/2013)
- Version 0.1.008 (released May 22nd, 2013) -- Summary of Version 0.1.008 (released 5/22/2013)
- Version 0.1.009 (released July 9th, 2013) -- Summary of Version 0.1.009 (released 7/9/2013)
- Version 0.1.010 (released October 14th, 2013) -- Summary of Version 0.1.010 (released 10/14/2013)
- Version 0.1.011 (released December 6th, 2013) -- Summary of Version 0.1.011 (released 12/6/2013)
- Version 0.1.012 (released August 29th, 2015) -- Summary of Version 0.1.012 (released 8/29/2015)
- Version 0.1.013 (released September 6th, 2015) -- Summary of Version 0.1.013 (released 9/6/2015)
- Version 0.1.014 (released September 14th, 2015) -- Summary of Version 0.1.014 (released 9/14/2015)
- Version 0.1.015 (released September 29th, 2015) -- Summary of Version 0.1.015 (released 9/29/2015)
- Version 0.1.016 (released October 12th, 2015) -- Summary of Version 0.1.016 (released 10/12/2015)
- Version 0.1.017 (released November 11th, 2015) -- Summary of Version 0.1.017 (released 11/11/2015)
- Version 0.1.018 (released December 7th, 2015) -- Summary of Version 0.1.018 (released 12/7/2015)
- Version 0.1.019 (released January 28th, 2016) -- Summary of Version 0.1.019 (released 1/28/2016)
- Version 0.1.020 (released February 15th, 2016) -- Summary of Version 0.1.020 (released 2/15/2016)
- Version 0.1.021 (released February 29th, 2016) -- Summary of Version 0.1.021 (released 2/29/2016)
- Version 0.1.022 (released March 1st, 2016) -- Summary of Version 0.1.022 (released 3/1/2016)
- Version 0.1.023 (released May 27th, 2016) -- Summary of Version 0.1.023 (released 5/27/2016)
- Version 0.1.024 (released June 12th, 2016) -- Summary of Version 0.1.024 (released 6/12/2016)
- Version 0.1.026 (released August 29th, 2016) -- Summary of Version 0.1.026 (released 8/29/2016)
- Version 0.1.027 (released September 18th, 2016) -- Summary of Version 0.1.027 (released 9/18/2016)
- Version 0.1.028 (released November 9th, 2016) -- Summary of Version 0.1.028 (released 11/9/2016)
- Version 0.1.029 (released December 31st, 2016) -- Summary of Version 0.1.029 (released 12/31/2016)
- Version 0.1.030 (released February 12th, 2017) -- Summary of Version 0.1.030 (released 2/12/2017)
- Version 0.1.031 (released March 3rd, 2017) -- Summary of Version 0.1.031 (released 3/3/2017)
- Version 0.1.032 (released April 3rd, 2017) -- Summary of Version 0.1.032 (released 4/3/2017)
- Version 0.9 (released May 15th, 2017) -- Summary of Version 0.9 (released 5/15/2017)
- Version 0.9.001 (released July 18th, 2017) -- Summary of Version 0.9.001 (released 7/18/2017)
- Version 0.9.002 (released July 27th, 2017) -- Summary of Version 0.9.002 (released 7/27/2017)
- Version 0.9.003 (released September 10th, 2017) -- Summary of Version 0.9.003 (released 9/10/2017)
- Version 0.9.004 (released September 14th, 2017) -- Summary of Version 0.9.004 (released 9/14/2017)
- Version 0.9.005 (released September 19th, 2017) -- Summary of Version 0.9.005 (released 9/19/2017)
- Version 0.9.006 (released September 27th, 2017) -- Summary of Version 0.9.006 (released 9/27/2017)
- Version 0.9.007 (released October 3rd, 2017) -- Summary of Version 0.9.007 (released 10/3/2017)
- Version 0.9.008 (released October 12th, 2017) -- Summary of Version 0.9.008 (released 10/12/2017)
- Version 10.0.0 (released October 18th, 2017) -- Summary of Version 10.0.0 (released 10/18/2017)
- Version 10.0.01 (released December 10th, 2017) -- Summary of Version 10.0.01 (released 12/10/2017)
- Version 10.1 (released August 6th, 2018) -- Summary of Version 10.1 (released 8/6/2018)
- Version 10.1.1 (released August 30th, 2018) -- Summary of Version 10.1.1 (released 8/30/2018)
- Version 10.1.2 (released November 15th, 2018) -- Summary of Version 10.1.2 (released 11/15/2018)
- Version 10.2 (released October 7th, 2021) -- Summary of Version 10.2 (released 10/7/2021)