---------------------------------------------------------------------
---------- Zinc Application Framework 5.3 - WHATSNEW.TXT ------------
----------- COPYRIGHT (C) 1990-1999. All Rights Reserved. -----------
-------- Wind River Systems Incorporated. Alameda, CA, USA ----------
---------------------------------------------------------------------

This file lists the major additions and enhancements made to Zinc
Application Framework. These changes are separated into upgrade
groups (e.g., ZAF 5.21 to 5.3, ZAF 5.2 to 5.21, ZAF 5.1 to 5.2,
ZAF 4.2 to 5.0).

---------------------------------------------------------------------
--- ZAF 5.21 to 5.3 -------------------------------------------------
---------------------------------------------------------------------

ZAF 5.21 to 5.3 changes are grouped into the following sections:

    Zinc Designer improvements
    New messages
    ZafNotebook
    ZafStringEditor
	ZafWindowManager event routing
	Extraction and Merge utilities for .ZNC files
	ZafI18nReplacement object
	ZafRegisterMouse() changes

---------------------------------------------------------------------
--- Zinc Designer improvements --------------------------------------
---------------------------------------------------------------------

In addition to many bug fixes, Zinc Designer has received several new
improvements adding to its functionality, which include:

  * Code Generation: The Zinc Designer now gives the option to create
	the .hpp, .cpp, and .inc files.  The user has the ability to only
	generate the .inc file, by deselecting the Hpp and Cpp options.

  * String Editor: The Zinc Designer makes use of the ZafStringEditor,
	which was recently added to the library.  See the section on the
	ZafStringEditor for more information.

---------------------------------------------------------------------
--- New messages ----------------------------------------------------
---------------------------------------------------------------------

ZAF 5.3 brings new messages aimed at easing application development:

  * S_UPDATE_DATA		Causes the receiving object to update its
					internal data with that from the OS.

  * S_UPDATE_OBJECT	Causes the receiving object to update the OS
					with its internal data.

---------------------------------------------------------------------
---  ZafNotebook  ---------------------------------------------------
---------------------------------------------------------------------

ZafNotebook now allows tabs to be enabled/disabled using only the
desired page's StringID().  Previously, it was necessary to pass the
desired page's ListIndex() to PageDisabled() and SetPageDisabled().

bool PageDisabled(const ZafIChar *matchID);
virtual bool SetPageDisabled(const ZafIChar *matchID, bool disabled);

---------------------------------------------------------------------
---  ZafStringEditor  -----------------------------------------------
---------------------------------------------------------------------

ZafStringEditor is a string editor which can be used within any ZAF
application by instantiating it within the ZafApplication::Main().
It must be deleted before exiting ZafApplication::Main(), similar to
the ZafHelpSystem.  The string editor is invoked for any editable text
field (e.g., ZafString, ZafText, ZafUTime) by pressing the F12 key.
The string editor allows the end user to select any printable ISO or
Unicode character, with the latter only available when the application
is compiled for Unicode.  Any text changes made by the string editor
are propogated to the edit field when closing the string editor.

---------------------------------------------------------------------
---  ZafWindowManager event routing  --------------------------------
---------------------------------------------------------------------

ZafWindowManager::Event() has been modified in the way it routes
events.  Each event is now processed as follows:

    1. If event.route is not NULL, the event is sent to event.route.
       No further processing by the window manager.

	2. Otherwise, if MouseEventRoute() is set, the event is first sent
       to the mouseEventRoute.  If the return value is S_UNKNOWN, the
       window manager processes the event or passes it to the current
       window.  A return value other than S_UNKNOWN prevents further
       processing by the window manager.

	3. Otherwise, if DefaultEventRoute() is set, the event is first
       sent to the defaultEventRoute.  If the return value is
       S_UNKNOWN, the window manager processes the event or passes it
       to the current window.  A return value other than S_UNKNOWN
       prevents further processing by the window manager.

NOTE:  Any object set as either MouseEventRoute() or DefaultEventRoute()
       **must** return S_UNKNOWN if it does not process the event routed
       to it.  Otherwise, event processing will not work correctly.

