ObjectivelyMVC
Object oriented MVC framework for SDL3 and GNU C
Loading...
Searching...
No Matches
ViewController Struct Reference

A ViewController manages a View and its descendants. More...

#include <ViewController.h>

Inheritance diagram for ViewController:
DebugViewController NavigationViewController TabViewController

Public Member Functions

Class * _ViewController (void)
 The ViewController archetype.
 
void addChildViewController (ViewController *self, ViewController *childViewController)
 Adds the specified child ViewController to this ViewController.
 
ViewControllerinit (ViewController *self)
 Initializes this ViewController.
 
void loadView (ViewController *self)
 Loads this ViewController's View.
 
void loadViewIfNeeded (ViewController *self)
 Loads this ViewController's View if it is not already loaded.
 
void moveToParentViewController (ViewController *self, ViewController *parentViewController)
 Moves this ViewController to the specified parent.
 
void removeChildViewController (ViewController *self, ViewController *childViewController)
 Removes the specified child ViewController from this ViewController.
 
void removeFromParentViewController (ViewController *self)
 Removes this ViewController from its parent.
 
void renderDeviceDidReset (ViewController *self)
 Informs this ViewController that the render device has reset.
 
void renderDeviceWillReset (ViewController *self)
 Informs this ViewController that the render device will reset.
 
void respondToEvent (ViewController *self, const SDL_Event *event)
 Responds to the given event.
 
void setView (ViewController *self, View *view)
 Sets this ViewController's View.
 
void viewDidAppear (ViewController *self)
 This method is invoked after this ViewController's View is added to the View hierarchy.
 
void viewDidDisappear (ViewController *self)
 This method is invoked after this ViewController's View is removed to the View hierarchy.
 
void viewWillAppear (ViewController *self)
 This method is invoked before this ViewController's View is added to the View hierarchy.
 
void viewWillDisappear (ViewController *self)
 This method is invoked before this ViewController's View is removed from the View hierarchy.
 

Data Fields

Array * childViewControllers
 The child view controllers.
 
ViewControllerInterface * interface
 The interface.
 
Object object
 The superclass.
 
ViewControllerparentViewController
 The parent view controller.
 
Viewview
 The main view.
 

Detailed Description

A ViewController manages a View and its descendants.

Definition at line 52 of file ViewController.h.

Member Function Documentation

◆ _ViewController()

Class * _ViewController ( void  )

The ViewController archetype.

Returns
The ViewController Class.

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)
Definition Box.c:123
A ViewController manages a View and its descendants.
ViewControllerInterface * interface
The interface.

◆ addChildViewController()

void addChildViewController ( ViewController self,
ViewController childViewController 
)

Adds the specified child ViewController to this ViewController.

Parameters
selfThe ViewController.
childViewControllerThe child ViewController.

Definition at line 66 of file TabViewController.c.

66 {
67
68 super(ViewController, self, addChildViewController, childViewController);
69
70 TabViewController *this = (TabViewController *) self;
71
72 TabViewItem *tab = $(alloc(TabViewItem), initWithView, childViewController->view);
73
74 $(this->tabView, addTab, tab);
75
76 release(tab);
77}
static void addTab(TabView *self, TabViewItem *tab)
Definition TabView.c:133
static TabViewItem * initWithView(TabViewItem *self, View *view)
Definition TabViewItem.c:78
TabViewControllers arrange and manage their child ViewControllers in a tab view interface.
TabViewItems embed Views in a TabView.
Definition TabViewItem.h:51
View * view
The main view.
void addChildViewController(ViewController *self, ViewController *childViewController)
Adds the specified child ViewController to this ViewController.

◆ init()

ViewController * init ( ViewController self)

Initializes this ViewController.

Parameters
selfThe ViewController.
Returns
The intialized ViewController, or NULL on error.

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}
Array * childViewControllers
The child view controllers.
ViewController * init(ViewController *self)
Initializes this ViewController.

◆ loadView()

void loadView ( ViewController self)

Loads this ViewController's View.

Parameters
selfThe ViewController.
Remarks
Override this method to populate this ViewController's view.

Definition at line 182 of file DebugViewController.c.

