Skip to content

Commit

Permalink
Implement native OS X ComboBox for OS X Cocoa, and implement wxTextEn…
Browse files Browse the repository at this point in the history
…try methods to share code between wxComboBox and wxTextCtrl.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63105 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
  • Loading branch information
kollivier committed Jan 9, 2010
1 parent 4f42c05 commit c84030e
Show file tree
Hide file tree
Showing 13 changed files with 613 additions and 391 deletions.
1 change: 1 addition & 0 deletions build/bakefiles/files.bkl
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -2249,6 +2249,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/osx/statbox_osx.cpp src/osx/statbox_osx.cpp
src/osx/statline_osx.cpp src/osx/statline_osx.cpp
src/osx/stattext_osx.cpp src/osx/stattext_osx.cpp
src/osx/textentry_osx.cpp
src/osx/textctrl_osx.cpp src/osx/textctrl_osx.cpp
src/osx/tglbtn_osx.cpp src/osx/tglbtn_osx.cpp
src/osx/toolbar_osx.cpp src/osx/toolbar_osx.cpp
Expand Down
26 changes: 25 additions & 1 deletion include/wx/osx/cocoa/private/textimpl.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -12,14 +12,15 @@
#ifndef _WX_OSX_COCOA_PRIVATE_TEXTIMPL_H_ #ifndef _WX_OSX_COCOA_PRIVATE_TEXTIMPL_H_
#define _WX_OSX_COCOA_PRIVATE_TEXTIMPL_H_ #define _WX_OSX_COCOA_PRIVATE_TEXTIMPL_H_


#include "wx/combobox.h"
#include "wx/osx/private.h" #include "wx/osx/private.h"


// implementation exposed, so that search control can pull it // implementation exposed, so that search control can pull it


class wxNSTextFieldControl : public wxWidgetCocoaImpl, public wxTextWidgetImpl class wxNSTextFieldControl : public wxWidgetCocoaImpl, public wxTextWidgetImpl
{ {
public : public :
wxNSTextFieldControl( wxTextCtrl *wxPeer, WXWidget w ); wxNSTextFieldControl( wxWindow *wxPeer, WXWidget w );
virtual ~wxNSTextFieldControl(); virtual ~wxNSTextFieldControl();


virtual wxString GetStringValue() const ; virtual wxString GetStringValue() const ;
Expand Down Expand Up @@ -69,4 +70,27 @@ class wxNSTextViewControl : public wxWidgetCocoaImpl, public wxTextWidgetImpl
NSTextView* m_textView; NSTextView* m_textView;
}; };


class wxNSComboBoxControl : public wxNSTextFieldControl, public wxComboWidgetImpl
{
public :
wxNSComboBoxControl( wxWindow *wxPeer, WXWidget w );
virtual ~wxNSComboBoxControl();

virtual int GetSelectedItem() const;
virtual void SetSelectedItem(int item);

virtual int GetNumberOfItems() const;

virtual void InsertItem(int pos, const wxString& item);
virtual void RemoveItem(int pos);

virtual void Clear();

virtual wxString GetStringAtIndex(int pos) const;

virtual int FindString(const wxString& text) const;
private:
NSComboBox* m_comboBox;
};

#endif // _WX_OSX_COCOA_PRIVATE_TEXTIMPL_H_ #endif // _WX_OSX_COCOA_PRIVATE_TEXTIMPL_H_
40 changes: 31 additions & 9 deletions include/wx/osx/combobox.h
Original file line number Original file line Diff line number Diff line change
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Name: wx/mac/carbon/combobox.h // Name: wx/osx/combobox.h
// Purpose: wxComboBox class // Purpose: wxComboBox class
// Author: Stefan Csomor // Author: Stefan Csomor
// Modified by: // Modified by:
Expand All @@ -14,13 +14,17 @@


#include "wx/containr.h" #include "wx/containr.h"
#include "wx/choice.h" #include "wx/choice.h"
#include "wx/textctrl.h"


WXDLLIMPEXP_DATA_CORE(extern const char) wxComboBoxNameStr[]; WXDLLIMPEXP_DATA_CORE(extern const char) wxComboBoxNameStr[];


WX_DEFINE_ARRAY( char * , wxComboBoxDataArray ) ;

// forward declaration of private implementation classes // forward declaration of private implementation classes


class wxComboBoxText; class wxComboBoxText;
class wxComboBoxChoice; class wxComboBoxChoice;
class wxComboWidgetImpl;


// Combobox item // Combobox item
class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase
Expand All @@ -30,7 +34,7 @@ class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase
public: public:
virtual ~wxComboBox(); virtual ~wxComboBox();


#ifndef wxOSX_USE_NATIVE_COMBOBOX #if wxOSX_USE_CARBON
// forward these functions to all subcontrols // forward these functions to all subcontrols
virtual bool Enable(bool enable = true); virtual bool Enable(bool enable = true);
virtual bool Show(bool show = true); virtual bool Show(bool show = true);
Expand Down Expand Up @@ -87,17 +91,22 @@ class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase
const wxString& name = wxComboBoxNameStr); const wxString& name = wxComboBoxNameStr);


virtual int GetSelection() const; virtual int GetSelection() const;
virtual void GetSelection(long *from, long *to) const;
virtual void SetSelection(int n); virtual void SetSelection(int n);
virtual void SetSelection(long from, long to);
virtual int FindString(const wxString& s, bool bCase = false) const; virtual int FindString(const wxString& s, bool bCase = false) const;
virtual wxString GetString(unsigned int n) const; virtual wxString GetString(unsigned int n) const;
virtual wxString GetStringSelection() const; virtual wxString GetStringSelection() const;
virtual void SetString(unsigned int n, const wxString& s); virtual void SetString(unsigned int n, const wxString& s);


virtual unsigned int GetCount() const;

// these methods are provided by wxTextEntry for the native impl.
#if wxOSX_USE_CARBON
// Text field functions // Text field functions
virtual void SetValue(const wxString& value); virtual void SetValue(const wxString& value);
virtual wxString GetValue() const; virtual wxString GetValue() const;
virtual void WriteText(const wxString& text); virtual void WriteText(const wxString& text);
virtual void GetSelection(long *from, long *to) const;


// Clipboard operations // Clipboard operations
virtual void Copy(); virtual void Copy();
Expand All @@ -109,12 +118,9 @@ class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase
virtual wxTextPos GetLastPosition() const; virtual wxTextPos GetLastPosition() const;
virtual void Replace(long from, long to, const wxString& value); virtual void Replace(long from, long to, const wxString& value);
virtual void Remove(long from, long to); virtual void Remove(long from, long to);
virtual void SetSelection(long from, long to);
virtual void SetEditable(bool editable); virtual void SetEditable(bool editable);
virtual bool IsEditable() const; virtual bool IsEditable() const;


virtual unsigned int GetCount() const;

virtual void Undo(); virtual void Undo();
virtual void Redo(); virtual void Redo();
virtual void SelectAll(); virtual void SelectAll();
Expand All @@ -126,17 +132,27 @@ class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase
virtual bool CanRedo() const; virtual bool CanRedo() const;


virtual wxClientDataType GetClientDataType() const; virtual wxClientDataType GetClientDataType() const;
#endif




// osx specific event handling common for all osx-ports // osx specific event handling common for all osx-ports


virtual bool OSXHandleClicked( double timestampsec ); virtual bool OSXHandleClicked( double timestampsec );


#ifndef wxOSX_USE_NATIVE_COMBOBOX #if wxOSX_USE_CARBON
wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST


WX_DECLARE_CONTROL_CONTAINER(); WX_DECLARE_CONTROL_CONTAINER();
#endif #endif


// only used by the native Cocoa combobox, but we must define it everywhere
// to maintain the wxTextEntry abstraction.
virtual wxTextWidgetImpl * GetTextPeer() const;

#if wxOSX_USE_COCOA
wxComboWidgetImpl* GetComboPeer() const;
#endif
protected: protected:
// common part of all ctors // common part of all ctors
void Init(); void Init();
Expand All @@ -146,10 +162,12 @@ class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase
virtual void DoClear(); virtual void DoClear();


// wxTextEntry functions // wxTextEntry functions
#if wxOSX_USE_CARBON
virtual wxString DoGetValue() const; virtual wxString DoGetValue() const;
#endif
virtual wxWindow *GetEditableWindow() { return this; } virtual wxWindow *GetEditableWindow() { return this; }


#ifndef wxOSX_USE_NATIVE_COMBOBOX #if wxOSX_USE_CARBON
// override the base class virtuals involved in geometry calculations // override the base class virtuals involved in geometry calculations
virtual wxSize DoGetBestSize() const; virtual wxSize DoGetBestSize() const;
virtual void DoMoveWindow(int x, int y, int width, int height); virtual void DoMoveWindow(int x, int y, int width, int height);
Expand All @@ -162,15 +180,19 @@ class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase
virtual void DoSetItemClientData(unsigned int n, void* clientData); virtual void DoSetItemClientData(unsigned int n, void* clientData);
virtual void * DoGetItemClientData(unsigned int n) const; virtual void * DoGetItemClientData(unsigned int n) const;


#if wxOSX_USE_CARBON
virtual void SetClientDataType(wxClientDataType clientDataItemsType); virtual void SetClientDataType(wxClientDataType clientDataItemsType);
#endif


virtual void EnableTextChangedEvents(bool enable); virtual void EnableTextChangedEvents(bool enable);


// the subcontrols // the subcontrols
wxComboBoxText* m_text; wxComboBoxText* m_text;
wxComboBoxChoice* m_choice; wxComboBoxChoice* m_choice;


#ifndef wxOSX_USE_NATIVE_COMBOBOX wxComboBoxDataArray m_datas;

