X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a290fa5a7deebe9d96c0c0089d18e27d4bd9b624..024e9a4cea08387daf5c2027cdc7e098eb563503:/src/univ/combobox.cpp diff --git a/src/univ/combobox.cpp b/src/univ/combobox.cpp index 6e6db1fce3..e261d32fde 100644 --- a/src/univ/combobox.cpp +++ b/src/univ/combobox.cpp @@ -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; @@ -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)); } @@ -328,7 +330,7 @@ void wxComboControl::DoMoveWindow(int x, int y, int width, int height) wxSize sizeBtn = m_btn->GetBestSize(); wxCoord wText = width - sizeBtn.x; - wxPoint p = GetParent() ? GetParent()->GetClientAreaOrigin() : wxPoint(0,0); + wxPoint p = GetParent() ? GetParent()->GetClientAreaOrigin() : wxPoint(); m_text->SetSize(x - p.x, y - p.y, wText, height); m_btn->SetSize(x - p.x + wText, y - p.y, sizeBtn.x, height); } @@ -365,7 +367,7 @@ bool wxComboControl::Show(bool show) #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) @@ -763,7 +765,7 @@ long wxComboBox::GetInsertionPoint() const return GetText()->GetInsertionPoint(); } -long wxComboBox::GetLastPosition() const +wxTextPos wxComboBox::GetLastPosition() const { return GetText()->GetLastPosition(); } @@ -832,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") ); @@ -845,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 @@ -890,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 // ----------------------------------------------------------------------------