				YACL Change Log

Oct 7, 1994:
        Added the "wait" UI demo
        Modified the "window" UI demo to include "Move" button
        Fixed bugs in window moving and title modification methods
        (visualob.cxx and composit.cxx) in both X and MS Windows versions

        Fixed bug in UI_Application::ScreenRect (X version)

        Modified the Dialog protocol a little, so that it can now
        cater to modal, modeless and pinnable dialogs 
        
Oct 9, 1994:
        Finished standard question dialogs (X version)
        Added the "stddlg" UI demo
        Fixed a bug in stred.cxx relating to setting text values by program


Oct 11, 1994:
        Fixed a bug in cntroler.cxx that was causing mouse move events
        to not be dispatched under Windows.
        

Oct 12, 1994:
        Removed style parameters from ViewDescriptor to make it
        portable. Tweaked basicops.h to compile under cfront.
        
Oct 16, 94:
        Added MakeVisible, MakeInvisible, Enable and Disable methods
        to Composite. Modified the Dynamic Dialog demo so that
        Composites are hidden rather than destroyed.
        

Oct 24, 1994:
        The DisplaySurface graphics facilities now work under
        X/Motif. (Thanks, Ram!)
        
Oct 25, 1994:
        Made the standard dialogs truly modal under X/Motif.
        
        Fixed the Timer class and the clock demo; these now work under
        both Windows and X/Motif.
        
        Changed menus to use gadgets under X/Motif.
        
Oct 27, 1994:
        Fixed the awk script tools/translat.awk to generate correct
        output, accounting for button groups.

        Added support for separators in the Menu class.
        

Oct 29, 1994:
        Found a bug that was causing Event_Select to be sent too early
        from buttons, so that parent composites could not respond
        correctly (under Windows). Fixed this bug.

        Added the Graphic, LineSegment and Ellipse classes.
        Worked on the graphics editor demo.
        

Nov 1, 1994:
        Fixed the repainting problem with ButtonGroups under Windows
        by subclassing the groupbox.
        
Nov 2, 1994:
        Modified the Date constructor to take short instead of
        MonthEnum, to prevent conflicts with the constructor that
        takes a String as month name. The latter now takes const
        char*. This fixes problems with the remind demos.
        

Nov 8, 1994:
       Added the little textedit demo.
       

Nov 14, 1994:
       Added methods TextStyle and SetTextStyle to the Label class.

Nov 15, 1994:
       String::AssignWithFormat now works correctly without relying on
       sprintf's return value.

Nov 16, 1994:
       Fixed two bugs in VisualObject. One had to do with
       Enable/Disable immediately after construction, and the other
       with accessing the Composite's children via the [] operator
       immediately after construction. (Thanks to Dan Gage and Rajesh
       Chandran for pointing out these bugs.)
       
       
Nov 17, 1994:
       Added _PrivateInitialize and _PrivateFinalize methods to
       VisualObject. This obviates the need to rely on
       Parent::Initialize calls in overriding Initialize methods of the
       application's classes.

       Fixed a bug in the X version that was causing incorrect shape
       rectangle values on ConfigureNotify. There is now only one
       Reconfigure method instead of the two Resize and Move methods.
       

Nov 22, 1994:
       Added OrButtonGroup and ExOrButtonGroup classes. Tested their
       Selection methods.

       Added the -Vf option for Borland compiles.


Nov 24, 1994:
       Added separate classes StringViewSingleSel and
       StringViewMultiSel. Made StringView an abstract class.

       Fixed a bug (under Windows) that was causing the cursor to fail to
       change shape at the top and left borders of the main window.
       
       Added the HideBorder and ShowBorder methods to VisualObject.
       These only work immediately after construction, not on the fly. 

Nov 27, 1994:
       Added the calculator demo, and the RowMajor method to
       UI_Rectangle.
       
Dec 2, 1994:
       Added the environ demo.

       
Dec 4, 1994:
       Added overriding methods to UI_StringSequence to account for
       methods (e.g., assignment op) that modify CL_StringSequence.
       

Dec 15, 1994:
       The Windows version now uses CTL3D everywhere.
       

Jan 15, 1995:
       DisplaySurface::InvertRectangle now works correctly under X
       windows!
       
Jan 19, 1995:
       Added the PrintJob class. This is only available under
       MS-Windows.
       

Jan 25, 1995:
       DisplaySurface::InvertRectangle now is more efficient under X,
       thanks to Rajesh Chandran. The BigStringView demo now works
       under X as well.
       
Jan 28, 1995:
       Reverted CompositeVObject to use registered window class under
       Windows. Dialogs still use Ctl3d, but they are no longer
       resizable. This obviates the CTL3D bug related to resizable
       dialogs (the system menu shows below and right of where
       it should).

Feb 3, 1995:
       About half the GUI demos now work under OS/2.
       
Feb 5, 1995:
       Removed support for idle actions and restructured the
       controller event loop. This makes the apps take a lot less CPU
       time.

------------------------ CHANGES IN VERSION 1.2 -------------------------

Feb 20, 1995:
       Added support for the Arc, Chord and PieWedge objects by
       incorporating Ram Sampath's code.
       
Feb 23, 1995:
       Added rudimentary support for combo boxes under Windows and
       OS/2.

Mar 15, 95:
       Fixed the tabbing sequence problems for resource-based dialogs
       under MS-Windows.



------------------------- CHANGES IN VERSION 1.21 ------------------------

Mar 20, 95:
       Added the hit_test demo.
       
April 6, 1995:
       Added support for the PrintJob class under OS/2.
       CL_Object and UI_VisualObject are now abstract classes, because
       their destructors are pure virtual.
              
April 9, 1995:
       Modified the Borland makefiles to speed up compiles
       considerably. Worked a little on building DLL versions. DLL's
       aren't yet supported, though. I'll do it as soon as I figure
       out how to do C++ DLL's with static objects.
       
       
