1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: combo.h 3 // Purpose: interface of wxComboCtrl and wxComboPopup 4 // Author: wxWidgets team 5 // Licence: wxWindows licence 6 ///////////////////////////////////////////////////////////////////////////// 7 8 // 9 // New window styles for wxComboCtrlBase 10 // 11 enum 12 { 13 // Double-clicking a read-only combo triggers call to popup's OnComboPopup. 14 // In wxOwnerDrawnComboBox, for instance, it cycles item. 15 wxCC_SPECIAL_DCLICK = 0x0100, 16 17 // Dropbutton acts like standard push button. 18 wxCC_STD_BUTTON = 0x0200 19 }; 20 21 22 /** 23 @class wxComboPopup 24 25 In order to use a custom popup with wxComboCtrl, an interface class must be 26 derived from wxComboPopup. 27 28 For more information on how to use it, see @ref comboctrl_custompopup. 29 30 @library{wxcore} 31 @category{ctrl} 32 33 @see wxComboCtrl 34 */ 35 class wxComboPopup 36 { 37 public: 38 /** 39 Default constructor. It is recommended that internal variables are 40 prepared in Init() instead (because m_combo is not valid in 41 constructor). 42 */ 43 wxComboPopup(); 44 45 /** 46 The derived class must implement this to create the popup control. 47 48 @return @true if the call succeeded, @false otherwise. 49 */ 50 virtual bool Create(wxWindow* parent) = 0; 51 52 /** 53 You only need to implement this member function if you create 54 your popup class in non-standard way. The default implementation can 55 handle both multiple-inherited popup control (as seen in wxComboCtrl 56 samples) and one allocated separately in heap. 57 58 If you do completely re-implement this function, make sure it calls 59 Destroy() for the popup control and also deletes @a this object 60 (usually as the last thing). 61 */ 62 virtual void DestroyPopup(); 63 64 /** 65 Utility function that hides the popup. 66 */ 67 void Dismiss(); 68 69 /** 70 Implement to customize matching of value string to an item container 71 entry. 72 73 @param item 74 String entered, usually by user or from SetValue() call. 75 76 @param trueItem 77 When item matches an entry, but the entry's string representation 78 is not exactly the same (case mismatch, for example), then the 79 true item string should be written back to here, if it is not 80 a NULL pointer. 81 82 @remarks 83 Default implementation always return true and does not alter 84 trueItem. 85 */ 86 virtual bool FindItem(const wxString& item, wxString* trueItem=NULL); 87 88 /** 89 The derived class may implement this to return adjusted size for the 90 popup control, according to the variables given. 91 92 @param minWidth 93 Preferred minimum width. 94 @param prefHeight 95 Preferred height. May be -1 to indicate no preference. 96 @param maxHeight 97 Max height for window, as limited by screen size. 98 99 @remarks This function is called each time popup is about to be shown. 100 */ 101 virtual wxSize GetAdjustedSize(int minWidth, int prefHeight, int maxHeight); 102 103 /** 104 Returns pointer to the associated parent wxComboCtrl. 105 */ 106 wxComboCtrl* GetComboCtrl() const; 107 108 /** 109 The derived class must implement this to return pointer to the 110 associated control created in Create(). 111 */ 112 virtual wxWindow* GetControl() = 0; 113 114 /** 115 The derived class must implement this to return string representation 116 of the value. 117 */ 118 virtual wxString GetStringValue() const = 0; 119 120 /** 121 The derived class must implement this to initialize its internal 122 variables. This method is called immediately after construction 123 finishes. m_combo member variable has been initialized before the call. 124 */ 125 virtual void Init(); 126 127 /** 128 Utility method that returns @true if Create has been called. 129 130 Useful in conjunction with LazyCreate(). 131 */ 132 bool IsCreated() const; 133 134 /** 135 The derived class may implement this to return @true if it wants to 136 delay call to Create() until the popup is shown for the first time. It 137 is more efficient, but on the other hand it is often more convenient to 138 have the control created immediately. 139 140 @remarks Base implementation returns @false. 141 */ 142 virtual bool LazyCreate(); 143 144 /** 145 The derived class may implement this to do something when the parent 146 wxComboCtrl gets double-clicked. 147 */ 148 virtual void OnComboDoubleClick(); 149 150 /** 151 The derived class may implement this to receive key events from the 152 parent wxComboCtrl. 153 154 Events not handled should be skipped, as usual. 155 */ 156 virtual void OnComboKeyEvent(wxKeyEvent& event); 157 158 /** 159 The derived class may implement this to do special processing when 160 popup is hidden. 161 */ 162 virtual void OnDismiss(); 163 164 /** 165 The derived class may implement this to do special processing when 166 popup is shown. 167 */ 168 virtual void OnPopup(); 169 170 /** 171 The derived class may implement this to paint the parent wxComboCtrl. 172 173 Default implementation draws value as string. 174 */ 175 virtual void PaintComboControl(wxDC& dc, const wxRect& rect); 176 177 /** 178 The derived class must implement this to receive string value changes 179 from wxComboCtrl. 180 */ 181 virtual void SetStringValue(const wxString& value); 182 183 protected: 184 /** 185 Parent wxComboCtrl. This member variable is prepared automatically 186 before Init() is called. 187 */ 188 wxComboCtrl* m_combo; 189 }; 190 191 192 193 /** 194 Features enabled for wxComboCtrl. 195 196 @see wxComboCtrl::GetFeatures() 197 */ 198 struct wxComboCtrlFeatures 199 { 200 enum 201 { 202 MovableButton = 0x0001, ///< Button can be on either side of control. 203 BitmapButton = 0x0002, ///< Button may be replaced with bitmap. 204 ButtonSpacing = 0x0004, ///< Button can have spacing from the edge 205 ///< of the control. 206 TextIndent = 0x0008, ///< wxComboCtrl::SetMargins() can be used. 207 PaintControl = 0x0010, ///< Combo control itself can be custom painted. 208 PaintWritable = 0x0020, ///< A variable-width area in front of writable 209 ///< combo control's textctrl can be custom 210 ///< painted. 211 Borderless = 0x0040, ///< wxNO_BORDER window style works. 212 213 All = MovableButton | BitmapButton | ButtonSpacing | 214 TextIndent | PaintControl | PaintWritable | 215 Borderless ///< All features. 216 }; 217 }; 218 219 220 /** 221 @class wxComboCtrl 222 223 A combo control is a generic combobox that allows totally custom popup. In 224 addition it has other customization features. For instance, position and 225 size of the dropdown button can be changed. 226 227 @section comboctrl_custompopup Setting Custom Popup for wxComboCtrl 228 229 wxComboCtrl needs to be told somehow which control to use and this is done 230 by SetPopupControl(). However, we need something more than just a wxControl 231 in this method as, for example, we need to call 232 SetStringValue("initial text value") and wxControl doesn't have such 233 method. So we also need a wxComboPopup which is an interface which must be 234 implemented by a control to be usable as a popup. 235 236 We couldn't derive wxComboPopup from wxControl as this would make it 237 impossible to have a class deriving from a wxWidgets control and from it, 238 so instead it is just a mix-in. 239 240 Here's a minimal sample of wxListView popup: 241 242 @code 243 #include <wx/combo.h> 244 #include <wx/listctrl.h> 245 246 class wxListViewComboPopup : public wxListView, public wxComboPopup 247 { 248 public: 249 // Initialize member variables 250 virtual void Init() 251 { 252 m_value = -1; 253 } 254 255 // Create popup control 256 virtual bool Create(wxWindow* parent) 257 { 258 return wxListView::Create(parent,1,wxPoint(0,0),wxDefaultSize); 259 } 260 261 // Return pointer to the created control 262 virtual wxWindow *GetControl() { return this; } 263 264 // Translate string into a list selection 265 virtual void SetStringValue(const wxString& s) 266 { 267 int n = wxListView::FindItem(-1,s); 268 if ( n >= 0 && n < wxListView::GetItemCount() ) 269 wxListView::Select(n); 270 } 271 272 // Get list selection as a string 273 virtual wxString GetStringValue() const 274 { 275 if ( m_value >= 0 ) 276 return wxListView::GetItemText(m_value); 277 return wxEmptyString; 278 } 279 280 // Do mouse hot-tracking (which is typical in list popups) 281 void OnMouseMove(wxMouseEvent& event) 282 { 283 // TODO: Move selection to cursor 284 } 285 286 // On mouse left up, set the value and close the popup 287 void OnMouseClick(wxMouseEvent& WXUNUSED(event)) 288 { 289 m_value = wxListView::GetFirstSelected(); 290 291 // TODO: Send event as well 292 293 Dismiss(); 294 } 295 296 protected: 297 298 int m_value; // current item index 299 300 private: 301 wxDECLARE_EVENT_TABLE(); 302 }; 303 304 wxBEGIN_EVENT_TABLE(wxListViewComboPopup, wxListView) 305 EVT_MOTION(wxListViewComboPopup::OnMouseMove) 306 EVT_LEFT_UP(wxListViewComboPopup::OnMouseClick) 307 wxEND_EVENT_TABLE() 308 @endcode 309 310 Here's how you would create and populate it in a dialog constructor: 311 312 @code 313 wxComboCtrl* comboCtrl = new wxComboCtrl(this, wxID_ANY, wxEmptyString); 314 315 wxListViewComboPopup* popupCtrl = new wxListViewComboPopup(); 316 317 // It is important to call SetPopupControl() as soon as possible 318 comboCtrl->SetPopupControl(popupCtrl); 319 320 // Populate using wxListView methods 321 popupCtrl->InsertItem(popupCtrl->GetItemCount(), "First Item"); 322 popupCtrl->InsertItem(popupCtrl->GetItemCount(), "Second Item"); 323 popupCtrl->InsertItem(popupCtrl->GetItemCount(), "Third Item"); 324 @endcode 325 326 @beginStyleTable 327 @style{wxCB_READONLY} 328 Text will not be editable. 329 @style{wxCB_SORT} 330 Sorts the entries in the list alphabetically. 331 @style{wxTE_PROCESS_ENTER} 332 The control will generate the event @c wxEVT_TEXT_ENTER 333 (otherwise pressing Enter key is either processed internally by the 334 control or used for navigation between dialog controls). Windows 335 only. 336 @style{wxCC_SPECIAL_DCLICK} 337 Double-clicking triggers a call to popup's OnComboDoubleClick. 338 Actual behaviour is defined by a derived class. For instance, 339 wxOwnerDrawnComboBox will cycle an item. This style only applies if 340 wxCB_READONLY is used as well. 341 @style{wxCC_STD_BUTTON} 342 Drop button will behave more like a standard push button. 343 @endStyleTable 344 345 @beginEventEmissionTable{wxCommandEvent} 346 @event{EVT_TEXT(id, func)} 347 Process a @c wxEVT_TEXT event, when the text changes. 348 @event{EVT_TEXT_ENTER(id, func)} 349 Process a @c wxEVT_TEXT_ENTER event, when RETURN is pressed in 350 the combo control. 351 @event{EVT_COMBOBOX_DROPDOWN(id, func)} 352 Process a @c wxEVT_COMBOBOX_DROPDOWN event, which is generated 353 when the popup window is shown (drops down). 354 @event{EVT_COMBOBOX_CLOSEUP(id, func)} 355 Process a @c wxEVT_COMBOBOX_CLOSEUP event, which is generated 356 when the popup window of the combo control disappears (closes up). 357 You should avoid adding or deleting items in this event. 358 @endEventTable 359 360 @library{wxcore} 361 @category{ctrl} 362 @appearance{comboctrl} 363 364 @see wxComboBox, wxChoice, wxOwnerDrawnComboBox, wxComboPopup, 365 wxCommandEvent 366 */ 367 class wxComboCtrl : public wxControl, 368 public wxTextEntry 369 { 370 public: 371 /** 372 Default constructor. 373 */ 374 wxComboCtrl(); 375 376 /** 377 Constructor, creating and showing a combo control. 378 379 @param parent 380 Parent window. Must not be @NULL. 381 @param id 382 Window identifier. The value wxID_ANY indicates a default value. 383 @param value 384 Initial selection string. An empty string indicates no selection. 385 @param pos 386 Window position. 387 If ::wxDefaultPosition is specified then a default position is chosen. 388 @param size 389 Window size. 390 If ::wxDefaultSize is specified then the window is sized appropriately. 391 @param style 392 Window style. See wxComboCtrl. 393 @param validator 394 Window validator. 395 @param name 396 Window name. 397 398 @see Create(), wxValidator 399 */ 400 wxComboCtrl(wxWindow* parent, wxWindowID id = wxID_ANY, 401 const wxString& value = wxEmptyString, 402 const wxPoint& pos = wxDefaultPosition, 403 const wxSize& size = wxDefaultSize, 404 long style = 0, 405 const wxValidator& validator = wxDefaultValidator, 406 const wxString& name = wxComboBoxNameStr); 407 408 /** 409 Destructor, destroying the combo control. 410 */ 411 virtual ~wxComboCtrl(); 412 413 /** 414 Copies the selected text to the clipboard. 415 */ 416 virtual void Copy(); 417 418 /** 419 Creates the combo control for two-step construction. Derived classes 420 should call or replace this function. See wxComboCtrl() for further 421 details. 422 */ 423 bool Create(wxWindow* parent, wxWindowID id = wxID_ANY, 424 const wxString& value = wxEmptyString, 425 const wxPoint& pos = wxDefaultPosition, 426 const wxSize& size = wxDefaultSize, 427 long style = 0, 428 const wxValidator& validator = wxDefaultValidator, 429 const wxString& name = wxComboBoxNameStr); 430 431 /** 432 Copies the selected text to the clipboard and removes the selection. 433 */ 434 virtual void Cut(); 435 436 /** 437 Dismisses the popup window. 438 439 Notice that calling this function will generate a 440 @c wxEVT_COMBOBOX_CLOSEUP event. 441 442 @since 2.9.2 443 */ 444 virtual void Dismiss(); 445 446 447 /** 448 Enables or disables popup animation, if any, depending on the value of 449 the argument. 450 */ 451 void EnablePopupAnimation(bool enable = true); 452 453 454 /** 455 Returns true if given key combination should toggle the popup. 456 */ 457 virtual bool IsKeyPopupToggle(const wxKeyEvent& event) const; 458 459 460 /** 461 Prepare background of combo control or an item in a dropdown list in a 462 way typical on platform. This includes painting the focus/disabled 463 background and setting the clipping region. 464 465 Unless you plan to paint your own focus indicator, you should always 466 call this in your wxComboPopup::PaintComboControl implementation. In 467 addition, it sets pen and text colour to what looks good and proper 468 against the background. 469 470 flags: wxRendererNative flags: 471 wxCONTROL_ISSUBMENU: is drawing a list item instead of combo control 472 wxCONTROL_SELECTED: list item is selected 473 wxCONTROL_DISABLED: control/item is disabled 474 */ 475 virtual void PrepareBackground( wxDC& dc, const wxRect& rect, int flags ) const; 476 477 /** 478 Returns true if focus indicator should be drawn in the control. 479 */ 480 bool ShouldDrawFocus() const; 481 482 /** 483 Returns disabled button bitmap that has been set with 484 SetButtonBitmaps(). 485 486 @return A reference to the disabled state bitmap. 487 */ 488 const wxBitmap& GetBitmapDisabled() const; 489 490 /** 491 Returns button mouse hover bitmap that has been set with 492 SetButtonBitmaps(). 493 494 @return A reference to the mouse hover state bitmap. 495 */ 496 const wxBitmap& GetBitmapHover() const; 497 498 /** 499 Returns default button bitmap that has been set with 500 SetButtonBitmaps(). 501 502 @return A reference to the normal state bitmap. 503 */ 504 const wxBitmap& GetBitmapNormal() const; 505 506 /** 507 Returns depressed button bitmap that has been set with 508 SetButtonBitmaps(). 509 510 @return A reference to the depressed state bitmap. 511 */ 512 const wxBitmap& GetBitmapPressed() const; 513 514 /** 515 Returns current size of the dropdown button. 516 */ 517 wxSize GetButtonSize(); 518 519 /** 520 Returns custom painted area in control. 521 522 @see SetCustomPaintWidth(). 523 */ 524 int GetCustomPaintWidth() const; 525 526 /** 527 Returns features supported by wxComboCtrl. If needed feature is 528 missing, you need to instead use wxGenericComboCtrl, which however may 529 lack a native look and feel (but otherwise sports identical API). 530 531 @return Value returned is a combination of the flags defined in 532 wxComboCtrlFeatures. 533 */ 534 static int GetFeatures(); 535 536 /** 537 Returns the current hint string. 538 539 See SetHint() for more information about hints. 540 541 @since 2.9.1 542 */ 543 virtual wxString GetHint() const; 544 545 /** 546 Returns the insertion point for the combo control's text field. 547 548 @note Under Windows, this function always returns 0 if the combo 549 control doesn't have the focus. 550 */ 551 virtual long GetInsertionPoint() const; 552 553 /** 554 Returns the last position in the combo control text field. 555 */ 556 virtual long GetLastPosition() const; 557 558 /** 559 Returns the margins used by the control. The @c x field of the returned 560 point is the horizontal margin and the @c y field is the vertical one. 561 562 @remarks If given margin cannot be accurately determined, its value 563 will be set to -1. 564 565 @see SetMargins() 566 567 @since 2.9.1 568 */ 569 wxPoint GetMargins() const; 570 571 /** 572 Returns current popup interface that has been set with 573 SetPopupControl(). 574 */ 575 wxComboPopup* GetPopupControl(); 576 577 /** 578 Returns popup window containing the popup control. 579 */ 580 wxWindow* GetPopupWindow() const; 581 582 /** 583 Get the text control which is part of the combo control. 584 */ 585 wxTextCtrl* GetTextCtrl() const; 586 587 /** 588 Returns actual indentation in pixels. 589 590 @deprecated Use GetMargins() instead. 591 */ 592 wxCoord GetTextIndent() const; 593 594 /** 595 Returns area covered by the text field (includes everything except 596 borders and the dropdown button). 597 */ 598 const wxRect& GetTextRect() const; 599 600 /** 601 Returns text representation of the current value. For writable combo 602 control it always returns the value in the text field. 603 */ 604 virtual wxString GetValue() const; 605 606 /** 607 Dismisses the popup window. 608 609 @param generateEvent 610 Set this to @true in order to generate 611 @c wxEVT_COMBOBOX_CLOSEUP event. 612 613 @deprecated Use Dismiss() instead. 614 */ 615 virtual void HidePopup(bool generateEvent=false); 616 617 /** 618 Returns @true if the popup is currently shown 619 */ 620 bool IsPopupShown() const; 621 622 /** 623 Returns @true if the popup window is in the given state. Possible 624 values are: 625 626 @beginTable 627 @row2col{wxComboCtrl::Hidden, Popup window is hidden.} 628 @row2col{wxComboCtrl::Animating, Popup window is being shown, but the 629 popup animation has not yet finished.} 630 @row2col{wxComboCtrl::Visible, Popup window is fully visible.} 631 @endTable 632 */ 633 bool IsPopupWindowState(int state) const; 634 635 /** 636 Implement in a derived class to define what happens on dropdown button 637 click. Default action is to show the popup. 638 639 @note If you implement this to do something else than show the popup, 640 you must then also implement DoSetPopupControl() to always return 641 @NULL. 642 */ 643 virtual void OnButtonClick(); 644 645 /** 646 Pastes text from the clipboard to the text field. 647 */ 648 virtual void Paste(); 649 650 /** 651 Shows the popup portion of the combo control. 652 653 Notice that calling this function will generate a 654 @c wxEVT_COMBOBOX_DROPDOWN event. 655 656 @since 2.9.2 657 */ 658 virtual void Popup(); 659 660 /** 661 Removes the text between the two positions in the combo control text 662 field. 663 664 @param from 665 The first position. 666 @param to 667 The last position. 668 */ 669 virtual void Remove(long from, long to); 670 671 /** 672 Replaces the text between two positions with the given text, in the 673 combo control text field. 674 675 @param from 676 The first position. 677 @param to 678 The second position. 679 @param text 680 The text to insert. 681 */ 682 virtual void Replace(long from, long to, const wxString& text); 683 684 /** 685 Sets custom dropdown button graphics. 686 687 @param bmpNormal 688 Default button image. 689 @param pushButtonBg 690 If @true, blank push button background is painted below the image. 691 @param bmpPressed 692 Depressed button image. 693 @param bmpHover 694 Button image when mouse hovers above it. This should be ignored on 695 platforms and themes that do not generally draw different kind of 696 button on mouse hover. 697 @param bmpDisabled 698 Disabled button image. 699 */ 700 void SetButtonBitmaps(const wxBitmap& bmpNormal, 701 bool pushButtonBg = false, 702 const wxBitmap& bmpPressed = wxNullBitmap, 703 const wxBitmap& bmpHover = wxNullBitmap, 704 const wxBitmap& bmpDisabled = wxNullBitmap); 705 706 /** 707 Sets size and position of dropdown button. 708 709 @param width 710 Button width. Value = 0 specifies default. 711 @param height 712 Button height. Value = 0 specifies default. 713 @param side 714 Indicates which side the button will be placed. Value can be wxLEFT 715 or wxRIGHT. 716 @param spacingX 717 Horizontal spacing around the button. Default is 0. 718 */ 719 void SetButtonPosition(int width = -1, int height = -1, 720 int side = wxRIGHT, int spacingX = 0); 721 722 /** 723 Set width, in pixels, of custom painted area in control without 724 @c wxCB_READONLY style. In read-only wxOwnerDrawnComboBox, this is used 725 to indicate area that is not covered by the focus rectangle. 726 */ 727 void SetCustomPaintWidth(int width); 728 729 /** 730 Sets a hint shown in an empty unfocused combo control. 731 732 Notice that hints are known as <em>cue banners</em> under MSW or 733 <em>placeholder strings</em> under OS X. 734 735 @see wxTextEntry::SetHint() 736 737 @since 2.9.1 738 */ 739 virtual bool SetHint(const wxString& hint); 740 741 /** 742 Sets the insertion point in the text field. 743 744 @param pos 745 The new insertion point. 746 */ 747 virtual void SetInsertionPoint(long pos); 748 749 /** 750 Sets the insertion point at the end of the combo control text field. 751 */ 752 virtual void SetInsertionPointEnd(); 753 754 //@{ 755 /** 756 Attempts to set the control margins. When margins are given as wxPoint, 757 x indicates the left and y the top margin. Use -1 to indicate that 758 an existing value should be used. 759 760 @return 761 @true if setting of all requested margins was successful. 762 763 @since 2.9.1 764 */ 765 bool SetMargins(const wxPoint& pt); 766 bool SetMargins(wxCoord left, wxCoord top = -1); 767 //@} 768 769 /** 770 Set side of the control to which the popup will align itself. Valid 771 values are @c wxLEFT, @c wxRIGHT and 0. The default value 0 means that 772 the most appropriate side is used (which, currently, is always 773 @c wxLEFT). 774 */ 775 void SetPopupAnchor(int anchorSide); 776 777 /** 778 Set popup interface class derived from wxComboPopup. This method should 779 be called as soon as possible after the control has been created, 780 unless OnButtonClick() has been overridden. 781 */ 782 void SetPopupControl(wxComboPopup* popup); 783 784 /** 785 Extends popup size horizontally, relative to the edges of the combo 786 control. 787 788 @param extLeft 789 How many pixel to extend beyond the left edge of the control. 790 Default is 0. 791 @param extRight 792 How many pixel to extend beyond the right edge of the control. 793 Default is 0. 794 795 @remarks Popup minimum width may override arguments. It is up to the 796 popup to fully take this into account. 797 */ 798 void SetPopupExtents(int extLeft, int extRight); 799 800 /** 801 Sets preferred maximum height of the popup. 802 803 @remarks Value -1 indicates the default. 804 */ 805 void SetPopupMaxHeight(int height); 806 807 /** 808 Sets minimum width of the popup. If wider than combo control, it will 809 extend to the left. 810 811 @remarks Value -1 indicates the default. Also, popup implementation may 812 choose to ignore this. 813 */ 814 void SetPopupMinWidth(int width); 815 816 /** 817 Selects the text between the two positions, in the combo control text 818 field. 819 820 @param from 821 The first position. 822 @param to 823 The second position. 824 */ 825 virtual void SetSelection(long from, long to); 826 827 /** 828 Sets the text for the text field without affecting the popup. Thus, 829 unlike SetValue(), it works equally well with combo control using 830 @c wxCB_READONLY style. 831 */ 832 void SetText(const wxString& value); 833 834 /** 835 Set a custom window style for the embedded wxTextCtrl. Usually you 836 will need to use this during two-step creation, just before Create(). 837 For example: 838 839 @code 840 wxComboCtrl* comboCtrl = new wxComboCtrl(); 841 842 // Let's make the text right-aligned 843 comboCtrl->SetTextCtrlStyle(wxTE_RIGHT); 844 845 comboCtrl->Create(parent, wxID_ANY, wxEmptyString); 846 @endcode 847 */ 848 void SetTextCtrlStyle( int style ); 849 850 /** 851 This will set the space in pixels between left edge of the control and 852 the text, regardless whether control is read-only or not. Value -1 can 853 be given to indicate platform default. 854 855 @deprecated Use SetMargins() instead. 856 */ 857 void SetTextIndent(int indent); 858 859 /** 860 Sets the text for the combo control text field. 861 862 @note For a combo control with @c wxCB_READONLY style the string must 863 be accepted by the popup (for instance, exist in the dropdown 864 list), otherwise the call to SetValue() is ignored. 865 */ 866 virtual void SetValue(const wxString& value); 867 868 /** 869 Changes value of the control as if user had done it by selecting an 870 item from a combo box drop-down list. 871 */ 872 void SetValueByUser(const wxString& value); 873 874 /** 875 Show the popup. 876 877 @deprecated Use Popup() instead. 878 */ 879 virtual void ShowPopup(); 880 881 /** 882 Undoes the last edit in the text field. Windows only. 883 */ 884 virtual void Undo(); 885 886 /** 887 Enable or disable usage of an alternative popup window, which 888 guarantees ability to focus the popup control, and allows common native 889 controls to function normally. This alternative popup window is usually 890 a wxDialog, and as such, when it is shown, its parent top-level window 891 will appear as if the focus has been lost from it. 892 */ 893 void UseAltPopupWindow(bool enable = true); 894 895 protected: 896 897 /** 898 This member function is not normally called in application code. 899 Instead, it can be implemented in a derived class to create a custom 900 popup animation. 901 902 The parameters are the same as those for DoShowPopup(). 903 904 @return @true if animation finishes before the function returns, 905 @false otherwise. In the latter case you need to manually call 906 DoShowPopup() after the animation ends. 907 */ 908 virtual bool AnimateShow(const wxRect& rect, int flags); 909 910 /** 911 This member function is not normally called in application code. 912 Instead, it can be implemented in a derived class to return default 913 wxComboPopup, in case @a popup is @NULL. 914 915 @note If you have implemented OnButtonClick() to do something else than 916 show the popup, then DoSetPopupControl() must always set @a popup 917 to @NULL. 918 */ 919 virtual void DoSetPopupControl(wxComboPopup* popup); 920 921 /** 922 This member function is not normally called in application code. 923 Instead, it must be called in a derived class to make sure popup is 924 properly shown after a popup animation has finished (but only if 925 AnimateShow() did not finish the animation within its function scope). 926 927 @param rect 928 Position to show the popup window at, in screen coordinates. 929 @param flags 930 Combination of any of the following: 931 @beginTable 932 @row2col{wxComboCtrl::ShowAbove, 933 Popup is shown above the control instead of below.} 934 @row2col{wxComboCtrl::CanDeferShow, 935 Showing the popup can be deferred to happen sometime after 936 ShowPopup() has finished. In this case, AnimateShow() must 937 return false.} 938 @endTable 939 */ 940 virtual void DoShowPopup(const wxRect& rect, int flags); 941 }; 942 943