Implement wxCocoa wxRadioBox event.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47569 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -22,6 +22,8 @@ class WXDLLEXPORT wxRadioBox: public wxControl, public wxRadioBoxBase// , protec
|
|||||||
{
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxRadioBox)
|
DECLARE_DYNAMIC_CLASS(wxRadioBox)
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
|
// NOTE: We explicitly skip NSControl because our primary cocoa view is
|
||||||
|
// the NSBox but we want to receive action messages from the NSMatrix.
|
||||||
WX_DECLARE_COCOA_OWNER(NSBox,NSView,NSView)
|
WX_DECLARE_COCOA_OWNER(NSBox,NSView,NSView)
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// initialization
|
// initialization
|
||||||
@@ -93,6 +95,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
// Static boxes cannot be enabled/disabled
|
// Static boxes cannot be enabled/disabled
|
||||||
virtual void CocoaSetEnabled(bool enable) { }
|
virtual void CocoaSetEnabled(bool enable) { }
|
||||||
|
virtual void CocoaTarget_action(void);
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// Implementation
|
// Implementation
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
@@ -107,7 +110,12 @@ public:
|
|||||||
virtual void SetString(unsigned int n, const wxString& label);
|
virtual void SetString(unsigned int n, const wxString& label);
|
||||||
// change the individual radio button state
|
// change the individual radio button state
|
||||||
protected:
|
protected:
|
||||||
|
// We don't want the typical wxCocoaNSBox behavior because our real
|
||||||
|
// implementation is by using an NSMatrix as the NSBox's contentView.
|
||||||
WX_NSMatrix GetNSMatrix() const;
|
WX_NSMatrix GetNSMatrix() const;
|
||||||
|
void AssociateNSBox(WX_NSBox theBox);
|
||||||
|
void DisassociateNSBox(WX_NSBox theBox);
|
||||||
|
|
||||||
virtual wxSize DoGetBestSize() const;
|
virtual wxSize DoGetBestSize() const;
|
||||||
|
|
||||||
int GetRowForIndex(int n) const
|
int GetRowForIndex(int n) const
|
||||||
|
@@ -32,7 +32,23 @@
|
|||||||
IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl)
|
IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl)
|
||||||
BEGIN_EVENT_TABLE(wxRadioBox, wxControl)
|
BEGIN_EVENT_TABLE(wxRadioBox, wxControl)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
// WX_IMPLEMENT_COCOA_OWNER(wxRadioBox,NSTextField,NSControl,NSView)
|
|
||||||
|
void wxRadioBox::AssociateNSBox(WX_NSBox cocoaObjcClass)
|
||||||
|
{
|
||||||
|
NSMatrix *radioBox = [(WX_NSBox)cocoaObjcClass contentView];
|
||||||
|
// Associate the NSMatrix (the NSBox's contentView) with the wxCocoaNSControl MI base class.
|
||||||
|
AssociateNSControl(radioBox);
|
||||||
|
// Set the target/action.. we don't really need to unset these
|
||||||
|
[radioBox setTarget:wxCocoaNSControl::sm_cocoaTarget];
|
||||||
|
[radioBox setAction:@selector(wxNSControlAction:)];
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxRadioBox::DisassociateNSBox(WX_NSBox cocoaObjcClass)
|
||||||
|
{
|
||||||
|
DisassociateNSControl([(WX_NSBox)cocoaObjcClass contentView]);
|
||||||
|
}
|
||||||
|
|
||||||
|
WX_IMPLEMENT_COCOA_OWNER(wxRadioBox,NSBox,NSView,NSView)
|
||||||
|
|
||||||
bool wxRadioBox::Create(wxWindow *parent, wxWindowID winid,
|
bool wxRadioBox::Create(wxWindow *parent, wxWindowID winid,
|
||||||
const wxString& title,
|
const wxString& title,
|
||||||
@@ -134,14 +150,17 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID winid,
|
|||||||
withObject:[allCells subarrayWithRange:NSMakeRange(i*majorDim, majorDim)]];
|
withObject:[allCells subarrayWithRange:NSMakeRange(i*majorDim, majorDim)]];
|
||||||
}
|
}
|
||||||
|
|
||||||
//make and set up an NSBox (TODO: Just derive from wxStaticBox)
|
NSBox *theBox = [[NSBox alloc] initWithFrame:MakeDefaultNSRect(size)];
|
||||||
SetNSView([[NSBox alloc] initWithFrame:MakeDefaultNSRect(size)]);
|
|
||||||
[m_cocoaNSView release];
|
|
||||||
|
|
||||||
// Replace the box's content view with the NSMatrix we just created
|
// Replace the box's content view with the NSMatrix we just created
|
||||||
[GetNSBox() setContentView:radioBox];
|
// IMPORTANT: This must be done before calling SetNSBox.
|
||||||
|
[theBox setContentView:radioBox];
|
||||||
[radioBox release]; // The NSBox retains it for us.
|
[radioBox release]; // The NSBox retains it for us.
|
||||||
|
|
||||||
|
SetNSBox(theBox);
|
||||||
|
[theBox release];
|
||||||
|
|
||||||
|
|
||||||
[GetNSBox() setTitle:wxNSStringWithWxString(wxStripMenuCodes(title, wxStrip_Mnemonics))];
|
[GetNSBox() setTitle:wxNSStringWithWxString(wxStripMenuCodes(title, wxStrip_Mnemonics))];
|
||||||
// [GetNSBox() setBorderType:NSLineBorder]; // why??
|
// [GetNSBox() setBorderType:NSLineBorder]; // why??
|
||||||
|
|
||||||
@@ -159,6 +178,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID winid,
|
|||||||
|
|
||||||
wxRadioBox::~wxRadioBox()
|
wxRadioBox::~wxRadioBox()
|
||||||
{
|
{
|
||||||
|
DisassociateNSBox(GetNSBox());
|
||||||
}
|
}
|
||||||
|
|
||||||
WX_NSMatrix wxRadioBox::GetNSMatrix() const
|
WX_NSMatrix wxRadioBox::GetNSMatrix() const
|
||||||
@@ -240,4 +260,12 @@ wxSize wxRadioBox::DoGetBestSize() const
|
|||||||
return wxControl::DoGetBestSize();
|
return wxControl::DoGetBestSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxRadioBox::CocoaTarget_action(void)
|
||||||
|
{
|
||||||
|
wxCommandEvent event(wxEVT_COMMAND_RADIOBOX_SELECTED, GetId());
|
||||||
|
InitCommandEvent(event);
|
||||||
|
event.SetInt(GetSelection()); // i.e. SetSelection.
|
||||||
|
Command(event);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user