April 17, 1995:
      Restructured the Binding classes. They are now more type-safe.
      Also added the EventBinding classes (ui/evtbind.h) and made
      VisualObject's EventDependent methods require
      AbstractEventBinding instances. Again, this makes it more type-safe.
      
May 5, 1995:
      Fixed a bug that was causing a submenu arrow to appear on a
      separator under OS/2. [Thanks to Tony Ton, t.t.ton@massey.ac.nz,
      for the bug report.]
      
May 6, 1995:
      Fixed a bug that was causing a crash under OS/2 when a popup
      menu loses focus.

      Added the popmenu1 and resource demos. YACL now supports menu
      resources under Windows.
       
May 13, 1995:
      Fixed a bug in OS/2 listboxes that was causing multiple
      consecutive selections to not be updated correctly.
      Got Composite::SetMinSize methods to work on all three
      platforms. The Color demo shows this.
      
May 14, 1995:
      Fixed a bug in the DiskBTree class that was showing up only on
      big-endian machines. Thanks to Rajesh Chandran for pointing it
      out.
      
May 23, 1995:
      Fixed bugs under OS/2: MakeVisible/Invisible on Composites now
      works ok. Can also set fonts of menu bars under OS/2. (But see
      quirks.txt.) Thanks to Holger Pfaff (holger.pfaff@mch.scn.de)
      for the bug report.
      
May 29, 1995:
      Fixed a bug in TimeOfDay. Thanks to Holger Pfaff
      (holger.pfaff@mch.scn.de).

--------------------- CHANGES IN RELEASE 1.3 -----------------------
          
June 6, 1995:
      Added fix in VisualObject::_Init to check that only one root
      window can be created. 

June 7, 1995:
      Fixed a bug in the OS/2 version: pid was uninitialized in
      UI_Application. I now use DosGetInfoBlocks for this.
      
June 21, 1995:
      Cleaned up the Graphic Object classes by adding the MoveTo method,
      default and copy constructors and assignment operators. Made virtual all
      methods on the GraphicObject derived classes that modify the object.
      
June 22, 1995:
      Fixed a bug in mainprog.cxx under Windows that was causing the
      argv values to be incorrect. Thanks to Holger Pfaff for the bug
      report.
      
June 23, 1995:
      Fixed a bug that was causing arrow key presses under Windows to cause
      the calc application to crash. The fix involved moving the subclassing
      code for the ToggleButton and ExOrToggleButton code into winevt.cxx.
      Thanks to Brian King (kingb@mitel.com) for the bug report.
      
June 26, 1995:
      Fixed several bugs, all thanks to Holger Pfaff's reports:
        (1) under Windows, that prevented creation of
            multiple timers;
        (2) under Motif, fixed problems with dynamic creation of menu
            items.
        (3) under Motif, changed marginWidth of most objects (except
            button groups) to 0. This gives finer control over child
            placement.
        (4) Under Motif, fixed problems with control visibility of
            non-sticky non-root Composites.
        
      Also, it is no longer necessary that the parameter
      MenuItemDescriptor array to the MenuBar or MenuItem constructor
      should contain at least one item; i.e.,  this parameter can now
      be NULL, or point to an array with just 
      one entry that has a NULL label.
      
June 28, 1995:
      Added operator() to the Sequence class, which gives the subscript
      operation without bounds checking. Modified the Tree, Map and Set
      classes to use this operator. This improves efficiency greatly.
      
July 3-6, 1995:
      Added support for Watcom C++. Tested under Windows and OS/2.

      Fixed the problem with initial directories in the StandardDialog
      function. Thanks to Tony T. Ton (t.t.ton@massey.ac.nz) for the bug
      fix.
      
July 8, 1995:
      Fixed the EMX makefiles so that the MemoryLeakChecker can be used with
      EMX. This also needed a bug fix in MemoryLeakChecker. Thanks to Tony
      T. Ton (t.t.ton@massey.ac.nz) for the makefile fixes.

July 11, 1995:
      Added rudimentary internationalization support to the Date class.
      Thanks to Holger Pfaff for the suggestions.
      
July 12, 1995:
      Found a rather serious bug relating to ObjectSet and its use in
      ClientSet. Changed ObjectSet to use linear search instead of binary
      search. The bug had to do with bindings not being found by the search
      even though they were there, because addresses were being used for
      ordering comparisons.
      
July 15, 1995:
      Had to put some ugly hacks into the font enumeration code (in
      ui/font.cxx) to get it to work under Watcom C++ under Windows.

July 16, 1995:
      Added an optional parameter to the CL_BinaryFile constructor to allow
      for read-only files.
            
July 17, 1995:
      The wait demo used to crash if the user shut down the main window (say
      via double-click) while the wait dialog was in progress. I now enforce
      a restriction to prevent this: a CloseDown event on a VisualObject v
      will refuse to close down v if there is some event action currently
      taking place on one of v's descendants. The code for this modification
      is primarily in VisualObject::CloseDown. This makes it all the more
      important that if you override one of VisualObject's event handling
      methods (e.g., CloseDown) you must call the parent class' method in
      your overriding method.
      
July 19, 1995:
      Had to rename two methods because of too much confusion. There are now
      no ClientArea() and Area() methods on VisualObject. Instead, there is
      a Shape() method on VisualObject and a WindowShape() method on
      CompositeVObject.

July 21, 1995:
      Modified the operator== for all bindings to check only for object
      pointer equality, not for method pointer equality as was previously
      the case. With this new setup, an object A can only register itself as
      a dependent on object B based on its own identity. Previously, object
      A could register itself as dependent on B multiple times, with
      different method pointers each time. I put in the new restriction
      because of what seems like a compiler dependence. This restriction
      seems reasonable, though, and doesn't affect any of the demos.
      
      
July 23, 1995:
      Added the demo program uidemo/sharemdl to illustrate how to share a
      model between multiple StringViews.

---------------------- JULY 27, 1995: Version 1.3 released -------------


