ObjectivelyMVC 0.1.0
Object oriented MVC framework for OpenGL, SDL2 and GNU C
Macros | Functions
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 void handleNotification (ViewController *self, const Notification *notification)
 
static void handleNotification_recurse (const Array *array, ident obj, ident data)
 ArrayEnumerator for handleNotification recursion. More...
 
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 respondToEvent (ViewController *self, const SDL_Event *event)
 
static void setView (ViewController *self, View *view)
 
static void viewDidAppear (ViewController *self)
 
static void viewDidAppear_recurse (const Array *array, ident obj, ident data)
 ArrayEnumerator for viewDidAppear recursion. More...
 
static void viewDidDisappear (ViewController *self)
 
static void viewDidDisappear_recurse (const Array *array, ident obj, ident data)
 ArrayEnumerator for viewDidDisappear recursion. More...
 
static void viewWillAppear (ViewController *self)
 
static void viewWillAppear_recurse (const Array *array, ident obj, ident data)
 ArrayEnumerator for viewWillAppear recursion. More...
 
static void viewWillDisappear (ViewController *self)
 
static void viewWillDisappear_recurse (const Array *array, ident obj, ident data)
 ArrayEnumerator for viewWillDisappear recursion. More...
 

Macro Definition Documentation

◆ _Class

#define _Class   _ViewController

Definition at line 28 of file ViewController.c.

Function Documentation

◆ _ViewController()

Class * _ViewController ( void  )

Definition at line 305 of file ViewController.c.

305 {
306 static Class *clazz;
307 static Once once;
308
309 do_once(&once, {
310 clazz = _initialize(&(const ClassDef) {
311 .name = "ViewController",
312 .superclass = _Object(),
313 .instanceSize = sizeof(ViewController),
314 .interfaceOffset = offsetof(ViewController, interface),
315 .interfaceSize = sizeof(ViewControllerInterface),
317 });
318 });
319
320 return clazz;
321}
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}
View * view
The main view.
void removeFromParentViewController(ViewController *self)
Removes this ViewController from its parent.
void loadViewIfNeeded(ViewController *self)
Loads this ViewController's View if it is not already loaded.
ViewController * parentViewController
The parent view controller.
void viewWillAppear(ViewController *self)
This method is invoked before this ViewController's View is added to the View hierarchy.
MutableArray * childViewControllers
The child view controllers.
void viewDidAppear(ViewController *self)
This method is invoked after this ViewController's View is added to the View hierarchy.
void updateBindings(View *self)
Updates data bindings, prompting the appropriate layout changes.
SDL_Window * window
The window.
Definition: View.h:276
void addSubview(View *self, View *subview)
Adds a subview to this view, to be drawn above its siblings.
Definition: PageView.c:35

◆ 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)

◆ handleNotification()

static void handleNotification ( ViewController self,
const Notification notification 
)
static

Definition at line 90 of file ViewController.c.

90 {
91 $((Array *) self->childViewControllers, enumerateObjects, handleNotification_recurse, (ident) notification);
92}
static void handleNotification_recurse(const Array *array, ident obj, ident data)
ArrayEnumerator for handleNotification recursion.

◆ handleNotification_recurse()

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

ArrayEnumerator for handleNotification recursion.

Definition at line 82 of file ViewController.c.

82 {
83 $((ViewController *) obj, handleNotification, data);
84}
void handleNotification(ViewController *self, const Notification *notification)
Handles a broadcast notification.

◆ init()

static ViewController * init ( ViewController self)
static

Definition at line 98 of file ViewController.c.

98 {
99
100 self = (ViewController *) super(Object, self, init);
101 if (self) {
102 self->childViewControllers = $$(MutableArray, arrayWithCapacity, 0);
103 assert(self->childViewControllers);
104 }
105
106 return self;
107}
CollectionView * init(CollectionView *self, const SDL_Rect *frame)
Initializes this CollectionView with the specified frame and style.

◆ initialize()

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

Definition at line 281 of file ViewController.c.

281 {
282
283 ((ObjectInterface *) clazz->interface)->dealloc = dealloc;
284
285 ((ViewControllerInterface *) clazz->interface)->addChildViewController = addChildViewController;
286 ((ViewControllerInterface *) clazz->interface)->handleNotification = handleNotification;
287 ((ViewControllerInterface *) clazz->interface)->init = init;
288 ((ViewControllerInterface *) clazz->interface)->loadView = loadView;
289 ((ViewControllerInterface *) clazz->interface)->loadViewIfNeeded = loadViewIfNeeded;
290 ((ViewControllerInterface *) clazz->interface)->moveToParentViewController = moveToParentViewController;
291 ((ViewControllerInterface *) clazz->interface)->removeChildViewController = removeChildViewController;
292 ((ViewControllerInterface *) clazz->interface)->removeFromParentViewController = removeFromParentViewController;
293 ((ViewControllerInterface *) clazz->interface)->respondToEvent = respondToEvent;
294 ((ViewControllerInterface *) clazz->interface)->setView = setView;
295 ((ViewControllerInterface *) clazz->interface)->viewDidAppear = viewDidAppear;
296 ((ViewControllerInterface *) clazz->interface)->viewDidDisappear = viewDidDisappear;
297 ((ViewControllerInterface *) clazz->interface)->viewWillAppear = viewWillAppear;
298 ((ViewControllerInterface *) clazz->interface)->viewWillDisappear = viewWillDisappear;
299}
void loadView(ViewController *self)
Loads this ViewController's View.
void setView(ViewController *self, View *view)
Sets this ViewController's View.
void addChildViewController(ViewController *self, ViewController *childViewController)
Adds the specified child ViewController to this ViewController.
void moveToParentViewController(ViewController *self, ViewController *parentViewController)
Moves this ViewController to the specified parent.
void viewDidDisappear(ViewController *self)
This method is invoked after this ViewController's View is removed to the View hierarchy.
void viewWillDisappear(ViewController *self)
This method is invoked before this ViewController's View is removed from the View hierarchy.
void removeChildViewController(ViewController *self, ViewController *childViewController)
Removes the specified child ViewController from this ViewController.
void respondToEvent(View *self, const SDL_Event *event)
Responds to the specified event.
Definition: Control.c:213