---------------------------------------------------------------------
---  Extraction and Merge utilities for .ZNC files  -----------------
---------------------------------------------------------------------

String extraction and merge utilities have been added for use with
.ZNC files.  The extraction utility creates language tables for all
root windows stored in a .ZNC file.  The merge utility merges several
.ZNC files into a single .ZNC file.  These utilities must be built by
the ZAF user.  See both UTIL\EXTRACT and UTIL\ZNCMERGE for more
information about these utilities.

---------------------------------------------------------------------
---  ZafI18nReplacement object  -------------------------------------
---------------------------------------------------------------------

ZafI18nReplacement is a runtime object which will replace all text
in a root window using the window's associated language table created
by the extraction utility.  See the UTIL\EXTRACT\DEMO directory for
an example on how to use this object.

---------------------------------------------------------------------
---  Mouse Registration Changes  ------------------------------------
---------------------------------------------------------------------

ZafRegisterMouse(), previously in source\m_utils.?pp, has been renamed
as RegisterMouse() and moved to be a member of ZafWindowObject.  Its
parameter list no longer includes a pointer to a window object.  This
function is currently only used by Motif.  It is stubbed for all other
platforms.  See the online documentation for more information.

virtual bool RegisterMouse(bool view, bool leftMouse, bool rightMouse);


---------------------------------------------------------------------
--- ZAF 5.2 to 5.21 -------------------------------------------------
---------------------------------------------------------------------

ZAF 5.2 to 5.21 changes are grouped into the following sections:

    Miscellaneous

---------------------------------------------------------------------
---  Miscellaneous  -------------------------------------------------
---------------------------------------------------------------------

* Zmake renaming.  The 32 bit version has been renamed from
zmake32.exe to zmake.exe and the 16 bit version was renamed from
zmake.exe to zmake16.exe.


---------------------------------------------------------------------
--- ZAF 5.1 to 5.2 --------------------------------------------------
---------------------------------------------------------------------

ZAF 5.1 to 5.2 changes are grouped into the following sections:

    RTOS ports
    Universal Graphics Library (UGL)
    Standard Library Function Overloads
    ZafComboBox
    ZafNotebook
    ZafTable
    ZafTreeItem
    ZafUTimeData
    DOS look
    DOS source reorganization
    DOS support for Blinker 5
    Miscellaneous

---------------------------------------------------------------------
---  RTOS Ports  ----------------------------------------------------
---------------------------------------------------------------------

Zinc 5.2 has been ported to Wind River's VxWorks and Integrated
Systems' pSOS.  Zinc "Independent Version" source code (see "DOS
Source Reorganiztion") has been extensively updated to facilitate
other RTOS ports.  APIs have been added to ZafEventManager to handle
blocking for multitasking operating systems.  (These APIs are not
needed for desktop versions.)

---------------------------------------------------------------------
---  Universal Graphics Library (UGL)  ------------------------------
---------------------------------------------------------------------

A new low-level 2D graphics primitives and hardware driver library
has been introduced to support RTOS versions of Zinc 5.2.  This
code is not needed by desktop versions of Zinc and is not used by the
DOS version (which continues to support MetaWINDOW, a fast, more
flexible alternative for x86 processors only.)

---------------------------------------------------------------------
---  Standard Library Function Overloads  ---------------------------
---------------------------------------------------------------------

Zinc's standard library function overloads have been removed by
default when running in (normal) ISO character mode.  These overloads
may be reinstated by modifying the "#define"s for sprintf and scanf
in z_stdio.hpp.  When running in Unicode character mode, these
overloads are active by default.  As polymorphic functions the
standard library versions may be called by passing char to the
function instead of the wide character ZafIChar type.

ZafFormatData::[Set]Sprintf and [Set]Scanf were added for internal
use and help to complete this change.

---------------------------------------------------------------------
---  ZafComboBox  ---------------------------------------------------
---------------------------------------------------------------------

