For anybody who is interested this is a example of a script that will run the “Application (enhanced)” “progress bar.” It only has 2 things in the script that are not needed for the progress bar, the the code for the “repeat with” and the “delay” command. These were added in so the example would actually do something. This minimal adding of code makes it easier to see what would have to be added to a script to use the progress bar.
It is the responsibility of the script to determine the “total number of steps” and what step it is currently on. “progress additional description” and “progress description” are customizable text descriptions that allows the scripter to put whatever text that is desired as long as the text can fit in the box.
To create the “Application enhanced” progress bar as an Applet do a “save as” using the format “Application (enhanced).” The “Application (Apple)” format will not be able to create an enhanced progress bar.
The progress bar calculates the time remaining, percent done and says which item number it is currently working on. You can implement part, all or none of the extra stuff I have included but the example does show were the basic things that always need to be in the script are and how they are done.
I have included in this post the “Application (enhanced)” Applet and a compiled bundle version. They both have the same code in them. The “Application (enhanced)” will not work when running it from the compiled bundle version. That only works as a “Application (enhanced)” applet. But the compiled bundle version does allow people to see the code if the user can’t access the code from the applet.
Here is the actual code for the script. Anybody is free to use this in whatever way they desire.
-- Rather than stopping the script if an error occurs in the SetSignificantFractionalDigits -- handler this script just hides the value that would be displayed in the progress bar -- and allows the script to keep running. If you want to stop the script the output from -- SetSignificantFractionalDigits can be for error checking and terminate the script if desired. -- The comments for how this would work are in the comments at the beginnging of the -- SetSignificantFractionalDigits handler. on SetSignificantFractionalDigits(TheNumber, MaxNumOfDigits) -- This handler returns a string. It does not stop the processing when an error occured -- since an error in this handler is not necessarly an error in the main body of the script. -- But the errors are returned as special letter strings so the calling code can handle the -- error if needed. -- MaxNumOfDigits must be greater then or equal to zero. Specifing a maximum number -- of digits for MaxNumOfDigits is used becauase a common problem is specifing -- the maximum number of digits that can fit in the space in the the progress bar. -- This handler returns "D" then an invalid MaxNumOfDigits is sent in -- This handler returns "?" when an error occured other then an invalid number in MaxNumOfDigits try if (MaxNumOfDigits < 0) then return "D" -- Return error indicator else if (MaxNumOfDigits = 0) then -- Returns an integer with the fractional part of the real number removed return (TheNumber div 1) as string else -- Returns a real number with the specified number of digits return (((TheNumber * (10 ^ MaxNumOfDigits)) div 1) / (10 ^ MaxNumOfDigits)) as string end if on error return "?" end try end SetSignificantFractionalDigits set TotalItems to 70 set progress description to "" set progress additional description to "calculating" -- The first few time estimates a bit wild so just display calcualting set progress total steps to TotalItems set progress completed steps to 0 set StartTime to current date repeat with NumberProccesed from 1 to TotalItems set AmountProcessed to NumberProccesed / TotalItems -- Multiply by 100 to convert the decimal number to a percentage set PrecentProcessedStr to SetSignificantFractionalDigits(AmountProcessed * 100, 2) if (PrecentProcessedStr = "D") or (PrecentProcessedStr = "?") then -- Don't show this information on progress bar if an error occured in SetSignificantFractionalDigits set progress description to "Processing item " & NumberProccesed & " of " & TotalItems else set progress description to "Processing item " & NumberProccesed & " of " & TotalItems & ", " & PrecentProcessedStr & "% processed" end if set AmountLeftToProcess to 1 - AmountProcessed set ProcessingTimeSoFar to (current date) - StartTime set RuntimeSeconds to (current date) - StartTime -- Have to make sure the following lines are not executed when RuntimeSeconds = zero or a divide by zero will occur if (RuntimeSeconds ≠ 0) then if (NumberProccesed > 3) then -- After the first 3 passes the estimates are pretty close so start displaying them set FilesPerSecond to NumberProccesed / RuntimeSeconds set AmountOfFilesLeft to TotalItems - NumberProccesed set SecondsToCompletion to FilesPerSecond * AmountOfFilesLeft set SecondsLeft to SetSignificantFractionalDigits(SecondsToCompletion, 0) -- Don't show this information on progress bar if an error occured in SetSignificantFractionalDigits if (PrecentProcessedStr ≠ "D") and (PrecentProcessedStr ≠ "?") then -- Update the progress information set progress additional description to SecondsLeft & " seconds remaining" end if end if end if -- Update the progress bar set progress completed steps to NumberProccesed -- Create a delay to the actual progess movement can be seen delay 1 end repeat