182 {
183
184 super(ViewController, self, loadView);
185
187
188 Outlet outlets[] = MakeOutlets(
189 MakeOutlet("statistics", &this->statistics),
190 MakeOutlet("description", &this->description),
191 MakeOutlet("path", &this->path),
192 MakeOutlet("selectors", &this->selectors),
193 MakeOutlet("computedStyle", &this->computedStyle),
194 MakeOutlet("warnings", &this->warnings)
195 );
196
197 View *view = $$(View, viewWithCharacters, (char *) debug_json, outlets);
198 view->stylesheet = $$(Stylesheet, stylesheetWithCharacters, (char *) debug_css);
199
200 $(self, setView, view);
201 release(view);
202
203 this->selectors->dataSource.self = self;
204 this->selectors->dataSource.numberOfRows = selectors_numberOfRows;
205 this->selectors->dataSource.valueForColumnAndRow = selectors_valueForColumnAndRow;
206 this->selectors->delegate.self = self;
207 this->selectors->delegate.cellForColumnAndRow = selectors_cellForColumnAndRow;
208
209 this->computedStyle->dataSource.self = self;
210 this->computedStyle->dataSource.numberOfRows = computedStyle_numberOfRows;
211 this->computedStyle->dataSource.valueForColumnAndRow = computedStyle_valueForColumnAndRow;
212 this->computedStyle->delegate.self = self;
213 this->computedStyle->delegate.cellForColumnAndRow = computedStyle_cellForColumnAndRow;
214
215 this->warnings->dataSource.self = self;
216 this->warnings->dataSource.numberOfRows = warnings_numberOfRows;
217 this->warnings->dataSource.valueForColumnAndRow = warnings_valueForColumnAndRow;
218 this->warnings->delegate.self = self;
219 this->warnings->delegate.cellForColumnAndRow = warnings_cellForColumnAndRow;
220}
static TableCellView * selectors_cellForColumnAndRow(const TableView *tableView, const TableColumn *column, size_t row)
static ident warnings_valueForColumnAndRow(const TableView *tableView, const TableColumn *column, size_t row)
static ident computedStyle_valueForColumnAndRow(const TableView *tableView, const TableColumn *column, size_t row)
static TableCellView * warnings_cellForColumnAndRow(const TableView *tableView, const TableColumn *column, size_t row)
static size_t computedStyle_numberOfRows(const TableView *tableView)
static TableCellView * computedStyle_cellForColumnAndRow(const TableView *tableView, const TableColumn *column, size_t row)
static size_t selectors_numberOfRows(const TableView *tableView)
static ident selectors_valueForColumnAndRow(const TableView *tableView, const TableColumn *column, size_t row)
static size_t warnings_numberOfRows(const TableView *tableView)
static String * description(const Object *self)
Definition Label.c:47
static Stylesheet * stylesheetWithCharacters(const char *chars)
Definition Stylesheet.c:206
#define MakeOutlet(identifier, view)
Creates an Outlet with the specified parameters.
Definition View+JSON.h:230
#define MakeOutlets(...)
Creates a NULL-termianted array of Outlets.
Definition View+JSON.h:235
static String * path(const View *self)
Definition View.c:1277
static View * viewWithCharacters(const char *chars, Outlet *outlets)
Definition View.c:1829
The DebugViewController type.
Outlets enable outbound data binding of Views through JSON.
Definition View+JSON.h:200
Stylesheets are comprised of Selectors and Styles.
Definition Stylesheet.h:44
void loadView(ViewController *self)
Loads this ViewController's View.
void setView(ViewController *self, View *view)
Sets this ViewController's View.
Views are the fundamental building blocks of ObjectivelyMVC user interfaces.
Definition View.h:134
Stylesheet * stylesheet
An optional Stylesheet.
Definition View.h:248

◆ loadViewIfNeeded()

void loadViewIfNeeded ( ViewController self)

Loads this ViewController's View if it is not already loaded.

Parameters
selfThe ViewController.

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

void moveToParentViewController ( ViewController self,
ViewController parentViewController 
)

Moves this ViewController to the specified parent.

Parameters
selfThe ViewController.
parentViewControllerThe parent ViewController, or NULL.

Definition at line 127 of file ViewController.c.

127 {
128
129 ViewController *this = retain(self);
130
132
135 }
136
137 release(this);
138}
void removeFromParentViewController(ViewController *self)
Removes this ViewController from its parent.
ViewController * parentViewController
The parent view controller.

