Version 0.1.015 (released September 29th, 2015)
Lots of bug fixes, implementing more Panorama 6 statements and functions, and a few new items as well.

- Printing to PDF files is now supported and is very easy to use. Unlike Panorama 6, no special setup or fiddling is needed. If you were using the PrintPDF statement it will continue to work, but for new applications check out the new PrintToPDF statement, which gives you control over paper size, orientation, printed page range, page order, and more.

- Added Print Preview menu commands and statements (for both all selected records and current record). Print Preview now uses Apple’s Preview program instead of a special window within Panorama.

- Implemented the SelectDuplicates statement.

- Implemented the SuperGetPassword statement.

- Speech synthesis is now supported. In addition to the existing Panorama 6 features, you can now control the voice, rate and volume of synthesized text, and you can also save spoken text to an audio file rather than playing it immediately.

- Implemented the ProgressAlert statement. Unlike in Panorama 6, this statement no longer makes the library database active while the alert is visible, making it easier to continue whatever operation you are performing.

- Line item Ω suffix now works in procedures, both in formulas and assignments. Fixes issue #304.

- Eliminated spurious Find/Select dialog error that could appear after 20 searches in a database. Fixes issue #311.

- Added mode and baseurl options to Web Browser objects, added JavaScript bridge in both directions.

- Upgraded to Font Awesome 4.4. Fixes issue #306.

- Added a “stay” option to openform, opendialog, and opendialogsheet. If this option is true, the current database doesn’t change even if the “database” option is used – the current database always stays the same (hence the name of the option). This is handy if you want to be able to access fields and fileglobal variables from the original database even if a form or dialog from another database is open. Of course this means you cannot access fields or variables from the database that contains the form.

