If you obtained this copy of MacZoop from somewhere other than the website, e.g. a CD-ROM, you may like to check out the MacZoop website. This provides frequent updates, FAQ, and links to other MacZoop relates sites and projects.
If you have eMail, you can receive up to date announcements and occasional bug-fixes by subscribing to the MacZoop mailing list. To subscribe, send an eMail to MacZoop-on@impro.demon.co.uk, or to MacZoop@impro.demon.co.uk with SUBSCRIBE as the message body. Note that correspondence and technical support for MacZoop is obtained via eMail to graham@impro.demon.co.uk. You should not attempt to send eMail to the list server- it will be bounced.
Note for users of CodeWarrior prior to version 10, or Symantec C++
If you are using CodeWarrior 9 or earlier, you'll find that the supplied projects can't be opened- it complains they're too new. In this case, or if you are using Symantec C++, you'll need to set up your own project files. This is quite easy- in the "projects" folder, there is a file called "manifest.readme", which lists the files you need to include to make both the bare minimum application and the demo project. It also indicates which flags in the project settings (or preferences in older versions) should be set. Open this file and create a project that includes the files listed. It should then work- MacZoop requires at least CodeWarrior 6, since it relies on ANSI standard RTTI in places.
If you are using CW 10, note that these projects were actually created by CW11. CW10 can open these, but may reset settings in the PEF project settings. If this is important to you, please check.
Added CodeWarrior Pro versions of the project files.
Added further enhancements to ZMenuBar to allow mixed command and non-command menus to have dimming options applied to items based on whether they have commands or not.
Added support to ZMenuBar/ZWindowManager to automatically maintain a "Windows" menu. To use this feature, your application needs only to make one single initialisation call to ZMenuBar::NominateWindowsMenu() passing the menu ID of the menu to use, and it will just work. This menu can contain other items ahead of the list of windows- MacZoop will allow for this and provide a separator line as necessary.
Fixed minor bug with menu dimming of dynamically appended menus.
Fixed subtle bug in ZObjectArray that caused problems with ZComrade. This showed up as a breakdown in communication if objects were deleted and added repeatedly as talkers to other objects. Very obscure, but fix should now allow comrades to work as intended under all situations.
Added additional flags to global record gMacInfo to indicate prescence of QuickTime and Image Compression Manager.
ZApplication now supports the common technique for reporting errors used in other frameworks based on 'Estr' resources. If you provide a Estr resource with the same ID as the error code, this string is automatically appended to a common stub and displayed in the exception alert. Estr resources have the same format as 'STR ' resources. The common stub reads "The command could not be completed because ". You provide the completion of the phrase. If the Estr is missing, the generic message is displayed as before.
Added standard Estr resources for common things like out of memory, disk full, etc.
Added missing HandleCommand( short, short ) method to ZWindow to make sure subclasses can override it properly. A problem with the C++ language itself prevented this working as it should.
Added method to ZListDialogItem (part of advanced dialog stuff) to allow a string to be appended to the list on the fly with a simple high-level call. This is for the convenience of those who need to build lists dynamically but don't want to get their hands dirty in the depths of the List Manager!
ZProgress constructor rationalised again- the two-constructor changes made last version were causing confusion to users and compilers alike.
ZWindow includes a new methods to get the title bar height, the window frame thicknesses, etc. Using these will help you to position windows without having to worry about whther the window is System 7 or 8, or using a custom WDEF.
ZWindow now keeps track of the filetype it last opens, so that overrides to OpenFile() that can handle multiple types get called properly when Revert() is called.
ZWindowManager has a new method for initially placing windows in a diagonal cascade. The standard window creation calls in ZApplication now call this, so you're likely to see different placement behaviour if you've been relying on the default placement mechanism.
ZDialog adds support for greyscale appearance regardless of whether the Appearance Mgr is present or not. You can revert to the older behaviour by undefining a compiler flag. Currently edit fields and user items have a greyscale appearance. ZAdvancedDialog adds grayscale support to list boxes and the scrolling text box.
Added a simple class ZGrafState. Invoking this object on the stack automatically saves off the current port, its clip region, pen and text settings, and colours. When the object goes out of scope, the original settings are restored. ZDialog now makes use of it.
Added accessors to ZGWorld to get and set the underlying Macintosh GWorld.
ZScroller now implements "live" scrolling of the scrollbar thumbs. This can be switched off with a compiler flag.
Added some intelligence to ZWindow/ZUndoTask so that the first undo task in a series restores the "dirty" flag of the window when it is undone. This ensures that you are not asked to save changes if the first change was undone, since your data is back to where it was to start with.
MacZoop Release 1.6.4, 2nd June, 1997
Changes since version 1.6.3:
Added enhancements to ZMenuBar to add functionality. You can now specify dimming behaviours for entire menus, so menus that do not have direct command IDs (such as e.g. a Font menu) can be made to work as desired. Also changed menu dimming method so that third party extensions that add menus to an application's menu list do not get their menus clobbered by MacZoop.
Changed initialisation order so menus are built before ZPrinter was made. This was causing an obscure menu bug in some circumstances with certain printer drivers.
Changed ZPrinter so that PrintDefault is called only when the user chooses Page Setup or Print for the first time. Also made sure PrOpen and PrClose are called around this call.
Added methods to ZApplication to return the name and resource fork refNum of the application file.
Added compiler flag to ZApplication so you can suppress the automatic opening of the initial "untitled" window. This was done to help out with developing "faceless" utility applications.
Added an optional class ZPrefsFile for implementing proper prefs files without tears.
Changed ZProgress so that the "stripey" mode is uncoupled from the "proportional" mode. You can now switch between the two on the fly using the new SetMode() method. The ability to pass -1 in maxValue to default to stripey mode is retained for compatibility; a new constructor is provided that allows you to explicitly set the mode when you create the object. The restriction that you can have only one progress bar at a time is lifted, since threaded apps may wish to have multiple progress bars.
Made sure all optional classes include the right headers now that things have been reorganised slightly.
Fixed minor bug in ZScroller.
Added generic command ID for "Select None"
MacZoop Release 1.6.3, 6th May, 1997
Changes since version 1.6.2:
Added class ZMenuBar to factor menu handling code from the application class. This also implements an abstract command-based architecture for much greater ease of programming. The old method of handling commands is still supported, but there is now a new version of HandleCommand() that you can override to handle abstract command numbers. MacZoop reserves command IDs 0-127 for itself, your app can use 128 and above.
ZDialog no longer counts hidden fields when doing a HasEditFields() check
ZDialog now honours 'ictb' resources properly for editable text items.
Balloon help in dialogs now works.
Start up code factored to make writing the main() function easier.
ZWindow's save code reorganised so that animated cursor is switched on at the right time.
ZPrinter bug fixed so that it correctly prints subranges of pages, and honours the "Number of copies" choice.
ZGWorldWindow enhanced to provide a magnification facility.
Project headers reorganised. You now only need to include "MacZoop.h" in your own files to include all of the standard headers. The old way still works.
The standard headers can be precompiled if you wish (they are not precompiled in the package though).
New optional classes:
ZMenuBarPane- based on Uli's panes, this class provides a means to put a menubar into any window. It is a good-looking and seamless object that can
considerably enhance applications that use it wisely!
ZPaintEngine and ZPaintWindow are experimental classes provided "as is" to illustrate how to implement a paint-type program using MacZoop. Builds on
ZGWorld and ZGWorldWindow classes. Paint actions are all undoable via ZUndoPaintTask class.
MacZoop Release 1.6.2, March 10th, 1997
Changes since version 1.6.1:
All toolbox routine names changed to new format- users of CodeWarrior 11 can stop cursing now!
STR# resource that was incomplete in 1.6.1 added (this fixes the shortened File menu bug).
Minor bugfixes in a couple of places.
MacZoop Release 1.6.1, March 6th, 1997
Changes since version 1.6:
Bug fixed in ZWindow that caused crashes with Uli Kusterer's Panes classes and the Advanced dialog stuff.
MacZoop Release 1.6, February 24th, 1997
Changes since version 1.5.1:
Added support for floating windows. This involves a new class, ZWindowManager, and changes to ZApplication, ZEventHandler, ZWindow, and ZDialog.
Added clipboard "wrapper" class, ZClipboard. Classes now call this where necessary instead of using the scrap manager directly.
ZCommander now provides default command handling/dispatching for Cut, Copy, Paste and Clear instead of ZWindow. This was done to increase the versatility of ZCommander and in particular the extended "advanced" dialog items.
Advanced dialog code extended to support a new type, a scrolling styled text box. This is not part of the basic package.
Improved and simplified both ZDialog and ZAdvanced dialog. To assist with the floating window stuff, ZDialog now handles all its own drawing, clicking etc. Though still based on the Dialog Manager, it is now much more consistent with ZWindow and allows ZEventHandler to be considerably simplified.
Calls to InitCursor replaced with SetCursor( &qd.arrow ) throughout.
Fixed alignment bug in cursor utilities. This may have been causing crashing on some Mac models.
Rewrote the manual entirely.
MacZoop Release 1.5.1, January 23rd, 1997
Changes since version 1.5:
gUIVectorUPP in ZDialog is no longer a static function, since the optional class ZAdvancedDialog (supplied separately from the basic framework) require access to it. This is the only change needed to support ZAdvancedDialog.
ZApplication/ZEventHandler now load hierarchical menus automatically, and deal with enabling their parent items correctly when a menu is pulled down.
Cut/Copy/Paste in ZDialog now works much better for modeless dialogs, and no longer zeroes the desk scrap when the dialog is disposed of. This not only fixes MacZoop bugs, but allows some types of 3rd party screen capture utilities to work properly.
ZDialog can now preset the default button of a radio group, if desired. To do this, add a '*' to the end of the default button's name in the dialog template. (e.g. Button1//1*). Bug fixed where checkboxes were inadvertently being treated as ungrouped radio buttons (harmless, but could lead to odd effects).
Numerous typos fixed that crept into 1.5 sources (none serious, mainly in comments).
Split out method PickFile from Save in ZWindow, for ease of overriding for custom dialogs.
ZFile now supports safe-save as a fundamental feature. To use, call OpenSafe() instead of Open, then call Write
and Close as normal.
Added class ZResourceFile to simplify manipulation of file resources.
ZCommander provides default Apple Event processing. Overridden in ZApplication to process the four required
events. ZEventHandler modified to field Apple Events more generically. Upshot is that MacZoop now supports
full applescripting of the command chain. You need to define your own 'aete' resource as well as set up your
handlers. In due course, full recordability is a definite possibility.
MacZoop Release 1.5, December 13th, 1996
Changes since version 1.4.1:
Support for printing added (ZPrinter, plus changes to ZWindow and ZApplication)
Support for Undo added (ZUndoTask)
Classes for loose object coupling added (ZComrade). ZCommander and ZArray now a subclass of ZComrade which changes the architecture quite a bit- though existing code will probably not be affected.
Renamed the SetCursor method to AdjustCursor to avoid confusion with the toolbox routine of this name.
ZString class supplied (main framework does not require this).
MacZoop Release 1.4.1, October 8th, 1996
Changes since version 1.4:
Support for automatic handling of radio button groups in ZDialog added
New classes in 1.4.1
ZThreadedApplication and ZThread allow you to set up threaded operations in MacZoop. These should be considered more advanced classes if you are a beginner. Uses the Mac OS Thread Manager.
The projects in 1.4.1 were built using CodeWarrior 10. If you have an earlier version of CW, you may have problems using them directly. In this case, please use the projects in the "Earlier Project Formats" folder.
MacZoop Release 1.4, September 20th, 1996
Changes since version 1.3:
Support for animated cursors added. Your code can call SetWatchCursor() or SetBeachBallCursor() and
the cursor will be shown and animated until the main event loop receives a NULL event, at which point
the cursor is automatically reset. Cursors are animated using a VBL task- no repeated calling is needed
to animate them.
Changes made to the way the reserve memory is replenished. This makes it more reliable and less
bothersome to the user, who now gets far fewer "memory low" alerts.
Changes to the way some of the dialog events were dispatched, which make the dialog filter code easier
to override in a more general way.
Bug fixed where clicking the title bar of a window behind a modal dialog would bring it in front of the
dialog. Thanks to Johan for finding this.
Bug fixed where a "windowshaded" window was still setting the cursor. This bug also found by Johan.
Growzone proc now calls MaxMem after calling the app to free space, improving handling of very low
memory situations.
Event fetching and handling now factored from the Run() method in ZApplication, to allow other code to
call it. This was done primarily to support the progress dialog, but has more general usefulness.
ZDialog now automatically highlights the first edit field of the dialog that contains one when shown.
New classes in 1.4:
ZProgress displays a progress dialog. It supports both "bar chart" and "barber-pole" progress
indicators, and can configure the dialog to have a "Cancel" or "Stop" button, or no button at all. It
automatically allows background processing and handles "Command-period" to abort the operation. You
can also set an appearance delay so that it is not shown if the procedure completes within a specified
time. The dialog follows the standard visual style for such dialogs in System 7.
MacZoop Release 1.3, August 29th, 1996
Changes since version 1.2:
Add dialog support. This involves a new class, ZDialog, and an enhanced ZEventHandler class.
ZCommander now handles keystroke events, rather than window directly.
Added classes ZGWorld, ZGWorldWindow.
Fixed gremlins in 1.2 release.
Added another project to show how ZGWorld, ZGWorldWindow and ZDialog are used.
Updated manual.
Tidied up some of the code- there is now not a single "goto" in the whole thing!
Note: If you are using CodeWarrior IDE 1.4 rather than 1.5 or 1.6, you may need to go into the preferences and turn on various C/C++ language options. This is a fault in CodeWarrior it would seem- earlier IDE's "forget" that C/C++ and Exception flags are supposed to be set.
Changes since version 1.1:
Added ZDragDropWindow class to support drag and drop.
Fixed various slip-ups in the code left over from testing.
Library version removed since this was causing unnecessary confusion.
Starter projects removed- make copies of the MacZappPPC.µ or MacZapp68K.µ instead-
its really easier this way.
Checked compatibility with CW9- it is, no problem.
Note:- to use the class ZDragDropWindow, simply base your window subclass on it instead of ZWindow. Note that windows derived from ZScroller now do this anyway. You must include "DragLib" in your project (supplied with CW) in order to link the project. You should make this
a weak import on PowerPC machines so that your application will still run if the drag manager is not present.
Changes since version 1.0:
Added 68K versions of the project and stationery for 68K project.
Changed Manual to Self-Reading (Envelope) format, since Word didn't work- just double-click the manual to read it.
Fixed minor problem in the supplied start-up code.