Current version : 0.8.0a3, information on previous
versions can be found here.
Release date : July, 16th 1997
General
- Whenever a <GetXYZ> method returned a value (such as
<OPView::GetBox> or <OPObject::GetRuntime>), it has been renamed into
<ReturnXYZ>. Only the functions returning results through reference should be named
<GetXYZ> (such as in <Bool OPView::GetWindow (OPWindowOut);>). This required
lots of changes in lots of files. I hope that I did not forget to change to much of these
functions/methods.
- Introduced the new <OPText> base class which is used
by <OPAtom> and <OPString>.
- The <OPFileRead> and <OPFileWrite> accept
strings as file names.
- The <OPArray> class supports gaps when storing and
restoring. This is used by the new <OPCyclicArray> class which introduces a modulo
wrapping to the index.
- When storing and restoring data, simple types are
automatically converted to <OPValue> instances and vice versa, whenever needed.
- The OP_PUBLISH_xxx macros also accept the <OPValue>
type.
- References have been enhanced in order to know if they are
embedded in other objects or not. Modifying an embedded reference will notify the
embedding object by calling <OPObject::ReportEmbeddedChange>.
- Changes reported through <OPObject::Report..Change>
support a unique ID scheme, thus providing a mechanism to avoid endless circular
notification loops.
- Multiple inheritance has finally been introduced into
OPaC. I regret to have to do this, since I would have preferred defining an interface to
which a class conforms (as in Java or in Objective C).
Current examples are classes <OPxTitleWidget> and <OPxSmartSource>.
- Bug in <OPAtom> fixed: the conversion from string to
atom did not copy the last character.
- New class <OPDataLog> which stores data of some
simple type into a linear or circular buffer. It uses class <OPxSmartSource>.
User Interface
- Optimised transparency drawing for icons. The slow
transparent mode is used only if the icon really contains transparent pixels.
<OPLookMan> has been enhanced in order to provide this information.
- Views marked with the <OP_VIEW_IS_FROZEN> flag won't
be redrawn by their super-view. Drawing has to be invoked manually. This provides a simple
mean for <OPCellGrid> and others to benefit from the automatic detection while
keeping a tight control of which views get redrawn.
- New class <OPTextTagBase> used as a base class for
<OPTextTag> and other similar classes.
- New class <OPLed7Display> is a specialised version
of <OPTextTag> used to display numerical values.
- Modified hierarchy of <OPDataView> class: it is now
based on the new <OPMonitorValue> class which does the low level data handling
(cache and refresh). The user can specify which <OPTextTagBase> derived class to use
for the drawing.
- New class <OPMonitorAnalogic> which displays an
analogic gauge.
- Added a <Kill> method for the <OPWindow>
class, allowing clean up by a simple action (e.g. connect a Dismiss button with
the <Kill> action).
- Modified <OPScrollListPane> in order to remove the
unused panes when the number of columns is being reduced.
- The mouse cursor is drawn properly when starting an OPaC
application.
- The <OPScrollList> flushes the cache of its
<OPDataView> instances before inquiring about their size. It also updates its
position if the scroller changes (without Scroll notification).
- Method <OPWindow::ShowNormal> does the necessary
<Open> and <Display>.
- New <OPToolTip> class.
- Additional icons (circular and square, red and green LEDs;
small plus and minus arrows). Here is a sample of a few LEDs (off, on and 50%) :

Win32 - specific
- Use transparent BitBlt (see article "Bitmaps with
Transparency" in "GDI and OpenGL Articles").
Known limitations and bugs
- Under Win32, <GetDeviceCaps> should be used with
<CAPS1> in <OPGrailPort> to determine if transparency using
<NEWTRANSPARENT> is supported. The header files I have do neither define
<CAPS1> nor <C1_TRANSPARENT>. I love Microsoft...
Work in progress
- Class <GrailPath> being defined and implemented.
This will handle complex path clipping and complex path stroking.