From 9330455ae29f7746d3ab9419915751e741d07f2b Mon Sep 17 00:00:00 2001 From: David Elliott Date: Mon, 6 Aug 2007 14:19:41 +0000 Subject: [PATCH] Merged 47902 from trunk: Consolidate cocoa view/control/cell label setting into wxControl::CocoaSetLabelForObject. Also implements wxStaticBox Get/SetLabel which wasn't in the 2.8 branch. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@47903 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/cocoa/control.h | 9 +++++++++ include/wx/cocoa/statbox.h | 3 +++ src/cocoa/button.mm | 4 ++-- src/cocoa/checkbox.mm | 4 ++-- src/cocoa/control.mm | 6 ++++++ src/cocoa/radiobox.mm | 6 +++--- src/cocoa/radiobut.mm | 2 +- src/cocoa/statbox.mm | 15 ++++++++++++++- 8 files changed, 40 insertions(+), 9 deletions(-) diff --git a/include/wx/cocoa/control.h b/include/wx/cocoa/control.h index 99a2db572e..c84df74ee8 100644 --- a/include/wx/cocoa/control.h +++ b/include/wx/cocoa/control.h @@ -66,6 +66,15 @@ public: void SetLabel(const wxString& label); protected: virtual wxSize DoGetBestSize() const; + + // Provides a common implementation of title setting which strips mnemonics + // and then calls setTitle: with the stripped string. May be implemented + // to call setTitleWithMnemonic: on OpenStep-compatible systems. Only + // intended for use by views or cells which implement at least setTitle: + // and possibly setTitleWithMnemonic: such as NSBox and NSButton or NSCell + // classes, for example as used by wxRadioBox. Not usable with classes like + // NSTextField which expect setStringValue:. + static void CocoaSetLabelForObject(const wxString& labelWithWxMnemonic, struct objc_object *anObject); }; #endif diff --git a/include/wx/cocoa/statbox.h b/include/wx/cocoa/statbox.h index e6aab49b45..0fab6da0f1 100644 --- a/include/wx/cocoa/statbox.h +++ b/include/wx/cocoa/statbox.h @@ -41,6 +41,9 @@ public: long style = 0, const wxString& name = wxStaticBoxNameStr); virtual ~wxStaticBox(); + virtual void SetLabel(const wxString& label); + virtual wxString GetLabel() const; + // ------------------------------------------------------------------------ // Cocoa callbacks // ------------------------------------------------------------------------ diff --git a/src/cocoa/button.mm b/src/cocoa/button.mm index 2e9cb7103c..624e5271bd 100644 --- a/src/cocoa/button.mm +++ b/src/cocoa/button.mm @@ -48,7 +48,7 @@ bool wxButton::Create(wxWindow *parent, wxWindowID winid, [m_cocoaNSView release]; [GetNSButton() setBezelStyle:NSRoundedBezelStyle]; - [GetNSButton() setTitle:wxNSStringWithWxString(GetLabelText(label))]; + CocoaSetLabelForObject(label, GetNSButton()); [GetNSControl() sizeToFit]; if(m_parent) @@ -78,7 +78,7 @@ wxString wxButton::GetLabel() const void wxButton::SetLabel(const wxString& label) { - [GetNSButton() setTitle:wxNSStringWithWxString(GetLabelText(label))]; + CocoaSetLabelForObject(label, GetNSButton()); } wxSize wxButton::DoGetBestSize() const diff --git a/src/cocoa/checkbox.mm b/src/cocoa/checkbox.mm index 0e73912c1f..3cfa6be230 100644 --- a/src/cocoa/checkbox.mm +++ b/src/cocoa/checkbox.mm @@ -47,7 +47,7 @@ bool wxCheckBox::Create(wxWindow *parent, wxWindowID winid, [m_cocoaNSView release]; [GetNSButton() setButtonType: NSSwitchButton]; [GetNSButton() setAllowsMixedState: Is3State()]; - [GetNSButton() setTitle:wxNSStringWithWxString(GetLabelText(label))]; + CocoaSetLabelForObject(label, GetNSButton()); [GetNSControl() sizeToFit]; if(m_parent) @@ -140,6 +140,6 @@ void wxCheckBox::Cocoa_wxNSButtonAction(void) void wxCheckBox::SetLabel(const wxString& s) { wxAutoNSAutoreleasePool pool; - [GetNSButton() setTitle:wxNSStringWithWxString(s)]; + CocoaSetLabelForObject(s, GetNSButton()); } #endif diff --git a/src/cocoa/control.mm b/src/cocoa/control.mm index 088ff587ec..4f2f15f16e 100644 --- a/src/cocoa/control.mm +++ b/src/cocoa/control.mm @@ -19,6 +19,7 @@ #include "wx/cocoa/string.h" #include "wx/cocoa/autorelease.h" +#include "wx/cocoa/string.h" #include "wx/cocoa/trackingrectmanager.h" #include "wx/cocoa/objc/objc_uniquifying.h" @@ -275,6 +276,11 @@ void wxControl::CocoaSetEnabled(bool enable) [GetNSControl() setEnabled: enable]; } +/*static*/ void wxControl::CocoaSetLabelForObject(const wxString& label, struct objc_object *aView) +{ + [aView setTitle:wxNSStringWithWxString(GetLabelText(label))]; +} + wxString wxControl::GetLabel() const { if([GetNSControl() isKindOfClass:[WX_GET_OBJC_CLASS(wxNonControlNSControl) class]]) diff --git a/src/cocoa/radiobox.mm b/src/cocoa/radiobox.mm index 0d71ecdfad..5ee7d00586 100644 --- a/src/cocoa/radiobox.mm +++ b/src/cocoa/radiobox.mm @@ -96,7 +96,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID winid, NSMutableArray *allCells = [NSMutableArray arrayWithCapacity:n]; for(int i=0; iCocoaAddChild(this); SetInitialFrameRect(pos,size); @@ -63,3 +63,16 @@ void wxStaticBox::GetBordersForSizer(int *borderTop, int *borderOther) const if(nextBorder > *borderOther) *borderOther = nextBorder; } + +void wxStaticBox::SetLabel(const wxString& label) +{ + wxAutoNSAutoreleasePool pool; + CocoaSetLabelForObject(label, GetNSBox()); +} + +wxString wxStaticBox::GetLabel() const +{ + wxAutoNSAutoreleasePool pool; + return wxStringWithNSString([GetNSBox() title]); +} +