OWLNext    7.0
Borland's Object Windows Library for the modern age
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
buttonga.h
Go to the documentation of this file.
1//----------------------------------------------------------------------------
2// ObjectWindows
3// Copyright (c) 1992, 1996 by Borland International, All Rights Reserved
4//
5/// \file
6/// Definition of class TButtonGadget.
7//----------------------------------------------------------------------------
8
9#if !defined(OWL_BUTTONGA_H)
10#define OWL_BUTTONGA_H
11
12#include <owl/private/defs.h>
13#if defined(BI_HAS_PRAGMA_ONCE)
14# pragma once
15#endif
16
17#include <owl/gadget.h>
18
19namespace owl {
20
21class _OWLCLASS TCelArray;
22
23#include <owl/preclass.h>
24
25/// \addtogroup gadgets
26/// @{
27/// \class TButtonGadget
28// ~~~~~ ~~~~~~~~~~~~~
29/// Derived from TGadget, TButtonGadget represent buttons that you can click on or
30/// off. You can also apply attributes such as color, style, and shape (notched or
31/// unnotched) to your button gadgets.
32///
33/// In general, button gadgets are classified as either command or attribute
34/// buttons. Attribute buttons include radio buttons (which are considered
35/// exclusive), or check boxes (which are nonexclusive). The public data member,
36/// TType, enumerates these button types.
37/// TButtonGadget contains several functions that let you change the style of a
38/// button. Use SetAntialiasEdges to turn antialiasing on and off, SetNotchCorners
39/// to control corner notching, and SetShadowStyle to change the style of the button
40/// shadow.
41///
42/// TButtonGadget objects respond to mouse events in the following manner: when a
43/// mouse button is pressed, the button is pressed; when the mouse button is
44/// released, the button is released. Commands can be entered only when the mouse
45/// button is in the "up" state. When the mouse is pressed, TButtonGadget objects
46/// capture the mouse and reserve all mouse messages for the current window. When
47/// the mouse button is up, button gadgets release the capture for the current
48/// window. The public data member, TState, enumerates the three button states.
49///
50/// Buttons begin highlighting and do a capture when pressed (the mouse down
51/// occurs). they cancel highlighting when the mouse exits, but begin
52/// highlighting again when the mouse re-enters. when the mouse goes up the
53/// capture is released
54//
55/// There are two basic type of buttons: commands and settings (attribute
56/// buttons). Settings can be exclusive (like a radio button) or non-exclusive
57/// (like a check box), or SemiExclusive where they act like both
58//
59/// There are three normal button states: up, down, and indeterminate. in
60/// addition the button can be highlighted (pressed) in all three states
61//
62/// Commands can only be in the "up" state. Settings can be in all three states
63//
64/// \todo Move NotchCorners to OWL5COMPAT, implement repeating commands
66 public:
67/// Enumerates the types of button gadgets. An exclusive button is one that works in
68/// conjunction with other buttons such that one button is activated at a time.
69 enum TType { ///< Basic type of this button
70 Command, ///< Sends a command when pressed.
71 Exclusive, ///< Stays down when pressed and causes other buttons in the group to pop back up.
72 NonExclusive, ///< Toggles its state when pressed and ignores other buttons.
73 SemiExclusive, ///< Same as exclusive, except that it also pops back up if pressed while it is down.
74 RepeatCmd, ///< Auto-repeating command button.
75 };
76
77/// TState enumerates the three button positions during which the button can be
78/// pressed: up (0), down (1), and an indeterminate state (2). A nonzero value
79/// indicates a highlighted button.
80 enum TState { ///< Current state of this button
81 Up, ///< Button is up, i.e. unchecked
82 Down, ///< Button is down, i.e. checked
83 Indeterminate, ///< Button is neither checked nor unchecked
84 };
85
86#if defined(OWL5_COMPAT)
87/// Enumerates button shadow styles--either single (1) or double (2) shadow borders.
88 enum TShadowStyle { ///< Bottom & right side shadow width for old UI style
89 SingleShadow = 1,
90 DoubleShadow = 2,
91 };
92#endif
93
94 TButtonGadget(TResId glyphResIdOrIndex,
95 int id,
96 TType type = Command,
97 bool enabled = false, // initial state before cmd enabling
98 TState state = Up,
99 bool sharedGlyph = false);
100 ~TButtonGadget() override;
101
102 // Some accessors
103 //
104 void SetButtonState(TState newState);
105 TState GetButtonState() const;
106
107 TType GetButtonType() const;
108
109 // A few button style options. These styles may be ignores on some
110 // UI platforms
111 //
112 bool GetNotchCorners() const;
113 void SetNotchCorners(bool notchCorners=true);
114
115#if defined(OWL5_COMPAT)
118#endif
119
120 bool GetAntialiasEdges() const;
121 void SetAntialiasEdges(bool anti=true);
122
123 // TGadget overrides
124 //
125 void GetDesiredSize(TSize& size) override;
126 void SetBounds(const TRect& r) override;
127 void CommandEnable() override;
128 void SysColorChange() override;
129
130 protected:
131
132 // TGadget overrides
133 //
134 void Paint(TDC& dc) override;
135 void PaintBorder(TDC& dc) override;
136 void MouseEnter(uint modKeys, const TPoint& p) override;
137 void MouseMove(uint modKeys, const TPoint& p) override;
138 void MouseLeave(uint modKeys, const TPoint& p) override;
139 void LButtonDown(uint modKeys, const TPoint& p) override;
140 void LButtonUp(uint modKeys, const TPoint& p) override;
141
142 /// Glyph types and construction functions
143 //
144 /// Contains values that allow a glyph button to display different glyphs when its
145 /// state changes. For example, the CelPressed constant could be used to toggle a
146 /// glyph button between a happy face and a sad face when it is pressed.
147 /// \note Unused at the moment.
148 /// \todo Implement the functionality to allow a glyph button to display different glyphs when its
149 /// state changes
150 //
151 enum {
152 //CelMask,
153 CelNormal, ///< Displayed under normal circumstances.
154 CelDisabled, ///< Displayed when the button is disabled (grayed).
155 CelIndeterm, ///< Displayed when an ambiguous or indeterminate state is encountered.
156 CelDown, ///< Displayed when the button is down or checked.
157 CelPressed, ///< Displayed when the button is pressed.
159 };
160
161 // New virtuals
162 //
163 virtual void PaintFace(TDC& dc, const TRect& rect);
164 virtual TDib* GetGlyphDib();
165 virtual void ReleaseGlyphDib(TDib* glyph);
166 virtual void BuildCelArray();
167
168 // Button protocol
169 // ~~~~~~ ~~~~~~~~
170
171 // Invoked by mouse-down & mouse enter events. sets member data "Pressed"
172 // to true and highlights the button
173 //
174 virtual void BeginPressed(const TPoint& p);
175
176 // Invoked by mouse exit events. sets member data "Pressed" to false and
177 // paints the button in its current state.
178 // Sets gadget InMouse member to mstate.
179 //
180 virtual void CancelPressed(const TPoint& p, bool mstate=false);
181
182 // The action method called on a completed 'click', generates WM_COMMAND
183 //
184 virtual void Activate(const TPoint& p);
185
187// !CQ some of these need accessors of some sort...
188 TResId ResId; ///< Holds the resource ID for this button gadget's bitmap.
189 TCelArray* CelArray; ///< CelArray used to cache glyph states
190
191 TPoint BitmapOrigin; ///< Points to the x and y coordinates of the bitmap used for this button gadget.
192 TState State :4; ///< Current state of button
193 TType Type :4; ///< Type of this button
194#if defined(OWL5_COMPAT)
195 TShadowStyle ShadowStyle :4; ///< Shadow style, may be ignored w/ 3dUI
196#endif
197// !CQ bool Repeat :1; // Does this button auto-repeat
198 bool NotchCorners :1; ///< Notch (round) corners? ignored w/ 3dUI
199 bool Pressed :1; ///< Initialized to false, Pressed is true if the button is pushed or false if it is released.
200 bool AntialiasEdges:1; ///< Should border edges be antialiased?
201 bool SharingGlyph; ///< Should the button share glyphs with its gadget window?
202 int GlyphIndex; ///< Base index for our glyph bitmap
203
204 private:
205 int GlyphCount; ///< How many glyphs are we using (1,3,4,5)
206
207 protected:
208 void SetButtonType(TType newType);
209 void SetGlyphIndex(int index);
210 bool IsPressed() const;
211 void CheckExclusively();
212 TResId GetResId() const;
213
214 TCelArray* GetCelArray();
215 const TCelArray* GetCelArray() const;
216
217 TPoint& GetBitmapOrigin();
218 const TPoint& GetBitmapOrigin() const;
219 void SetBitmapOrigin(const TPoint& bitmapOrigin);
220
221 private:
222 friend class TBarDescr;
223};
224/// @}
225
226#include <owl/posclass.h>
227
228//----------------------------------------------------------------------------
229// Inline implementations
230//
231
232//
233/// Returns the state of the button.
234//
236 return State;
237}
238
239//
240/// Return the type of the button.
241//
243 return Type;
244}
245
246//
247/// Returns true if the button has rounded corners. This style may be ignores on
248/// some UI platforms.
249//
251 return NotchCorners;
252}
253
254//
255/// By default, SetNotchCorners implements notched corners for buttons. To repaint
256/// the frame of the button if the window has already been created, call
257/// InvalidateRect with the Bounds rectangle. This style may be ignores on some UI
258/// platforms.
259//
261 NotchCorners = notchCorners;
262}
263
264//
265/// Return the current shadow style of the button.
266//
267#if defined(OWL5_COMPAT)
268inline TButtonGadget::TShadowStyle TButtonGadget::GetShadowStyle() const {
269 return ShadowStyle;
270}
271
272/// Sets the button style to a shadow style which, by default, is DoubleShadow. Sets
273/// the left and top borders to 2 and the right and bottom borders to ShadowStyle +
274/// 1.
275/// \note This is obsolete under modern versions of Windows
276inline void TButtonGadget::SetShadowStyle(TShadowStyle s) {
277 ShadowStyle = s;
278}
279#endif
280
281//
282/// Returns true if the border edges are antialiased.
283//
285 return AntialiasEdges;
286}
287
288//
289/// Turns the antialiasing of the button bevels on or off. By default, antialiasing
290/// is on.
291//
293 AntialiasEdges=anti;
294}
295
296//
297/// Sets the type of the button.
298//
300{
301 Type = newType;
302}
303
304/// Returns the resource ID for this button gadget's bitmap.
306{
307 return ResId;
308}
309
310/// Returns the CelArray used to cache glyph states
312{
313 return CelArray;
314}
315
316/// Returns the CelArray used to cache glyph states
318{
319 return CelArray;
320}
321
322/// Returns the x and y coordinates of the bitmap used for this button gadget.
324{
325 return BitmapOrigin;
326}
327
328/// Returns the x and y coordinates of the bitmap used for this button gadget.
330{
331 return BitmapOrigin;
332}
333
334/// Sets the x and y coordinates of the bitmap used for this button gadget.
336{
337 BitmapOrigin = bitmapOrigin;
338}
339
340/// Returns true if the button is pushed or false if it is released
341inline bool TButtonGadget::IsPressed() const
342{
343 return Pressed;
344}
345
346
347} // OWL namespace
348
349
350#endif // OWL_BUTTONGA_H
Descriptor of Bar Implementation.
Definition bardescr.h:71
Derived from TGadget, TButtonGadget represent buttons that you can click on or off.
Definition buttonga.h:65
TState
TState enumerates the three button positions during which the button can be pressed: up (0),...
Definition buttonga.h:80
@ Down
Button is down, i.e. checked.
Definition buttonga.h:82
@ Up
Current state of this button.
Definition buttonga.h:81
@ Indeterminate
Button is neither checked nor unchecked.
Definition buttonga.h:83
TPoint & GetBitmapOrigin()
Returns the x and y coordinates of the bitmap used for this button gadget.
Definition buttonga.h:323
TResId GetResId() const
Returns the resource ID for this button gadget's bitmap.
Definition buttonga.h:305
bool GetAntialiasEdges() const
Return the current shadow style of the button.
Definition buttonga.h:284
TType
Enumerates the types of button gadgets.
Definition buttonga.h:69
@ NonExclusive
Toggles its state when pressed and ignores other buttons.
Definition buttonga.h:72
@ SemiExclusive
Same as exclusive, except that it also pops back up if pressed while it is down.
Definition buttonga.h:73
@ Exclusive
Stays down when pressed and causes other buttons in the group to pop back up.
Definition buttonga.h:71
@ Command
Basic type of this button.
Definition buttonga.h:70
@ RepeatCmd
Auto-repeating command button.
Definition buttonga.h:74
void SetNotchCorners(bool notchCorners=true)
By default, SetNotchCorners implements notched corners for buttons.
Definition buttonga.h:260
bool IsPressed() const
Returns true if the button is pushed or false if it is released.
Definition buttonga.h:341
TState GetButtonState() const
Returns the state of the button.
Definition buttonga.h:235
void SetBitmapOrigin(const TPoint &bitmapOrigin)
Sets the x and y coordinates of the bitmap used for this button gadget.
Definition buttonga.h:335
@ CelNormal
Displayed under normal circumstances.
Definition buttonga.h:153
@ CelPressed
Displayed when the button is pressed.
Definition buttonga.h:157
@ CelDown
Displayed when the button is down or checked.
Definition buttonga.h:156
@ CelIndeterm
Displayed when an ambiguous or indeterminate state is encountered.
Definition buttonga.h:155
@ CelDisabled
Displayed when the button is disabled (grayed).
Definition buttonga.h:154
bool GetNotchCorners() const
Returns true if the button has rounded corners.
Definition buttonga.h:250
TType GetButtonType() const
Return the type of the button.
Definition buttonga.h:242
void SetButtonType(TType newType)
Sets the type of the button.
Definition buttonga.h:299
void SetAntialiasEdges(bool anti=true)
Turns the antialiasing of the button bevels on or off.
Definition buttonga.h:292
TCelArray * GetCelArray()
Returns the CelArray used to cache glyph states.
Definition buttonga.h:311
TCelArray is a horizontal array of cels (a unit of animation) created by slicing a portion of or an e...
Definition celarray.h:35
TDC is the root class for GDI DC wrappers.
Definition dc.h:64
Pseudo-GDI object Device Independent Bitmap (DIB) class.
Definition gdiobjec.h:795
TGadget is the base class for the following derived gadget classes:
Definition gadget.h:120
TPoint is a support class, derived from tagPOINT.
Definition geometry.h:87
TRect is a mathematical class derived from tagRect.
Definition geometry.h:308
Base class TGadget and simple derived TSeparatorGadget.
Object Windows Library (OWLNext Core)
Definition animctrl.h:22
#define protected_data
Definition defs.h:208
#define _OWLCLASS
Definition defs.h:338