home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / owlinc.pak / BUTTONGA.H < prev    next >
C/C++ Source or Header  |  1997-07-23  |  4KB  |  136 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // (C) Copyright 1992, 1994 by Borland International, All Rights Reserved
  4. //
  5. //   Definition of class TButtonGadget.
  6. //----------------------------------------------------------------------------
  7. #if !defined(OWL_BUTTONGA_H)
  8. #define OWL_BUTTONGA_H
  9.  
  10. #if !defined(OWL_GADGET_H)
  11. # include <owl/gadget.h>
  12. #endif
  13. class _OWLCLASS TCelArray;
  14.  
  15. //
  16. //  class TButtonGadget
  17. //  ----- -------------
  18. //
  19. //  buttons begin highlighting and do a capture when pressed (the mouse down
  20. //  occurs). they cancel highlighting when the mouse exits, but begin
  21. //  highlighting again when the mouse re-enters. when the mouse goes up the
  22. //  capture is released
  23. //
  24. //  there are two basic type of buttons: commands and settings (attribute
  25. //  buttons). Settings can be exclusive (like a radio button) or non-exclusive
  26. //  (like a check box)
  27. //
  28. //  there are three normal button states: up, down, and indeterminate. in
  29. //  addition the button can be highlighting (pressed) in all three states
  30. //
  31. //  commands can only be in the "up" state. settings can be in all three states
  32. //
  33. class _OWLCLASS TButtonGadget : public TGadget {
  34.   public:
  35.     enum TState {Up, Down, Indeterminate};
  36.     enum TType {Command, Exclusive, NonExclusive};
  37.     enum TShadowStyle {SingleShadow = 1, DoubleShadow = 2};
  38.  
  39.     TButtonGadget(TResId bmpResId,
  40.                   int    id,
  41.                   TType  type = Command,
  42.                   bool   enabled = false, // initial state before cmd enabling
  43.                   TState state = Up,
  44.                   bool   repeat = false);
  45.    ~TButtonGadget();
  46.  
  47.     void          SetButtonState(TState);
  48.     TState        GetButtonState() {return State;}
  49.  
  50.     TType         GetButtonType() {return Type;}
  51.     void          GetDesiredSize(TSize& size);
  52.     void          SetBounds(TRect& r);
  53.  
  54.     // A couple of button style options
  55.     //
  56.     void          SetNotchCorners(bool notchCorners=true)
  57.                     {NotchCorners = notchCorners;}
  58.     void          SetShadowStyle(TShadowStyle style=DoubleShadow);
  59.     void          SetAntialiasEdges(bool anti=true) {AntialiasEdges=anti;}
  60.  
  61.     // Override and initiate a WM_COMMAND_ENABLE message
  62.     //
  63.     void          CommandEnable();
  64.  
  65.     void          SysColorChange();
  66.  
  67.   protected:
  68.     TResId        ResId;
  69.     TCelArray*    CelArray;
  70.     TPoint        BitmapOrigin;
  71.     TState        State          : 4;
  72.     TType         Type           : 4;
  73.     TShadowStyle  ShadowStyle    : 4;
  74.     bool          Repeat         : 1;
  75.     bool          NotchCorners   : 1;
  76.     bool          Pressed        : 1;
  77.     bool          AntialiasEdges : 1;
  78.  
  79.     // Override basic TGadget member functions
  80.     //
  81.     void          Paint(TDC& dc);
  82.     void          Invalidate();
  83.  
  84.     // Override TGadget member functions and respond to user fiddling with the
  85.     // button by self-sending button protocol messages
  86.     //
  87.     void          LButtonDown(uint modKeys, TPoint& p);
  88.     void          MouseMove(uint modKeys, TPoint& p);
  89.     void          MouseEnter(uint modKeys, TPoint& p);
  90.     void          MouseLeave(uint modKeys, TPoint& p);
  91.     void          LButtonUp(uint modKeys, TPoint& p);
  92.  
  93.     enum {
  94.       //CelMask,
  95.       CelNormal,    // Normal state
  96.       CelDisabled,  // Disabled (grayed)
  97.       CelIndeterm,  // Indeterminate-neither normal nor down
  98.       CelDown,      // Down or checked
  99.       CelsTotal
  100.     };
  101.     virtual TDib* GetGlyphDib();
  102.     virtual void  ReleaseGlyphDib(TDib* glyph);
  103.     virtual void  BuildCelArray();
  104.     
  105.     //
  106.     // button protocol
  107.     // ------ --------
  108.     //
  109.  
  110.     //
  111.     // invoked by mouse-down & mouse enter events. sets member data "Pressed"
  112.     // to true and highlights the button
  113.     //
  114.     virtual void  BeginPressed(TPoint& p);
  115.  
  116.     //
  117.     // invoked by mouse exit events. sets member data "Pressed" to false and
  118.     // paints the button in its current state
  119.     //
  120.     virtual void  CancelPressed(TPoint& p);
  121.  
  122.     //
  123.     // invoked by mouse-up event inside the Gadget. sets member data "Pressed"
  124.     // to false, changes state for attribute buttons, and paints the button
  125.     // in its current state
  126.     //
  127.     // generates WM_COMMAND
  128.     //
  129.     virtual void  Activate(TPoint& p);
  130.  
  131.   private:
  132.     void          CheckExclusively();
  133. };
  134.  
  135. #endif  // OWL_BUTTONGA_H
  136.