July 28, 1995:
      Fixed CL_Set<T> so that it uses a CL_GenericSequence as representation
      instead of a CL_Sequence<T>. This removes the dependence of the CL_Set<T>
      implementation on the CL_Sequence<T>. This should help with compiling
      YACL on cfront-based compilers. Also removed the ability to assign a
      Sequence to a Set.
      
July 30, 1995:
      Modified VisualObject::Paint to take a single parameter, which is the
      invalid rectangle to be painted. This is a major change, and affects
      all graphics-oriented programs.
      
      
Aug 4, 1995:
      Added the bitmap0 demo and tested it on all three platforms. Under
      Microsoft Windows, Bitmap now uses the MSDN DIBAPI routines.
      

Aug 5, 1995:
      Fixed two Motif-related problems, both thanks to reports by Holger
      Pfaff:
          (1) A change in the Font() of a CompositeVObject was not
          propagating to menu items that were leaves in the menu tree. It
          turned out to be because they were not being Initialize()'d.

          (2) Motif has a "feature" that if you change the XmNfontList
          attribute of a XmText widget, it also changes its shape. This
          affects StringEditor and TextEditor. This problem also exists with
          XmScrolledList, affecting StringViews. Added workarounds to fix
          these.
          
Aug 8-10, 1995:
      Added the editors demo and the corresponding methods necessary for
      StringEditor. These don't yet work under OS/2. These derived
      classes will likely be folded into the ui directory soon.


Aug 18, 95:
      Made CL_AbstractComparator's destructor virtual. Added the code
      in basedemo/containr to illustrate instantiation of YACL container
      templates.

Aug 19-20, 1995:
      Fixed up the Editors demo. It now works correctly on all three
      platforms, as do the three classes derived from StringEditor.
      

Aug 21, 1995:
      Fixed an OS/2-specific bug in the Menu class. The bug was that menu
      items that are children of a menu bar could not be created dynamically.
      Thanks to T.T.Ton for the bug report. The menu0 demo is now modified
      to test this feature: there are two new menu items "Add times" and
      "Remove times" in it.
      
Aug 28, 1995:
      Added check for WM_SETFOCUS to os2evt.cxx. (Thanks to T. T. Ton)

Aug 29, 1995:
      Fixed the problem with ComboBox under OS/2. This used to cause
      the ComboBox drop-down list close up when the mouse button was
      released. Also fixed a related bug connected to tab sequences under
      Windows and OS/2. Thanks to T. T. Ton for suggesting this line
      of investigation.

Aug 31, 1995:
      Fixed a bug in the Controller: VisualObjects with zero handles were
      not being removed from the visualObjMap when the vObj was destroyed.
      Thanks to Holger Pfaff for the bug report.
      
September 1-3, 1995:
      Fixed up Composite's methods ShowBorder, HideBorder, ShowTitleBar and
      HideTitleBar to work under on three platforms if called before the
      Composite is displayed (see quirks.txt for details). These methods
      probably will also work under OS/2 and Windows, but probably not under
      X, if called after the Composite is created. Also added the borders
      demo.

Sept 4, 95:
      Fixed a buglet in Set::MakeEmpty. Thanks to Holger Pfaff for the
      bug report.

Sept 7, 1995:
      Fixed a Motif-specific bug that was causing crashes in menu
      programs. The bug was that "destroyed" menu items weren't really
      being destroyed.
      
      Also changed the Motif version to work properly with menu bars. The
      CompositeVObject now uses a XmMainWindow widget if it is non-sticky,
      and a XmBulletinBoard otherwise. This ensures that the menu
      bar spans the width of the CompositeVObject. But see quirks.txt
      for some consequences of this.

Sept 8, 1995:
      Fixed some drawing-related OS/2-specific bugs. Thanks to Adam Megacz
      (kalessin@netcom.com) for the bug report.
      Also added the ShadowRectangle class and modified uidemo/graphic2 to
      demonstrate its use.
      
Sept 12, 1995:
      Incorporated changes to try to make YACL compile under GNU C++ 2.7.0.
      Thanks to Sangjin Han (truejaws@nuri.net), who provided many of
      the patches. YACL still does not compile completely under 2.7.0
      -- the compiler crashes with an internal compiler error.
      
Sept 15, 1995:
      Added the ShadowedLine class and cleaned up MonthCalendar. The
      calendar demo now looks much better.

Sept 18, 1995:
      Discovered and fixed an OS/2-specific bug in the Bitmap-drawing code.
      
Sept 20, 1995:
      Made Event's _nativeEvent protected, and added a NativeEvent() method
      to retrieve it. This is a step toward deriving type-specific event
      classes and making all the Event data members protected.

Sept 22, 1995:
      Added the BitmapButton, BitmapPushButton and BitmapToggleButton
      classes and the bmpbtns demo. See quirks.txt.

Sept 23, 1995:
      Added the RemoveSeparator() method to UI_Menu.

Sep 24, 1995:
      The BitmapButton class and derived classes have now been tested under
      all three platforms. See the readme file in udemo/bmpbtns.

Sept 27, 1995:
      Fixed an OS/2-specific bug relating to disabled submenus. When
      initially disabled and re-enabled, the submenu was only accessible by
      keyboard, not by mouse. Thanks to T.T.Ton for the bug report.
      
Oct 6, 1995:
      Fixed a Motif-specific bug: Added a dummy work area widget as
      child of the MainWindow in the case where the CompositeVObject
      has a menu bar. This is a workaround to prevent the first-added
      child of the composite to resize to the whole window. Thanks to
      Holger Pfaff for the bug report.

October 10, 1995:
      Added an ErrorString method to UI_Application.

      
October 13, 1995:
      Finished a preliminary port to Windows NT. Tested using Borland and
      Watcom C++.

      Added the method CL_String::Delete to delete substrings more
      efficiently than via substring extraction.

October 17, 1995:
      Added the methods SaveState and RestoreState to UI_DrawingSurface.
      

October 20, 1995:
      Fixed a bug that was causing controls to be painted multiple times on
      initialization under Windows and OS/2. Dialogs should show up a little
      faster now.