ZafComboBox now provides the ability to better control the size of
the drop-down list.  [Set]MaximumListHeight is the new API.  New
messages, N_OPEN_COMBO_LIST and N_CLOSE_COMBO_LIST were added to
provide hooks tied to the activity of the drop-down list.  Other
functionality was extended to provide greater flexibility, more hooks,
and generally improve the consistency of combo box APIs with other
Zinc objects.

---------------------------------------------------------------------
---   ZafNotebook  --------------------------------------------------
---------------------------------------------------------------------

ZafNotebook now allows tabs to be disabled.  The tab and the entire
notebook page are disabled.

---------------------------------------------------------------------
---   ZafTable  -----------------------------------------------------
---------------------------------------------------------------------

Because some initialization of records was not occurring with derived
tables, new functionality has been added.  Use SetReadRecordData()
and SetWriteRecordData() to associate an overloaded record read or
write function.  The library will be able to initalize the proper
data and still allow you to customize your read and write
functionality.

---------------------------------------------------------------------
---   ZafTreeItem  --------------------------------------------------
---------------------------------------------------------------------

ZafTreeItems now get mouse events, whereas mouse events previously
were processed at the ZafTree level.

ZafTreeItem::ViewNext(ZafTreeItem *start = 0)
ZafTreeItem::DepthNext(ZafTreeItem *start = 0)

These ZafTreeItem APIs now take a parameter, "start". Start should
point to the root of the traversal.  The traversal will terminate
when it returns to this item.  If no item is specified, the traversal
will continue until it reaches the end of the tree list.

---------------------------------------------------------------------
---   ZafTreeList  --------------------------------------------------
---------------------------------------------------------------------

[Set]FirstVisible()
LastVisible()

These APIs were added to provide additional flexibility and
optimization when controlling custom tree list drawing and
interpreting events.

---------------------------------------------------------------------
---   ZafUTimeData  -------------------------------------------------
---------------------------------------------------------------------

ZafUTimeData::Clear() now clears to Jan-1-1970, 12:00am.
A new API, ZafUTimeData::GetSystemTime() now retrieves the time from
the OS.  ZafTimeData and ZafDateData both inherit this functionality.
ResetDate() and ResetTime() APIs were added allowing the clearing of
portions of a ZafUTimeData.

Increment, Decrement and comparison operators were added and/or
enhanced in ZafUTimeData and derived classes.

---------------------------------------------------------------------
---  DOS look  ------------------------------------------------------
---------------------------------------------------------------------

The default look of DOS window decorations changed slightly for this
revision.  DOS now has a distinctly non-Windows look, but the same
functionality.  The default Windows style is still available in
source\intl\win95.

---------------------------------------------------------------------
---  DOS source reorganization  -------------------------------------
---------------------------------------------------------------------

The DOS source files have been split into independent files (I_*.*)
and DOS-specific files (D_*.*).  Zinc shared files (Z_*.*) are still
present as well and continue to contain code shared by all Zinc
platforms.  The new "I_*" files are shared by DOS and RTOS versions
of Zinc.  This change was made to reduce RTOS porting complexity.

A handful of new #defines were added to support modularization of
the Zinc libraries.  These enhancements are ongoing.

---------------------------------------------------------------------
---  DOS support for Blinker 5  -------------------------------------
---------------------------------------------------------------------

DOS now supports (non-certified) Blinker 5.0.

---------------------------------------------------------------------
---  Miscellaneous  -------------------------------------------------
---------------------------------------------------------------------

Zinc 5.2 is largely a maintenance update.  Many fixes and minor
improvements were made.  Some of the more notable minor changes
include:

* ZafWindowObject::[Set]StringData allows all objects to be treated
  similarly when directly accessing StringData.

* ZafWindow::AddGenericObjects(const ZafIChar *title,
    ZafWindowObject *minObject = ZAF_NULLP(ZafWindowObject)).  The
    first parameter is now const eliminating the need to create
    a new string data prior to calling this API.  NULL is returned
    for any object that does not have associated stringData.

* ZafMessageData now supports change notification for hotkeys.

* ZafDialogWindow::Control() is now virtual to allow derivation.

* ZafPrintSetupDialog::Control() is now virtual to allow derivation.

