ObjectivelyMVC
Object oriented MVC framework for SDL3 and GNU C
Loading...
Searching...
No Matches
ViewController.c File Reference
#include <assert.h>
#include "ViewController.h"

Go to the source code of this file.

Macros

#define _Class   _ViewController
 

Functions

Class * _ViewController (void)
 
static void addChildViewController (ViewController *self, ViewController *childViewController)
 
static void dealloc (Object *self)
 
static ViewControllerinit (ViewController *self)
 
static void initialize (Class *clazz)
 
static void loadView (ViewController *self)
 
static void loadViewIfNeeded (ViewController *self)
 
static void moveToParentViewController (ViewController *self, ViewController *parentViewController)
 
static void removeChildViewController (ViewController *self, ViewController *childViewController)
 
static void removeFromParentViewController (ViewController *self)
 
static void renderDeviceDidReset (ViewController *self)
 
static void renderDeviceDidReset_enumerate (const Array *array, ident obj, ident data)
 ArrayEnumerator for renderDeviceDidReset recursion.
 
static void renderDeviceWillReset (ViewController *self)
 
static void renderDeviceWillReset_enumerate (const Array *array, ident obj, ident data)
 ArrayEnumerator for renderDeviceWillReset recursion.
 
static void respondToEvent (ViewController *self, const SDL_Event *event)
 
static void respondToEvent_enumerate (const Array *array, ident obj, ident data)
 ArrayEnumerator for respondToEvent recursion.
 
static void setView (ViewController *self, View *view)
 
static void viewDidAppear (ViewController *self)
 
static void viewDidAppear_enumerate (const Array *array, ident obj, ident data)
 ArrayEnumerator for viewDidAppear recursion.
 
static void viewDidDisappear (ViewController *self)
 
static void viewDidDisappear_enumerate (const Array *array, ident obj, ident data)
 ArrayEnumerator for viewDidDisappear recursion.
 
static void viewWillAppear (ViewController *self)
 
static void viewWillAppear_enumerate (const Array *array, ident obj, ident data)
 ArrayEnumerator for viewWillAppear recursion.
 
static void viewWillDisappear (ViewController *self)
 
static void viewWillDisappear_enumerate (const Array *array, ident obj, ident data)
 ArrayEnumerator for viewWillDisappear recursion.
 

Macro Definition Documentation

◆ _Class

#define _Class   _ViewController

Definition at line 28 of file ViewController.c.

Function Documentation

◆ _ViewController()

Class * _ViewController ( void  )

Definition at line 335 of file ViewController.c.

335 {
336 static Class *clazz;
337 static Once once;
338
339 do_once(&once, {
340 clazz = _initialize(&(const ClassDef) {
341 .name = "ViewController",
342 .superclass = _Object(),
343 .instanceSize = sizeof(ViewController),
344 .interfaceOffset = offsetof(ViewController, interface),
345 .interfaceSize = sizeof(ViewControllerInterface),
347 });
348 });
349
350 return clazz;
351}
static void initialize(Class *clazz)
A ViewController manages a View and its descendants.

◆ addChildViewController()

static void addChildViewController ( ViewController self,
ViewController childViewController 
)
static

Definition at line 51 of file ViewController.c.

51 {
52
53 assert(childViewController);
54
55 ViewController *that = retain(childViewController);
56
57 $(childViewController, removeFromParentViewController);
58
59 $(self->childViewControllers, addObject, childViewController);
60 childViewController->parentViewController = self;
61
62 $(self, loadViewIfNeeded);
63 $(childViewController, loadViewIfNeeded);
64
65 if (self->view->window) {
66 $(childViewController, viewWillAppear);
67 }
68
69 $(self->view, addSubview, childViewController->view);
70 $(childViewController->view, updateBindings);
71
72 if (self->view->window) {
73 $(childViewController, viewDidAppear);
74 }
75
76 release(that);
77}
static void updateBindings(View *self)
static void addSubview(View *self, View *subview)
Definition PageView.c:49
static void viewWillAppear(ViewController *self)
static void loadViewIfNeeded(ViewController *self)
static void viewDidAppear(ViewController *self)
static void removeFromParentViewController(ViewController *self)
Array * childViewControllers
The child view controllers.
View * view
The main view.
ViewController * parentViewController
The parent view controller.
SDL_Window * window
The window.
Definition View.h:277

◆ dealloc()

static void dealloc ( Object *  self)
static
See also
Object::dealloc(Object *)

Definition at line 35 of file ViewController.c.

35 {
36
37 ViewController *this = (ViewController *) self;
38
39 release(this->childViewControllers);
40 release(this->view);
41
42 super(Object, self, dealloc);
43}
static void dealloc(Object *self)

◆ init()

static ViewController * init ( ViewController self)
static

Definition at line 83 of file ViewController.c.

