XRC: make wxStaticText's wrap property a dimension.
[wxWidgets.git] / utils / screenshotgen / src / customcombo.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: customcombo.cpp
3 // Purpose: Implement some custom wxComboCtrls
4 // Author: Utensil Candel (UtensilCandel@@gmail.com)
5 // Licence: wxWindows licence
6 /////////////////////////////////////////////////////////////////////////////
7
8 // For compilers that support precompilation, includes "wx/wx.h".
9 #include "wx/wxprec.h"
10
11 #ifdef __BORLANDC__
12 #pragma hdrstop
13 #endif
14
15 // for all others, include the necessary headers
16 #ifndef WX_PRECOMP
17 #include "wx/wx.h"
18 #endif
19
20 #if !wxUSE_COMBOCTRL
21 #error "Please set wxUSE_COMBOCTRL to 1 and rebuild the library."
22 #endif
23
24 #include "customcombo.h"
25
26
27 BEGIN_EVENT_TABLE(ListViewComboPopup, wxListView)
28 EVT_MOTION(ListViewComboPopup::OnMouseMove)
29 // NOTE: Left down event is used instead of left up right now
30 // since MSW wxListCtrl doesn't seem to emit left ups
31 // consistently.
32 EVT_LEFT_DOWN(ListViewComboPopup::OnMouseClick)
33 END_EVENT_TABLE()
34
35 BEGIN_EVENT_TABLE(TreeCtrlComboPopup, wxTreeCtrl)
36 EVT_MOTION(TreeCtrlComboPopup::OnMouseMove)
37 // NOTE: Left down event is used instead of left up right now
38 // since MSW wxTreeCtrl doesn't seem to emit left ups
39 // consistently.
40 EVT_LEFT_DOWN(TreeCtrlComboPopup::OnMouseClick)
41 END_EVENT_TABLE()
42
43
44
45 // ----------------------------------------------------------------------------
46 // PenStyleComboBox
47 // ----------------------------------------------------------------------------
48
49 void PenStyleComboBox::OnDrawItem( wxDC& dc,
50 const wxRect& rect,
51 int item,
52 int flags ) const
53 {
54 if ( item == wxNOT_FOUND )
55 return;
56
57 wxRect r(rect);
58 r.Deflate(3);
59 r.height -= 2;
60
61 int penStyle = wxSOLID;
62 // if ( item == 1 )
63 // penStyle = wxTRANSPARENT;
64 // else if ( item == 2 )
65 // penStyle = wxDOT;
66 // else if ( item == 3 )
67 // penStyle = wxLONG_DASH;
68 // else if ( item == 4 )
69 // penStyle = wxSHORT_DASH;
70 if ( item == 0 )
71 penStyle = wxDOT_DASH;
72 else if ( item == 1 )
73 penStyle = wxBDIAGONAL_HATCH;
74 else if ( item == 2 )
75 penStyle = wxCROSSDIAG_HATCH;
76 // else if ( item == 8 )
77 // penStyle = wxFDIAGONAL_HATCH;
78 // else if ( item == 9 )
79 // penStyle = wxCROSS_HATCH;
80 // else if ( item == 10 )
81 // penStyle = wxHORIZONTAL_HATCH;
82 // else if ( item == 11 )
83 // penStyle = wxVERTICAL_HATCH;
84
85 wxPen pen( dc.GetTextForeground(), 3, penStyle );
86
87 // Get text colour as pen colour
88 dc.SetPen( pen );
89
90 if ( !(flags & wxODCB_PAINTING_CONTROL) )
91 {
92 dc.DrawText(GetString( item ),
93 r.x + 3,
94 (r.y + 0) + ( (r.height/2) - dc.GetCharHeight() )/2
95 );
96
97 dc.DrawLine( r.x+5, r.y+((r.height/4)*3), r.x+r.width - 5, r.y+((r.height/4)*3) );
98 }
99 else
100 {
101 dc.DrawLine( r.x+5, r.y+r.height/2, r.x+r.width - 5, r.y+r.height/2 );
102 }
103 }
104
105 void PenStyleComboBox::OnDrawBackground( wxDC& dc, const wxRect& rect,
106 int item, int flags ) const
107 {
108 // If item is selected or even, or we are painting the
109 // combo control itself, use the default rendering.
110 if ( (flags & (wxODCB_PAINTING_CONTROL|wxODCB_PAINTING_SELECTED)) ||
111 (item & 1) == 0 )
112 {
113 wxOwnerDrawnComboBox::OnDrawBackground(dc,rect,item,flags);
114 return;
115 }
116
117 // Otherwise, draw every other background with different colour.
118 wxColour bgCol(240,240,250);
119 dc.SetBrush(wxBrush(bgCol));
120 dc.SetPen(wxPen(bgCol));
121 dc.DrawRectangle(rect);
122 }
123
124 inline wxCoord PenStyleComboBox::OnMeasureItem( size_t item ) const
125 {
126 // Simply demonstrate the ability to have variable-height items
127 if ( item & 1 )
128 return 36;
129 else
130 return 24;
131 }
132
133 inline wxCoord PenStyleComboBox::OnMeasureItemWidth( size_t WXUNUSED(item) ) const
134 {
135 return -1; // default - will be measured from text width
136 }
137
138 PenStyleComboBox * PenStyleComboBox::CreateSample(wxWindow* parent)
139 {
140 PenStyleComboBox* odc;
141
142 // Common list of items for all dialogs.
143 wxArrayString arrItems;
144
145 // Create common strings array
146 // arrItems.Add( wxT("Solid") );
147 // arrItems.Add( wxT("Transparent") );
148 // arrItems.Add( wxT("Dot") );
149 // arrItems.Add( wxT("Long Dash") );
150 // arrItems.Add( wxT("Short Dash") );
151 // Comment the following since we don't need too long a drop list
152 arrItems.Add( wxT("Dot Dash") );
153 arrItems.Add( wxT("Backward Diagonal Hatch") );
154 arrItems.Add( wxT("Cross-diagonal Hatch") );
155 // arrItems.Add( wxT("Forward Diagonal Hatch") );
156 // arrItems.Add( wxT("Cross Hatch") );
157 // arrItems.Add( wxT("Horizontal Hatch") );
158 // arrItems.Add( wxT("Vertical Hatch") );
159
160 // When defining derivative class for callbacks, we need
161 // to use two-stage creation (or redefine the common wx
162 // constructor).
163 odc = new PenStyleComboBox();
164 odc->Create(parent,wxID_ANY,wxEmptyString,
165 wxDefaultPosition, wxDefaultSize,
166 arrItems,
167 wxCB_READONLY //wxNO_BORDER | wxCB_READONLY
168 );
169
170
171 odc->SetSelection(0);
172
173 // Load images from disk
174 wxImage imgNormal(wxT("bitmaps/dropbutn.png"));
175 wxImage imgPressed(wxT("bitmaps/dropbutp.png"));
176 wxImage imgHover(wxT("bitmaps/dropbuth.png"));
177
178 if ( imgNormal.IsOk() && imgPressed.IsOk() && imgHover.IsOk() )
179 {
180 wxBitmap bmpNormal(imgNormal);
181 wxBitmap bmpPressed(imgPressed);
182 wxBitmap bmpHover(imgHover);
183 odc->SetButtonBitmaps(bmpNormal,false,bmpPressed,bmpHover);
184 }
185 else
186 wxLogError(wxT("Dropbutton images not found"));
187
188 return odc;
189 }
190