]> git.saurik.com Git - wxWidgets.git/blob - utils/framelayout/src/newbmpbtn.h
Cleaned up paint DC cache in ~wxPaintDC to avoid spurious memory warning
[wxWidgets.git] / utils / framelayout / src / newbmpbtn.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: No names yet.
3 // Purpose: Contrib. demo
4 // Author: Aleksandras Gluchovas
5 // Modified by:
6 // Created: ??/09/98
7 // RCS-ID: $Id$
8 // Copyright: (c) Aleksandras Gluchovas
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef __NEWBMPBTN_G__
13 #define __NEWBMPBTN_G__
14
15 #include "wx/button.h"
16 #include "wx/string.h"
17
18 // button lable-text alignment types
19
20 #define NB_ALIGN_TEXT_RIGHT 0
21 #define NB_ALIGN_TEXT_BOTTOM 1
22 #define NB_NO_TEXT 2
23 #define NB_NO_IMAGE 3
24
25 // classes declared in this header file
26
27 class wxNewBitmapButton;
28 class wxBorderLessBitmapButton;
29
30 // alternative class for wxBmpButton
31
32 class wxNewBitmapButton: public wxPanel
33 {
34 DECLARE_DYNAMIC_CLASS(wxNewBitmapButton)
35
36 protected:
37
38 friend class wxNewBitmapButtonSerializer;
39
40 int mTextToLabelGap;
41 int mMarginX;
42 int mMarginY;
43 int mTextAlignment;
44 bool mIsSticky;
45 bool mIsFlat;
46
47 wxString mLabelText;
48 wxString mImageFileName;
49 int mImageFileType;
50
51 wxBitmap mDepressedBmp; // source image for rendering
52 // labels for particular state
53
54 wxBitmap mFocusedBmp; // may not be always present -
55 // only if mHasFocusedBmp is TRUE
56
57 wxBitmap* mpDepressedImg;
58 wxBitmap* mpPressedImg;
59 wxBitmap* mpDisabledImg;
60 wxBitmap* mpFocusedImg;
61
62 // button state variables;
63 bool mDragStarted;
64 bool mIsPressed;
65 bool mIsInFocus;
66 bool mPrevPressedState;
67 bool mPrevInFocusState;
68
69 bool mHasFocusedBmp;
70
71 // type of event which is fired upon depression of this button
72 int mFiredEventType;
73
74 // pens for drawing decorations (borders)
75 wxPen mBlackPen;
76 wxPen mDarkPen;
77 wxPen mGrayPen;
78 wxPen mLightPen;
79
80 bool mIsCreated;
81 int mSizeIsSet;
82
83 protected:
84 void DestroyLabels();
85
86 // returns the label which match the current button state
87 virtual wxBitmap* GetStateLabel();
88
89 virtual void DrawShade( int outerLevel,
90 wxDC& dc,
91 wxPen& upperLeftSidePen,
92 wxPen& lowerRightSidePen );
93
94 bool IsInWindow( int x,int y );
95
96 public:
97
98 wxNewBitmapButton( const wxBitmap& labelBitmap = wxNullBitmap,
99 const wxString& labelText = "",
100 int alignText = NB_ALIGN_TEXT_BOTTOM,
101 bool isFlat = TRUE,
102 // this is the default type of fired events
103 int firedEventType = wxEVT_COMMAND_MENU_SELECTED,
104 int marginX = 2,
105 int marginY = 2,
106 int textToLabelGap = 2,
107 bool isSticky = FALSE
108 );
109
110 // use this constructor if buttons have to be persistant
111
112 wxNewBitmapButton( const wxString& bitmapFileName,
113 const int bitmapFileType = wxBITMAP_TYPE_BMP,
114 const wxString& labelText = "",
115 int alignText = NB_ALIGN_TEXT_BOTTOM,
116 bool isFlat = TRUE,
117 // this is the default type of fired events
118 int firedEventType = wxEVT_COMMAND_MENU_SELECTED,
119 int marginX = 2,
120 int marginY = 2,
121 int textToLabelGap = 2,
122 bool isSticky = FALSE
123 );
124
125 ~wxNewBitmapButton();
126
127 // should be called after Create();
128 virtual void Reshape();
129
130 // overridables
131 virtual void SetLabel(const wxBitmap& labelBitmap, const wxString& labelText = "" );
132
133 virtual void SetAlignments( int alignText = NB_ALIGN_TEXT_BOTTOM,
134 int marginX = 2,
135 int marginY = 2,
136 int textToLabelGap = 2);
137
138 virtual void DrawDecorations( wxDC& dc );
139 virtual void DrawLabel( wxDC& dc );
140
141 virtual void RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp,
142 bool isEnabled = TRUE,
143 bool isPressed = FALSE);
144
145 virtual void RenderLabelImages();
146 virtual void RenderAllLabelImages();
147
148 // event handlers
149 void OnLButtonDown( wxMouseEvent& event );
150 void OnLButtonUp( wxMouseEvent& event );
151 void OnMouseMove( wxMouseEvent& event );
152 void OnSize( wxSizeEvent& event );
153 void OnPaint( wxPaintEvent& event );
154 void OnEraseBackground( wxEraseEvent& event );
155 void OnKillFocus( wxFocusEvent& event );
156
157 DECLARE_EVENT_TABLE()
158 };
159
160 #endif