83 {
84
85 self = (ViewController *) super(Object, self, init);
86 if (self) {
87 self->childViewControllers = $$(Array, arrayWithCapacity, 0);
88 assert(self->childViewControllers);
89 }
90
91 return self;
92}
static ViewController * init(ViewController *self)

◆ initialize()

static void initialize ( Class *  clazz)
static
See also
Class::initialize(Class *)

Definition at line 310 of file ViewController.c.

310 {
311
312 ((ObjectInterface *) clazz->interface)->dealloc = dealloc;
313
314 ((ViewControllerInterface *) clazz->interface)->addChildViewController = addChildViewController;
315 ((ViewControllerInterface *) clazz->interface)->init = init;
316 ((ViewControllerInterface *) clazz->interface)->loadView = loadView;
317 ((ViewControllerInterface *) clazz->interface)->loadViewIfNeeded = loadViewIfNeeded;
318 ((ViewControllerInterface *) clazz->interface)->moveToParentViewController = moveToParentViewController;
319 ((ViewControllerInterface *) clazz->interface)->removeChildViewController = removeChildViewController;
320 ((ViewControllerInterface *) clazz->interface)->removeFromParentViewController = removeFromParentViewController;
321 ((ViewControllerInterface *) clazz->interface)->respondToEvent = respondToEvent;
322 ((ViewControllerInterface *) clazz->interface)->renderDeviceDidReset = renderDeviceDidReset;
323 ((ViewControllerInterface *) clazz->interface)->renderDeviceWillReset = renderDeviceWillReset;
324 ((ViewControllerInterface *) clazz->interface)->setView = setView;
325 ((ViewControllerInterface *) clazz->interface)->viewDidAppear = viewDidAppear;
326 ((ViewControllerInterface *) clazz->interface)->viewDidDisappear = viewDidDisappear;
327 ((ViewControllerInterface *) clazz->interface)->viewWillAppear = viewWillAppear;
328 ((ViewControllerInterface *) clazz->interface)->viewWillDisappear = viewWillDisappear;
329}
static void addChildViewController(ViewController *self, ViewController *childViewController)
static void loadView(ViewController *self)
static void viewWillDisappear(ViewController *self)
static void moveToParentViewController(ViewController *self, ViewController *parentViewController)
static void renderDeviceWillReset(ViewController *self)
static void removeChildViewController(ViewController *self, ViewController *childViewController)
static void respondToEvent(ViewController *self, const SDL_Event *event)
static void renderDeviceDidReset(ViewController *self)
static void setView(ViewController *self, View *view)
static void viewDidDisappear(ViewController *self)
void loadView(ViewController *self)
Loads this ViewController's View.

◆ loadView()

static void loadView ( ViewController self)
static

Definition at line 98 of file ViewController.c.

98 {
99
100 View *view = $(alloc(View), initWithFrame, NULL);
101 assert(view);
102
104
105 $(self, setView, view);
106 release(view);
107}
static Box * initWithFrame(Box *self, const SDL_Rect *frame)
Definition Box.c:92
@ ViewAutoresizingFill
Definition View.h:90
Views are the fundamental building blocks of ObjectivelyMVC user interfaces.
Definition View.h:134
int autoresizingMask
The ViewAutoresizing bitmask.
Definition View.h:155

◆ loadViewIfNeeded()

static void loadViewIfNeeded ( ViewController self)
static

Definition at line 113 of file ViewController.c.

113 {
114
115 if (self->view == NULL) {
116 $(self, loadView);
117 }
118
119 assert(self->view);
120 assert(self->view->viewController == self);
121}
ViewController * viewController
The ViewController.
Definition View.h:265

◆ moveToParentViewController()

static void moveToParentViewController ( ViewController self,
ViewController parentViewController 
)
static

Definition at line 127 of file ViewController.c.

127 {
128
129 ViewController *this = retain(self);
130
132
133 if (parentViewController) {
134 $(parentViewController, addChildViewController, self);
135 }
136
137 release(this);
138}

◆ removeChildViewController()

static void removeChildViewController ( ViewController self,
ViewController childViewController 
)
static

Definition at line 144 of file ViewController.c.

144 {
145
146 assert(childViewController);
147 assert(childViewController->parentViewController == self);
148
149 ViewController *that = retain(childViewController);
150
151 $(self->childViewControllers, removeObject, childViewController);
152 childViewController->parentViewController = NULL;
153
154 $(childViewController, viewWillDisappear);
155 $(childViewController->view, removeFromSuperview);
156 $(childViewController, viewDidDisappear);
157
158 release(that);
159}
static void removeFromSuperview(View *self)
Definition View.c:1361

◆ removeFromParentViewController()

static void removeFromParentViewController ( ViewController self)
static

Definition at line 165 of file ViewController.c.

165 {
166
167 if (self->parentViewController) {
169 }
170}

◆ renderDeviceDidReset()

static void renderDeviceDidReset ( ViewController self)
static