◆ loadView()

static void loadView ( ViewController self)
static

Definition at line 113 of file ViewController.c.

113 {
114
115 View *view = $(alloc(View), initWithFrame, NULL);
116 assert(view);
117
119
120 $(self, setView, view);
121 release(view);
122}
@ ViewAutoresizingFill
Definition: View.h:89
Box * initWithFrame(Box *self, const SDL_Rect *frame)
Initializes this Box with the given frame.
Definition: Box.c:92
Views are the fundamental building blocks of ObjectivelyMVC user interfaces.
Definition: View.h:133
int autoresizingMask
The ViewAutoresizing bitmask.
Definition: View.h:154

◆ loadViewIfNeeded()

static void loadViewIfNeeded ( ViewController self)
static

Definition at line 128 of file ViewController.c.

128 {
129
130 if (self->view == NULL) {
131 $(self, loadView);
132 }
133
134 assert(self->view);
135}

◆ moveToParentViewController()

static void moveToParentViewController ( ViewController self,
ViewController parentViewController 
)
static

Definition at line 141 of file ViewController.c.

141 {
142
143 ViewController *this = retain(self);
144
146
147 if (parentViewController) {
148 $(parentViewController, addChildViewController, self);
149 }
150
151 release(this);
152}

◆ removeChildViewController()

static void removeChildViewController ( ViewController self,
ViewController childViewController 
)
static

Definition at line 158 of file ViewController.c.

158 {
159
160 assert(childViewController);
161 assert(childViewController->parentViewController == self);
162
163 ViewController *that = retain(childViewController);
164
165 $(self->childViewControllers, removeObject, childViewController);
166 childViewController->parentViewController = NULL;
167
168 $(childViewController, viewWillDisappear);
169 $(childViewController->view, removeFromSuperview);
170 $(childViewController, viewDidDisappear);
171
172 release(that);
173}
void removeFromSuperview(View *self)
Removes this View from its superview.
Definition: View.c:1175

◆ removeFromParentViewController()

static void removeFromParentViewController ( ViewController self)
static

Definition at line 179 of file ViewController.c.

179 {
180
181 if (self->parentViewController) {
183 }
184}

◆ respondToEvent()

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

Definition at line 190 of file ViewController.c.

190 {
191
192}

◆ setView()

static void setView ( ViewController self,
View view 
)
static

Definition at line 198 of file ViewController.c.

198 {
199
200 if (view != self->view) {
201
202 if (self->view) {
203 self->view->viewController = NULL;
204 release(self->view);
205 }
206
207 if (view) {
208 self->view = retain(view);
209 self->view->viewController = self;
210 } else {
211 self->view = NULL;
212 }
213 }
214}
ViewController * viewController
The ViewController.
Definition: View.h:264

◆ viewDidAppear()

static void viewDidAppear ( ViewController self)
static

Definition at line 227 of file ViewController.c.

227 {
228 $((Array *) self->childViewControllers, enumerateObjects, viewDidAppear_recurse, NULL);
229}
static void viewDidAppear_recurse(const Array *array, ident obj, ident data)
ArrayEnumerator for viewDidAppear recursion.

◆ viewDidAppear_recurse()

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

ArrayEnumerator for viewDidAppear recursion.

Definition at line 219 of file ViewController.c.

219 {
220 $((ViewController *) obj, viewDidAppear);
221}

◆ viewDidDisappear()

static void viewDidDisappear ( ViewController self)
static

Definition at line 242 of file ViewController.c.

242 {
243 $((Array *) self->childViewControllers, enumerateObjects, viewDidDisappear_recurse, NULL);
244}
static void viewDidDisappear_recurse(const Array *array, ident obj, ident data)
ArrayEnumerator for viewDidDisappear recursion.

◆ viewDidDisappear_recurse()

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

ArrayEnumerator for viewDidDisappear recursion.

Definition at line 234 of file ViewController.c.

234 {
235 $((ViewController *) obj, viewDidAppear);
236}

◆ viewWillAppear()

static void viewWillAppear ( ViewController self)
static

Definition at line 257 of file ViewController.c.

257 {
258 $((Array *) self->childViewControllers, enumerateObjects, viewWillAppear_recurse, NULL);
259}
static void viewWillAppear_recurse(const Array *array, ident obj, ident data)
ArrayEnumerator for viewWillAppear recursion.

◆ viewWillAppear_recurse()

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

ArrayEnumerator for viewWillAppear recursion.

Definition at line 249 of file ViewController.c.

249 {
250 $((ViewController *) obj, viewWillAppear);
251}

◆ viewWillDisappear()

static void viewWillDisappear ( ViewController self)
static

Definition at line 272 of file ViewController.c.

272 {
273 $((Array *) self->childViewControllers, enumerateObjects, viewWillDisappear_recurse, NULL);
274}
static void viewWillDisappear_recurse(const Array *array, ident obj, ident data)
ArrayEnumerator for viewWillDisappear recursion.

◆ viewWillDisappear_recurse()

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

ArrayEnumerator for viewWillDisappear recursion.

Definition at line 264 of file ViewController.c.

264 {
266}