}
void
-wxComboCtrlBase::CreateTextCtrl(int style, const wxValidator& validator)
+wxComboCtrlBase::CreateTextCtrl(int style)
{
if ( !(m_windowStyle & wxCB_READONLY) )
{
m_text = new wxComboCtrlTextCtrl();
m_text->Create(this, wxID_ANY, m_valueString,
wxDefaultPosition, wxSize(10,-1),
- style, validator);
+ style);
m_text->SetHint(m_hintText);
}
}
}
#endif // wxUSE_TOOLTIPS
-#if wxUSE_VALIDATORS
-void wxComboCtrlBase::SetValidator(const wxValidator& validator)
-{
- wxTextCtrl* textCtrl = GetTextCtrl();
-
- if ( textCtrl )
- textCtrl->SetValidator( validator );
- else
- wxControl::SetValidator( validator );
-}
-
-wxValidator* wxComboCtrlBase::GetValidator()
-{
- wxTextCtrl* textCtrl = GetTextCtrl();
-
- return textCtrl ? textCtrl->GetValidator() : wxControl::GetValidator();
-}
-#endif // wxUSE_VALIDATORS
-
bool wxComboCtrlBase::SetForegroundColour(const wxColour& colour)
{
if ( wxControl::SetForegroundColour(colour) )
{
case Hidden:
{
- wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_DROPDOWN, GetId());
- event.SetEventObject(this);
- HandleWindowEvent(event);
-
- ShowPopup();
+ Popup();
break;
}
}
}
+void wxComboCtrlBase::Popup()
+{
+ wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_DROPDOWN, GetId());
+ event.SetEventObject(this);
+ HandleWindowEvent(event);
+
+ ShowPopup();
+}
+
void wxComboCtrlBase::ShowPopup()
{
EnsurePopupControl();
// transfer value and show it in textctrl, if any
if ( !IsPopupWindowState(Animating) )
- SetValue( m_popupInterface->GetStringValue() );
+ SetValueByUser( m_popupInterface->GetStringValue() );
m_winPopup->Hide();
}
// ----------------------------------------------------------------------------
-// methods forwarded to wxTextCtrl
+// wxTextEntry interface
// ----------------------------------------------------------------------------
-wxString wxComboCtrlBase::GetValue() const
+wxString wxComboCtrlBase::DoGetValue() const
{
if ( m_text )
return m_text->GetValue();
return m_valueString;
}
-void wxComboCtrlBase::SetValueWithEvent(const wxString& value, bool withEvent)
+void wxComboCtrlBase::SetValueWithEvent(const wxString& value,
+ bool withEvent)
{
- if ( m_text )
- {
- if ( !withEvent )
- m_ignoreEvtText++;
-
- m_text->SetValue(value);
+ DoSetValue(value, withEvent ? SetValue_SendEvent : 0);
+}
- if ( !(m_iFlags & wxCC_NO_TEXT_AUTO_SELECT) )
- m_text->SelectAll();
- }
+void wxComboCtrlBase::OnSetValue(const wxString& value)
+{
+ // Note: before wxComboCtrl inherited from wxTextEntry,
+ // this code used to be in SetValueWithEvent().
// Since wxComboPopup may want to paint the combo as well, we need
// to set the string value here (as well as sometimes in ShowPopup).
Refresh();
}
-void wxComboCtrlBase::SetValue(const wxString& value)
+void wxComboCtrlBase::SetValueByUser(const wxString& value)
{
- SetValueWithEvent(value, false);
+ // NB: Order of function calls is important here. Otherwise
+ // the SelectAll() may not work.
+
+ if ( m_text )
+ {
+ m_text->SetValue(value);
+
+ if ( !(m_iFlags & wxCC_NO_TEXT_AUTO_SELECT) )
+ m_text->SelectAll();
+ }
+
+ OnSetValue(value);
}
// In this SetValue variant wxComboPopup::SetStringValue is not called
m_text->SetInsertionPoint(pos);
}
-void wxComboCtrlBase::SetInsertionPointEnd()
-{
- if ( m_text )
- m_text->SetInsertionPointEnd();
-}
-
long wxComboCtrlBase::GetInsertionPoint() const
{
if ( m_text )
return 0;
}
+void wxComboCtrlBase::WriteText(const wxString& text)
+{
+ if ( m_text )
+ {
+ m_text->WriteText(text);
+ OnSetValue(m_text->GetValue());
+ }
+ else
+ {
+ OnSetValue(text);
+ }
+}
+
+void wxComboCtrlBase::DoSetValue(const wxString& value, int flags)
+{
+ if ( m_text )
+ {
+ if ( flags & SetValue_SendEvent )
+ m_text->SetValue(value);
+ else
+ m_text->ChangeValue(value);
+ }
+
+ OnSetValue(value);
+}
+
void wxComboCtrlBase::Replace(long from, long to, const wxString& value)
{
if ( m_text )
+ {
m_text->Replace(from, to, value);
+ OnSetValue(m_text->GetValue());
+ }
}
void wxComboCtrlBase::Remove(long from, long to)
{
if ( m_text )
+ {
m_text->Remove(from, to);
+ OnSetValue(m_text->GetValue());
+ }
}
void wxComboCtrlBase::SetSelection(long from, long to)
m_text->SetSelection(from, to);
}
+void wxComboCtrlBase::GetSelection(long *from, long *to) const
+{
+ if ( m_text )
+ {
+ m_text->GetSelection(from, to);
+ }
+ else
+ {
+ *from = 0;
+ *to = 0;
+ }
+}
+
+bool wxComboCtrlBase::IsEditable() const
+{
+ if ( m_text )
+ return m_text->IsEditable();
+ return false;
+}
+
+void wxComboCtrlBase::SetEditable(bool editable)
+{
+ if ( m_text )
+ m_text->SetEditable(editable);
+}
+
void wxComboCtrlBase::Undo()
{
if ( m_text )
m_text->Undo();
}
+void wxComboCtrlBase::Redo()
+{
+ if ( m_text )
+ m_text->Redo();
+}
+
+bool wxComboCtrlBase::CanUndo() const
+{
+ if ( m_text )
+ return m_text->CanUndo();
+
+ return false;
+}
+
+bool wxComboCtrlBase::CanRedo() const
+{
+ if ( m_text )
+ return m_text->CanRedo();
+
+ return false;
+}
+
bool wxComboCtrlBase::SetHint(const wxString& hint)
{
m_hintText = hint;