* ZafBitmapStruct and ZafIconStruct have been normalized to make
  user derivations more portable.

* ZafDisplay::AddFont(ZafLogicalFont index, char *fontFamily,
    int pointSize, ZafFontWeight weight = ZAF_FNT_WEIGHT_NORMAL,
    ZafFontSlant slant = ZAF_FNT_SLANT_NORMAL,
    ZafFontPitch pitch = ZAF_FNT_PITCH_DEFAULT)
    Pitch was added to allow greater specificity in the selection
    of native fonts.  ZafDisplay::FontInfo() was similarly enhanced.

* Memory leaks were plugged (many associated with ZafDataManager
  and ZafLanguageManager).  Windows GDI resource leaks were also
  fixed.


---------------------------------------------------------------------
--- ZAF 5.0 to 5.1 --------------------------------------------------
---------------------------------------------------------------------

ZAF 5.0 to 5.1 changes are grouped into the following sections:

    DOS Platform Module
    Zinc Designer improvements
    ZafSplitter object
    ZafPrinter object
    ZafDisplay changed
    ZafBitmap object
    Validation improved
    New messages
    Miscellaneous

---------------------------------------------------------------------
--- DOS Platform Module ---------------------------------------------
---------------------------------------------------------------------

Support for MS-DOS Graphics mode support has been added to ZAF 5.
ZAF utilizes MetaWINDOW display primitives as a low-level interface
to provide a Windows 95-style look & feel on DOS. Refer to the
README.DOS file for complete information on supported compilers,
extenders, etc.

---------------------------------------------------------------------
--- Zinc Designer improvements --------------------------------------
---------------------------------------------------------------------

In addition to hundreds of bug fixes, Zinc Designer has received
several new improvements adding to its functionality. The largest
of these improvements are:

  * Geometry Editor: The Geometry Editor allows ZafConstraints to be
    visually tied to window objects to provide run time support for
    dynamic user interfaces.
  * Language Editor (or message editor): The Language Editor allows
    sets of messages to be created in multiple languages. These
    messages may then be retrieved dynamically at run time to offer
    fully multilingual applications.
  * Locale Editing: The Property Sheet now allows editing of
    ZafLocaleData objects and the menu allows new locales to be
    created. This provides customizable formatting for all controls
    that can display dates, times, and numbers.
  * New object editors. All of the new objects added to ZAF 5.1 are
    supported by Zinc Designer, plus new options to ease the use of
    radio buttons and check boxes.
  * Saved window positions: Zinc Designer now "remembers" the position
    and size of all Zinc Designer windows. These are saved when
    Zinc Designer exits and are restored whenever the window is used
    again.

---------------------------------------------------------------------
--- ZafSplitter object ----------------------------------------------
---------------------------------------------------------------------

ZafSplitter provides a method for "splitting" a window into multiple,
sizable regions. This object can be used to create sophisticated yet
simple user interfaces. Each object occupying a "split region" is
automatically resized to take up the entire space in the region.
End users may dynamically size "split regions" by dragging a
ZafSplitter at run time. See the example programs in EXAMPLE\SPLIT.

---------------------------------------------------------------------
--- ZafPrinter object -----------------------------------------------
---------------------------------------------------------------------

ZafPrinter provides "display" primitives to be used when sending
output to a printer. In addition to the primitives available in
ZafDisplay, ZafPrinter implements printer-specific functionality
aimed at easing the code associated with report layout. Any native
printer is supported on environments with native printing
functionality. PostScript Level 2 printers are supported on other
environments.

---------------------------------------------------------------------
--- ZafDisplay changed ----------------------------------------------
---------------------------------------------------------------------

To fully support the current and future needs of heterogeneous
displays, the implementation of ZafDisplay has changed slightly.
ZafDisplay is now an abstract base class from which ZafScreenDisplay
and ZafPrinter are derived. Other displays may be provided in the
future. A new typedef, ZafCoordinate, has also been added to
ZafDisplay providing coordinate system independence at the display
level. Most ZAF customers will be unaffected by these changes.

