From da1cb3e79c0eba94c359ea2e3f586c43d70645f7 Mon Sep 17 00:00:00 2001 From: Linas Valiukas Date: Fri, 12 Aug 2011 22:30:10 +0000 Subject: [PATCH] wxSegmentedControl changing/changed events git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/SOC2011_WXIOS@68672 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/osx/iphone/private/segctrlimpl.h | 5 +++ src/osx/iphone/pagectrl.mm | 3 +- src/osx/iphone/segctrl.mm | 42 +++++++++++++++++++++ tests/mobile/tests/tests_pagectrl.cpp | 2 +- tests/mobile/tests/tests_segctrl.cpp | 16 +++++++- tests/mobile/tests/tests_segctrl.h | 9 ++++- tests/mobile/tests/tests_toolbar.cpp | 2 +- 7 files changed, 74 insertions(+), 5 deletions(-) diff --git a/include/wx/osx/iphone/private/segctrlimpl.h b/include/wx/osx/iphone/private/segctrlimpl.h index ef15b6efc1..bbf50730fb 100644 --- a/include/wx/osx/iphone/private/segctrlimpl.h +++ b/include/wx/osx/iphone/private/segctrlimpl.h @@ -12,6 +12,7 @@ #ifndef _WX_OSX_IPHONE_PRIVATE_SEGCTRL_H_ #define _WX_OSX_IPHONE_PRIVATE_SEGCTRL_H_ +#include "wx/segctrl.h" #include "wx/osx/private.h" @@ -19,8 +20,12 @@ @interface wxUISegmentedControl : UISegmentedControl { + wxSegmentedCtrl *moSegmentedCtrl; } +- (id)initWithWxSegmentedCtrl:(wxSegmentedCtrl *)initWxSegmentedCtrl; +- (void)segmentHasBeenChanged:(id)sender; + @end diff --git a/src/osx/iphone/pagectrl.mm b/src/osx/iphone/pagectrl.mm index b4531237d6..81d0a1c03f 100644 --- a/src/osx/iphone/pagectrl.mm +++ b/src/osx/iphone/pagectrl.mm @@ -31,6 +31,7 @@ wxPageCtrl *moPageCtrl; } +- (id)initWithWxPageCtrl:(wxPageCtrl *)initWxPageCtrl; - (void)pageHasBeenChanged:(id)sender; @end @@ -38,7 +39,7 @@ @implementation wxUIPageControl - (id)init { - if ((self = [super init])) { + if ((self = [self init])) { moPageCtrl = NULL; [self addTarget:self diff --git a/src/osx/iphone/segctrl.mm b/src/osx/iphone/segctrl.mm index d0fa2ba55d..b49c02d3b1 100644 --- a/src/osx/iphone/segctrl.mm +++ b/src/osx/iphone/segctrl.mm @@ -29,6 +29,48 @@ @implementation wxUISegmentedControl +- (id)init { + if ((self = [super init])) { + moSegmentedCtrl = NULL; + + [self addTarget:self + action:@selector(segmentHasBeenChanged:) + forControlEvents:UIControlEventValueChanged]; + } + + return self; +} + +- (id)initWithWxSegmentedCtrl:(wxSegmentedCtrl *)initWxSegmentedCtrl { + if ((self = [self init])) { + moSegmentedCtrl = initWxSegmentedCtrl; + } + + return self; +} + +- (void)segmentHasBeenChanged:(id)sender { + if ( !moSegmentedCtrl ) { + return; + } + + int selection = [self selectedSegmentIndex]; + + // wxEVT_COMMAND_TAB_SEL_CHANGING + // FIXME should be able to veto the change + wxTabEvent changingEvent(wxEVT_COMMAND_TAB_SEL_CHANGING, moSegmentedCtrl->GetId()); + changingEvent.SetEventObject(moSegmentedCtrl); + changingEvent.SetEventType(wxEVT_COMMAND_TAB_SEL_CHANGING); + changingEvent.SetSelection(selection); + moSegmentedCtrl->GetEventHandler()->ProcessEvent(changingEvent); + + // wxEVT_COMMAND_TAB_SEL_CHANGED + wxTabEvent changedEvent(wxEVT_COMMAND_TAB_SEL_CHANGED, moSegmentedCtrl->GetId()); + changedEvent.SetEventObject(moSegmentedCtrl); + changedEvent.SetEventType(wxEVT_COMMAND_TAB_SEL_CHANGED); + changedEvent.SetSelection(selection); + moSegmentedCtrl->GetEventHandler()->ProcessEvent(changedEvent); +} @end diff --git a/tests/mobile/tests/tests_pagectrl.cpp b/tests/mobile/tests/tests_pagectrl.cpp index 490124b695..593c9230e0 100644 --- a/tests/mobile/tests/tests_pagectrl.cpp +++ b/tests/mobile/tests/tests_pagectrl.cpp @@ -41,7 +41,7 @@ bool MobileTestsWxPageCtrlPanel::CreateControls() // Page control // - m_pageCtrl = new wxPageCtrl(this, wxID_ANY); + m_pageCtrl = new wxPageCtrl(this, wxID_ANY, wxPoint(0, 30), wxSize(90, 45)); m_pageCtrl->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MobileTestsWxPageCtrlPanel::OnPageChanged), NULL, this); m_pageCtrl->SetPageCount(6); m_pageCtrl->SetCurrentPage(2); diff --git a/tests/mobile/tests/tests_segctrl.cpp b/tests/mobile/tests/tests_segctrl.cpp index 61622a9767..abdf5d221e 100644 --- a/tests/mobile/tests/tests_segctrl.cpp +++ b/tests/mobile/tests/tests_segctrl.cpp @@ -41,12 +41,26 @@ bool MobileTestsWxSegmentedCtrlPanel::CreateControls() // Segmented control // - m_segCtrl = new wxSegmentedCtrl(this, wxID_ANY, wxPoint(50, 50), wxSize(100, 40)); + m_segCtrl = new wxSegmentedCtrl(this, wxID_ANY, wxPoint(50, 50), wxSize(300, 40)); m_segCtrl->AddItem(_("Tiger")); m_segCtrl->AddItem(_("Cheetah")); m_segCtrl->AddItem(_("Pig")); m_segCtrl->SetSelection(1); sizer->Add(m_segCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + // Events + m_segCtrl->Connect(wxEVT_COMMAND_TAB_SEL_CHANGING, wxCommandEventHandler(MobileTestsWxSegmentedCtrlPanel::OnChanging), NULL, this); + m_segCtrl->Connect(wxEVT_COMMAND_TAB_SEL_CHANGED, wxCommandEventHandler(MobileTestsWxSegmentedCtrlPanel::OnChanged), NULL, this); + return true; } + +void MobileTestsWxSegmentedCtrlPanel::OnChanging(wxCommandEvent& WXUNUSED(event)) +{ + wxLogMessage("Event wxEVT_COMMAND_TAB_SEL_CHANGING"); +} + +void MobileTestsWxSegmentedCtrlPanel::OnChanged(wxCommandEvent& WXUNUSED(event)) +{ + wxLogMessage("Event wxEVT_COMMAND_TAB_SEL_CHANGED"); +} diff --git a/tests/mobile/tests/tests_segctrl.h b/tests/mobile/tests/tests_segctrl.h index fa56d25a43..0015b78bb9 100644 --- a/tests/mobile/tests/tests_segctrl.h +++ b/tests/mobile/tests/tests_segctrl.h @@ -10,7 +10,10 @@ // // TESTS: // -// - wxMoTabCtrl (wxWindow *parent, wxWindowID id, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxTAB_TEXT|wxTAB_BITMAP, const wxString &name=wxT("tabCtrl")) +// events: +// + wxEVT_COMMAND_TAB_SEL_CHANGING +// + wxEVT_COMMAND_TAB_SEL_CHANGED +// - wxMoSegmentedCtrl (wxWindow *parent, wxWindowID id, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxTAB_TEXT|wxTAB_BITMAP, const wxString &name=wxT("segCtrl")) // - int GetSelection () const // - int GetCurFocus () const // - wxImageList * GetImageList () const @@ -55,6 +58,10 @@ public: long style = wxTAB_TRAVERSAL, const wxString& name = _("wxSegmentedCtrl Mobile")); + // Event tests + void OnChanging(wxCommandEvent& WXUNUSED(event)); + void OnChanged(wxCommandEvent& WXUNUSED(event)); + protected: bool CreateControls(); diff --git a/tests/mobile/tests/tests_toolbar.cpp b/tests/mobile/tests/tests_toolbar.cpp index a1b1b77d23..ddae826c0d 100644 --- a/tests/mobile/tests/tests_toolbar.cpp +++ b/tests/mobile/tests/tests_toolbar.cpp @@ -47,7 +47,7 @@ bool MobileTestsWxToolBarPanel::CreateControls() // Toolbar - m_toolbar = new wxToolBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTB_BLACK_OPAQUE_BG); + m_toolbar = new wxToolBar(this, wxID_ANY, wxDefaultPosition, wxSize(300, 44), wxTB_BLACK_OPAQUE_BG); sizer->Add(m_toolbar, 0, wxEXPAND, 0); // Events