Current version : 1.0.0, information on
online version 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 ?