---------------------------------------------------------------------
--- ZafBitmap object ------------------------------------------------
---------------------------------------------------------------------

To allow ZafBitmapData objects to be displayed without the overhead
of ZafIcon, ZafBitmap was created. This simple class displays any
ZafBitmap data as a decoration. As a ZafWindowObject, ZafBitmap data
can receive most end user events including mouse clicks.

---------------------------------------------------------------------
--- Validation improved ---------------------------------------------
---------------------------------------------------------------------

Validation capabilties in ZAF 5.1 are dramatically improved.
Validation is now faster, "smarter", and more easily configurable for
custom applications. Any object derived from ZafString can take
advantage of automatic field-level validation. An error message may
optionally be displayed, and invalid input may be allowed or
prohibited. For more information, refer to documentation for
ZafWindowObject::Range(), Invalid(), Unanswered(), and
DefaultValidateFunction() and new ZafString members AllowInvalid()
and ReportInvalid().

---------------------------------------------------------------------
--- New messages ----------------------------------------------------
---------------------------------------------------------------------

ZAF 5.1 brings new messages aimed at easing application development:

  * N_CURRENT      event.windowObject now points at the "other"
    N_NON_CURRENT  object involved in the focus change operation.
                   For example, when N_NON_CURRENT is received
                   (indicating an object is losing focus) the event.
                   windowObject will point at the object *gaining*
                   focus.
  * S_SET_FOCUS    event.WindowObject points at the object to receive
                   focus. Handled by the Window Manager.
  * S_VALID_CHECK  Returns the "valid" status of any object regardless
                   of the object's built-in validation support.
  * S_CLOSE        S_CLOSE may now "officiallly" be sent to any window
                   to cause it to close. The message is still handled
                   by the Window Manager, but a window can repackage
                   the event and dispatch it properly. When a window
                   repackages the event it uses a useful trick: setting
                   event.windowObject to a window will cause the event
                   manager to close that window.

---------------------------------------------------------------------
--- Miscellaneous ---------------------------------------------------
---------------------------------------------------------------------

Many more changes were made for version 5.1:
  * Several additional constructors were added to existing objects
    for convenience. ZafIcon and ZafMessageWindow are among the
    recipients.
  * ZafInteger and ZafReal now have IValue() members and ZafBignum
    also has an RValue() member to ease access to the data used
    by these objects.
  * New icons give a more polished look to ZAF applications and
    MS Windows apps use the native icons.
  * ZafList::Count() was modified to avoid redundant counting of
    elements.
  * The defined behavior for ViewOnly() combo boxes was changed.
    SetText() is only allowed for editable combo boxes while
    item->SetSelected() may be used for any combo box. Both change
    the value of comboBox->Text().
  * Additional, new example programs are provided.
  * New coordinate systems are supported including ZAF_INCH_1000
    (1/1000 of an inch) and ZAF_MILLIMETER_10 (1/10 of a millimeter.)
    These add to existing cell, minicell, pixel, point, and twip
    coordinate systems.





---------------------------------------------------------------------
--- ZAF 4.2 to 5.0 --------------------------------------------------
---------------------------------------------------------------------

ZAF 4.2 to 5.0 changes are grouped into the following sections:

    Faster
    Better Looking
    Easier to Program
    New Objects
    Improved Objects
    New Visual Designer
    Even Better Portability
    Data Manager and New Data Types Library
    New Storage and Persistence
    Windows 32-bit DLL's and Unix Shared Libraries
    Sophisticated Library Test Suite

---------------------------------------------------------------------
--- Faster ----------------------------------------------------------
---------------------------------------------------------------------

You'll see dramatic improvements on all platforms. In fact,
application performance is indistinguishable from native applications
on the same platforms. Performance in Unicode mode is now identical
to ISO mode. Storage is faster. And that's just the beginning!

---------------------------------------------------------------------
--- Better Looking --------------------------------------------------
---------------------------------------------------------------------

Now the only way to visually distinguish a ZAF application from other
native applications is ZAF's extended functionality. Look and feel
are now updated and include the latest popular user interface
objects.