October 25, 1995:
      Provided overrides for SetFont and _FontChanged in the MenuItem
      and Menu classes. The overriding methods  do nothing; so it is
      no longer possible to change menu fonts. Had to do this because
      of an OS/2 problem reported by Fredrik Ax
      (dat93fax@ludat.lth.se). OS/2 seems to misbehave if you attempt
      to change a menu bar's font while responding to the WM_PAINT of
      its parent window.

Nov 9, 1995:
      Incorporated Holger Pfaff's fixes (thanks a bunch, Holger!):
          -  Support for ComboBox under Motif, using Harald Albrecht's
             combobox widget (this is still experimental, however)

          -  Fixes in composit.cxx to make menus work right. The menu bar
             now correctly extends across the top of the window.

Nov 10, 1995:
      Made YACL applications compatible with editres under X. You can
      now see the widget tree under X using the editres application.
      
Nov 12, 1995:
      Changed the ComboBox protocol constructor slightly, so it is now
      possible to explicitly specify the heights of both the edit and
      list boxes.

      Fixed the VisualObject::Paint method so that, under OS/2 and Windows,
      the default implementation paints the window with the user-selected
      background color (as determined by the Background() method). If the
      Background() method is never called, the window is painted with the
      system-default window color (as set by the control panel under
      Windows, or the color chooser under OS/2).
      
Nov 13, 1995:
      Fixed a rather insidious bug in string.cxx, replacing
          delete _string;
      with
          delete [] _string;
      in three places. Thanks to Eberhard Mattes
      (mattes@azu.informatik.uni-stuttgart.de) for the bug report. This led
      to fixing several related bugs. The result is that the leak checker
      now works correctly with all compilers.
      
      
Nov 15-16, 1995:
      Incorporated the changes contributed by Tom Satter
      (tsatter@purecode.com) for supporting IBM Visual Age C++.
      Thanks, Tom!
      
----------------------- Nov 18: VERSION 1.40 RELEASED ---------------------


----------------------- Nov 21: VERSION 1.41 RELEASED ------------------


(The only difference between versions 1.40 and 1.41 was that the
distribution in  v.1.40 missed the MS Visual C++ makefiles; these were
included in 1.41.)

Nov 21, 1995:
      Added OS/2 EMX-specific switches to the make file and header file to
      remove warnings about unsigned chars, as well as several linker
      switches to significantly reduce executable sizes of the GUI demos.
      Thanks to Martin Conlon (mconlon@mae.carleton.ca) for contributing
      these patches.


Nov 22, 1995:
      Incorporated Holger Pfaff's X-Motif fixes to strview.cxx to remove the
      need for the frame around the list box. (By now I've stopped saying
      thanks to him :-) he's already contributed lots!)
      
Nov 25, 1995:
      Added support for checked menu items under OS/2, Windows and Win32.
      Made all data members of UI_Event protected, and added access methods
      for them. This is an effort to clean up the YACL event structure.

      Began work on the dialog editor.      


Nov 26, 1995:
      Added a View_ComboBox type to the ViewType enumeration (viewdesc.h).
      Added overrides for operators +, -, * and ^ into ObjectSet. Without
      these, ObjectSet does not function correctly.

      Added the default push button capability for Dialogs.
      
      Added support for checked menu items under Motif. All menu items
      are now ToggleButton widgets instead of PushButton widgets. We'll see
      how folks like it.

      Worked on the dialog editor app.

      Fixed a buglet in dialog.cxx: during modal execution, it would not
      allow dispatch of paint events to any other windows. Now it does allow
      Paint events to be dispatched. This makes it possible for other
      windows to properly update themselves if a modal dialog is dragged by
      the user.
      
      Modified CompositeVObject so that a non-sticky Composite -- one with a
      stand-alone window -- no longer inherits its parent's font.

Nov 29, 1995:
      Added OS/2 support for cross-hair cursors.
      Fixed bugs in ObjectSet by overriding all the Set operators.
      Fixed an X-specific bug: The DisplaySurface's WriteString method
      wasn't clipping its text.

Dec 2, 1995:
      Fixed a bug in Rectangle::IsContainedIn -- the tests were being
      performed the wrong way.
      Modified the FileOpen dialog under MS Windows to not insist on
      existing files only.
      
Dec 5, 1995:
      Added the validator binding capability to the Dialog class.
      

Dec 7, 1995:
      Added a "hard-wired" OS/2-specific offset to the height of
      CompositeVObjects that include menu bars. With this setup, when
      the programmer specifies a particular rectangle as shape of a
      composite, the specified shape is really what is visible.
      Formerly, part of that area was (under OS/2) eaten up by the
      menu bar.

Dec 8, 1995:
      Fixed a Windows-specific bug: If the application changed the shape of
      a Composite (via assigning to its Shape() method) and the Composite
      had a MenuBar, the new shape didn't used to account for the MenuBar.
      Now it does.

      Added an up-arrow cursor for OS/2. It looks ugly, but works. :-)
      
Dec 9, 1995:
      I think the OS/2-specific bug concerning painting of windows and
      dialog boxes -- where children were getting painted over sometimes --
      is now  fixed. The fix was to use WinBeginPaint and WinEndPaint in
      VisualObject::Paint.

      Added a pre-change dependent into the SetIterator, to issue a warning
      if the programmer attempts to modify the Set while an Iterator is
      active. (This bug bit me while developing the dialog editor.)
      
Dec 10, 1995:
      Fixed an OS/2-specific bug that was preventing non-sticky Composites
      from being initially invisible.

      Fixed OS/2- and Windows-specific bugs that were causing a
      StringEditor's contents to not be updated if it's model String's size
      was zero.

      Added protected methods into Object for accessing its dependent sets,
      and an AsString method for ClientSet. This helps with debugging.

      Re-did the mechanism of font propagation down the view tree. This
      fixed a related bug caused by the failure of the VisualObject
      destructor to remove itself from its Font's dependent set.
      
      Completed (I hope!) the dialog editor.      

