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

Go to the source code of this file.

Macros

#define _Class   _TabViewController
 

Functions

Class * _TabViewController (void)
 
static void addChildViewController (ViewController *self, ViewController *childViewController)
 
static void dealloc (Object *self)
 
static TabViewControllerinit (TabViewController *self)
 
static void initialize (Class *clazz)
 
static void loadView (ViewController *self)
 
static void removeChildViewController (ViewController *self, ViewController *childViewController)
 
static TabViewItemtabForViewController (const TabViewController *self, const ViewController *viewController)
 
static bool tabForViewController_predicate (const ident obj, ident data)
 Predicate for tabViewItemFor.
 
static ViewControllerviewControllerForTab (const TabViewController *self, const TabViewItem *tab)
 
static bool viewControllerForTab_predicate (const ident obj, ident data)
 Predicate for viewControllerForTab.
 

Macro Definition Documentation

◆ _Class

#define _Class   _TabViewController

Definition at line 28 of file TabViewController.c.

Function Documentation

◆ _TabViewController()

Class * _TabViewController ( void  )

Definition at line 169 of file TabViewController.c.

169 {
170 static Class *clazz;
171 static Once once;
172
173 do_once(&once, {
174 clazz = _initialize(&(const ClassDef) {
175 .name = "TabViewController",
176 .superclass = _ViewController(),
177 .instanceSize = sizeof(TabViewController),
178 .interfaceOffset = offsetof(TabViewController, interface),
179 .interfaceSize = sizeof(TabViewControllerInterface),
181 });
182 });
183
184 return clazz;
185}
static void initialize(Class *clazz)
Class * _ViewController(void)
TabViewControllers arrange and manage their child ViewControllers in a tab view interface.

◆ addChildViewController()

static void addChildViewController ( ViewController self,
ViewController childViewController 
)
static
See also
ViewController::addChildViewController(ViewController *, 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 void addChildViewController(ViewController *self, ViewController *childViewController)
static TabViewItem * initWithView(TabViewItem *self, View *view)
Definition TabViewItem.c:78
TabViewItems embed Views in a TabView.
Definition TabViewItem.h:51
A ViewController manages a View and its descendants.
View * view
The main view.

◆ dealloc()

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

Definition at line 35 of file TabViewController.c.

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

◆ init()

static TabViewController * init ( TabViewController self)
static

Definition at line 99 of file TabViewController.c.

99 {
100 return (TabViewController *) super(ViewController, self, init);
101}
static TabViewController * init(TabViewController *self)

◆ initialize()

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

Definition at line 152 of file TabViewController.c.

152 {
153
154 ((ObjectInterface *) clazz->interface)->dealloc = dealloc;
155
156 ((ViewControllerInterface *) clazz->interface)->loadView = loadView;
157 ((ViewControllerInterface *) clazz->interface)->addChildViewController = addChildViewController;
158 ((ViewControllerInterface *) clazz->interface)->removeChildViewController = removeChildViewController;
159
160 ((TabViewControllerInterface *) clazz->interface)->init = init;
161 ((TabViewControllerInterface *) clazz->interface)->tabForViewController = tabForViewController;
162 ((TabViewControllerInterface *) clazz->interface)->viewControllerForTab = viewControllerForTab;
163}
static void loadView(ViewController *self)
static void removeChildViewController(ViewController *self, ViewController *childViewController)
static ViewController * viewControllerForTab(const TabViewController *self, const TabViewItem *tab)
static TabViewItem * tabForViewController(const TabViewController *self, const ViewController *viewController)
TabViewItem * tabForViewController(const TabViewController *, const ViewController *)
Returns the TabViewItem for the specified child ViewController, or NULL.

◆ loadView()

static void loadView ( ViewController self)
static
See also
ViewController::loadView(ViewController *)

Definition at line 49 of file TabViewController.c.

49 {
50
51 super(ViewController, self, loadView);
52
54
55 TabViewController *this = (TabViewController *) self;
56
57 this->tabView = $(alloc(TabView), initWithFrame, NULL);
58 assert(this->tabView);
59
60 $(self->view, addSubview, (View *) this->tabView);
61}
static Box * initWithFrame(Box *self, const SDL_Rect *frame)
Definition Box.c:92
static void addSubview(View *self, View *subview)
Definition PageView.c:49
@ ViewAutoresizingContain
Definition View.h:92
TabViews allow for the display of multiple pages of information within a single view.
Definition TabView.h:79
Views are the fundamental building blocks of ObjectivelyMVC user interfaces.
Definition View.h:134
int autoresizingMask
The ViewAutoresizing bitmask.
Definition View.h:155

◆ removeChildViewController()

static void removeChildViewController ( ViewController self,
ViewController childViewController 
)
static
See also
ViewController::removeChildViewController(ViewController *, 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

◆ tabForViewController()

static TabViewItem * tabForViewController ( const TabViewController self,
const ViewController viewController 
)
static

Definition at line 114 of file TabViewController.c.

114 {
115
116 assert(viewController);
117
118 if (viewController->view) {
119 return $((Array *) self->tabView->tabs, find, tabForViewController_predicate, (ident) viewController->view);
120 }
121
122 return NULL;
123}
static bool tabForViewController_predicate(const ident obj, ident data)
Predicate for tabViewItemFor.
TabView * tabView
The TabView.
Array * tabs
The TabViewItems.
Definition TabView.h:115

◆ tabForViewController_predicate()

static bool tabForViewController_predicate ( const ident  obj,
ident  data 
)
static

Predicate for tabViewItemFor.

Definition at line 106 of file TabViewController.c.

106 {
107 return ((TabViewItem *) obj)->view == data;
108}

◆ viewControllerForTab()

static ViewController * viewControllerForTab ( const TabViewController self,
const TabViewItem tab 
)
static

Definition at line 136 of file TabViewController.c.

136 {
137
138 assert(tab);
139
140 if (tab->view) {
141 return $((Array *) self->viewController.childViewControllers, find, viewControllerForTab_predicate, tab->view);
142 }
143
144 return NULL;
145}
static bool viewControllerForTab_predicate(const ident obj, ident data)
Predicate for viewControllerForTab.
ViewController viewController
The superclass.
View * view
The View this TabViewItem embeds.
Definition TabViewItem.h:82
Array * childViewControllers
The child view controllers.

◆ viewControllerForTab_predicate()

static bool viewControllerForTab_predicate ( const ident  obj,
ident  data 
)
static

Predicate for viewControllerForTab.

Definition at line 128 of file TabViewController.c.

128 {
129 return ((ViewController *) obj)->view == data;
130}