Current version : 1.0.0, information on previous
versions can be found here.
Release date : February, 13th 1998
General
Changed the <Init> and <Initialize> methods to
<Initialise> everywhere in the project to increase the source consistency.
Class <xxxRef::ReturnRuntime> is no longer implemented
as a static inline function, since this lead to linking problems with the release build on
Win32 platforms (with Visual C++ 5.0).
Slight modifications with the runtime description of classes
(every access now uses the <xxxRef::ReturnRuntime> method instead of accessing a
private static variable).
The storage format has been modified so that it is much more
compact than before (often 32-bit values can be replaced by 8-bit values). Atoms are now
saved in an optimised way (the text is saved only once).
Furthermore, synchronisation marks are stored in the stream, which allow for the addition
of fields to saved objects, without having to handle some complex versioning. These marks
are named <OPStorageSync::mark>.
The Grail Pixmap uses an internal cache when retreiving
pixels line by line, which will speed up the pixel accesses on platforms such as X11. The
cache has to be enabled explicitely with <EnableCache>. This is done by default by
the GIF Loader routine.
The <OPRuntime> class has been extended to also
support the <IsA> and <IsKindOf> methods.
The <OPObject> class has been extended with a new
<GetPublicData> method, in order to access more information on the available fields.
The <OPObject> and <OPRuntime> classes have been
extended to provide info on which events are fired when a field changes. A macro
OP_NOTIFY_CHANGE collects the information returned by
<OPObject::GetPublicDataNotifier>.
When an object is being destroyed, it won't be re-destroyed
a second time if it is referenced and dereferenced while its destructors are being run.
When reporting messages with <OPObject::Report>, it is
now admitted that the observing object deletes itself. This won't break the linked list of
observers anymore.
Macro <OP_NOTIFY_EVENT> now produces correct results
even with GNU gcc. The constructor of class <OPaC_NotifyExport> had a flaw.
The <OPRect> class now supports a <MoveOrigin>
method.
The <OPArray> objects can now be null when
storing/restoring.
The <OPCarbonCopy> class now works also with larger
amounts of data.
The <OPDataReport> class has been extended in order to
provide information about user edition visibility.
New low-level class <OPaC_FileDir> used to browse
directories.
New <OPTime> class used to represent date and time
with a millisecond resolution and a large enough time span to avoid problems. The absolute
time has a zero defined to be 15 October 1582, date when the Gregorian calendar came into
effect.
User Interface
Fixed bug related with the use of user defined icons.
New icons for submenus and pull-down have been added. Large
icons (cube, trashcan, left/right arrows, etc.) have been added for the editor. A small
close button has been added too.
Modified the <OPCellGrid> class so that the creation
of a menu becomes easier. It is possible to let the cell grid compute its size based on
the geometry of its cells.
The <OPCellGrid> class now supports cells of different
sizes (known as a non isometric grid). Methods <InsertCellInColumn> and
<InsertCellInLine> allow the extension of an existing cell grid in both directions.
Icons are stored by their name rather than by their
<OPLookIcon> type.
Buttons are now pressed whatever their size. The
<GetMinSize> method now takes into account the offset of the pressed state. The
buttons might be drawn one point larger than before to take into account this offset.
When restoring an active view, it becomes active back again.
This was not handled properly (the view was displayed as being active, but the window did
not forward the events accordingly).
A new method has been added to the class <OPView> in
order to handle the drag & drop and connections of objects: <DragAndDrop>. It is
also used to find out about the real objects hidden behind object pane elements.
The <OPWindow> and <OPView> classes have been
extended in order to support overlay drawing. This is used to draw additional graphic over
an already drawn window (such as a box around a connection target).
The <OPDragView> class has been modified in order to
interact with views that conform to the drag & drop interface (this was needed to
build the so-called wells (color well, icon well, etc.) for the interface builder.
A new method <OPView::ChildChangedSize> has been
added. It is called by the children when they have been resized so that the parent can
resize in turn (useful mainly for the dynamic edition).
The <OPBoxView> widgets can now be drawn without a
frame or a title.
The <OPCellGrid> widgets can now be drawn without a
border.
The <OPTextLine> class does no longer modify the
clipping region in an invalid way (that is, the region can only shrink; it won't grow any
more).
The class <OPScrollList> has been removed and replaced
by a more general
<OPScrollGrid> class.
A new <OPSelGrid> class extends the simple
<OPCellGrid> with a selection mechanism (selection of single or multiple cells). It
also allows cells to be dragged to another position within the grid.
The <OPControl> objects can now specify a user defined
minimum size. The properties of the <OPControl> class are now available to dynamic
edition. The new <OP_CTRL_NOTACTENTER> shape attribute is used by <OPScroller>
in
order to stay inactive when the user enters the scroller with a pressed button (won't
hilite the scroller).
A few properties of the <OPView> class are now also
available to dynamic edition.
The <OPIcon> view now accepts to be drawn at sizes
larger than that of the represented icon (this is useful for centering an icon in a view).
The class <OPMenu> provides support for pop-up,
pull-down and submenus.
The class <OPSelView> has been modified in order to
handle the drag and drop protocol to gets its object information.
A new class <OPObjectPane> provides a simple way to
represent a collection of elements as a list or like a browser. Associated provider
classes provide (!) the information shown in the object pane.
A new class <OPDBScrollList> represents data stored in
a data base as a scroll list.
Win32
Mouse events get posted to the proper window and the system
automatically changes the capture thanks to <HandOverToWindow> when the mouse moves
from one window to another.
The proper shape is always selected for the mouse cursor.
Linux
First release of the Linux source tree. Still buggy ?