Dec 12, 1995:
      Fixed an X-specific bug: The shift, meta and control keys were
      not being consulted on a mouse button press. The Mod1Mask is
      assumed to be the Alt (Meta) key.
      
      Resolved the problems with initially-invisible dialogs. There is
      now a virtual Realized method on CompositeVObject that helps
      with this.
      
      Added the double-click capability to all widgets under X, using a
      timer (actually a derived class OneShotTimer -- see ui/xmotfevt.cxx).

      Added the files base/version.* to query for the YACL version.
      
Dec 13, 1995:
      Checked that size changes are correctly propagated to Composites
      under X.

Dec 14, 1995:
      Re-organized the Windows-specific WindowProc code so that most of it
      is in a virtual method on VObjCollection. This will hopefully make it
      easier to extend YACL and include the MDI stuff.
      
      Completed the MDI demo. This only works under Windows and Win32. The
      demo program is in uidemo/mdi.
      

Dec 20, 1995:
      Separated the implementations of the basic operations from their
      declarations; there is now a base/basicops.cxx file. This makes it
      easier to instantiate pointer-based containers. This does, however,
      cause a few changes in code that instantiates custom templates; see
      basedemo/containr for examples.
      
Dec 22, 1995:
      Modified the Composite's protected interface. Under OS/2 there are now
      two new instance variables that decide the frame creation flags and
      the frame style. Also the significance of _style for a non-sticky
      composite under OS/2 is now the style of the client, not the frame
      creation flags. Also added the protected SetStyle method under OS/2
      and Windows to help in customizing style parameters for a Composite.

      Modified the FileSelectDialog to take an extra parameter specifying
      the file mask.

Dec 23, 1995:
      Fixed up the OS/2-specific code to correctly handle 256-color bitmaps
      by incorporating Tony T. Ton's (t.t.ton@massey.ac.nz) changes.
      (Thanks, Tony!) Specifically, the Bitmap class now has -- under OS/2
      and Windows -- a PaletteHandle method that can be used to realize its
      palette into a DisplaySurface before drawing it.
      

Dec 25, 1995 (Christmas day!)
      Fixed a bug in base/intset.cxx in the SmallestNonMemberAbove method.
      Also fixed a bug in MakeEmpty in the VObjSet class of the dlged
      application. This application now does not crash (I hope).
      
      Added the 3dlabel class and modified the graphic1 demo to check it
      out. This class should make building a status bar very easy.
      
      
Dec 27-28, 1995:
      Fixed some OS/2- and X-windows-specific bugs in the ScrollBar class.
      Also fixed a bug in BinaryFile that was causing BinaryFile to insist
      in write access to the file even when the application requested only
      read access.
      
Dec 30, 1995:
      Added the standard dialog function UI_FontDialog to ui/stddlg.h, and
      modified the dialog editor to allow the user to choose a font.

      Changed UI_ScrollBar::HandleEvent to return FALSE instead of TRUE.
      Without this change, the ScrollBar's parent would never see the event
      in its HandleChildEvent method. Thanks to T.T.Ton for pointing this
      out.



Jan 2-4, 1996:
      Worked on and finished the ScrollableWindow class for OS/2 and
      Windows. There is now a demo program in uidemo/scrolwin for
      this.
      
      Modified the DisplaySurface class under OS/2 so that, when a
      DisplaySurface is created for a Composite that has child
      windows, the areas occupied by the children are removed from the
      clipping region of the DisplaySurface. This avoids the annoying
      over-painting of children, such as in the bug report by Martin
      Conlon (mconlon@cae.carleton.ca). Thanks, Martin.
      
      Added Windows-specific methods SetRange and SetPosition into
      UI_ScrollBar, to facilitate overriding for the ScrolledWindow
      class.

Jan 6, 1996:
      Worked on the ScrollableWindow for Motif.
      

Jan 7, 1996:
      Changed all makefiles to uniformly use the symbol OBJECTS
      instead of the formerly inconsistent OBJS in some cases and
      OBJECTS in others.


Jan 18, 96:
      Fixed problems with scroll bars under OS/2.

Jan 19, 96:
      Modified Rectangle::IsContainedIn (in ui/rectangl.cxx) to work
      around a bug in the Watcom compiler. Thanks to Rod Smith
      (rsmith@psych.colorado.edu) for pointing out the problem. The
      modification actually makes the code faster.
      
Jan 20, 1996:
      Modified the SlottedFile class so that the SlottedFileHeader class is
      now visible in the header file for use by derived classes.
      Thanks to Remco Tijssen (ret@relay.nl.net) for pointing this out.

Jan 22, 1996:
      Fixed the bitmap drawing methods on DisplaySurface to take the
      current DisplaySurface mode into account. Previously they used
      to simply copy the bitmap regardless of mode.
      
Jan 24, 1996:
      Added the SetDefaultTextStyle to the UI_Label class.
             
Jan 27, 1996:
      Improved the speed of reading a bitmap from a file, under
      X/Motif. It's much faster now.

      
February 1, 1996:
      Finally succeeded in bludgeoning the base classes into successful
      compilation under GNU C++ 2.7.2. Thanks to Eric Schumann
      (erschum@ibm.net) for suggesting this line of thinking.
      
      Fixed a bug with font propagation down from a CompositeVObject.

Feb 3, 1996:
      Fixed problems with DwgSurfaceInMemory under OS/2. Modified
      3dLabel to use an in-memory display surface. This speeds up the
      3dLabel's display enormously. Also tested this setup under
      Windows using the scrolwin demo. So DwgSurfaceInMemory seems to
      work ok on these two platforms.
      
Feb 8, 1996:
      Modified the Windows and OS/2 implementations so that if a
      CompositeVObject is created with a shape of (0, 0, 0, 0), it
      uses default size and position as determined by the window system.

Feb 15th, 1995:
      Incorporated miscellaneous fixes under Motif. Thanks to Christopher
      Dunn (cxdunn@wraith.ece.cmu.edu) for the fixes.

      Added the graphic3 demo. This is identical to the graphic2 demo
      in functionality, but uses an in-memory display surface, making
      the speedup in painting obvious.
      