◆ removeChildViewController()

void removeChildViewController ( ViewController self,
ViewController childViewController 
)

Removes the specified child ViewController from this ViewController.

Parameters
selfThe ViewController.
childViewControllerThe child ViewController.

Definition at line 82 of file TabViewController.c.

82 {
83
84 super(ViewController, self, removeChildViewController, childViewController);
85
86 TabViewController *this = (TabViewController *) self;
87
88 TabViewItem *tab = $(this, tabForViewController, childViewController);
89
90 $(this->tabView, removeTab, tab);
91}
static void removeTab(TabView *self, TabViewItem *tab)
Definition TabView.c:183
static TabViewItem * tabForViewController(const TabViewController *self, const ViewController *viewController)
void removeChildViewController(ViewController *self, ViewController *childViewController)
Removes the specified child ViewController from this ViewController.

◆ removeFromParentViewController()

void removeFromParentViewController ( ViewController self)

Removes this ViewController from its parent.

Parameters
selfThe ViewController.

Definition at line 165 of file ViewController.c.

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

◆ renderDeviceDidReset()

void renderDeviceDidReset ( ViewController self)

Informs this ViewController that the render device has reset.

Parameters
selfThe ViewController.
Remarks
Subclasses may override this method to allocate any OpenGL objects they require.

Definition at line 198 of file ViewController.c.

198 {
199
200 $(self->view, renderDeviceDidReset);
201
203}
static void renderDeviceDidReset_enumerate(View *subview, ident data)
ViewEnumerator for renderDeviceDidReset recursion.
Definition View.c:1424
static void enumerate(View *self, ViewEnumerator enumerator, ident data)
Definition View.c:749
void renderDeviceDidReset(ViewController *self)
Informs this ViewController that the render device has reset.

◆ renderDeviceWillReset()

void renderDeviceWillReset ( ViewController self)

Informs this ViewController that the render device will reset.

Parameters
selfThe ViewController.
Remarks
Subclasses should override this method to free any OpenGL objects they own.

Definition at line 216 of file ViewController.c.

216 {
217
218 $(self->view, renderDeviceWillReset);
219
221}
static void renderDeviceWillReset_enumerate(View *subview, ident data)
ViewEnumerator for renderDeviceWillReset recursion.
Definition View.c:1439
void renderDeviceWillReset(ViewController *self)
Informs this ViewController that the render device will reset.

◆ respondToEvent()

void respondToEvent ( ViewController self,
const SDL_Event *  event 
)

Responds to the given event.

Parameters
selfThe ViewController.
eventThe event.

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.

◆ setView()

void setView ( ViewController self,
View view 
)

Sets this ViewController's View.

Parameters
selfThe ViewController.
viewThe View.

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

void viewDidAppear ( ViewController self)

This method is invoked after this ViewController's View is added to the View hierarchy.

Parameters
selfThe ViewController.
Remarks
The default implementation of this method does nothing.

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.

◆ viewDidDisappear()

void viewDidDisappear ( ViewController self)

This method is invoked after this ViewController's View is removed to the View hierarchy.

Parameters
selfThe ViewController.
Remarks
The default implementation of this method does nothing.

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.

◆ viewWillAppear()

void viewWillAppear ( ViewController self)

This method is invoked before this ViewController's View is added to the View hierarchy.

Parameters
selfThe ViewController.
Remarks
The default implementation of this method does nothing.

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.

◆ viewWillDisappear()

void viewWillDisappear ( ViewController self)

This method is invoked before this ViewController's View is removed from the View hierarchy.

Parameters
selfThe ViewController.
Remarks
The default implementation of this method does nothing.

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.

Field Documentation

◆ childViewControllers

Array* ViewController::childViewControllers

The child view controllers.

Definition at line 67 of file ViewController.h.

◆ interface

ViewControllerInterface* ViewController::interface

The interface.

Definition at line 62 of file ViewController.h.

◆ object

Object ViewController::object

The superclass.

Definition at line 57 of file ViewController.h.

◆ parentViewController

ViewController* ViewController::parentViewController

The parent view controller.

Definition at line 72 of file ViewController.h.

◆ view

View* ViewController::view

The main view.

Definition at line 77 of file ViewController.h.


The documentation for this struct was generated from the following files: