X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6463b9f5399b8670a0c74f2f8666bc2c9f37a406..9c112555198f51fcec71106530cddba95a17f3dc:/src/univ/combobox.cpp?ds=sidebyside diff --git a/src/univ/combobox.cpp b/src/univ/combobox.cpp index a61d580100..dbe2c63b75 100644 --- a/src/univ/combobox.cpp +++ b/src/univ/combobox.cpp @@ -71,7 +71,7 @@ class wxComboButton : public wxBitmapButton { public: wxComboButton(wxComboControl *combo) - : wxBitmapButton(combo->GetParent(), -1, wxNullBitmap, + : wxBitmapButton(combo->GetParent(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE | wxBU_EXACTFIT) { @@ -122,13 +122,15 @@ public: virtual ~wxComboListBox(); // implement wxComboPopup methods - virtual bool SetSelection(const wxString& value); - virtual void SetSelection(int n, bool select) - { wxListBox::SetSelection( n, select); }; + virtual bool SetSelection(const wxString& s); virtual wxControl *GetControl() { return this; } virtual void OnShow(); virtual wxCoord GetBestWidth() const; + // fix virtual function hiding + virtual void SetSelection(int n) { DoSetSelection(n, true); } + void SetSelection(int n, bool select) { DoSetSelection(n, select); } + protected: // we shouldn't return height too big from here virtual wxSize DoGetBestClientSize() const; @@ -182,12 +184,12 @@ private: // ---------------------------------------------------------------------------- BEGIN_EVENT_TABLE(wxComboButton, wxButton) - EVT_BUTTON(-1, wxComboButton::OnButton) + EVT_BUTTON(wxID_ANY, wxComboButton::OnButton) END_EVENT_TABLE() BEGIN_EVENT_TABLE(wxComboListBox, wxListBox) - EVT_LISTBOX(-1, wxComboListBox::OnSelect) - EVT_LISTBOX_DCLICK(-1, wxComboListBox::OnSelect) + EVT_LISTBOX(wxID_ANY, wxComboListBox::OnSelect) + EVT_LISTBOX_DCLICK(wxID_ANY, wxComboListBox::OnSelect) EVT_MOTION(wxComboListBox::OnMouseMove) EVT_LEFT_UP(wxComboListBox::OnLeftUp) END_EVENT_TABLE() @@ -200,7 +202,7 @@ END_EVENT_TABLE() BEGIN_EVENT_TABLE(wxComboTextCtrl, wxTextCtrl) EVT_KEY_DOWN(wxComboTextCtrl::OnKey) EVT_KEY_UP(wxComboTextCtrl::OnKey) - EVT_TEXT(-1, wxComboTextCtrl::OnText) + EVT_TEXT(wxID_ANY, wxComboTextCtrl::OnText) END_EVENT_TABLE() IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxControl) @@ -217,7 +219,7 @@ void wxComboControl::Init() { m_popup = (wxComboPopup *)NULL; m_winPopup = (wxPopupComboWindow *)NULL; - m_isPopupShown = FALSE; + m_isPopupShown = false; m_btn = NULL; m_text = NULL; } @@ -236,7 +238,7 @@ bool wxComboControl::Create(wxWindow *parent, style &= ~wxBORDER_NONE; style |= wxBORDER_SUNKEN; if ( !wxControl::Create(parent, id, pos, size, style, validator, name) ) - return FALSE; + return false; // create the text control and the button as our siblings (*not* children), // don't care about size/position here - they will be set in DoMoveWindow() @@ -248,10 +250,10 @@ bool wxComboControl::Create(wxWindow *parent, // for compatibility with the other ports, the height specified is the // combined height of the combobox itself and the popup - if ( size.y == -1 ) + if ( size.y == wxDefaultCoord ) { // ok, use default height for popup too - m_heightPopup = -1; + m_heightPopup = wxDefaultCoord; } else { @@ -267,20 +269,20 @@ bool wxComboControl::Create(wxWindow *parent, // have to disable this window to avoid interfering it with message // processing to the text and the button... but pretend it is enabled to - // make IsEnabled() return TRUE - wxControl::Enable(FALSE); // don't use non virtual Disable() here! - m_isEnabled = TRUE; + // make IsEnabled() return true + wxControl::Enable(false); // don't use non virtual Disable() here! + m_isEnabled = true; CreateInputHandler(wxINP_HANDLER_COMBOBOX); - return TRUE; + return true; } wxComboControl::~wxComboControl() { // as the button and the text control are the parent's children and not // ours, we have to delete them manually - they are not deleted - // automatically by wxWindows when we're deleted + // automatically by wxWidgets when we're deleted delete m_btn; delete m_text; @@ -310,7 +312,7 @@ wxSize wxComboControl::DoGetBestClientSize() const widthPopup = m_popup->GetBestWidth(); } - return wxSize(wxMax(sizeText.x + g_comboMargin + sizeBtn.x, widthPopup), + return wxSize(wxMax(sizeText.x + g_comboMargin + sizeBtn.x, widthPopup), wxMax(sizeBtn.y, sizeText.y)); } @@ -340,18 +342,18 @@ void wxComboControl::DoMoveWindow(int x, int y, int width, int height) bool wxComboControl::Enable(bool enable) { if ( !wxControl::Enable(enable) ) - return FALSE; + return false; m_btn->Enable(enable); m_text->Enable(enable); - return TRUE; + return true; } bool wxComboControl::Show(bool show) { if ( !wxControl::Show(show) ) - return FALSE; + return false; if (m_btn) m_btn->Show(show); @@ -359,13 +361,13 @@ bool wxComboControl::Show(bool show) if (m_text) m_text->Show(show); - return TRUE; + return true; } #if wxUSE_TOOLTIPS void wxComboControl::DoSetToolTip(wxToolTip *tooltip) { - wxControl::DoSetToolTip(tooltip); + wxControl::DoSetToolTip(tooltip); // Set tool tip for button and text box if (m_text && m_btn) @@ -403,7 +405,7 @@ void wxComboControl::ShowPopup() // size and position the popup window correctly m_winPopup->SetSize(GetSize().x, - m_heightPopup == -1 ? control->GetBestSize().y + m_heightPopup == wxDefaultCoord ? control->GetBestSize().y : m_heightPopup); wxSize sizePopup = m_winPopup->GetClientSize(); control->SetSize(0, 0, sizePopup.x, sizePopup.y); @@ -424,7 +426,7 @@ void wxComboControl::ShowPopup() m_text->SelectAll(); m_popup->SetSelection(m_text->GetValue()); - m_isPopupShown = TRUE; + m_isPopupShown = true; } void wxComboControl::HidePopup() @@ -434,7 +436,7 @@ void wxComboControl::HidePopup() m_winPopup->Dismiss(); - m_isPopupShown = FALSE; + m_isPopupShown = false; } void wxComboControl::OnSelect(const wxString& value) @@ -459,7 +461,7 @@ wxComboTextCtrl::wxComboTextCtrl(wxComboControl *combo, const wxString& value, long style, const wxValidator& validator) - : wxTextCtrl(combo->GetParent(), -1, value, + : wxTextCtrl(combo->GetParent(), wxID_ANY, value, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE | style, validator) @@ -522,7 +524,7 @@ void wxComboTextCtrl::OnKey(wxKeyEvent& event) // ---------------------------------------------------------------------------- wxComboListBox::wxComboListBox(wxComboControl *combo, int style) - : wxListBox(combo->GetPopupWindow(), -1, + : wxListBox(combo->GetPopupWindow(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxBORDER_SIMPLE | wxLB_INT_HEIGHT | style), @@ -551,10 +553,10 @@ bool wxComboListBox::SetSelection(const wxString& value) else if ( !FindItem(value) ) { // no match att all - return FALSE; + return false; } - return TRUE; + return true; } void wxComboListBox::OnSelect(wxCommandEvent& event) @@ -580,7 +582,7 @@ void wxComboListBox::OnSelect(wxCommandEvent& event) void wxComboListBox::OnShow() { // nobody clicked us yet - m_clicked = FALSE; + m_clicked = false; } bool wxComboListBox::PerformAction(const wxControlAction& action, @@ -593,7 +595,7 @@ bool wxComboListBox::PerformAction(const wxControlAction& action, // we don't let the listbox handle this as instead of just using the // single key presses, as usual, we use the text ctrl value as prefix // and this is done by wxComboControl itself - return TRUE; + return true; } return wxListBox::PerformAction(action, numArg, strArg); @@ -602,7 +604,7 @@ bool wxComboListBox::PerformAction(const wxControlAction& action, void wxComboListBox::OnLeftUp(wxMouseEvent& event) { // we should dismiss the combo now - m_clicked = TRUE; + m_clicked = true; event.Skip(); } @@ -657,13 +659,44 @@ void wxComboBox::Init() m_lbox = (wxListBox *)NULL; } +wxComboBox::wxComboBox(wxWindow *parent, + wxWindowID id, + const wxString& value, + const wxPoint& pos, + const wxSize& size, + const wxArrayString& choices, + long style, + const wxValidator& validator, + const wxString& name) +{ + Init(); + + Create(parent, id, value, pos, size, choices, style, validator, name); +} + +bool wxComboBox::Create(wxWindow *parent, + wxWindowID id, + const wxString& value, + const wxPoint& pos, + const wxSize& size, + const wxArrayString& choices, + long style, + const wxValidator& validator, + const wxString& name) +{ + wxCArrayString chs(choices); + + return Create(parent, id, value, pos, size, chs.GetCount(), + chs.GetStrings(), style, validator, name); +} + bool wxComboBox::Create(wxWindow *parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, int n, - const wxString *choices, + const wxString choices[], long style, const wxValidator& validator, const wxString& name) @@ -671,7 +704,7 @@ bool wxComboBox::Create(wxWindow *parent, if ( !wxComboControl::Create(parent, id, value, pos, size, style, validator, name) ) { - return FALSE; + return false; } wxComboListBox *combolbox = @@ -681,7 +714,7 @@ bool wxComboBox::Create(wxWindow *parent, SetPopupControl(combolbox); - return TRUE; + return true; } wxComboBox::~wxComboBox() @@ -732,7 +765,7 @@ long wxComboBox::GetInsertionPoint() const return GetText()->GetInsertionPoint(); } -long wxComboBox::GetLastPosition() const +wxTextPos wxComboBox::GetLastPosition() const { return GetText()->GetLastPosition(); } @@ -801,7 +834,7 @@ int wxComboBox::FindString(const wxString& s) const return GetLBox()->FindString(s); } -void wxComboBox::Select(int n) +void wxComboBox::SetSelection(int n) { wxCHECK_RET( (n >= 0) && (n < GetCount()), _T("invalid index in wxComboBox::Select") ); @@ -814,9 +847,9 @@ int wxComboBox::GetSelection() const #if 1 // FIXME:: What is the correct behavior? // if the current value isn't one of the listbox strings, return -1 return GetLBox()->GetSelection(); -#else - // Why oh why is this done this way? - // It is not because the value displayed in the text can be found +#else + // Why oh why is this done this way? + // It is not because the value displayed in the text can be found // in the list that it is the item that is selected! return FindString(GetText()->GetValue()); #endif @@ -859,6 +892,69 @@ wxClientData* wxComboBox::DoGetItemClientObject(int n) const return GetLBox()->GetClientObject(n); } +bool wxComboBox::IsEditable() const +{ + return GetText() != NULL && (!HasFlag(wxCB_READONLY) || GetText()->IsEditable()); +} + +void wxComboBox::Undo() +{ + if (IsEditable()) + GetText()->Undo(); +} + +void wxComboBox::Redo() +{ + if (IsEditable()) + GetText()->Redo(); +} + +void wxComboBox::SelectAll() +{ + GetText()->SelectAll(); +} + +bool wxComboBox::CanCopy() const +{ + if (GetText() != NULL) + return GetText()->CanCopy(); + else + return false; +} + +bool wxComboBox::CanCut() const +{ + if (GetText() != NULL) + return GetText()->CanCut(); + else + return false; +} + +bool wxComboBox::CanPaste() const +{ + if (IsEditable()) + return GetText()->CanPaste(); + else + return false; +} + +bool wxComboBox::CanUndo() const +{ + if (IsEditable()) + return GetText()->CanUndo(); + else + return false; +} + +bool wxComboBox::CanRedo() const +{ + if (IsEditable()) + return GetText()->CanRedo(); + else + return false; +} + + // ---------------------------------------------------------------------------- // input handling // ---------------------------------------------------------------------------- @@ -880,14 +976,14 @@ bool wxComboControl::PerformAction(const wxControlAction& action, long numArg, const wxString& strArg) { - bool processed = FALSE; + bool processed = false; if ( action == wxACTION_COMBOBOX_POPUP ) { if ( !m_isPopupShown ) { ShowPopup(); - processed = TRUE; + processed = true; } } else if ( action == wxACTION_COMBOBOX_DISMISS ) @@ -896,7 +992,7 @@ bool wxComboControl::PerformAction(const wxControlAction& action, { HidePopup(); - processed = TRUE; + processed = true; } } @@ -906,7 +1002,7 @@ bool wxComboControl::PerformAction(const wxControlAction& action, return wxControl::PerformAction(action, numArg, strArg); } - return TRUE; + return true; } // ---------------------------------------------------------------------------- @@ -936,11 +1032,11 @@ bool wxStdComboBoxInputHandler::HandleKey(wxInputConsumer *consumer, break; } - if ( !!action ) + if ( !action.IsEmpty() ) { consumer->PerformAction(action); - return TRUE; + return true; } }