Developer Release Notes
BeGUI
version 1.4.2

for
BeOS Release 4

While this documentation is copyright, anyone is free to redistribute it as long as they do not change the fundamental text. Changes to the HTML coding are fine, as is any removal of the HTML code, or any re-formatting to fit other distribution styles or formats.


This document is the fifth major documentation release for BeGUI.

Things are still under construction!


New changes are listed toward the bottom of this page.

New changes for 1 . 3 . 0 have been drastic and major! This will require a lot of changes to source code for anyone using this library. I felt that now was the time to make these changes, not later when more code might be dependant upon them.

Changes for 1 . 1 . 1
    A major improvement in source code creation has taken place. In earlier versions of these routines it was necessary to create a LayoutMatrixItem for each gadget. Sometimes the LayoutMatrixItem had to be created with new (and eventually deleted), other times the use of an auto-pointer was better. Now these LayoutMatrixItems are created automatically for you and deleted when appropriate.

    I have defined a spacer class. It's documentation is with the other gadgets in the Layout/Gadgets folder.

    I got fed up with the massive waste of space in default BButtons, so as hinted in earlier code, I added a MyGetPreferredSize() method to this class as well.

    I ripped the preference strings out of the resources. Now there are two sets of string resources, those dedicated to preferences may be found in the file BeGUIStrings.r.

    I have separated the preference storage stuff from the app storage stuff as well. I am now passing a const char * prefSig into each window, so it knows which prefs it should store itself into. This results in two folders being created in /boot/home/config/settings!

    I am also working on the BSlider class and have it working in a beta layout routine, but have entered a bug report against it and am awaiting the outcome of that before I go too far.

    I have looked at the BTabView class with the thought of supporting it as well, but have been unable to make heads or tails of it. If someone would like to send me a simple example of working code which employs this class, I will look further into the matter.

    I just realized that it would be nice to include the BPicture class in the layout routine, and am also thinking of the BBitmap class. Both would require only a tiny bit of code to support, as they do not require special sizing, being of a somewhat fixed nature. Of course, they are both really resizable, I guess, so I might have to give this some more thought!

    I also just grabbed the pot.zip example from the recent BNewsletter and may well enroll it in this layout routine. After examining the code I feel that it will be a bit complicated to include for the near future.

    Of course, it would be lovely to separate this all out from the application and form it into a custom library--so I did! Included with this project is a shared library libBeGUI.so, which can be created from the source by using the makefile.lib. The details for using the makefile are a bit complicated, if you need help, let me know.

    I found a little speed-up in source code generation. In the creation of the LayoutMatrixItem I passed a pointer to a BList which was a member of the LayoutMatrix to which the item was soon to become attached. Instead of finding the list like:
    layoutMatrix->itemList
    Now, I simply pass the LayoutMatrix and get the list in the CTOR, saves a tiny bit of typing for each item.

    I also found an un-used member of the MyColorControl class. I removed it by commenting it out in the code; not sure if I will need it for slider updating, have to see. See: BWindow * paramWindow

    I also pruned a bunch of excess strings from the resource source and the code. There are still a lot of unused strings, some pertaining to things I am in the process of building.

    I found some math problems in my handling of MyPopUpMenu labels and their vertical and horizontal positions with respect to the menu. I have this mostly corrected now, but will have to look at the difference when the menu font is much larger or smaller than the label font.

    I found I had neglected to finish the proportional slider stuff for height! Found a little bug in the Display Font Window calls.

    Found a major problem with my previous usage of libprefs. I was rapidly calling it to write data if many Preference panels were automatically closed. It would get lost, so I made it all into a sequential call.

    Found a nagging bug which caused a crash under some situations if the Font Display Window had been closed.

    I found a few enhancements which make the windows more agressively usable. One allows for the rare occaision when you want no menu (as in a tool palette) the other allows for no title string (as you might want for a minimally intrusive tool palette). I also found a better way of storing window frame prefs. Make sure you delete any of the old BeGUI preference files in /boot/home/config/settings.

    After reading the thread on BexxxTalk about virtual destructors, I thought I had better re-examine my thoughts on inheritance, so I went in and made all BeGUI class destructors virtual, as well as a few functions which might need to be virtual.

    I found an interesting bug in the LayoutMatrix::Calc() method. I had failed to re-zero the excessBottom and excessRight variables, so if a smaller gadget was at the end of a matrix row or column it would cause a visual glitch.