- Popup Button and Segmented Button objects have a new “mode” option, which may be either “Formula” or “Comma Separated Values”. The formula mode works as it did before. The Comma Separated Values mode interprets the Formula as literal text, with commas between the menu choices. You can also have spaces in addition to the commas, for example A, B, C. Comma Separated Values is now the default mode for new objects, making it easier to create most pop-up menus without fiddling with commatocr(, etc.

- The ConstructFormDataEditors statement can now create a group of checkboxes in addition to single checkboxes. It automatically sets the “Allow Multiple Values” option in that case.

- Added the exportcellall( function. Note: The exportcell( function in Panorama X is identical to the exportcellall( function – both return ALL the text in the cell, not just the first line. So this is a change in the exportcell( function from Panorama 6.

- Now allows floating point values with no digits after the decimal point, for example 4. or 3. – this fixes issue #291.

- Goto labels now work even if the label is on the first line in a procedure. Fixes issue #307.

- Fixed the Image Display “Display Path (Debug)” option.

- Form background color is now included in form blueprint. Fixes issue #292.

- Group objects now work in blueprints – the objects inside the group are restored. Fixes issue #314.

- Blueprint for Static Image Object now contains the actual data of the image itself. Fixes issue #310.

- Fixed decoding of Image Display Objects, ninePartBottomCap and ninePartRightCap were not loading properly when an object was instantiated.

- Data Button “allow multiple value” option now works correctly with a separator of "", which is actually a carriage return separator.

- Function fact(0) now returns 1, which is the official correct value. Fixes issue #293.

- Removed description of non-existant error message from radix( function. Fixes issue #285.

- Now accepts collapsetolevel as an alternate spelling for the outlinelevel statement. Fixes issue #301.

- Enabled the Find bar in the Help Corrections window.

- The Panorama Help Corrections window was incorrectly rendering most pages using the “plain” format, instead of using the “statement”, “function” or “opearator” format. Fixes issue #309.

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

- info("defaultvoice") -- The info("defaultvoice") function returns the current default system voice.
- info("speechrate") -- The info("speechrate") function returns the current Panorama speech rate (words per minute).
- info("speechvoice") -- The info("speechvoice") function returns the current default system voice.
- info("speechvolume") -- The info("speechvolume") function returns the current Panorama speech volume.
- info("voices") -- The info("voices") function returns a list of available speech synthesis voices on this system.
- pausespeaking -- The pausespeaking statement pauses any talking that is currently happening.
- printpreviewonerecord -- The printpreviewonerecord statement previews what printing the current record will look like.
- printtopdf -- The printtopdf statement prints the current database to a PDF file.
- resumespeaking -- The resumespeaking statement resumes speaking after a pause.
- richtextdata( -- The richtextdata( function adjusts text so that it will display properly in rich text even if it contains a < character.
- selectduplicatesnowarning -- The selectduplicatesnowarning statement selects records containing duplicate information in the database.
- speechrate -- The speechrate statement changes the speech rate (words per minute).
- speechvoice -- The speechvoice statement changes the default speech voice.
- speechvolume -- The speechvolume statement changes the default speech volume.
- voiceinfo( -- The voiceinfo( function returns information about a speech synthesis voice.

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

- printpreview -- The printpreview statement previews what printing the current window will look like.
- progressalert -- The progressalert statement displays a progress alert if an operation is going to take a long time.
- speak -- The speak statement speaks a word or phrase.
- stopspeaking -- The stopspeaking statement stops any talking that is currently happening.

Features implemented in this release that work exactly the same as they did in Panorama 6.

- info("speaking") -- The info("speaking") function returns true if talking is occuring right now.
- printpdf -- The printpdf statement prints the current database to a PDF file.
- speakaddress -- The speakaddress statement buffers up a street address to be spoken later by the speaknow statement.
- speakcharacters -- The speakcharacters statement buffers up one or more characters to be spoken later by the speaknow statement.
- speakcharactersslowly -- The speakcharactersslowly statement buffers up one or more characters to be spoken later by the speaknow statement. Instead of speaking words, each individual character is spoken separately and slowly.
- speakdate -- The speakdate statement buffers up a date to be spoken later by the speaknow statement.
- speakdigitpairs -- The speakdigitpairs statement buffers up one or more digit pairs to be spoken later by the speaknow statement.
- speakdigits -- The speakdigits statement buffers up one or more digits to be spoken later by the speaknow statement.
- speakdollars -- The speakdollars statement buffers up a dollar amount to be spoken later by the speaknow statement.
- speakdollarsandcents -- The speakdollarsandcents statement buffers up a dollar and cents amount to be spoken later by the speaknow statement.
- speakletters -- The speakletters statement buffers up one or more characters to be spoken later by the speaknow statement. Letters will be spoken individually, as upper or lower case. Numbers will be spoken as individual digits.
- speaknow -- The speaknow statement speaks any buffered speech.
- speakphonenumber -- The speakphonenumber statement buffers up a phone number to be spoken later by the speaknow statement.
- speakscript -- The speakscript statement speaks a speech synthesis script created in the Database Options dialog.
- speakstate -- The speakstate statement buffers up a US State to be spoken later by the speaknow statement.
- speakthisrecord -- The speakthisrecord statement speaks the current record in the database (using the default speech script).
- speakwords -- The speakwords statement buffers up one or more words to be spoken later by the speaknow statement.
- speechscripts -- The speechscripts statement returns a lists of speech scripts in a database.
- supergetpassword -- The supergetpassword statement will display a dialog with a text entry area for a password.

ALL features that were added or changed in this release:

- <= -- The <= operator compares two values to see if the first value is less than or equal to the second value.
- appledayzero( -- The appledayzero( function returns an internal constant used for converting between superdates and regular dates.
- arraydeletevalue( -- The arraydeletevalue( function deletes any array elements that match the value parameter. This must be an exact match, including upper and lower case. If the value occurs multiple times in the array, every occurence of the value will be removed, with one exception: if the value occurs in two consecutive array elements, only the first occurence will be deleted.
- before( -- The before( function extracts all text before a specified tag (sequence of characters). If the tag doesn't exist the function returns "".
- bestfitrectangle( -- The bestfitrectangle( function fits a rectangle within a boundary rectangle, enlarging or reducing as necessary to produce the best fit without changing the proportions.
- bestfitrectangle -- The bestfitrectangle statement fits a rectangle within a boundary rectangle, enlarging or reducing as necessary to produce the best fit without changing the proportions.
- between( -- The between( function checks to see if a value is between two other values.
- callwithin( -- The callwithin( function allows a "mini-procedure" to be called as a subroutine within a formula and return a result.
- console -- The console statement sends a message to the console log.
- cutcell -- The cutcell statement delete the contents of the current cell and places the deleted data on the clipboard.
- dbconstructormenu( -- The dbconstructormenu( function used internally by ProVUE
- errortext( -- The errortext( function evaluates an expression, but returns only the error message generated (if any).
- executelocal -- The executelocal statement is the same as the execute statement, but it shares local variables with the procedure that called it.
- executeperlscript -- The executeperlscript statement executes Perl code.
- Files and Folders -- organization of files and folders
- float( -- The float( function converts a fixed point number to a floating point number.
- folder( -- The folder( function creates a Folder ID that unambiguously describes the location of a folder on the hard disk.
- formulafillallfields -- The formulafillallfields statement fills every visible cell in all fields with the result of the specified formula.
- info("defaultvoice") -- The info("defaultvoice") function returns the current default system voice.
- info("speaking") -- The info("speaking") function returns true if talking is occuring right now.
- info("speechrate") -- The info("speechrate") function returns the current Panorama speech rate (words per minute).
- info("speechvoice") -- The info("speechvoice") function returns the current default system voice.
- info("speechvolume") -- The info("speechvolume") function returns the current Panorama speech volume.
- info("voices") -- The info("voices") function returns a list of available speech synthesis voices on this system.
- makenewprocedure -- The makenewprocedure statement creates a new procedure in the current database.
- morphalldialog -- The morphalldialog statement opens the standard MorphAll dialog.
- pausespeaking -- The pausespeaking statement pauses any talking that is currently happening.
- printpdf -- The printpdf statement prints the current database to a PDF file.
- printpreview -- The printpreview statement previews what printing the current window will look like.
- printpreviewonerecord -- The printpreviewonerecord statement previews what printing the current record will look like.
- resumespeaking -- The resumespeaking statement resumes speaking after a pause.
- speak -- The speak statement speaks a word or phrase.
- speakaddress -- The speakaddress statement buffers up a street address to be spoken later by the speaknow statement.
- speakcharacters -- The speakcharacters statement buffers up one or more characters to be spoken later by the speaknow statement.
- speakcharactersslowly -- The speakcharactersslowly statement buffers up one or more characters to be spoken later by the speaknow statement. Instead of speaking words, each individual character is spoken separately and slowly.
- speakdate -- The speakdate statement buffers up a date to be spoken later by the speaknow statement.
- speakdigits -- The speakdigits statement buffers up one or more digits to be spoken later by the speaknow statement.
- speakdollars -- The speakdollars statement buffers up a dollar amount to be spoken later by the speaknow statement.
- speaknow -- The speaknow statement speaks any buffered speech.
- speakphonenumber -- The speakphonenumber statement buffers up a phone number to be spoken later by the speaknow statement.
- speakscript -- The speakscript statement speaks a speech synthesis script created in the Database Options dialog.
- speakstate -- The speakstate statement buffers up a US State to be spoken later by the speaknow statement.
- speakthisrecord -- The speakthisrecord statement speaks the current record in the database (using the default speech script).
- speakwords -- The speakwords statement buffers up one or more words to be spoken later by the speaknow statement.
- speechrate -- The speechrate statement changes the speech rate (words per minute).
- speechvoice -- The speechvoice statement changes the default speech voice.
- speechvolume -- The speechvolume statement changes the default speech volume.
- stopspeaking -- The stopspeaking statement stops any talking that is currently happening.
- voiceinfo( -- The voiceinfo( function returns information about a speech synthesis voice.

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.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.025 (released July 21st, 2016) -- Summary of Version 0.1.025 (released 7/21/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)