[ 1519202 ] wxComboCtrl::SetButtonPosition() to support -1 width/height
[wxWidgets.git] / docs / latex / wx / comboctrl.tex
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 %% Name: comboctrl.tex
3 %% Purpose: wxComboCtrl docs
4 %% Author: Jaakko Salli
5 %% Modified by:
6 %% Created:
7 %% RCS-ID: $Id$
8 %% Copyright: (c) Jaakko Salli
9 %% License: wxWindows license
10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
11
12 \section{\class{wxComboCtrl}}\label{wxcomboctrl}
13
14 A combo control is a generic combobox that allows totally
15 custom popup. In addition it has other customization features.
16 For instance, position and size of the dropdown button
17 can be changed.
18
19 \wxheading{Setting Custom Popup for wxComboCtrl}
20
21 wxComboCtrl needs to be told somehow which control to use
22 and this is done by SetPopupControl(). However, we need
23 something more than just a wxControl in this method as,
24 for example, we need to call SetStringValue("initial text value")
25 and wxControl doesn't have such method. So we also need a
26 \helpref{wxComboPopup}{wxcombopopup} which is an interface which
27 must be implemented by a control to be usable as a popup.
28
29 We couldn't derive wxComboPopup from wxControl as this would make it
30 impossible to have a class deriving from a wxWidgets control and from
31 it, so instead it is just a mix-in.
32
33 Here's a minimal sample of \helpref{wxListView}{wxlistview} popup:
34
35 \begin{verbatim}
36
37 #include <wx/combo.h>
38 #include <wx/listctrl.h>
39
40 class wxListViewComboPopup : public wxListView,
41 public wxComboPopup
42 {
43 public:
44
45 // Initialize member variables
46 virtual void Init()
47 {
48 m_value = -1;
49 }
50
51 // Create popup control
52 virtual bool Create(wxWindow* parent)
53 {
54 return wxListView::Create(parent,1,wxPoint(0,0),wxDefaultSize);
55 }
56
57 // Return pointer to the created control
58 virtual wxWindow *GetControl() { return this; }
59
60 // Translate string into a list selection
61 virtual void SetStringValue(const wxString& s)
62 {
63 int n = wxListView::FindItem(-1,s);
64 if ( n >= 0 && n < wxListView::GetItemCount() )
65 wxListView::Select(n);
66 }
67
68 // Get list selection as a string
69 virtual wxString GetStringValue() const
70 {
71 if ( m_value >= 0 )
72 return wxListView::GetItemText(m_value);
73 return wxEmptyString;
74 }
75
76 // Do mouse hot-tracking (which is typical in list popups)
77 void OnMouseMove(wxMouseEvent& event)
78 {
79 // TODO: Move selection to cursor
80 }
81
82 // On mouse left up, set the value and close the popup
83 void OnMouseClick(wxMouseEvent& WXUNUSED(event))
84 {
85 m_value = wxListView::GetFirstSelected();
86
87 // TODO: Send event as well
88
89 Dismiss();
90 }
91
92 protected:
93
94 int m_value; // current item index
95
96 private:
97 DECLARE_EVENT_TABLE()
98 };
99
100 BEGIN_EVENT_TABLE(wxListViewComboPopup, wxListView)
101 EVT_MOTION(wxListViewComboPopup::OnMouseMove)
102 EVT_LEFT_UP(wxListViewComboPopup::OnMouseClick)
103 END_EVENT_TABLE()
104
105 \end{verbatim}
106
107 Here's how you would create and populate it in a dialog constructor:
108
109 \begin{verbatim}
110
111 wxComboCtrl* comboCtrl = new wxComboCtrl(this,wxID_ANY,wxEmptyString);
112
113 wxListViewComboPopup* popupCtrl = new wxListViewComboPopup();
114
115 comboCtrl->SetPopupControl(popupCtrl);
116
117 // Populate using wxListView methods
118 popupCtrl->InsertItem(popupCtrl->GetItemCount(),wxT("First Item"));
119 popupCtrl->InsertItem(popupCtrl->GetItemCount(),wxT("Second Item"));
120 popupCtrl->InsertItem(popupCtrl->GetItemCount(),wxT("Third Item"));
121
122 \end{verbatim}
123
124 \wxheading{Derived from}
125
126 \helpref{wxControl}{wxcontrol}\\
127 \helpref{wxWindow}{wxwindow}\\
128 \helpref{wxEvtHandler}{wxevthandler}\\
129 \helpref{wxObject}{wxobject}
130
131 \wxheading{Include files}
132
133 <combo.h>
134
135 \wxheading{Window styles}
136
137 \begin{twocollist}\itemsep=0pt
138 \twocolitem{\windowstyle{wxCB\_READONLY}}{Text will not be editable.}
139 \twocolitem{\windowstyle{wxCB\_SORT}}{Sorts the entries in the list alphabetically.}
140 \twocolitem{\windowstyle{wxPROCESS\_ENTER}}{The control will generate
141 the event wxEVT\_COMMAND\_TEXT\_ENTER (otherwise pressing Enter key
142 is either processed internally by the control or used for navigation between
143 dialog controls). Windows only.}
144 \twocolitem{\windowstyle{wxCC\_SPECIAL\_DCLICK}}{Double-clicking triggers a call
145 to popup's OnComboDoubleClick. Actual behaviour is defined by a derived
146 class. For instance, wxOwnerDrawnComboBox will cycle an item. This style only
147 applies if wxCB\_READONLY is used as well.}
148 \twocolitem{\windowstyle{wxCC\_ALT\_KEYS}}{Use keyboard behaviour alternate
149 to platform default: up and down keys will show popup (instead of cycling value,
150 for instance, on wxMSW).}
151 \twocolitem{\windowstyle{wxCC\_STD\_BUTTON}}{Drop button will behave
152 more like a standard push button.}
153 \end{twocollist}
154
155 See also \helpref{window styles overview}{windowstyles}.
156
157 \wxheading{Event handling}
158
159 \twocolwidtha{7cm}
160 \begin{twocollist}\itemsep=0pt
161 \twocolitem{{\bf EVT\_TEXT(id, func)}}{Process a wxEVT\_COMMAND\_TEXT\_UPDATED event,
162 when the text changes.}
163 \twocolitem{{\bf EVT\_TEXT\_ENTER(id, func)}}{Process a wxEVT\_COMMAND\_TEXT\_ENTER event,
164 when <RETURN> is pressed in the combo control.}
165 \end{twocollist}
166
167 \wxheading{See also}
168
169 \helpref{wxComboBox}{wxcombobox}, \helpref{wxChoice}{wxchoice},
170 \helpref{wxOwnerDrawnComboBox}{wxownerdrawncombobox},
171 \rtfsp\helpref{wxComboPopup}{wxcombopopup}, \helpref{wxCommandEvent}{wxcommandevent}
172
173 \latexignore{\rtfignore{\wxheading{Members}}}
174
175
176 \membersection{wxComboCtrl::wxComboCtrl}\label{wxcomboctrlctor}
177
178 \func{}{wxComboCtrl}{\void}
179
180 Default constructor.
181
182 \func{}{wxComboCtrl}{\param{wxWindow*}{ parent}, \param{wxWindowID}{ id},\rtfsp
183 \param{const wxString\& }{value = ``"}, \param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
184 \param{long}{ style = 0}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``comboCtrl"}}
185
186 Constructor, creating and showing a combo control.
187
188 \wxheading{Parameters}
189
190 \docparam{parent}{Parent window. Must not be NULL.}
191
192 \docparam{id}{Window identifier. A value of -1 indicates a default value.}
193
194 \docparam{value}{Initial selection string. An empty string indicates no selection.}
195
196 \docparam{pos}{Window position.}
197
198 \docparam{size}{Window size. If the default size (-1, -1) is specified then the window is sized
199 appropriately.}
200
201 \docparam{style}{Window style. See \helpref{wxComboCtrl}{wxcomboctrl}.}
202
203 \docparam{validator}{Window validator.}
204
205 \docparam{name}{Window name.}
206
207 \wxheading{See also}
208
209 \helpref{wxComboCtrl::Create}{wxcomboctrlcreate}, \helpref{wxValidator}{wxvalidator}
210
211
212 \membersection{wxComboCtrl::\destruct{wxComboCtrl}}\label{wxcomboctrldtor}
213
214 \func{}{\destruct{wxComboCtrl}}{\void}
215
216 Destructor, destroying the combo control.
217
218
219 \membersection{wxComboCtrl::Create}\label{wxcomboctrlcreate}
220
221 \func{bool}{Create}{\param{wxWindow*}{ parent}, \param{wxWindowID}{ id},\rtfsp
222 \param{const wxString\& }{value = ``"}, \param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize},\rtfsp
223 \param{long}{ style = 0}, \param{const wxValidator\& }{validator = wxDefaultValidator}, \param{const wxString\& }{name = ``comboCtrl"}}
224
225 Creates the combo control for two-step construction. Derived classes
226 should call or replace this function. See \helpref{wxComboCtrl::wxComboCtrl}{wxcomboctrlctor}\rtfsp
227 for further details.
228
229
230 \membersection{wxComboCtrl::Copy}\label{wxcomboctrlcopy}
231
232 \func{void}{Copy}{\void}
233
234 Copies the selected text to the clipboard.
235
236
237 \membersection{wxComboCtrl::Cut}\label{wxcomboctrlcut}
238
239 \func{void}{Cut}{\void}
240
241 Copies the selected text to the clipboard and removes the selection.
242
243
244 \membersection{wxComboCtrl::GetBitmapDisabled}\label{wxcomboctrlgetbitmapdisabled}
245
246 \constfunc{const wxBitmap\&}{GetBitmapDisabled}{\void}
247
248 Returns disabled button bitmap that has been set with
249 \helpref{SetButtonBitmaps}{wxcomboctrlsetbuttonbitmaps}.
250
251 \wxheading{Return value}
252
253 A reference to the disabled state bitmap.
254
255
256 \membersection{wxComboCtrl::GetBitmapHover}\label{wxcomboctrlgetbitmaphover}
257
258 \constfunc{const wxBitmap\&}{GetBitmapHover}{\void}
259
260 Returns button mouse hover bitmap that has been set with
261 \helpref{SetButtonBitmaps}{wxcomboctrlsetbuttonbitmaps}.
262
263 \wxheading{Return value}
264
265 A reference to the mouse hover state bitmap.
266
267
268 \membersection{wxComboCtrl::GetBitmapNormal}\label{wxcomboctrlgetbitmapnormal}
269
270 \constfunc{const wxBitmap\&}{GetBitmapNormal}{\void}
271
272 Returns default button bitmap that has been set with
273 \helpref{SetButtonBitmaps}{wxcomboctrlsetbuttonbitmaps}.
274
275 \wxheading{Return value}
276
277 A reference to the normal state bitmap.
278
279
280 \membersection{wxComboCtrl::GetBitmapPressed}\label{wxcomboctrlgetbitmappressed}
281
282 \constfunc{const wxBitmap\&}{GetBitmapPressed}{\void}
283
284 Returns depressed button bitmap that has been set with
285 \helpref{SetButtonBitmaps}{wxcomboctrlsetbuttonbitmaps}.
286
287 \wxheading{Return value}
288
289 A reference to the depressed state bitmap.
290
291
292 \membersection{wxComboCtrl::GetButtonSize}\label{wxcomboctrlgetbuttonsize}
293
294 \func{wxSize}{GetButtonSize}{\void}
295
296 Returns current size of the dropdown button.
297
298
299 \membersection{wxComboCtrl::GetCustomPaintWidth}\label{wxcomboctrlgetcustompaintwidth}
300
301 \constfunc{int}{GetCustomPaintWidth}{\void}
302
303 Returns custom painted area in control.
304
305 \wxheading{See also}
306
307 \helpref{wxComboCtrl::SetCustomPaintWidth}{wxcomboctrlsetcustompaintwidth}.
308
309
310 \membersection{wxComboCtrl::GetFeatures}\label{wxcomboctrlgetfeatures}
311
312 \func{static int}{GetFeatures}{\void}
313
314 Returns features supported by wxComboCtrl. If needed feature is missing,
315 you need to instead use wxGenericComboCtrl, which however may lack
316 native look and feel (but otherwise sports identical API).
317
318 \wxheading{Return value}
319
320 Value returned is a combination of following flags:
321
322 \twocolwidtha{8cm}%
323 \begin{twocollist}\itemsep=0pt
324 \twocolitem{{\tt wxComboCtrlFeatures::MovableButton}}{Button can
325 be on either side of the control.}
326 \twocolitem{{\tt wxComboCtrlFeatures::BitmapButton}}{Button may
327 be replaced with bitmap.}
328 \twocolitem{{\tt wxComboCtrlFeatures::ButtonSpacing}}{Button can
329 have spacing.}
330 \twocolitem{{\tt wxComboCtrlFeatures::TextIndent}}{SetTextIndent
331 works.}
332 \twocolitem{{\tt wxComboCtrlFeatures::PaintControl}}{Combo control
333 itself can be custom painted.}
334 \twocolitem{{\tt wxComboCtrlFeatures::PaintWritable}}{A variable-
335 width area in front of writable combo control's textctrl can
336 be custom painted.}
337 \twocolitem{{\tt wxComboCtrlFeatures::Borderless}}{wxNO\_BORDER
338 window style works.}
339 \twocolitem{{\tt wxComboCtrlFeatures::All}}{All of the
340 above.}
341 \end{twocollist}
342
343
344 \membersection{wxComboCtrl::GetInsertionPoint}\label{wxcomboctrlgetinsertionpoint}
345
346 \constfunc{long}{GetInsertionPoint}{\void}
347
348 Returns the insertion point for the combo control's text field.
349
350 \textbf{Note:} Under wxMSW, this function always returns $0$ if the combo control
351 doesn't have the focus.
352
353
354 \membersection{wxComboCtrl::GetLastPosition}\label{wxcomboctrlgetlastposition}
355
356 \constfunc{long}{GetLastPosition}{\void}
357
358 Returns the last position in the combo control text field.
359
360
361 \membersection{wxComboCtrl::GetPopupControl}\label{wxcomboctrlgetpopupcontrol}
362
363 \func{wxComboPopup*}{GetPopupControl}{\void}
364
365 Returns current popup interface that has been set with SetPopupControl.
366
367
368 \membersection{wxComboCtrl::GetPopupWindow}\label{wxcomboctrlgetpopupwindow}
369
370 \constfunc{wxWindow*}{GetPopupWindow}{\void}
371
372 Returns popup window containing the popup control.
373
374
375 \membersection{wxComboCtrl::GetTextCtrl}\label{wxcomboctrlgettextctrl}
376
377 \constfunc{wxTextCtrl*}{GetTextCtrl}{\void}
378
379 Get the text control which is part of the combo control.
380
381
382 \membersection{wxComboCtrl::GetTextIndent}\label{wxcomboctrlgettextindent}
383
384 \constfunc{wxCoord}{GetTextIndent}{\void}
385
386 Returns actual indentation in pixels.
387
388
389 \membersection{wxComboCtrl::GetValue}\label{wxcomboctrlgetvalue}
390
391 \constfunc{wxString}{GetValue}{\void}
392
393 Returns text representation of the current value. For writable
394 combo control it always returns the value in the text field.
395
396
397 \membersection{wxComboCtrl::HidePopup}\label{wxcomboctrlhidepopup}
398
399 \func{void}{HidePopup}{\void}
400
401 Dismisses the popup window.
402
403
404 \membersection{wxComboCtrl::IsPopupShown}\label{wxcomboctrlispopupshown}
405
406 \constfunc{bool}{IsPopupShown}{\void}
407
408 Returns \true if the popup is currently shown
409
410
411 \membersection{wxComboCtrl::OnButtonClick}\label{wxcomboctrlonbuttonclick}
412
413 \func{void}{OnButtonClick}{\void}
414
415 Implement in a derived class to define what happens on
416 dropdown button click.
417
418 Default action is to show the popup.
419
420
421 \membersection{wxComboCtrl::Paste}\label{wxcomboctrlpaste}
422
423 \func{void}{Paste}{\void}
424
425 Pastes text from the clipboard to the text field.
426
427
428 \membersection{wxComboCtrl::Remove}\label{wxcomboctrlremove}
429
430 \func{void}{Remove}{\param{long }{from}, \param{long }{to}}
431
432 Removes the text between the two positions in the combo control text field.
433
434 \wxheading{Parameters}
435
436 \docparam{from}{The first position.}
437
438 \docparam{to}{The last position.}
439
440
441 \membersection{wxComboCtrl::Replace}\label{wxcomboctrlreplace}
442
443 \func{void}{Replace}{\param{long }{from}, \param{long }{to}, \param{const wxString\& }{value}}
444
445 Replaces the text between two positions with the given text, in the combo control text field.
446
447 \wxheading{Parameters}
448
449 \docparam{from}{The first position.}
450
451 \docparam{to}{The second position.}
452
453 \docparam{text}{The text to insert.}
454
455
456 \membersection{wxComboCtrl::SetButtonBitmaps}\label{wxcomboctrlsetbuttonbitmaps}
457
458 \func{void}{SetButtonBitmaps}{\param{const wxBitmap\& }{bmpNormal}, \param{bool }{pushButtonBg = false}, \param{const wxBitmap\& }{bmpPressed = wxNullBitmap}, \param{const wxBitmap\& }{bmpHover = wxNullBitmap}, \param{const wxBitmap\& }{bmpDisabled = wxNullBitmap}}
459
460 Sets custom dropdown button graphics.
461
462 \wxheading{Parameters}
463
464 \docparam{bmpNormal}{Default button image.}
465 \docparam{pushButtonBg}{If \true, blank push button background is painted
466 below the image.}
467 \docparam{bmpPressed}{Depressed button image.}
468 \docparam{bmpHover}{Button image when mouse hovers above it. This
469 should be ignored on platforms and themes that do not generally draw
470 different kind of button on mouse hover.}
471 \docparam{bmpDisabled}{Disabled button image.}
472
473
474 \membersection{wxComboCtrl::SetButtonPosition}\label{wxcomboctrlsetbuttonposition}
475
476 \func{void}{SetButtonPosition}{\param{int }{width = -1}, \param{int }{height = -1}, \param{int }{side = wxRIGHT}, \param{int }{spacingX = 0}}
477
478 Sets size and position of dropdown button.
479
480 \wxheading{Parameters}
481
482 \docparam{width}{Button width. Value <= $0$ specifies default.}
483 \docparam{height}{Button height. Value <= $0$ specifies default.}
484 \docparam{side}{Indicates which side the button will be placed.
485 Value can be {\tt wxLEFT} or {\tt wxRIGHT}.}
486 \docparam{spacingX}{Horizontal spacing around the button. Default is $0$.}
487
488
489 \membersection{wxComboCtrl::SetCustomPaintWidth}\label{wxcomboctrlsetcustompaintwidth}
490
491 \func{void}{SetCustomPaintWidth}{\param{int }{width}}
492
493 Set width, in pixels, of custom painted area in control without {\tt wxCB\_READONLY}
494 style. In read-only \helpref{wxOwnerDrawnComboBox}{wxownerdrawncombobox}, this is used
495 to indicate area that is not covered by the focus rectangle.
496
497
498 \membersection{wxComboCtrl::SetInsertionPoint}\label{wxcomboctrlsetinsertionpoint}
499
500 \func{void}{SetInsertionPoint}{\param{long }{pos}}
501
502 Sets the insertion point in the text field.
503
504 \wxheading{Parameters}
505
506 \docparam{pos}{The new insertion point.}
507
508
509 \membersection{wxComboCtrl::SetInsertionPointEnd}\label{wxcomboctrlsetinsertionpointend}
510
511 \func{void}{SetInsertionPointEnd}{\void}
512
513 Sets the insertion point at the end of the combo control text field.
514
515
516 \membersection{wxComboCtrl::SetPopupAnchor}\label{wxcomboctrlsetpopupanchor}
517
518 \func{void}{SetPopupAnchor}{\param{int }{anchorSide}}
519
520 Set side of the control to which the popup will align itself. Valid values are
521 {\tt wxLEFT}, {\tt wxRIGHT} and $0$. The default value $0$ means that the most appropriate
522 side is used (which, currently, is always {\tt wxLEFT}).
523
524
525 \membersection{wxComboCtrl::SetPopupControl}\label{wxcomboctrlsetpopupcontrol}
526
527 \func{void}{SetPopupControl}{\param{wxComboPopup* }{popup}}
528
529 Set popup interface class derived from wxComboPopup.
530 This method should be called as soon as possible after the control
531 has been created, unless \helpref{OnButtonClick}{wxcomboctrlonbuttonclick}
532 has been overridden.
533
534
535 \membersection{wxComboCtrl::SetPopupExtents}\label{wxcomboctrlsetpopupextents}
536
537 \func{void}{SetPopupExtents}{\param{int }{extLeft}, \param{int }{extRight}}
538
539 Extends popup size horizontally, relative to the edges of the combo control.
540
541 \wxheading{Parameters}
542
543 \docparam{extLeft}{How many pixel to extend beyond the left edge of the
544 control. Default is $0$.}
545 \docparam{extRight}{How many pixel to extend beyond the right edge of the
546 control. Default is $0$.}
547
548 \wxheading{Remarks}
549
550 Popup minimum width may override arguments.
551
552 It is up to the popup to fully take this into account.
553
554
555 \membersection{wxComboCtrl::SetPopupMaxHeight}\label{wxcomboctrlsetpopupmaxheight}
556
557 \func{void}{SetPopupMaxHeight}{\param{int }{height}}
558
559 Sets preferred maximum height of the popup.
560
561 \wxheading{Remarks}
562
563 Value -1 indicates the default.
564
565 Also, popup implementation may choose to ignore this.
566
567
568 \membersection{wxComboCtrl::SetPopupMinWidth}\label{wxcomboctrlsetpopupminwidth}
569
570 \func{void}{SetPopupMinWidth}{\param{int }{width}}
571
572 Sets minimum width of the popup. If wider than combo control, it will extend to the left.
573
574 \wxheading{Remarks}
575
576 Value -1 indicates the default.
577
578 Also, popup implementation may choose to ignore this.
579
580
581 \membersection{wxComboCtrl::SetSelection}\label{wxcomboctrlsetselection}
582
583 \func{void}{SetSelection}{\param{long }{from}, \param{long }{to}}
584
585 Selects the text between the two positions, in the combo control text field.
586
587 \wxheading{Parameters}
588
589 \docparam{from}{The first position.}
590
591 \docparam{to}{The second position.}
592
593
594 \membersection{wxComboCtrl::SetText}\label{wxcomboctrlsettext}
595
596 \func{void}{SetText}{\param{const wxString\& }{value}}
597
598 Sets the text for the text field without affecting the
599 popup. Thus, unlike \helpref{SetValue}{wxcomboctrlsetvalue}, it works
600 equally well with combo control using {\tt wxCB\_READONLY} style.
601
602
603 \membersection{wxComboCtrl::SetTextIndent}\label{wxcomboctrlsettextindent}
604
605 \func{void}{SetTextIndent}{\param{int }{indent}}
606
607 This will set the space in pixels between left edge of the control and the
608 text, regardless whether control is read-only or not. Value -1 can be
609 given to indicate platform default.
610
611
612 \membersection{wxComboCtrl::SetValue}\label{wxcomboctrlsetvalue}
613
614 \func{void}{SetValue}{\param{const wxString\& }{value}}
615
616 Sets the text for the combo control text field.
617
618 {\bf NB:} For a combo control with {\tt wxCB\_READONLY} style the
619 string must be accepted by the popup (for instance, exist in the dropdown
620 list), otherwise the call to SetValue() is ignored
621
622
623 \membersection{wxComboCtrl::ShowPopup}\label{wxcomboctrlshowpopup}
624
625 \func{void}{ShowPopup}{\void}
626
627 Show the popup.
628
629
630 \membersection{wxComboCtrl::Undo}\label{wxcomboctrlundo}
631
632 \func{void}{Undo}{\void}
633
634 Undoes the last edit in the text field. Windows only.