]> git.saurik.com Git - wxWidgets.git/blame - utils/screenshotgen/src/customcombo.h
Include <fcntl.h> from a header using fcntl().
[wxWidgets.git] / utils / screenshotgen / src / customcombo.h
CommitLineData
0d5eda9c
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: custom_combo.h
3// Purpose: Define some custom wxComboCtrls
4// Author: Utensil Candel (UtensilCandel@@gmail.com)
5// RCS-ID: $Id$
526954c5 6// Licence: wxWindows licence
0d5eda9c
FM
7/////////////////////////////////////////////////////////////////////////////
8
9#ifndef WX_CUSTOM_COMBO_H
10#define WX_CUSTOM_COMBO_H
11
12// ----------------------------------------------------------------------------
4bae10bd 13// class PenStyleComboBox
0d5eda9c
FM
14// This class is a modified version of the one from samples/combo.cpp
15// ----------------------------------------------------------------------------
16
17#include <wx/odcombo.h>
18
4bae10bd 19class PenStyleComboBox : public wxOwnerDrawnComboBox
0d5eda9c
FM
20{
21public:
22 virtual void OnDrawItem( wxDC& dc,
23 const wxRect& rect,
24 int item,
25 int flags ) const;
26
27
28 virtual void OnDrawBackground( wxDC& dc, const wxRect& rect,
29 int item, int flags ) const;
30
31 virtual wxCoord OnMeasureItem( size_t item ) const;
32
33 virtual wxCoord OnMeasureItemWidth( size_t WXUNUSED(item) ) const;
34
4bae10bd 35 static PenStyleComboBox* CreateSample(wxWindow* parent);
0d5eda9c
FM
36};
37
38
39// ----------------------------------------------------------------------------
40// wxListView Custom popup interface
41// This class is a modified version of the one from samples/combo.cpp
42// ----------------------------------------------------------------------------
43
44#include <wx/listctrl.h>
45
46class ListViewComboPopup : public wxListView, public wxComboPopup
47{
48public:
49
50 virtual void Init()
51 {
52 m_value = -1;
53 m_itemHere = -1; // hot item in list
54 }
55
56 virtual bool Create( wxWindow* parent )
57 {
58 return wxListView::Create(parent,1,
59 wxPoint(0,0),wxDefaultSize,
60 wxLC_LIST|wxLC_VRULES|wxBORDER_THEME);
61 }
62
60a2264d
FM
63 virtual wxWindow *GetControl()
64 { return this; }
0d5eda9c
FM
65
66 virtual void SetStringValue( const wxString& s )
67 {
68 int n = wxListView::FindItem(-1,s);
69 if ( n >= 0 && n < GetItemCount() )
70 wxListView::Select(n);
71 }
72
73 virtual wxString GetStringValue() const
74 {
75 if ( m_value >= 0 )
76 return wxListView::GetItemText(m_value);
77 return wxEmptyString;
78 }
79
80 //
81 // Popup event handlers
82 //
83
84 // Mouse hot-tracking
85 void OnMouseMove(wxMouseEvent& event)
86 {
87 // Move selection to cursor if it is inside the popup
88
89 int resFlags;
90 int itemHere = HitTest(event.GetPosition(),resFlags);
91 if ( itemHere >= 0 )
92 {
93 wxListView::Select(itemHere,true);
94 m_itemHere = itemHere;
95 }
96 event.Skip();
97 }
98
99 // On mouse left, set the value and close the popup
100 void OnMouseClick(wxMouseEvent& WXUNUSED(event))
101 {
102 m_value = m_itemHere;
103 // TODO: Send event
104 Dismiss();
105 }
106
107 //
108 // Utilies for item manipulation
109 //
110
111 void AddSelection( const wxString& selstr )
112 {
113 wxListView::InsertItem(GetItemCount(),selstr);
114 }
115
116protected:
60a2264d
FM
117 int m_value; // current item index
118 int m_itemHere; // hot item in popup
0d5eda9c
FM
119
120private:
121 DECLARE_EVENT_TABLE()
122};
123
124
125// ----------------------------------------------------------------------------
126// wxTreeCtrl Custom popup interface
127// This class is a modified version of the one from samples/combo.cpp
128// ----------------------------------------------------------------------------
129
130#include <wx/treectrl.h>
131
132class TreeCtrlComboPopup : public wxTreeCtrl, public wxComboPopup
133{
134public:
135
136 virtual void Init()
137 {
138 }
139
140 virtual bool Create( wxWindow* parent )
141 {
142 return wxTreeCtrl::Create(parent,1,
143 wxPoint(0,0),wxDefaultSize,
144 wxTR_HAS_BUTTONS|wxTR_SINGLE|
145 wxTR_LINES_AT_ROOT|wxBORDER_THEME);
146 }
147
148 virtual void OnShow()
149 {
150 // make sure selected item is visible
151 if ( m_value.IsOk() )
152 EnsureVisible(m_value);
153 }
154
155 virtual wxSize GetAdjustedSize( int minWidth,
156 int WXUNUSED(prefHeight),
157 int maxHeight )
158 {
159 return wxSize(minWidth, wxMin(80, maxHeight));
160 }
161
60a2264d
FM
162 virtual wxWindow *GetControl()
163 { return this; }
0d5eda9c
FM
164
165 // Needed by SetStringValue
166 wxTreeItemId FindItemByText( wxTreeItemId parent, const wxString& text )
167 {
168 wxTreeItemIdValue cookie;
169 wxTreeItemId child = GetFirstChild(parent,cookie);
170 while ( child.IsOk() )
171 {
172 if ( GetItemText(child) == text )
173 {
174 return child;
175 }
176 if ( ItemHasChildren(child) )
177 {
178 wxTreeItemId found = FindItemByText(child,text);
179 if ( found.IsOk() )
180 return found;
181 }
182 child = GetNextChild(parent,cookie);
183 }
184 return wxTreeItemId();
185 }
186
187 virtual void SetStringValue( const wxString& s )
188 {
189 wxTreeItemId root = GetRootItem();
190 if ( !root.IsOk() )
191 return;
192
193 wxTreeItemId found = FindItemByText(root,s);
194 if ( found.IsOk() )
195 {
196 m_value = m_itemHere = found;
197 wxTreeCtrl::SelectItem(found);
198 }
199 }
200
201 virtual wxString GetStringValue() const
202 {
203 if ( m_value.IsOk() )
204 return wxTreeCtrl::GetItemText(m_value);
205 return wxEmptyString;
206 }
207
208 //
209 // Popup event handlers
210 //
211
212 // Mouse hot-tracking
213 void OnMouseMove(wxMouseEvent& event)
214 {
215 int resFlags;
216 wxTreeItemId itemHere = HitTest(event.GetPosition(),resFlags);
217 if ( itemHere.IsOk() && (resFlags & wxTREE_HITTEST_ONITEMLABEL) )
218 {
219 wxTreeCtrl::SelectItem(itemHere,true);
220 m_itemHere = itemHere;
221 }
222 event.Skip();
223 }
224
225 // On mouse left, set the value and close the popup
226 void OnMouseClick(wxMouseEvent& event)
227 {
228 int resFlags;
229 wxTreeItemId itemHere = HitTest(event.GetPosition(),resFlags);
230 if ( itemHere.IsOk() && (resFlags & wxTREE_HITTEST_ONITEMLABEL) )
231 {
232 m_itemHere = itemHere;
233 m_value = itemHere;
234 Dismiss();
235 // TODO: Send event
236 }
237 event.Skip();
238 }
239
240protected:
60a2264d
FM
241 wxTreeItemId m_value; // current item index
242 wxTreeItemId m_itemHere; // hot item in popup
0d5eda9c
FM
243
244private:
245 DECLARE_EVENT_TABLE()
246};
247
248
249#endif // WX_CUSTOM_COMBO_H