Changes for 1 . 2 . 0
    Version 1.2.0 brings a major change in the UInt32Gadget and FloatGadget! The originals have been replaced by totally font sensitive versions, the old classes are still there, but their names have changed to UInt32Control and FloatControl, which reflects the fact that both are based upon the BTextControl class. The new versions are based upon the BTextView class which allows them to be completely font sensitive. They are joined by a host of additional classes such as Int8Gadget, UInt16Gadget, etc..

    I made the construction of ColorWells a bit simpler. I moved the creation of the label's TextItem into the ColorWell CTOR initilization list. Thus you now pass in a const char * instead of a TextItem *.

Changes for 1 . 3 . 0
    In the spirit of the above change, I made all the gadget labels (ColorWell, StringGadget, MyPopUpMenu and FloatGadget as well as all other numeric entry gadgets) BStringViews constructed from BStrings in each one's CTOR. You may now safely pass in NULL for this const char * and the item will be created with no label. This way you may set the label's ResizingMode() so that it will stick with the gadget if the gadget has a resizing mode to B_FOLLOW_something.

    I made some major changes in the WindowGuts class, it is now the ScrollingWindow class and has a different CTOR parameter list. The two big changes are that the menu is now optional and that you may specify if the window will be Show()ed automatically by the Initialize() method. If it is not Show()ed, you may make additional changes off-screen and call Show() when you are ready.

    A second window class SimpleWindow is now available. It is a very plain window and only inherits the automatic preference facility of storing size and location. It is especially well adapted to functioning with Brian Teitz' Santa's Gift Bag library. It is not aware of the LayoutMatrix class, so will not be used for the creation of LayoutMatrixItem BeGUI gadget classes.

    I created a third window class BaseWindow which mimics the ScrollingWindowin it's ability to accept a LayoutMatrix, but lacks the BScrollView base. This window is sized by the library initially, and the user controls the display size. It's major use is to create simple, font sensitive non-scrolled windows with only a few gadgets--displays which are expected to be completely viewable at even the smallest screen size, with the largest reasonable font, in any language.

    The numeric entry gadgets have been enhanced with a set of filters which help limit them to appropriate entry values.

    ColorWells have now become user sizable and need no longer be square. The ColorWell preference window now has two FloatGadgets which allow the user to set suitable width and height for the gadget.

    The main preference window has had new buttons added which access a bunch of new preference windows controlling the new numeric gadgets. I can see that if I keep adding more gadgets this button array might become ugly. I may need to separate this into pop up menus.

    In my ongoing effort to standardize the code, I have made a lot of major "spelling" changes to class members. pMenuBar has become mpMenuBar, underViewWidth has become mfUnderViewWidth, etc.. All classes have been standardized in this fashion. I also re-arranged all the classes so that data members come before member methods and all data members are in some semblence of order starting with pointers, then basic types in size order (largest to smallest), then complext types (classes).

    I went ahead and added the BSlider class, even though there may still be some problems with it.

    I refined the construction of the RadioViewData structure, making it a full fledged class with parameters for the CTOR. This will eliminate two statements for every RadioViewData created.

Changes for 1 . 3 . 1
    I added colorization back to MyStringDrawer--don't know why I ever took it out, but at least now I have a much better way of doing it and old code will not need to be changed.

Changes for 1 . 4 . 2
    I did major cleanup of the LayoutMatrix and LayoutMatrixItem classes. I also combined a lot of the numeric gadget features into a BaseGadget class which considerably improves the size of the library. I also spent a lot of time getting the library UTF8 text sensitive and replaced all font measurements with the new bounding box stuff.

    There is an unfinished and undocumented HexGadget, it excludes all non-hex text, but does no limit testing nor does it convert the text string into a numeric value.

    The documentation included is a bit out of date. Many classes have had the order of their parameters changed and default values added where reasonable. These changes may not be completely or correctly reflected by the documentation--check the headers when in doubt!



roColour drops come from one of the finest programs on any computer platform roColour 3.0 Web Edition, brought to you by the nice folks at RO DESIGN, Inc. www.rodesign.com. I especially wish to thank Richard Oesterreicher for bringing this program to the BeOS.




I also wish to thank Joseph Arnold, Daniel Berlin, John Dance, Chris Herborth and Stephen van Egmond for beta testing, help with the shared library problems and the move to x86 compatibility!

Thanks!


The BeOS Release 4 is brought to you by all the hard work of the super people at Be, Inc. (www.be.com). Be and BeOS are registered trademarks of Be, Inc..




The BeGUI Book

for version 1.4.2
Copyright © 1998-1999 Ed Musgrove Be Developer #2076. All rights reserved.
edgar@harbornet.com
emusgrov@linknet.kitsap.lib.wa.us
Last modified March 17, 1999.