Definition at line 198 of file ViewController.c.

198 {
199
200 $(self->view, renderDeviceDidReset);
201
203}
static void enumerate(View *self, ViewEnumerator enumerator, ident data)
Definition View.c:749
static void renderDeviceDidReset_enumerate(const Array *array, ident obj, ident data)
ArrayEnumerator for renderDeviceDidReset recursion.

◆ renderDeviceDidReset_enumerate()

static void renderDeviceDidReset_enumerate ( const Array *  array,
ident  obj,
ident  data 
)
static

ArrayEnumerator for renderDeviceDidReset recursion.

Definition at line 190 of file ViewController.c.

190 {
192}

◆ renderDeviceWillReset()

static void renderDeviceWillReset ( ViewController self)
static

Definition at line 216 of file ViewController.c.

216 {
217
218 $(self->view, renderDeviceWillReset);
219
221}
static void renderDeviceWillReset_enumerate(const Array *array, ident obj, ident data)
ArrayEnumerator for renderDeviceWillReset recursion.

◆ renderDeviceWillReset_enumerate()

static void renderDeviceWillReset_enumerate ( const Array *  array,
ident  obj,
ident  data 
)
static

ArrayEnumerator for renderDeviceWillReset recursion.

Definition at line 208 of file ViewController.c.

208 {
210}

◆ respondToEvent()

static void respondToEvent ( ViewController self,
const SDL_Event *  event 
)
static

Definition at line 183 of file ViewController.c.

183 {
184 $((Array *) self->childViewControllers, enumerate, respondToEvent_enumerate, (ident) event);
185}
static void respondToEvent_enumerate(const Array *array, ident obj, ident data)
ArrayEnumerator for respondToEvent recursion.

◆ respondToEvent_enumerate()

static void respondToEvent_enumerate ( const Array *  array,
ident  obj,
ident  data 
)
static

ArrayEnumerator for respondToEvent recursion.

Definition at line 175 of file ViewController.c.

175 {
176 $((ViewController *) obj, respondToEvent, (const SDL_Event *) data);
177}

◆ setView()

static void setView ( ViewController self,
View view 
)
static

Definition at line 227 of file ViewController.c.

227 {
228
229 if (view != self->view) {
230
231 if (self->view) {
232 self->view->viewController = NULL;
233 release(self->view);
234 }
235
236 if (view) {
237 self->view = retain(view);
238 self->view->viewController = self;
239 } else {
240 self->view = NULL;
241 }
242 }
243}

◆ viewDidAppear()

static void viewDidAppear ( ViewController self)
static

Definition at line 256 of file ViewController.c.

256 {
257 $((Array *) self->childViewControllers, enumerate, viewDidAppear_enumerate, NULL);
258}
static void viewDidAppear_enumerate(const Array *array, ident obj, ident data)
ArrayEnumerator for viewDidAppear recursion.

◆ viewDidAppear_enumerate()

static void viewDidAppear_enumerate ( const Array *  array,
ident  obj,
ident  data 
)
static

ArrayEnumerator for viewDidAppear recursion.

Definition at line 248 of file ViewController.c.

248 {
249 $((ViewController *) obj, viewDidAppear);
250}

◆ viewDidDisappear()

static void viewDidDisappear ( ViewController self)
static

Definition at line 271 of file ViewController.c.

271 {
273}
static void viewDidDisappear_enumerate(const Array *array, ident obj, ident data)
ArrayEnumerator for viewDidDisappear recursion.

◆ viewDidDisappear_enumerate()

static void viewDidDisappear_enumerate ( const Array *  array,
ident  obj,
ident  data 
)
static

ArrayEnumerator for viewDidDisappear recursion.

Definition at line 263 of file ViewController.c.

263 {
265}

◆ viewWillAppear()

static void viewWillAppear ( ViewController self)
static

Definition at line 286 of file ViewController.c.

286 {
288}
static void viewWillAppear_enumerate(const Array *array, ident obj, ident data)
ArrayEnumerator for viewWillAppear recursion.

◆ viewWillAppear_enumerate()

static void viewWillAppear_enumerate ( const Array *  array,
ident  obj,
ident  data 
)
static

ArrayEnumerator for viewWillAppear recursion.

Definition at line 278 of file ViewController.c.

278 {
279 $((ViewController *) obj, viewWillAppear);
280}

◆ viewWillDisappear()

static void viewWillDisappear ( ViewController self)
static

Definition at line 301 of file ViewController.c.

301 {
303}
static void viewWillDisappear_enumerate(const Array *array, ident obj, ident data)
ArrayEnumerator for viewWillDisappear recursion.

◆ viewWillDisappear_enumerate()

static void viewWillDisappear_enumerate ( const Array *  array,
ident  obj,
ident  data 
)
static

ArrayEnumerator for viewWillDisappear recursion.

Definition at line 293 of file ViewController.c.

293 {
295}