From e960ba596b4835e430fc22bb6f9f74436f96c2c5 Mon Sep 17 00:00:00 2001 From: David Elliott Date: Fri, 5 Oct 2007 20:12:02 +0000 Subject: [PATCH] Duplicate wxTextCtrl code to wxComboBox because we can no longer derive wxComboBox from wxTextCtrl. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49052 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/cocoa/combobox.h | 70 +++++++++++---------------- src/cocoa/combobox.mm | 94 ++++++++++++++++++++++++++++++++++++- 2 files changed, 120 insertions(+), 44 deletions(-) diff --git a/include/wx/cocoa/combobox.h b/include/wx/cocoa/combobox.h index 542626f165..3a8a9e2d71 100644 --- a/include/wx/cocoa/combobox.h +++ b/include/wx/cocoa/combobox.h @@ -17,6 +17,8 @@ #include "wx/hashmap.h" #include "wx/cocoa/ObjcAssociate.h" +#include "wx/textctrl.h" + DECLARE_WXCOCOA_OBJC_CLASS(NSComboBox); WX_DECLARE_OBJC_HASHMAP(NSComboBox); @@ -38,11 +40,12 @@ public: // ======================================================================== // wxComboBox // ======================================================================== -class WXDLLEXPORT wxComboBox : public wxTextCtrl, public wxComboBoxBase, protected wxCocoaNSComboBox +class WXDLLEXPORT wxComboBox : public wxControl, public wxComboBoxBase, protected wxCocoaNSComboBox, protected wxCocoaNSTextField { DECLARE_DYNAMIC_CLASS(wxComboBox) DECLARE_EVENT_TABLE() WX_DECLARE_COCOA_OWNER(NSComboBox,NSTextField,NSView) + WX_DECLARE_COCOA_OWNER(NSTextField,NSControl,NSView) // ------------------------------------------------------------------------ // initialization // ------------------------------------------------------------------------ @@ -97,11 +100,12 @@ protected: wxArrayPtrVoid m_Datas; virtual void doWxEvent(int nEvent); + virtual void Cocoa_didChangeText() + {} // ------------------------------------------------------------------------ // Implementation // ------------------------------------------------------------------------ public: - // FIXME: Quit deriving from wxTextCtrl void Clear() // HACK { wxComboBoxBase::Clear(); } @@ -123,46 +127,28 @@ public: virtual void DoSetItemClientData(unsigned int, void*); virtual void* DoGetItemClientData(unsigned int) const; virtual bool IsSorted() const { return HasFlag(wxCB_SORT); } - // wxComboBoxBase pure virtuals - virtual wxString GetValue() const - { return wxTextCtrl::GetValue(); } - virtual void SetValue(const wxString& value) - { return wxTextCtrl::SetValue(value); } - virtual void Cut() { wxTextCtrl::Cut(); } - virtual void Copy() { wxTextCtrl::Copy(); } - virtual void Paste() { wxTextCtrl::Paste(); } - virtual void SetInsertionPoint(long pos) - { wxTextCtrl::SetInsertionPoint(pos); } - virtual void SetInsertionPointEnd() - { wxTextCtrl::SetInsertionPointEnd(); } - virtual long GetInsertionPoint() const - { return wxTextCtrl::GetInsertionPoint(); } - virtual wxTextPos GetLastPosition() const - { return wxTextCtrl::GetLastPosition(); } - virtual void Replace(long from, long to, const wxString& value) - { wxTextCtrl::Replace(from,to,value); } - virtual void SetSelection(long from, long to) - { wxTextCtrl::SetSelection(from,to); } - virtual void SetEditable(bool editable) - { wxTextCtrl::SetEditable(editable); } - virtual bool IsEditable() const - { return !HasFlag(wxCB_READONLY); } - virtual void Undo() - { wxTextCtrl::Undo(); } - virtual void Redo() - { wxTextCtrl::Redo(); } - virtual void SelectAll() - { wxTextCtrl::SelectAll(); } - virtual bool CanCopy() const - { return wxTextCtrl::CanCopy(); } - virtual bool CanCut() const - { return wxTextCtrl::CanCut(); } - virtual bool CanPaste() const - { return wxTextCtrl::CanPaste(); } - virtual bool CanUndo() const - { return wxTextCtrl::CanUndo(); } - virtual bool CanRedo() const - { return wxTextCtrl::CanRedo(); } + +// ------------------------------------------------------------------------ +// wxTextEntryBase virtual implementations: +// ------------------------------------------------------------------------ + // FIXME: This needs to be moved to some sort of common code. + virtual void WriteText(const wxString&); + virtual wxString GetValue() const; + virtual void Remove(long, long); + virtual void Cut(); + virtual void Copy(); + virtual void Paste(); + virtual void Undo(); + virtual void Redo(); + virtual bool CanUndo() const; + virtual bool CanRedo() const; + virtual void SetInsertionPoint(long pos); + virtual long GetInsertionPoint() const; + virtual wxTextPos GetLastPosition() const; + virtual void SetSelection(long from, long to); + virtual void GetSelection(long *from, long *to) const; + virtual bool IsEditable() const; + virtual void SetEditable(bool editable); }; #endif // __WX_COCOA_COMBOBOX_H__ diff --git a/src/cocoa/combobox.mm b/src/cocoa/combobox.mm index 9986273c6a..167078c5b9 100644 --- a/src/cocoa/combobox.mm +++ b/src/cocoa/combobox.mm @@ -168,10 +168,11 @@ WX_IMPLEMENT_GET_OBJC_CLASS(wxPoserNSComboBox,NSComboBox) #import -IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxTextCtrl) -BEGIN_EVENT_TABLE(wxComboBox, wxTextCtrl) +IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxControl) +BEGIN_EVENT_TABLE(wxComboBox, wxControl) END_EVENT_TABLE() WX_IMPLEMENT_COCOA_OWNER(wxComboBox,NSComboBox,NSTextField,NSView) +WX_IMPLEMENT_COCOA_OWNER(wxComboBox,NSTextField,NSControl,NSView) bool wxComboBox::Create(wxWindow *parent, wxWindowID winid, const wxString& value, @@ -317,4 +318,93 @@ void* wxComboBox::DoGetItemClientData(unsigned int nIndex) const return m_Datas[nIndex]; } +///////////////////////////////////////////////////////////////////////////// +// wxTextEntry virtual implementations: + +void wxComboBox::WriteText(wxString const&) +{ +} + +wxString wxComboBox::GetValue() const +{ + wxAutoNSAutoreleasePool pool; + return wxStringWithNSString([GetNSTextField() stringValue]); +} + +void wxComboBox::Remove(long, long) +{ +} + +void wxComboBox::Cut() +{ +} + +void wxComboBox::Copy() +{ +} + +void wxComboBox::Paste() +{ +} + +void wxComboBox::Undo() +{ +} + +void wxComboBox::Redo() +{ +} + +bool wxComboBox::CanUndo() const +{ + return false; +} + +bool wxComboBox::CanRedo() const +{ + return false; +} + +void wxComboBox::SetInsertionPoint(long) +{ +} + +long wxComboBox::GetInsertionPoint() const +{ + return 0; +} + +wxTextPos wxComboBox::GetLastPosition() const +{ + // working - returns the size of the wxString + return (long)(GetValue().Len()); +} + +void wxComboBox::SetSelection(long, long) +{ +} + +void wxComboBox::GetSelection(long*, long*) const +{ +} + +bool wxComboBox::IsEditable() const +{ + return [GetNSTextField() isEditable]; +} + +void wxComboBox::SetEditable(bool editable) +{ + // first ensure that the current value is stored (in case the user had not finished editing + // before SetEditable(FALSE) was called) + DoSetValue(GetValue(),1); + + [GetNSTextField() setEditable: editable]; + + // forces the focus on the textctrl to be lost - while focus is still maintained + // after SetEditable(FALSE) the user may still edit the control + // (might not the best way to do this..) + [GetNSTextField() abortEditing]; +} + #endif // wxUSE_COMBOBOX -- 2.45.2