Implement wxNotebook in wxiOS Closes #25857. Closes #25867. Co-authored-by: Stefan Csomor <cso...@advancedconcepts.ch>
... | ... | @@ -5613,6 +5613,7 @@ COND_TOOLKIT_OSX_IPHONE___GUI_SRC_OBJECTS = \ |
5613 | 5613 | monodll_iphone_listbox.o \
|
5614 | 5614 | monodll_iphone_msgdlg.o \
|
5615 | 5615 | monodll_iphone_nonownedwnd.o \
|
5616 | + monodll_iphone_notebook.o \
|
|
5616 | 5617 | monodll_iphone_scrolbar.o \
|
5617 | 5618 | monodll_iphone_slider.o \
|
5618 | 5619 | monodll_iphone_stattext.o \
|
... | ... | @@ -7393,6 +7394,7 @@ COND_TOOLKIT_OSX_IPHONE___GUI_SRC_OBJECTS_1 = \ |
7393 | 7394 | monolib_iphone_listbox.o \
|
7394 | 7395 | monolib_iphone_msgdlg.o \
|
7395 | 7396 | monolib_iphone_nonownedwnd.o \
|
7397 | + monolib_iphone_notebook.o \
|
|
7396 | 7398 | monolib_iphone_scrolbar.o \
|
7397 | 7399 | monolib_iphone_slider.o \
|
7398 | 7400 | monolib_iphone_stattext.o \
|
... | ... | @@ -9319,6 +9321,7 @@ COND_TOOLKIT_OSX_IPHONE___GUI_SRC_OBJECTS_2 = \ |
9319 | 9321 | coredll_iphone_listbox.o \
|
9320 | 9322 | coredll_iphone_msgdlg.o \
|
9321 | 9323 | coredll_iphone_nonownedwnd.o \
|
9324 | + coredll_iphone_notebook.o \
|
|
9322 | 9325 | coredll_iphone_scrolbar.o \
|
9323 | 9326 | coredll_iphone_slider.o \
|
9324 | 9327 | coredll_iphone_stattext.o \
|
... | ... | @@ -10827,6 +10830,7 @@ COND_TOOLKIT_OSX_IPHONE___GUI_SRC_OBJECTS_3 = \ |
10827 | 10830 | corelib_iphone_listbox.o \
|
10828 | 10831 | corelib_iphone_msgdlg.o \
|
10829 | 10832 | corelib_iphone_nonownedwnd.o \
|
10833 | + corelib_iphone_notebook.o \
|
|
10830 | 10834 | corelib_iphone_scrolbar.o \
|
10831 | 10835 | corelib_iphone_slider.o \
|
10832 | 10836 | corelib_iphone_stattext.o \
|
... | ... | @@ -16147,6 +16151,9 @@ monodll_iphone_msgdlg.o: $(srcdir)/src/osx/iphone/msgdlg.mm $(MONODLL_ODEP) |
16147 | 16151 | monodll_iphone_nonownedwnd.o: $(srcdir)/src/osx/iphone/nonownedwnd.mm $(MONODLL_ODEP)
|
16148 | 16152 | $(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/nonownedwnd.mm
|
16149 | 16153 | |
16154 | +monodll_iphone_notebook.o: $(srcdir)/src/osx/iphone/notebook.mm $(MONODLL_ODEP)
|
|
16155 | + $(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/notebook.mm
|
|
16156 | + |
|
16150 | 16157 | monodll_iphone_scrolbar.o: $(srcdir)/src/osx/iphone/scrolbar.mm $(MONODLL_ODEP)
|
16151 | 16158 | $(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/scrolbar.mm
|
16152 | 16159 | |
... | ... | @@ -20923,6 +20930,9 @@ monolib_iphone_msgdlg.o: $(srcdir)/src/osx/iphone/msgdlg.mm $(MONOLIB_ODEP) |
20923 | 20930 | monolib_iphone_nonownedwnd.o: $(srcdir)/src/osx/iphone/nonownedwnd.mm $(MONOLIB_ODEP)
|
20924 | 20931 | $(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/nonownedwnd.mm
|
20925 | 20932 | |
20933 | +monolib_iphone_notebook.o: $(srcdir)/src/osx/iphone/notebook.mm $(MONOLIB_ODEP)
|
|
20934 | + $(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/notebook.mm
|
|
20935 | + |
|
20926 | 20936 | monolib_iphone_scrolbar.o: $(srcdir)/src/osx/iphone/scrolbar.mm $(MONOLIB_ODEP)
|
20927 | 20937 | $(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/scrolbar.mm
|
20928 | 20938 | |
... | ... | @@ -26368,6 +26378,9 @@ coredll_iphone_msgdlg.o: $(srcdir)/src/osx/iphone/msgdlg.mm $(COREDLL_ODEP) |
26368 | 26378 | coredll_iphone_nonownedwnd.o: $(srcdir)/src/osx/iphone/nonownedwnd.mm $(COREDLL_ODEP)
|
26369 | 26379 | $(CXXC) -c -o $@ $(COREDLL_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/nonownedwnd.mm
|
26370 | 26380 | |
26381 | +coredll_iphone_notebook.o: $(srcdir)/src/osx/iphone/notebook.mm $(COREDLL_ODEP)
|
|
26382 | + $(CXXC) -c -o $@ $(COREDLL_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/notebook.mm
|
|
26383 | + |
|
26371 | 26384 | coredll_iphone_scrolbar.o: $(srcdir)/src/osx/iphone/scrolbar.mm $(COREDLL_ODEP)
|
26372 | 26385 | $(CXXC) -c -o $@ $(COREDLL_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/scrolbar.mm
|
26373 | 26386 | |
... | ... | @@ -30115,6 +30128,9 @@ corelib_iphone_msgdlg.o: $(srcdir)/src/osx/iphone/msgdlg.mm $(CORELIB_ODEP) |
30115 | 30128 | corelib_iphone_nonownedwnd.o: $(srcdir)/src/osx/iphone/nonownedwnd.mm $(CORELIB_ODEP)
|
30116 | 30129 | $(CXXC) -c -o $@ $(CORELIB_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/nonownedwnd.mm
|
30117 | 30130 | |
30131 | +corelib_iphone_notebook.o: $(srcdir)/src/osx/iphone/notebook.mm $(CORELIB_ODEP)
|
|
30132 | + $(CXXC) -c -o $@ $(CORELIB_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/notebook.mm
|
|
30133 | + |
|
30118 | 30134 | corelib_iphone_scrolbar.o: $(srcdir)/src/osx/iphone/scrolbar.mm $(CORELIB_ODEP)
|
30119 | 30135 | $(CXXC) -c -o $@ $(CORELIB_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/scrolbar.mm
|
30120 | 30136 |
... | ... | @@ -2384,6 +2384,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! |
2384 | 2384 | src/osx/iphone/listbox.mm
|
2385 | 2385 | src/osx/iphone/msgdlg.mm
|
2386 | 2386 | src/osx/iphone/nonownedwnd.mm
|
2387 | + src/osx/iphone/notebook.mm
|
|
2387 | 2388 | src/osx/iphone/scrolbar.mm
|
2388 | 2389 | src/osx/iphone/slider.mm
|
2389 | 2390 | src/osx/iphone/stattext.mm
|
... | ... | @@ -2238,6 +2238,7 @@ set(OSX_IPHONE_SRC |
2238 | 2238 | src/osx/iphone/listbox.mm
|
2239 | 2239 | src/osx/iphone/msgdlg.mm
|
2240 | 2240 | src/osx/iphone/nonownedwnd.mm
|
2241 | + src/osx/iphone/notebook.mm
|
|
2241 | 2242 | src/osx/iphone/scrolbar.mm
|
2242 | 2243 | src/osx/iphone/settings.mm
|
2243 | 2244 | src/osx/iphone/slider.mm
|
... | ... | @@ -2241,6 +2241,7 @@ OSX_IPHONE_SRC = |
2241 | 2241 | src/osx/iphone/menuitem.mm
|
2242 | 2242 | src/osx/iphone/msgdlg.mm
|
2243 | 2243 | src/osx/iphone/nonownedwnd.mm
|
2244 | + src/osx/iphone/notebook.mm
|
|
2244 | 2245 | src/osx/iphone/scrolbar.mm
|
2245 | 2246 | src/osx/iphone/settings.mm
|
2246 | 2247 | src/osx/iphone/slider.mm
|
... | ... | @@ -141,7 +141,6 @@ |
141 | 141 | #undef wxUSE_CHECKLISTBOX
|
142 | 142 | #undef wxUSE_GRID
|
143 | 143 | #undef wxUSE_LISTCTRL
|
144 | -#undef wxUSE_NOTEBOOK
|
|
145 | 144 | #undef wxUSE_SPINBTN
|
146 | 145 | #undef wxUSE_SPINCTRL
|
147 | 146 | #undef wxUSE_TREECTRL
|
... | ... | @@ -171,7 +170,6 @@ |
171 | 170 | #define wxUSE_CHECKLISTBOX 0
|
172 | 171 | #define wxUSE_GRID 0
|
173 | 172 | #define wxUSE_LISTCTRL 0
|
174 | -#define wxUSE_NOTEBOOK 0
|
|
175 | 173 | #define wxUSE_SPINBTN 0
|
176 | 174 | #define wxUSE_SPINCTRL 0
|
177 | 175 | #define wxUSE_TREECTRL 0
|
1 | +/////////////////////////////////////////////////////////////////////////////
|
|
2 | +// Name: src/osx/iphone/notebook.mm
|
|
3 | +// Purpose: wxNotebook
|
|
4 | +// Author: Robert Roebling
|
|
5 | +// Modified by:
|
|
6 | +// Created: 08/08/25
|
|
7 | +// Copyright: (c) Robert Roebling
|
|
8 | +// Licence: wxWindows licence
|
|
9 | +/////////////////////////////////////////////////////////////////////////////
|
|
10 | + |
|
11 | +#include "wx/wxprec.h"
|
|
12 | + |
|
13 | +#if wxUSE_NOTEBOOK
|
|
14 | + |
|
15 | +#include "wx/notebook.h"
|
|
16 | + |
|
17 | +#ifndef WX_PRECOMP
|
|
18 | + #include "wx/app.h"
|
|
19 | + #include "wx/utils.h"
|
|
20 | + #include "wx/dc.h"
|
|
21 | + #include "wx/dcclient.h"
|
|
22 | + #include "wx/settings.h"
|
|
23 | +#endif // WX_PRECOMP
|
|
24 | + |
|
25 | +#include "wx/osx/private.h"
|
|
26 | +#include "wx/private/bmpbndl.h"
|
|
27 | + |
|
28 | +#include <stdio.h>
|
|
29 | + |
|
30 | + |
|
31 | +@interface wxTabBarControllerDelegate : NSObject <UITabBarControllerDelegate>
|
|
32 | +{
|
|
33 | +}
|
|
34 | + |
|
35 | +-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;
|
|
36 | +-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;
|
|
37 | + |
|
38 | +@end
|
|
39 | + |
|
40 | +@implementation wxTabBarControllerDelegate
|
|
41 | + |
|
42 | +- (id) init
|
|
43 | +{
|
|
44 | + self = [super init];
|
|
45 | + return self;
|
|
46 | +}
|
|
47 | + |
|
48 | +-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
|
|
49 | +{
|
|
50 | + // TODO: Can we veto here?
|
|
51 | + return YES;
|
|
52 | +}
|
|
53 | + |
|
54 | +-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;
|
|
55 | +{
|
|
56 | + UITabBarController* controller = tabBarController;
|
|
57 | + UIViewController *subController = viewController;
|
|
58 | + |
|
59 | + wxWidgetIPhoneImpl* viewimpl = (wxWidgetIPhoneImpl* ) wxWidgetImpl::FindFromWXWidget( controller.view );
|
|
60 | + if ( viewimpl )
|
|
61 | + {
|
|
62 | + wxNotebook* wxpeer = (wxNotebook*) viewimpl->GetWXPeer();
|
|
63 | + wxpeer->OSXHandleClicked( 0 ); // parameter is a timestamp
|
|
64 | + }
|
|
65 | +}
|
|
66 | + |
|
67 | +@end
|
|
68 | + |
|
69 | + |
|
70 | + |
|
71 | +class wxNotebookIPhoneImpl : public wxWidgetIPhoneImpl
|
|
72 | +{
|
|
73 | +public:
|
|
74 | + wxNotebookIPhoneImpl(wxWindowMac *wxpeer, UIView *v, UITabBarController *controller, UISegmentedControl* segmented )
|
|
75 | + : wxWidgetIPhoneImpl(wxpeer, v)
|
|
76 | + {
|
|
77 | + m_controller = controller;
|
|
78 | + m_segmented = segmented;
|
|
79 | + }
|
|
80 | + |
|
81 | + wxInt32 GetValue() const wxOVERRIDE
|
|
82 | + {
|
|
83 | + if (GetWXPeer()->HasFlag( wxBK_BOTTOM ))
|
|
84 | + {
|
|
85 | + return [m_controller selectedIndex ] + 1; // notebook_osx starts with 1
|
|
86 | + }
|
|
87 | + else
|
|
88 | + {
|
|
89 | + return [m_segmented selectedSegmentIndex ] + 1;
|
|
90 | + }
|
|
91 | + }
|
|
92 | + |
|
93 | + void SetValue( wxInt32 value ) wxOVERRIDE
|
|
94 | + {
|
|
95 | + if (GetWXPeer()->HasFlag( wxBK_BOTTOM ))
|
|
96 | + {
|
|
97 | + [m_controller setSelectedIndex: value-1 ]; // notebook_osx starts with 1
|
|
98 | + }
|
|
99 | + else
|
|
100 | + {
|
|
101 | + [m_segmented setSelectedSegmentIndex: value-1 ];
|
|
102 | + }
|
|
103 | + }
|
|
104 | + |
|
105 | + void SetupTabs( const wxNotebook& notebook) wxOVERRIDE
|
|
106 | + {
|
|
107 | + UIView* slf = (UIView*) m_osxView;
|
|
108 | + |
|
109 | + |
|
110 | + if (GetWXPeer()->HasFlag( wxBK_BOTTOM ))
|
|
111 | + {
|
|
112 | + NSMutableArray *viewControllers = [[NSMutableArray alloc] init ];
|
|
113 | + |
|
114 | + for (int i = 0; i < notebook.GetPageCount(); i++)
|
|
115 | + {
|
|
116 | + wxNotebookPage* page = notebook.GetPage(i);
|
|
117 | + |
|
118 | + UIViewController *subController =[[UIViewController alloc] init];
|
|
119 | + |
|
120 | + wxCFStringRef text( wxControl::RemoveMnemonics(notebook.GetPageText(i)) );
|
|
121 | + UIImage *nbImage = nil;
|
|
122 | + const wxBitmapBundle bitmap = notebook.GetPageBitmapBundle(i);
|
|
123 | + if ( bitmap.IsOk() ) {
|
|
124 | + nbImage = wxOSXGetImageFromBundle(bitmap);
|
|
125 | + }
|
|
126 | + UITabBarItem *item = [[UITabBarItem alloc] initWithTitle: text.AsNSString() image:nbImage tag: i ];
|
|
127 | + [subController setTabBarItem: item];
|
|
128 | + |
|
129 | + UIView *subView = [[UIView alloc] init ];
|
|
130 | + [slf addSubview: subView];
|
|
131 | + [subController setView: subView];
|
|
132 | + [subView addSubview: page->GetHandle()];
|
|
133 | + |
|
134 | + [viewControllers addObject: subController];
|
|
135 | + }
|
|
136 | + |
|
137 | + [m_controller setViewControllers: viewControllers];
|
|
138 | + }
|
|
139 | + else
|
|
140 | + {
|
|
141 | + [m_segmented removeAllSegments];
|
|
142 | + for (int i = 0; i < notebook.GetPageCount(); i++)
|
|
143 | + {
|
|
144 | + wxNotebookPage* page = notebook.GetPage(i);
|
|
145 | + |
|
146 | + wxCFStringRef text( wxControl::RemoveMnemonics(notebook.GetPageText(i)) );
|
|
147 | + [m_segmented insertSegmentWithTitle:text.AsNSString() atIndex:i animated:NO];
|
|
148 | + |
|
149 | + if (notebook.GetPageCount() > 0)
|
|
150 | + [m_segmented setSelectedSegmentIndex: 0 ];
|
|
151 | + }
|
|
152 | + }
|
|
153 | + }
|
|
154 | + |
|
155 | + // TODO: find out what the proper border is
|
|
156 | + const int borderAround = 4;
|
|
157 | + |
|
158 | + void Move(int x, int y, int width, int height) wxOVERRIDE
|
|
159 | + {
|
|
160 | + wxWidgetIPhoneImpl::Move(x, y, width, height);
|
|
161 | + |
|
162 | + if (!GetWXPeer()->HasFlag( wxBK_BOTTOM ))
|
|
163 | + {
|
|
164 | + CGRect frame = [m_segmented frame];
|
|
165 | + frame.origin = CGPointMake( borderAround, borderAround );
|
|
166 | + frame.size.width = width - (2*borderAround);
|
|
167 | + |
|
168 | + [m_segmented setFrame:frame];
|
|
169 | + }
|
|
170 | + }
|
|
171 | + |
|
172 | + void SegmentedSelected( int selected )
|
|
173 | + {
|
|
174 | + wxNotebook *notebook = (wxNotebook*) GetWXPeer();
|
|
175 | + wxNotebookPage *page = notebook->GetPage( selected );
|
|
176 | + page->Show( true );
|
|
177 | + for (int i = 0; i < notebook->GetPageCount(); i++)
|
|
178 | + {
|
|
179 | + if (i != selected)
|
|
180 | + {
|
|
181 | + wxNotebookPage* page = notebook->GetPage(i);
|
|
182 | + page->Hide();
|
|
183 | + }
|
|
184 | + }
|
|
185 | + wxNotebookEvent event( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, notebook->GetId(), selected );
|
|
186 | + notebook->HandleWindowEvent( event );
|
|
187 | + }
|
|
188 | + |
|
189 | +protected:
|
|
190 | + UITabBarController *m_controller;
|
|
191 | + UISegmentedControl *m_segmented;
|
|
192 | + |
|
193 | +};
|
|
194 | + |
|
195 | +@interface wxUISegmentedControl : UISegmentedControl
|
|
196 | +{
|
|
197 | +}
|
|
198 | + |
|
199 | +@property wxNotebookIPhoneImpl *owner;
|
|
200 | + |
|
201 | +@end
|
|
202 | + |
|
203 | +@implementation wxUISegmentedControl
|
|
204 | + |
|
205 | +@end
|
|
206 | + |
|
207 | + |
|
208 | + |
|
209 | +@interface UIControl (wxUIControlActionSupport)
|
|
210 | + |
|
211 | +- (void) segmentedValueChangedAction:(id)sender event:(UIEvent*)event;
|
|
212 | + |
|
213 | +@end
|
|
214 | + |
|
215 | +@implementation UIControl (wxUIControlActionSupport)
|
|
216 | + |
|
217 | +- (void) segmentedValueChangedAction:(id)sender event:(UIEvent*)event
|
|
218 | +{
|
|
219 | + wxUISegmentedControl *segmented = (wxUISegmentedControl*) self;
|
|
220 | + wxNotebookIPhoneImpl* impl = [segmented owner];
|
|
221 | + impl->SegmentedSelected( [segmented selectedSegmentIndex] );
|
|
222 | +}
|
|
223 | + |
|
224 | +@end
|
|
225 | + |
|
226 | + |
|
227 | +wxWidgetImplType* wxWidgetImpl::CreateTabView( wxWindowMac* wxpeer,
|
|
228 | + wxWindowMac* WXUNUSED(parent),
|
|
229 | + wxWindowID WXUNUSED(id),
|
|
230 | + const wxPoint& pos,
|
|
231 | + const wxSize& size,
|
|
232 | + long style,
|
|
233 | + long WXUNUSED(extraStyle))
|
|
234 | +{
|
|
235 | + UITabBarController *controller = nullptr;
|
|
236 | + wxUISegmentedControl *segmented = nullptr;
|
|
237 | + UIView *v = nullptr;
|
|
238 | + |
|
239 | + if (style & wxBK_BOTTOM)
|
|
240 | + {
|
|
241 | + controller = [[UITabBarController alloc] init];
|
|
242 | + |
|
243 | + wxTabBarControllerDelegate *delegate = [[wxTabBarControllerDelegate alloc] init];
|
|
244 | + [controller setDelegate: delegate];
|
|
245 | + |
|
246 | + v = controller.view;
|
|
247 | + }
|
|
248 | + else
|
|
249 | + {
|
|
250 | + CGRect r = CGRectMake( pos.x, pos.y, size.x, size.y) ;
|
|
251 | + v = [[UIView alloc] initWithFrame:r];
|
|
252 | + |
|
253 | + segmented = [[wxUISegmentedControl alloc] initWithFrame:r];
|
|
254 | + [segmented sizeToFit];
|
|
255 | + |
|
256 | + [segmented addTarget:segmented action:@selector(segmentedValueChangedAction:event:) forControlEvents:UIControlEventValueChanged];
|
|
257 | + |
|
258 | + [v addSubview:segmented];
|
|
259 | + }
|
|
260 | + |
|
261 | + /*
|
|
262 | + if (style & wxALIGN_CENTER)
|
|
263 | + [v setTextAlignment: NSTextAlignmentCenter];
|
|
264 | + else if (style & wxALIGN_RIGHT)
|
|
265 | + [v setTextAlignment: NSTextAlignmentRight];
|
|
266 | + */
|
|
267 | + |
|
268 | + wxNotebookIPhoneImpl* impl = new wxNotebookIPhoneImpl( wxpeer, v, controller, segmented );
|
|
269 | + |
|
270 | + if (segmented != nullptr)
|
|
271 | + [segmented setOwner: impl];
|
|
272 | + |
|
273 | + return impl;
|
|
274 | +}
|
|
275 | + |
|
276 | +#endif //if wxUSE_NOTEBOOK |
... | ... | @@ -271,7 +271,18 @@ wxRect wxNotebook::GetPageRect() const |
271 | 271 | {
|
272 | 272 | wxSize size = GetClientSize() ;
|
273 | 273 | |
274 | +#ifdef __WXOSX_IPHONE__
|
|
275 | + |
|
276 | + // TODO: find out what the proper border is
|
|
277 | + const int borderAround = 4;
|
|
278 | + |
|
279 | + if (HasFlag(wxBK_BOTTOM))
|
|
280 | + return wxRect( 0, 0, size.x , size.y );
|
|
281 | + else
|
|
282 | + return wxRect( 0, 35+(2*borderAround), size.x , size.y-35-(2*borderAround) );
|
|
283 | +#else
|
|
274 | 284 | return wxRect( 0 , 0 , size.x , size.y ) ;
|
285 | +#endif
|
|
275 | 286 | }
|
276 | 287 | |
277 | 288 | // ----------------------------------------------------------------------------
|
—
View it on GitLab.
You're receiving this email because of your account on gitlab.com. Manage all notifications · Help