---------------------------------------------------------------------
--- Easier to Program -----------------------------------------------
---------------------------------------------------------------------

ZAF's API has been modernized and now feels more familiar to
programmers using other major C++ APIs. Some examples: ZAF now uses
attributes instead of flags (e.g. SetDisabled(), SetFont()), which
dramatically reduces code complexity. Classes have been renamed to be
more intuitive, and UPPER_CASE class names have been replaced with
NameCase. Fonts and colors can be easily changed--and much, much
more. In short, programming fully portable applications with ZAF is
now easier than programming with most native C++ tools!

---------------------------------------------------------------------
--- New Objects -----------------------------------------------------
---------------------------------------------------------------------

Important additions include Tree, Chart, Progress Bar, Tool tips, and
Help tips--to name a few.

---------------------------------------------------------------------
--- Improved Objects ------------------------------------------------
---------------------------------------------------------------------

We've worked to make our existing objects faster, more feature rich,
and easier to use. Every object has been updated. Noteworthy
improvements include Table (rewritten to be extremely fast and easy
to use), Notebook (scrolling tabs for notebooks with many pages),
Scrolling window and MDI window (now separate classes, more robust),
Toolbar (dockable on all sides of a window), and many more.

---------------------------------------------------------------------
--- New Visual Designer ---------------------------------------------
---------------------------------------------------------------------

Possibly the first improvement you'll notice in ZAF is the new Zinc
Designer. The new user interface is intuitive, using trees and
property sheets. The architecture is open, and easy to extend. Zinc
Designer now generates real code, as well as DAT files. "Edit mode"
is now a run-time attribute that may be easily exploited by
programmers.

---------------------------------------------------------------------
--- Even Better Portability -----------------------------------------
---------------------------------------------------------------------

Zinc has long been recognized as the leader in portability, but we're
always trying to build on this legacy. ZAF has once again set a new
standard. As an example, messages and functions are more rigidly
defined, for identical implementation across platforms. Complete
message definitions are well documented. With ZAF, you won't need to
"tweak" the code you port from platform to platform.

---------------------------------------------------------------------
--- Data Manager and New Data Types Library -------------------------
---------------------------------------------------------------------

This is one of the most exciting aspects of ZAF. The Data Manager
automatically allocates and frees user data, notifies different users
of the data whenever changes occur, independently persists data, and
allows "named data" for easy sharing--even in Zinc Designer! Using
Static Data() (previously NO_ALLOCATE_DATA) is the rule rather than
the exception--eliminating much of the code required to access user
interface data! This makes ZAF ideal for data-driven applications.

---------------------------------------------------------------------
--- New Storage and Persistence -------------------------------------
---------------------------------------------------------------------

ZAF now allows individual objects (including data objects) to be read
and written. For example, an individual button or list element could
be read without needing to read an entire window. Zinc Designer
exploits this new persistence and allows you to "see" inside DAT
files. Storage uses a faster, smaller flat file instead of the 4.x
file system. A complete 4.x to 5.x DAT file converter is provided.

---------------------------------------------------------------------
--- Windows 32 Bit DLL's and Unix Shared Libraries ------------------
---------------------------------------------------------------------

You don't need to statically link your libraries into every
executable.

---------------------------------------------------------------------
--- Advanced Charting Features --------------------------------------
---------------------------------------------------------------------

ZAF will include ChartFolio. DPC Technologies, a leading expert in 3D
charting and graphing technology, is bringing its capabilities to the
portable GUI market by adding a new object to ZAF 5, and by
supporting ZAF with its high-end charting tool add-ons.

---------------------------------------------------------------------
--- Sophisticated Library Test Suite --------------------------------
---------------------------------------------------------------------

In addition to example and tutorial applications, Zinc now supplies a
robust library test suite, capable of testing almost every line of
code in the user interface objects. You will now be able to
thoroughly test you own objects. (In preparing ZAF for beta, we used
this test suite to assure robustness.) Plus, when working with
technical support, it will now be much easier to reproduce problems
and enhancement requests without the need for tedious "bug
identification" programs.