#if wxOSX_USE_CARBON
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
#endif #endif
}; };
Expand Down
27 changes: 26 additions & 1 deletion include/wx/osx/core/private.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ public :
long style, long style,
long extraStyle); long extraStyle);


#ifdef wxOSX_USE_NATIVE_COMBOBOX #if wxOSX_USE_COCOA
static wxWidgetImplType* CreateComboBox( wxWindowMac* wxpeer, static wxWidgetImplType* CreateComboBox( wxWindowMac* wxpeer,
wxWindowMac* parent, wxWindowMac* parent,
wxWindowID id, wxWindowID id,
Expand Down Expand Up @@ -612,6 +612,31 @@ public :
virtual wxSize GetBestSize() const { return wxDefaultSize; } virtual wxSize GetBestSize() const { return wxDefaultSize; }
}; };


// common interface for all implementations
class WXDLLIMPEXP_CORE wxComboWidgetImpl

{
public :
wxComboWidgetImpl() {}

virtual ~wxComboWidgetImpl() {}

virtual int GetSelectedItem() const { return -1; };
virtual void SetSelectedItem(int WXUNUSED(item)) {};

virtual int GetNumberOfItems() const { return -1; };

virtual void InsertItem(int WXUNUSED(pos), const wxString& WXUNUSED(item)) {}

virtual void RemoveItem(int WXUNUSED(pos)) {}

virtual void Clear() {}

virtual wxString GetStringAtIndex(int WXUNUSED(pos)) const { return wxEmptyString; }

virtual int FindString(const wxString& WXUNUSED(text)) const { return -1; }
};

// //
// common interface for buttons // common interface for buttons
// //
Expand Down
42 changes: 6 additions & 36 deletions include/wx/osx/textctrl.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -69,17 +69,10 @@ class WXDLLIMPEXP_CORE wxTextCtrl: public wxTextCtrlBase
virtual int GetNumberOfLines() const; virtual int GetNumberOfLines() const;


virtual bool IsModified() const; virtual bool IsModified() const;
virtual bool IsEditable() const;

// If the return values from and to are the same, there is no selection.
virtual void GetSelection(long* from, long* to) const;


// operations // operations
// ---------- // ----------


// editing
virtual void Clear();
virtual void Remove(long from, long to);


// sets/clears the dirty flag // sets/clears the dirty flag
virtual void MarkDirty(); virtual void MarkDirty();
Expand All @@ -97,10 +90,6 @@ class WXDLLIMPEXP_CORE wxTextCtrl: public wxTextCtrlBase
virtual bool SetStyle(long start, long end, const wxTextAttr& style); virtual bool SetStyle(long start, long end, const wxTextAttr& style);
virtual bool SetDefaultStyle(const wxTextAttr& style); virtual bool SetDefaultStyle(const wxTextAttr& style);


// writing text inserts it at the current position;
// appending always inserts it at the end
virtual void WriteText(const wxString& text);

// translate between the position (which is just an index into the textctrl // translate between the position (which is just an index into the textctrl
// considering all its contents as a single strings) and (x, y) coordinates // considering all its contents as a single strings) and (x, y) coordinates
// which represent column and line. // which represent column and line.
Expand All @@ -109,30 +98,13 @@ class WXDLLIMPEXP_CORE wxTextCtrl: public wxTextCtrlBase


virtual void ShowPosition(long pos); virtual void ShowPosition(long pos);


// Clipboard operations // overrides so that we can send text updated events
virtual void Copy();
virtual void Cut(); virtual void Cut();
virtual void Paste(); virtual void Paste();


virtual bool CanCopy() const; virtual void WriteText(const wxString& text);
virtual bool CanCut() const; virtual void Clear();
virtual bool CanPaste() const; virtual void Remove(long from, long to);

// Undo/redo
virtual void Undo();
virtual void Redo();

virtual bool CanUndo() const;
virtual bool CanRedo() const;

// Insertion point
virtual void SetInsertionPoint(long pos);
virtual void SetInsertionPointEnd();
virtual long GetInsertionPoint() const;
virtual wxTextPos GetLastPosition() const;

virtual void SetSelection(long from, long to);
virtual void SetEditable(bool editable);


// Implementation // Implementation
// -------------- // --------------
Expand Down Expand Up @@ -168,15 +140,13 @@ class WXDLLIMPEXP_CORE wxTextCtrl: public wxTextCtrlBase
virtual void MacSuperChangedPosition(); virtual void MacSuperChangedPosition();
virtual void MacCheckSpelling(bool check); virtual void MacCheckSpelling(bool check);


wxTextWidgetImpl * GetTextPeer() const; virtual wxTextWidgetImpl * GetTextPeer() const;
protected: protected:
// common part of all ctors // common part of all ctors
void Init(); void Init();


virtual wxSize DoGetBestSize() const; virtual wxSize DoGetBestSize() const;


virtual wxString DoGetValue() const;

bool m_editable; bool m_editable;


// flag is set to true when the user edits the controls contents // flag is set to true when the user edits the controls contents
Expand Down
Loading

0 comments on commit c84030e

Please sign in to comment.