ObjectivelyMVC 0.1.0
Object oriented MVC framework for OpenGL, SDL2 and GNU C
Macros | Functions
NavigationViewController.c File Reference
#include <assert.h>
#include "NavigationViewController.h"

Go to the source code of this file.

Macros

#define _Class   _NavigationViewController
 

Functions

Class * _NavigationViewController (void)
 
static NavigationViewControllerinit (NavigationViewController *self)
 
static void initialize (Class *clazz)
 
static void popToRootViewController (NavigationViewController *self)
 
static void popToViewController (NavigationViewController *self, const ViewController *viewController)
 
static void popViewController (NavigationViewController *self)
 
static void pushViewController (NavigationViewController *self, ViewController *viewController)
 
static ViewControllerrootViewController (const NavigationViewController *self)
 
static ViewControllertopViewController (const NavigationViewController *self)
 

Macro Definition Documentation

◆ _Class

#define _Class   _NavigationViewController

Definition at line 28 of file NavigationViewController.c.

Function Documentation

◆ _NavigationViewController()

Class * _NavigationViewController ( void  )

Definition at line 150 of file NavigationViewController.c.

150 {
151 static Class *clazz;
152 static Once once;
153
154 do_once(&once, {
155 clazz = _initialize(&(const ClassDef) {
156 .name = "NavigationViewController",
157 .superclass = _ViewController(),
158 .instanceSize = sizeof(NavigationViewController),
159 .interfaceOffset = offsetof(NavigationViewController, interface),
160 .interfaceSize = sizeof(NavigationViewControllerInterface),
162 });
163 });
164
165 return clazz;
166}
static void initialize(Class *clazz)
Navigation controllers arrange their child controllers as a stack to facilitate navigation between th...
Class * _ViewController(void)
The ViewController archetype.

◆ init()

static NavigationViewController * init ( NavigationViewController self)
static

Definition at line 38 of file NavigationViewController.c.

38 {
39
40 return (NavigationViewController *) super(ViewController, self, init);
41}
CollectionView * init(CollectionView *self, const SDL_Rect *frame)
Initializes this CollectionView with the specified frame and style.
A ViewController manages a View and its descendants.

◆ initialize()

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

Definition at line 135 of file NavigationViewController.c.

135 {
136
137 ((NavigationViewControllerInterface *) clazz->interface)->init = init;
138 ((NavigationViewControllerInterface *) clazz->interface)->pushViewController = pushViewController;
139 ((NavigationViewControllerInterface *) clazz->interface)->popToRootViewController = popToRootViewController;
140 ((NavigationViewControllerInterface *) clazz->interface)->popToViewController = popToViewController;
141 ((NavigationViewControllerInterface *) clazz->interface)->popViewController = popViewController;
142 ((NavigationViewControllerInterface *) clazz->interface)->rootViewController = rootViewController;
143 ((NavigationViewControllerInterface *) clazz->interface)->topViewController = topViewController;
144}
void pushViewController(NavigationViewController *self, ViewController *viewController)
Pushes the specified ViewController to the top of the stack.
void popToRootViewController(NavigationViewController *self)
Pops all ViewControllers on the stack except for the root ViewController.
void popToViewController(NavigationViewController *self, const ViewController *viewController)
Pops the top ViewController from the stack until the specified ViewController is visible.
ViewController rootViewController(const NavigationViewController *self)
void popViewController(NavigationViewController *self)
Pops the top ViewController from the stack.
ViewController topViewController(const NavigationViewController *self)

◆ popToRootViewController()

static void popToRootViewController ( NavigationViewController self)
static

Definition at line 68 of file NavigationViewController.c.

68 {
69
73 }
74}

◆ popToViewController()

static void popToViewController ( NavigationViewController self,
const ViewController viewController 
)
static

Definition at line 80 of file NavigationViewController.c.

80 {
81
83 while ((topViewController = $(self, topViewController))) {
84
85 if (topViewController == viewController) {
86 break;
87 }
88
89 $(self, popViewController);
90 }
91}

◆ popViewController()

static void popViewController ( NavigationViewController self)
static

Definition at line 97 of file NavigationViewController.c.

97 {
98
100 if (topViewController) {
102 }
103
104 ViewController *this = (ViewController *) self;
105 ViewController *that = $(self, topViewController);
106
107 if (that) {
108 $(that, viewWillAppear);
109 $(this->view, addSubview, that->view);
110 $(that, viewDidAppear);
111 }
112}
View * view
The main view.
void viewWillAppear(ViewController *self)
This method is invoked before this ViewController's View is added to the View hierarchy.
void removeChildViewController(ViewController *self, ViewController *childViewController)
Removes the specified child ViewController from this ViewController.
void viewDidAppear(ViewController *self)
This method is invoked after this ViewController's View is added to the View hierarchy.
void addSubview(View *self, View *subview)
Adds a subview to this view, to be drawn above its siblings.
Definition: PageView.c:35

◆ pushViewController()

static void pushViewController ( NavigationViewController self,
ViewController viewController 
)
static

Definition at line 47 of file NavigationViewController.c.

47 {
48
49 assert(viewController);
50
51 ViewController *this = (ViewController *) self;
52
55
57 $(this->view, removeSubview, topViewController->view);
59 }
60
61 $(this, addChildViewController, viewController);
62}
void addChildViewController(ViewController *self, ViewController *childViewController)
Adds the specified child ViewController to this ViewController.
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 removeSubview(View *self, View *subview)
Removes the given subview from this View.
Definition: PageView.c:58

◆ rootViewController()

static ViewController * rootViewController ( const NavigationViewController self)
static

Definition at line 118 of file NavigationViewController.c.

118 {
119 return (ViewController *) $((Array *) self->viewController.childViewControllers, firstObject);
120}
ViewController viewController
The superclass.
MutableArray * childViewControllers
The child view controllers.

◆ topViewController()

static ViewController * topViewController ( const NavigationViewController self)
static

Definition at line 126 of file NavigationViewController.c.

126 {
127 return (ViewController *) $((Array *) self->viewController.childViewControllers, lastObject);
128}