Feb 17th, 1996:
      Discovered problems with supporting RLE-encoded MS Windows bitmaps
      under X windows. For now, such bitmaps are not supported, and
      YACL issues a warning message if it finds such a bitmap (the
      code is in ui/bitmap.cxx).

      Added support for the StringView::VisibleCount method under
      OS/2. This uses a terrible hack, but it works.

Feb 18th, 1996:
      Fixed (what I hope is) the last remaining bug in dlged, that
      button groups were misbehaving when the 'Test' menu item was
      chosen under Motif.

Feb 20th, 1996:
      Finally caught and fixed a problem that was causing menu demos to crash
      under Solaris 2.4. The problem was that menu items were not being
      destroyed in the correct order.

Feb 22, 1996:
      Added the Motif-specific YComposite widget class, derived from
      BulletinBoard. This widget nullifies the geometry management that
      BulletinBoard imposes, so we can get a WYSIWIG approach. Among other
      things, this solves the problems with  the ScrollableWindow under
      Motif.

      Major change: all the makefiles are now renamed. This is to
      accommodate the increasing variety of compiler-platform
      combinations that YACL is now supporting.

      Incorporated the changes from Jody Hagins (gamecox@magicnet.net)
      for compiling YACL under Sun's Cfront-based native compiler (actually
      the Centerline compiler). Thanks a lot, Jody.
      
      Did some reorganization of the directory structure. Look in
      shiplist.txt in the root directory for a description of the
      directory structure.

Feb 28, 1996:
      Fixed a few buglets in the base classes:
          - One bug in Date::IsLeapYear for testing century years
            (thanks to Jeff Long (long@tiny.mitre.org) for pointing
            this one out)
          - Two bugs in seqimp.cxx in the IsSorted method and the _DoInsert
            method. Thanks to Abdallah Rahall (arahall@interserve.com.hk) for
            pointing out these two bugs.
      Also fixed the ColorRectangle method in DrawingSurface. Thanks to
      Roderick Smith (rsmith@psych.colorado.edu) for the report.
      
March 4, 1996:
      Fixed two bugs:
          - One in string.cxx (check for negative length when creating
            a substring). Thanks to Tara Krishnaswamy (tara@cs.sc.edu)
            for the report.
          - One in ellipse.cxx (hit testing when x == 0). Thanks to Dawie
            Strauss (strausdf@telkom06.telkom.co.za) for the report.
            
March 5, 1996:
      Incorporated changes to get YACL to compile under the SGI native C++
      compiler. Also incorporated makefiles for Sun's native cfront-based
      compiler, contributed by Jody Hagins (gamecox@magicnet.net).

March 7th, 1996:
      Added a fix to a bug that was causing a crash if the
      StringEditor's SetLengthLimit method was called before the
      object's visual element is displayed. Thanks to Michael Keefe
      (okeefe@odysee.net) for the bug report.


--------------- MARCH 8th, 1996: VERSION 1.50 RELEASED --------------------


March 16th, 1996:
      Fixed some Motif-specific problems with font setting via resources. 


March 27th, 1996:
      Added a check for null pointer in the overloaded delete operator
      (base/memory.cxx). Thanks to Rod Smith (rsmith@psych.colorado.edu) for
      pointing this out.

April 8th, 1996:
      Fixed problems with selection in the ComboBox class. The bug was that
      assigning to the return value of the Selection() method wasn't being
      propagated to the combo box. Thanks to Henner Harnisch
      (fbbe@rummelplatz.uni-mannheim.de) for the bug report.

      Added the demo program in uidemo/txteditr to illustrate how to use the
      TextEditor class to edit files. Also added the method ReadStream to
      CL_String.
      
April 9th, 1996:
      Added two new methods to CL_String to improve speed of access:

          char operator() (long i) const

      which returns the character at position i, but unlike
      operator[], does not do bounds checking; and

          CL_String operator() (long pos, long len) const

      which is a substring extraction operator that works much faster
      than the operator() that returns a CL_Substring, but the new
      operator only works on const objects.
      
April 10th, 1996:
      Modified ByteArray's AsString() method to return a string containing
      the octal values of the individual bytes.

April 11th, 1996:
      Fixed the TextEditor class to work correctly under OS/2. But see
      quirks.txt for related problems.
      
      Fixed a few bugs in Date::ParseAndConvert and related Date
      methods. Thanks to Kalin Wilson (kwilson@mnsinc.com) for
      pointing these out.

April 13th, 1996:
      Added a new method to CL_String:

           bool Replace (long pos, long n, const char* strg);

      to replace a substring specified by a position and a length. Use of
      this method is much more efficient than using assignment to the return
      value of the substring operator.

April 18th, 1996:
      Found and plugged two OS/2-specific memory leaks: (1) leaf menu items
      in a menu tree were not being destroyed, and (2) because of a bug in
      initializing the reference count, the FontEntry object was not being
      destroyed. The latter was probably a leak on other platforms as well.
      Thanks to Rod Smith (rsmith@psych.colorado.edu) for pointing these out.

April 20th, 1996:
      Began work on "Motif-independent" YACL, providing Motif-like widgets
      using Xlib (not Xt). We'll call this X_YACL.
      
April 23, 1996:
      Tested out the Label, PushButton, ToggleButton and ExOrToggleButton
      classes under X_YACL.

April 26th, 1996:
      Added a Sort method on ObjectSequence that takes an AbstractComparator
      as parameter.

      Moved the SegmentedSequence declaration to a separate file segseq.h,
      and provided a separate segseq.cxx. This speeds up access and improves
      efficiency.

April 29th, 1996:
      Fixed the problem with standard dialogs under Motif. These dialogs
      didn't used to act modally, now they do.

      Fixed cursor.cxx to not use a map of built-in cursors. This map was
      causing a leak to be reported by the leak checker even when there was
      no leak. 

      Added the Directory class to the io directory, and a corresponding
      test program in the directory basedemo/dirtest. This class is not
      supported under Microsoft VC++ (see ui/directry.h).
      

