This file hilites some of the most notable changes to the ClassAct classes for release 2.0 and includes sections of the related autodoc for new class tags. This is an accumlative listing. In this release, all classes have been revised to startup with V36 of the OS or later. A few bugs precluding use under OS 2.04 have been corrected as well. ************************************************************************* CLASS: bitmap.image 41.2 New image class release, written by Yvon Rozijn. BUGS/CHANGES: None ************************************************************************* CLASS: getfile.gadget 41.146 New gadget class release, written by Petter Nilsen. BUGS/CHANGES: None ************************************************************************* CLASS: getfont.gadget 41.23 New gadget class release, written by Petter Nilsen. BUGS/CHANGES: None ************************************************************************* CLASS: getscreenmode.gadget 41.13 New gadget class release, written by Petter Nilsen. BUGS/CHANGES: None ************************************************************************* CLASS: arexx.class 41.69 BUGS/CHANGES: Corrected possible enforcer hits and potential lockup when using Voodoo's "get new mail" or running a copy of Voodoo twice via an Aweb mail plug in. Generally, the arexx class should be a little more stable/durable now. ************************************************************************* CLASS: penmap.image 41.2 BUGS/CHANGES: Note, under AmigaOS 3.x ObtainBestPen() is used, but under AmigaOS 2.x this function is NOT available, and you can supply your own mapping via IA_Pens, otherwise no pen remapping occurs and chunky images are converted to planer verbatim, and may look rather sad depending on the palette. If anyone has a ObtainBestPen() compatible or simular function with sources they care to contribute, it can easily be added to the penmap image class. (41.1) Accidently passed a ULONG for a UWORD for the backgroud pen, odd that with prototypes SAS/C didn't even complain. Incidently the value assigned to this ULONG was casted as a UWORD :) (41.2) NEW TAGS: PENMAP_Precision Set the precision for ObtainBestPen() when penmap is used under AmigaOS 3.0 or later. See the ObtainBestPen autodoc for more details. Defaults to PRECISION_IMAGE. Applicability is (OM_NEW, OM_SET) PENMAP_ColorMap (struct ColorMap *) This tag is an alternate way to pass a colormap for use in ObtainBestPen(). If this tag is not provided then the colormap attached to the screen's viewport will be used, in that case PENMAP_Screen MUST be passed to penmap. If under AmigaOS 2.x, no pen remapping occurs unless default pens are passed via IA_Pens. Defaults to NULL. Applicability is (OM_NEW, OM_SET) PENMAP_MaskBlit (BOOL) Blits penmap on to display using a mask plane, this is very useful and encouraged when using penmap for program logos for your about window, etc. Using the mask technique, the preferenced window backfill pattern will show thru around or potentially in your image. If this effect is not desired, you should not use this tag, and frame your images in a bevel. Defaults to FALSE. Applicability is (OM_NEW, OM_SET) ************************************************************************* CLASS: bevel.image 41.24 BUGS/CHANGES: Now implements nearly all beveling preference options, including bevel style, default group label positioning, 3D group label shadow, etc. Fixed intermediate release bug causing omission of disable pattern rendering for draw states of IDS_DISABLED and IDS_SELECTDISABLED. Fixed enforcer hits caused by rendering the new XEN bevels with out DrawInfo. Implemented IM_FRAMEBOX method with very limited resolution awareness, *completly* untested at this time. Previous intermediate release of ClassAct 2, there was a missing ReleasePen() whene using THICK or XEN preferenced bevels. 41.23 With 41.24, bevel longer uses ObtainBestPen()/ReleasePen(), but instead uses FindColor(). However, window class now attempts to lock the proper XEN/Thick pens ObtainBestPen() on window open, and ReleasePen() on window close. It is set not to alter your palette, simple lock the right colors if they exist and bevel should find these pens unless the palette changes such that another pen is a closer match. This still not the idea system, but it should correct the random pen color changing errors introduced by bevel 41.23 when it (correctly) released the pen after it was done using it. A better system may be devised in the future. Under 2.04, a potential 0 dimention EraseRect() would cause a crash. Fixed. This only occured when a Vertical or Horizontal bar bevel image was used DIRECTLY as a layout child, but not if specified as the layout group bevel style. NEW TAGS: BEVEL_ColorMap (struct ColorMap *) Screen ViewPort ColorMap, this tag is required tag for proper BVS_BUTTON xen shadow pen selections. Gadget or Image classes must supply this tag to bevel image atleast once before rendering the object in order for proper pen selections. Defaults to NULL. Applicability is (OM_NEW, OM_SET) BEVEL_Flags Intentionally left undocumented! Used for some hidden BVS_BUTTON xen style magic. Class authors inquire as needed. Defaults to 0. Applicability is (OM_NEW, OM_SET) ************************************************************************* CLASS: integer.gadget 41.14 BUGS/CHANGES: Implemented INTEGER_MinVisible tag, see below. Fully supports bevel style preferences. Thin, GadTools, Thick and XEN style is now applied to the arrow buttons. NEW TAGS: INTEGER_MinVisible (WORD) Set the minimum number of characters that should be visible for a 'GDOMAIN_MIMIMUM' domain size. This is a handy addition present in V41.127 or later to ensure a mimimum number characters will be visible in a integer gadget. ************************************************************************* CLASS: palette.gadget 41.0 BUGS/CHANGES: Now correctly renders itself with all beveling preference modes. NEW TAGS: none ************************************************************************* CLASS: listbrowser.gadget 41.202 BUGS/CHANGES: Added additional methods for optimized adding and refresh of specific nodes in a list. Now correctly renders itself with beveling preference modes. Handles lists with total node pixel count greater than 32768 pixels. propgclass on which scroller.gadget prior to V42 beta can only handle WORD variables. Because listbrowser smooth pixel scrolls, there was a good potential to overrun the WORD ranges. Scaled values are now used on large lists, in addition the new V42 beta scroller class handles LONG values and is implemented independant of propgclass. Implmented additional mode of operation, see new tags below. Tweaked Scroller size on 640x200 screens. Now bevels the checkbox for checkable nodes, uses a a thin beveling style rather than the previous plain flat looking black box. Now handles empty lists w/o enforcer hit(s). Corrected error with LISTBROWSER_MakeVisible, if the node was below last visible node, it scrolled the node upward above the top visible node. The entire height of the list gadget was mistakenly added to the scroll offset. Title separators could be caused to not refresh, notable in AWeb. Fixed. As a result of fixing the above bug, an extra separator was drawn on the far right in the title. Fixed. NEW TAGS: LISTBROWSER_HorizSeparators (BOOL) (V41) Renders horizontal lines below each node. This is useful if your listbrowser is very wide, and you want to make it easier for users to follow the rows of data. Defaults to FALSE. Applicability is (OM_NEW, OM_GET, OM_SET) LISTBROWSER_CheckImage (struct Image *) (V41) Provide a custom image for a checkbox node while that node is in the checked state. A NULL image means that listbrowser render some default imagery. Defaults to NULL. Applicability is (OM_NEW, OM_GET, OM_SET) LISTBROWSER_UncheckedImage (struct Image *) (V41) Provide a custom image for a checkbox node while that node is in the unchecked state. A NULL image means that listbrowser render some default imagery. Defaults to NULL. Applicability is (OM_NEW, OM_GET, OM_SET) LISTBROWSER_TotalNodes (LONG) (V41) Return the total number of nodes currently attached to the listbrowser. Applicability is (OM_GET) ************************************************************************* CLASS: button.gadget 41.2 BUGS/CHANGES: Nominal domain now sizes 2 pixel taller to accomodate some buggy fonts and generally look better, as well and 6 pixels + bevel size wider. Tweaked minimum domain height to me 2 pixels taller. Fixed autobuttons domain height to fontheight + 7 to match string, and titleless dropdown chooser regardless of bevel types thus producing a consistant mindomain size and layout regardless of different sized frames. This likely will change in implementation, yet reach the same desired results, when an IM_DOMAIN method is is implemented in bevel class. Nominal size domain is now a few pixels larger than minimum size for GA_Image buttons. Revised rendering routines, may be a little more tolerable of MagicMenu's and other simular hacks, on the down side, it could make subclassing/method overloading a bit more challanging to do. NEW TAGS: BUTTON_DomainString (STRPTR) Used to specify the NULL terminated string to use as the text to domain the gadgets minimum size. This string is NEVER rendered on screen. This is useful when you need to create a button with a empty ("") or NULL string, but want to enforce minimum size in a layout group based on some initializing string and the current preferenced font. Defaults to NULL. Applicability is (OM_NEW, OM_SET) ************************************************************************* CLASS: checkbox.gadget 41.2 BUGS/CHANGES: Eeek! Contrary to documentation, there was NO OM_UPDATE support at all. Update tag setting and rendering support implemented, as well as notification of selection state as per existing documentation. NEW TAGS: none ************************************************************************* CLASS: chooser.gadget V41.9 BUGS/CHANGES: Now StackSwap()'s input methods when under input.device task context so to avoid a potential stack overrun on certain systems when opening the popup/dropdown selection window. This overrun was especially apparent on EGS systems. Fixed titleless dropdown domain height to fontheight + 7 to match string, and autobuttons regardless of bevel type. ActivateLayoutGadget() or keyboard short cuts now cause the popup menu to open. Cursor arrow keys move the selection bar, Return selects, Escape cancels as does the main window going inactive for any reason. Incidently this change allows support of GA_TabCycle to open the popup as well, however I'm not so sure this is a good thing to exploit in an application. Recompiled with optimizer on, reduced size nearly 2k. NEW TAGS: CHOOSER_Offset (UWORD) This value is added to the value sent in notifications via the 'CHOOSER_Active' tag. Since chooser selections begin and 0 as the first selection, and some objects begin at 1 (such as DATEBROWSER_Month accepts 1 thru 12) this tag is useful in chooser to datebrowser innerconnections to map a 0-11 chooser selection to datebrowser month 1 thru 12. Defaults to 0. Applicability is (OM_NEW, OM_SET) New option(s) for AllocChooserNodeAttrsA() and SetChooserNodeAttrsA(); CNA_SelImage (struct Image *) Selected state Image to be placed to the left of the CNA_Text in the Chooser menu. Background image pen remapping is not currently implemented. CNA_ReadOnly (BOOL) (41.3) Selected popup/dropdown item under mouse is NOT rendered as selected, by request of Yvon for AWeb's dropdown help. It should be noted, this is potentially deceiving as the the item can be selected, and will return a gadgetup. Note, 41.5 on up will/should block the gadgetup. CNA_Disabled (BOOL) (41.5) Blocks selection of item, no gadgetup is returned. Items are ghosted via true ghosting with the background pen, simular to intuition menus. A future version might take a clue from MagicMenus 2.0 and ghost/shadow using aditional pens, as it is much easier to read the disabled selection but still is visible different. These ghosting styles could become user referenced at risk of becomming another MUI like prefs. ;0 CNA_Separator (BOOL) (41.7) Makes an item a non selectable separator (~~~~~~ style) node simular to intuition menus. ************************************************************************* CLASS: clicktab.gadget 41.1 BUGS/CHANGES: New render styling, thought to to be more visually pleasing by most :) Minimized rendering and return of GADGETUP when selecting the page that is already current. TNA_Enabled changed to TNA_Disabled for consistancy with other tags but is still not supported anyway, so no harm done! Reduced click tab height for better look on 640x200 screens, and reduced popup action from 2 pixels to 1 pixel. All in all, I'd say its an improvement. NEW TAGS: New option(s) for AllocClickTabNodeAttrsA() and SetClickTabNodeAttrsA(); TNA_TextPen (WORD) Specifies pen number to use for the label. Defaults to pens[TEXTPEN]. ************************************************************************* CLASS: fuelgauge.gadget 41.2 BUGS/CHANGES: Fully fills inner bevel areas for all bevel preference modes. Added additional text rendering support, including VarArgs much like that which is supported by button.gadget. Rendering should no longer cause icon dragging to abort. However, if you receive a non zero return value from SetGadgetAttrs() when updating FUELGAUGE_Level, that indicates fuelgauge could not perform its own safe locking update. In this case, you should NOT RefreshGList contrary to what you might thing. However, this applicable ONLY to V41 of fuelgauge, prior versions requier RefreshGList to update visuals. Also note, it is theoretically possible for the gauge to miss a render update, thus it is recommended any final status strings set in a gauge DO follow with a RefreshGList to ensure any final "resting state" of the gadget is accuratly displayed. Changed rendering code to make a speed advantage of using OS 3.0 specific calls such as SetABPenDrMd() when using V39 or later. NEW TAGS: FUELGAUGE_VarArgs (APTR) Varargs data array to supply data for RawDoFmt() when format specifiers are to be used in GA_Text text strings. Defaults to NULL. Applicability is (OM_NEW, OM_SET) FUELGAUGE_Justification (WORD) Justification mode of fuelgauge (GA_Text) text label. Percentage rendering, when enabled, is always centered. Supports: FGJ_LEFT FGJ_CENTER Defaults to FGJ_LEFT. Applicability is (OM_NEW, OM_SET) ************************************************************************* CLASS: layout.gadget 42.30 BUGS/CHANGES: Optimized domain, layout and render methods for greater speed. Layout error introduced durring code optimizations introduced a small layout spacing error between the first two objects, now fixed. Resize no longer cancels GA_ReadOnly setting. 42.16 snuck out on May 30th 96 - dispose would have caused enforcer hits or a crash on some layout groups (notable in AWeb prefs). It was an intermediate bug that krept in and promptly fixed in 42.17. 42.20 will now DisposeObject all children, even if the layout creation/taglist processing failed. In previous versions, if the tag list processing failed, object not yet processed in the layout tag list would not be disposed of. Thanks to Magnus and Yvon for catching this one. 42.24 A *very* weird bug was fixed. A simple refresh window containing string or integer (ROM strgclass based) gadgets nested two or more layout levels deep in a page group would layer locker or guru the machine after refresh - ONLY if the the overlapping window being close was a shell/newcli window! This one I still don't fully understand yet but mangaged to fix it anyhow. ;0 Thanks to Yvon for catching this one. 42.27 Significantly increased domain method via changes to LayoutLimits() and handling of label/domain alignments. Additionally, window resizing layout may occur faster as well as labels are nolonger re-domained as they have already been domained and aligned at window open time. 40.30 Improved dispatching speed of OM_SET method slightly. NEW TAGS: LAYOUT_Inverted (BOOL) If set TRUE, children are added to the layout group in reverse order, ie via AddHead() vs AddTail(). This might be especially useful for those who wish to port the Asm programmer macros from another other GUI system, ie, BGUI for example. It is also handy to just flip positions of gadgets in a layout group, ie, speedbar on left/right prefs, etc. Note, this tag does not change the order of gadgets already present in a group. This tag must be passed first. Defaults to FALSE. Applicability is (OM_NEW, OM_SET) CHILD_ScaleHeight (UWORD) CHILD_ScaleWidth (UWORD) Cause the minimum domain size of an object to be scaled to a larger value. IE, a value of 20 with a min domain size of 50 results in a 60 pixel minimum. That is to say; newmin = min + ((scale * min)/100); These tags are handy for use on listbrowser object to extend the width or height to a more realistic size. Because this scaling could potentially force a layout beyond the maximum size for a screen (thus causing a potential font fallback) you should use some commen sence as to when to apply such a scalar, and how much is overkill. Defaults to 0. Applicability is (OM_NEW, OM_SET) ************************************************************************* CLASS: radiobutton.gadget 41.1 BUGS/CHANGES: Corrected keyboard control so selection wraps around rather than incrementing or decrementing selection to an invalid/invisible selection. NEW TAGS: ************************************************************************* CLASS: speedbar.gadget 41.2 BUGS/CHANGES: Corrected various potential bugs in SBNA_Toggle/SBNA_MXGroup handling. Implemented SPEEDBAR_EvenSize tag. Implemented SBNA_Disabled. Now safty checks for empty lists, but to domain correctly your buttons must be added to the bar before domain/layout occurs. Fixed, or atleast improved rendering/centering of vertical orientated bars. Corrected rendering of SBNA_Disabled buttons. NEW TAGS: SPEEDBAR_EvenSize (BOOL) Causes all buttons in the bar to size equal to the largest. Defaults to FALSE. Applicability is (OM_NEW, OM_SET, OM_GET) New option(s) for AllocSpeedBarNodeAttrsA() and SetSpeedBarNodeAttrsA(); SBNA_Disabled (BOOL) Set a button in the bar as disabled. If setting this after the bar has been rendered, you must follow this with RefreshGList() on the speedbar object to cause the disable rendering to occur. Defaults to FALSE. ************************************************************************* CLASS: string.gadget 41.2 BUGS/CHANGES: Incorrect semaphore in dispatcher allowed potential deadlock situation. Fixed domain height to fontheight + 7 to match autobuttons and titleless dropdown choosers regardless of bevel types. And, caused string gadget height to be more uniform with integer gadget height which generally makes the GUI display look alot better, especially for 640x200 users where the prior versions of string gadget where a bit too tall. Revised input handling methods some in attempt to fix a bug with window class gadgethelp, no change. Infact, the bug could be in strgclass itself - currently investigating that possibility. NEW TAGS: STRINGA_MinVisible (WORD) Set the minimum number of characters that should be visible for a 'GDOMAIN_MIMIMUM' domain size. Nominal domain sizes to twice this minimum. This is a handy addition present in V40.35 or later to ensure a mimimum number characters will be visible in a string gadget. ************************************************************************* CLASS: window.class 42.39 BUGS/CHANGES: Setting WA_BusyPointer TRUE will turn off defer layout so if the app is busy, a simple refresh window or resized window will refresh normally while the application is theoretically busy to process the window class input which causes the defer refresh to occur. Setting the busy state FALSE will return defer layout to the previous setting. In addition, GA_ReadOnly is also set/cleared on the window layout as well, a busy window will not accept input. If this is counter productive to you, you may override this by setting GA_ReadOnly FALSE (on the layout). In addition, a busy window will also call OffMenu(NOITEM) or OnMenu(NOITEM) to disable the menu bar. It should be noted, checked menu items should be tracked/rechecked, this change was hoped to avoid that by window class not using ClearMenuStrip()/ResetMenuStrip() but this does not work fully either. Window now as internal border prop scroller creation, but is undocumented as it may be replaced with border groups to allow neat stuff like a page flip/count gadget for word processors, bottom border text status gadgets, as well as scrollers. Comments & testers welcome... Potential bugged/corrupted version of 41.24 crept out in a demo. Such a class missed window resize refresh on some simple refresh windows. Window class now tries to obtain the best pens for XEN/Thick bevels on window open, and releases them on window close. Corrected enforcer hit closing windows in an intermediate V42.31 test release of the new pen allocation system. Added WMHI_INTUITICK, it was documented but apparently wasn't implemented. Also added WMHI_MOUSEMOVE and WMHI_MOUSEBUTTONS as the next two WMHI_#? return values, however, for mouse move you still need to peek the mouse position elsewhere, such as in IntuitionBase->MouseX and MouseY. It can't be returned via in the window class input method code. Although, window corner relative mouse x/y tags might be a suggestion for the future. #define WMHI_INTUITICK (14<<16) /* IDCMP intuitick */ #define WMHI_MOUSEMOVE (15<<16) /* IDCMP mouse move */ #define WMHI_MOUSEBUTTONS (16<<16) /* IDCMP mouse buttons */ Windows set busy via WA_BusyPointer still allowed gadget activation via keyboard control. This is now corrected, and with this release the busy handling it done via Request()/EndRequest() with a NULL requester as recommended in the RKM. NEW TAGS: WINDOW_RefWindow (struct Window *) (V42.38) Causes WINDOW_Position of CENTERSCREEN and TOPLEFT to be relative to the window pointed to via this tag rather than the screen. WINDOW_Position w/CENTERMOUSE is uneffected. Tag value: (WINDOW_Dummy + 41) (OM_NEW, OM_SET, OM_UPDATE) NOTE: This tag has not been fully tested yet, its currently provided for those who need/wish to try it. You know who you are. Please report your findings to caldi@usa.nai.net if you use it. :) *************************************************************************