May 3, 1996:
      Fixed a memory leak in font.cxx, which showed up under X and Windows.

      Modified UI_Font::WriteString so that line breaks (delimited by the
      newline character) are recognized under X.
      
May 4, 1996:
      Added the ShadowedTriangle class to make it convenient to draw
      triangles with shadows.
      
      Completed the ScrollBar classes under X_YACL.

May 5, 1996:
      Added code for the static method SlottedFile::Valid. Thanks to Anand
      Prahlad (prahlad@cs.sc.edu) for pointing out this omission.

      Incorporated changes into the PasswordEditor class (ui/pswdedit.*)
      suggested by Jonathan Guthrie (jguthrie@brokersys.com). Thanks,
      Jonathan.

      Modified UI_MonthCalendar to draw on an in-memory display surface and
      then copy it to the screen. This drastically speeds up the display.

May 17th, 1996:
      Fixed UI_ComboBox so that selections work properly. Modified the demo
      in uidemo/combobox to test this.

May 18th, 1996:
      Fixed several little problems:

          - Incorporated Jody Hagins' Motif-specific fixes to the Menu
          class. This class now creates a ToggleButton for checkable menu
          items, and a PushButton for non-checkable ones. This makes the
          menu look cleaner, without the shadow that Motif casts on
          non-checkable items when they are selected. (But see the file
          doc/quirks.txt for an associated limitation.)

          - Fixed UI_DrawingSurface::DrawPolygon to work correctly under OS/2.

          - Fixed the bug in CL_String::Delete -- it wasn't updating the
          size after deletion.

          - Modified the demo in uidemo/graphic2 to illustrate the use of
          shadowed triangles.
          
May 26, 1996:
       Modified the constructors of all SimpleVObjects to take VisualObject
       as parent parameter rather than VObjCollection. This makes it easier
       to create customized visual objects. The need arose in the context of
       inplementing StringView under X_YACL.

       Added the Directory class into the io directory.
       
June 18th, 1996 and July 27th, 1996.
       Added to bug fixes to the BTree code to fix leaks. Thanks to Thomas
       Radcliffe (tomr@hermes.andyne.on.ca) for contributing the fixes.
       

Aug 10, 1996:
       Modified the dialog class to properly support the default push
       button,  which now shows up with the correct look (heavy border
       around it).

Aug 11, 1996:
       Added support under Windows and Win32 for changing foreground and
       background colors of visual objects. The demo program uidemo/visobj
       illustrates this.
       
Aug 18, 1996:
       Added the PathName class into the io directory.
              

Sep 8, 1996:
       Added the RegExpr class into the base directory. Also added the
       regexpr demo into the basedemo directory.
       
       

Sep 16, 1996:
       Incorporated John McCarthy's (jmccarth@toyon.com) changes to support
       Borland C++ 5.0. Thanks, John.

       Removed the static _Null variable from basicops, and added explicit
       null value instance variables to the Set, Sequence and Map
       classes. This is to make these classes thread safe. But in the
       process, discovered a rather interesting problem. Because the Null
       values are no longer in statbase.cxx, there were no static objects in
       that file that were explicitly referenced by any code external to
       that file. So the linker would not link in the static objects
       in that file. So the persistence test program was failing, because no
       entries were being made in the class id map. So I just moved all the
       code in statbase.cxx into object.cxx; statbase.cxx no longer exists.
       
Sep 27, 1996:
       Fixed problems with UI_StringEditor::SetLengthLimit.

       Plugged a (Windows+Win32)-specific memory leak: MenuItemEntry objects
       were not being destroyed. Thanks to Brian Win (brian@macrochip.com)
       for pointing this out.
       
       Incorporated bug fixes for hit-testing of pie wedges and chords,
       contributed by WeeYoon Chin (macres@macres.sain.my). Thanks, WeeYoon.

       Incorporated fixes by Ulrich Ring (ur@daveg.com) for correct handling
       of TextEditors under Motif. Thanks, Ulrich.

Sep 29, 1996:
       Added copy constructor and assignment operator to UI_Bitmap, and
       cleaned it up so that it correctly supports notification. Changed its
       implementation to use a reference-counted representation. Fixed
       BitmapButton so that Enable/Disable works correctly under Windows and
       Win32. Updated the bmpbtns demo to reflect these changes.

Oct 1, 1996:
       Fixed the BitmapButton code so that Enable/Disable works under OS/2
       as well.

Oct 4, 1996:
       Fixed the BitmapButton code to work correctly under X/Motif.
       Incorporated Michael Martin's (martinm@mbmartin.bevc.blacksburg.va.us)
       changes to build shared libraries under Linux 2.0.
       

Oct 17, 1996:
       Fixed a leak that occurred when constructing a resource-based menu
       under Windows. Separator items were not being deleted; now they are
       not even created.

Oct 31, 1996:
       Fixed a Motif-specific problem: Dialogs were not behaving modally,
       mainly because ButtonRelease events were being passed through to
       parents of modal dialogs.
       
       Fixed some cursor-related problems under X/Motif. The cursor demo
       should work ok now.



--------------- NOVEMBER 11th, 1996: VERSION 1.60 RELEASED --------------------



   
Jan 15th, 1997:
       Fixed a Windows-specific bug that was causing modal dialogs to not
       terminate correctly on a WM_CLOSE. The problem was that the WM_CLOSE
       is sent to the dialog procedure, but the termination test was not
       being made in the DoOneEvent method.

Jan 18th, 1997:
       Fixed OS/2-specific bug in UI_DrawingSurface::DrawPolyLine -- the pen
       color was not being used. Thanks to Peter Gray
       (peterg@cix.compulink.co.uk) for the fix.

       Added the YACL version-number-related macros into base/defs.h. These
       will now allow for conditional compilation if necessary.
       
Jan 21, 1997:
       Finally, succeeded in building the DLL version under Borland
       C++ for OS/2, Windows 95 and Windows NT for all three components:
       base, io and ui (yippee!). The UI demos work ok with the DLLs. One
       small problem: if a program does not need the io library, then io.dll
       should not be specified in its link command line; otherwise,
       the program fails to load. Don't yet know why this happens.
       
Jan 24, 1997:
       Restructured the Event class. We now have subclasses of the Event
       class, and the Event::Dispatch method is the one that dispatches the
       event to the appropriate VisualObject handler. This makes it easier
       to introduce new types of events into YACL. See also the change in
       VisualObject::ProcessEvent, which now simply invokes Event::Dispatch
       instead of the big switch statement that decodes event types.
       
Jan 28, 1997:
       Added the Depth method to CL_TreeNode, and the AsString method to
       CL_Tree. These were to make debugging the tree control easier.
       

Feb 2, 1997:
       Added support for the GNU Win32 compiler. I still can't get the
       UI code to work right: the programs seem to crash in the C
       runtime startup DLL. But the base and io code seem to work ok.
       
Feb 4, 1997:
       Fixed a bug in Sequence::_ShiftRightAt. Too many items were
       being shifted.
       
Feb 13, 1997:
       Fixed a bug in the ByteArray-based String constructor. Thanks to
       Frank O'Dwyer (fod@brd.ie) for the bug report.
       

Feb 14, 1997:
       Modified the TreeNode's Content() method to return a value rather
       than a reference. Also added the SetContent() method to that
       class. There seem to be too many cases where a node has to know when
       its content is changed, and these two changes seem to be the only way
       to accomplish that goal.

Feb 18, 1997:
       Completed the first cut of the TreeView and TreeViewModel
       classes. These now seem to work ok under OS/2.

       Created initial version of the aclock demo.
       
       Added the method Application::WindowSystem to query the window
       system we're running under. This is used to determine if we
       want the 3d look under Win95 or NT4.

Feb 21, 1997:
       Changed (!_stickToParent) to (_stickToParent) in the first line of
       CompositeVObject::ShowTitleBar. This was an obscure little bug.
       
       Completed a first cut of the analog clock demo (in uidemo/aclock).

       Fixed a bug in the OS/2-specific titlebar-visibility-setting
       code. Because of the bug, title bar couldn't be set on the fly, only
       at creation time. Now it can be set on the fly.

       Also discovered another interesting "feature" of OS/2. The window
       system seems to a minimum window width it gives me if I create a
       window with a title bar. On my machine, the minimum seems to be 145
       pixels. Asking for a window narrower than that still gets me 145
       pixels. But if there's no title bar (at least at creation time), it
       gives me what I ask for.

Feb 26, 97:
       Tried to implement faster label drawing under X_YACL using
       bitmaps. But X's bitmap performance is very poor. The display update
       is too slow. So abandoned that approach and reverted to drawing
       directly on the DisplaySurface from an in-memory drawing surface.
       
Mar 4, 1997:
       Fixed a Motif-specific bug in Composite::ShowTitleBar.
       

Mar 5, 1997:
       Incorporated Motif-specific menu changes suggested by Ulrich
       Ring.

       Added rudimentary support for recognizing special keys; see the
       enumeration in UI_KeyboardEvent in ui/event.h. This now works
       on all platforms.
       
       Fixed a Windows/Win32-specific bug: menu items on the menu bar
       were not receiving focus events. Now they do. In the process,
       had to modify the Menu class so that non-leaf menu items are
       now registered with the Controller.

       Fixed a Windows/Win32-specific bug: the argc/argv structure was
       off by 1 in ui/mainprog.cxx.

Mar 6, 1997:
       Patched UI_Rectangle::IntersectsBoundary with the patch
       contributed by Frederick Ax (fax@df.lth.se). Thanks, Frederick.
       
       Modified DwgSurfaceInMemory constructor to take an optional third
       parameter specifying a DrawingSurface. If this is specified, the
       in-memory surface is created to be compatible with the given
       DrawingSurface.

Mar 12, 1997:
       Now have a preliminary version of the HashTable and HashMap classes.
       
Mar 26, 1997:
       Fixed bugs in the SlottedFile class. The bug was that files larger
       than 4096 records weren't being written properly, due to the fact
       that the block bitmaps were written through the persistence mechanism
       rather than directly.

Mar 27, 1997:
       Added code into the memory leak checker to dump the contents of
       leaked memory segments, to help in debugging leaks.
       

Mar 30, 1997:
       Completed the PostscriptDevice class.


April 3, 1997:
       Fixed a bug in CL_Tree -- the AddChild method wasn't updating the
       index in parent. Thanks to Praveen Veeramachaneni for pointing this
       out.

April 27, 1997:
       Added bug fix to Sequence::InsertByRank: the call to DoInsert was
       changed to have parameter i-1 instead of i. Thanks to Sebastian Brand
       (zzb96sb@sheffield.ac.uk) for the fix.
       
May 26, 1997:
       Sort of completed the StringEditor under X_YACL. Its key bindings are
       Windows-ish, using the home, end, delete and arrow keys.
       
       Incorporated Praveen's implementation of the menu classes under
       X_YACL.
       
May 28, 1997:
       Fixed a bug in treeimp.cxx, reported by Ludovic Brenta: The
       ExtractSubtree method was not removing node labels from the
       map. Now it does.
       
       Added copy constructor, assignment operator and the
       GraftSubtree method to the Tree class.

June 2, 1997:
       Incorporated Ludovic Brenta's (Ludovic.Brenta@gprhp.insa-lyon.fr)
       fixes to two bugs, one in CL_Tree::DestroySUbtree and the other in
       CL_PathName::FileName. Thanks, Ludovic. 

June 20, 1997:
       Added a ColorCache to the Color class under X windows, so that color
       allocation is not as frequent. This improves performance, and should
       also reduce the drain on the X server resources.

June 22, 1997:
       Added a Motif-specific font cache implementation to work around the
       memory leak in Motif's XmFontListCreate function, reported by Sean
       Reifschneider.
