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

TabViews allow for the display of multiple pages of information within a single view. More...

#include <TabView.h>

Inheritance diagram for TabView:
View

Public Member Functions

Class * _TabView (void)
 The TabView archetype.
 
void addTab (TabView *self, TabViewItem *tab)
 Adds the specified TabViewItem to this TabView.
 
TabViewinitWithFrame (TabView *self, const SDL_Rect *frame)
 Initializes this TabView with the specified frame.
 
void removeTab (TabView *self, TabViewItem *tab)
 Removes the specified TabViewItem from this TabView.
 
void selectTab (TabView *self, TabViewItem *tab)
 Selects the specified TabViewItem.
 
TabViewItemtabWithIdentifier (const TabView *self, const char *identifier)
 
- Public Member Functions inherited from View
Class * _View (void)
 The View archetype.
 
bool acceptsKeyResponder (const View *self)
 
bool acceptsTouchResponder (const View *self)
 
void addClassName (View *self, const char *className)
 Adds the given class name to this View.
 
void addSubview (View *self, View *subview)
 Adds a subview to this view, to be drawn above its siblings.
 
void addSubviewRelativeTo (View *self, View *subview, View *other, ViewPosition position)
 Adds a subview to this view, positioned relatively to other.
 
 ancestorWithIdentifier (const View *self, const char *identifier)
 
void applyStyle (View *self, const Style *style)
 Applies the given Style to this View.
 
void applyTheme (View *self, const Theme *theme)
 Applies the given Theme to this View.
 
void applyThemeIfNeeded (View *self, const Theme *theme)
 Recursively applies the Theme to this View and its subviews.
 
void attachStylesheet (View *self, SDL_Window *window)
 Attaches this View's Stylesheet to the Theme associated with the given window.
 
void awakeWithCharacters (View *self, const char *chars)
 Wakes this View with the given null-terminated JSON C string.
 
void awakeWithData (View *self, const Data *data)
 Wakes this View with the specified JSON Data.
 
void awakeWithDictionary (View *, const Dictionary *)
 Wakes this View with the specified Dictionary.
 
void awakeWithResource (View *self, const Resource *resource)
 Wakes this View with the specified Resource.
 
void awakeWithResourceName (View *self, const char *name)
 Wakes this View with the Resource by the specified name.
 
void becomeKeyResponder (View *self)
 Become the key responder in the View hierarchy.
 
void becomeTouchResponder (View *self)
 Become the touch responder in the View hierarchy.
 
bool bind (View *self, const Inlet *inlets, const Dictionary *dictionary)
 Performs data binding for the Inlets described in dictionary.
 
SDL_Rect bounds (const View *self)
 
void bringSubviewToFront (View *self, View *subview)
 Brings the specified subview to the front.
 
void clearWarnings (const View *self, WarningType type)
 Clears this View's Warnings matching the given level.
 
SDL_Rect clippingFrame (const View *self)
 
bool containsPoint (const View *self, const SDL_Point *point)
 
int depth (const View *self)
 
 descendantWithIdentifier (const View *self, const char *identifier)
 
void detachStylesheet (View *self, SDL_Window *window)
 Detaches this View's Stylesheet from the Theme associated with the given window.
 
void didMoveToWindow (View *self, SDL_Window *window)
 Informs this View that it has been added to the View hierachy of the given window.
 
bool didReceiveEvent (const View *self, const SDL_Event *event)
 
void draw (View *self, Renderer *renderer)
 Draws this View.
 
void emitViewEvent (View *self, ViewEvent code, ident data)
 Emits a ViewEvent originating from this View.
 
void enumerate (const View *self, ViewEnumerator enumerator, ident data)
 
void enumerate (View *self, ViewEnumerator enumerator, ident data)
 Enumerates this View and its descendants, applying enumerator to each.
 
void enumerateAdjacent (const View *self, ViewEnumerator enumerator, ident data)
 Enumerates adjacent siblings of this View, applying enumerator to each.
 
void enumerateAncestors (const View *self, ViewEnumerator enumerator, ident data)
 Enumerates all ancestors of this View, applying enumerator to each.
 
void enumerateDescendants (const View *self, ViewEnumerator enumerator, ident data)
 Enumerates all descendants of this View, applying enumerator to each.
 
void enumerateSelection (View *self, const char *rule, ViewEnumerator enumerator, ident data)
 Enumerates all Views in the selection matched by rule, applying enumerator to each.
 
void enumerateSiblings (const View *self, ViewEnumerator enumerator, ident data)
 Enumerates all siblings of this View, applying enumerator to each.
 
void enumerateSubviews (const View *self, ViewEnumerator enumerator, ident data)
 Enumerates all subviews of this View, applying enumerator to each.
 
void enumerateSuperview (const View *self, ViewEnumerator enumerator, ident data)
 Enumerates the superview of this View, if any, applying enumerator to it.
 
void enumerateVisible (const View *self, ViewEnumerator enumerator, ident data)
 
void enumerateVisible (View *self, ViewEnumerator enumerator, ident data)
 Enumerates this View and its visible descendants, applying enumerator to each.
 
bool hasClassName (const View *self, cosnt char *className)
 
bool hasOverflow (const View *self)
 
ViewhitTest (const View *self, const SDL_Point *point)
 Performs a hit test against this View and its descendants for the given point.
 
Viewinit (View *self)
 Initializes this View.
 
ViewinitWithFrame (View *self, const SDL_Rect *frame)
 Initializes this View with the specified frame.
 
void invalidateStyle (View *self)
 Invalidates the computed Style for this View and its descendants.
 
bool isContainer (const View *self)
 
bool isDescendantOfView (const View *self, const View *view)
 
bool isKeyResponder (const View *self)
 
bool isTouchResponder (const View *self)
 
bool isVisible (const View *self)
 
void layoutIfNeeded (View *self)
 Recursively updates the layout of this View and its subviews.
 
 layoutSubviews (View *self)
 Performs layout for this View's immediate subviews.
 
bool matchesSelector (const View *self, const SimpleSelector *simpleSelector)
 
void moveToWindow (View *self, SDL_Window *window)
 Moves this View to the View hierarchy of the given window.
 
String * path (const View *self)
 
void removeAllClassNames (View *self)
 Removes all class names from this View.
 
void removeAllSubviews (View *self)
 Removes all subviews from this View.
 
void removeClassName (View *self, const char *className)
 Removes the given class name to this View.
 
void removeFromSuperview (View *self)
 Removes this View from its superview.
 
void removeSubview (View *self, View *subview)
 Removes the given subview from this View.
 
void render (View *self, Renderer *renderer)
 Renders this View using the given renderer.
 
void renderDeviceDidReset (View *self)
 Informs this View that the render device has reset.
 
void renderDeviceWillReset (View *self)
 Informs this View that the render device will reset.
 
SDL_Rect renderFrame (const View *self)
 
void replaceSubview (View *self, View *subview, View *replacement)
 Replaces the specified subview with the given replacement.
 
void resignKeyResponder (View *self)
 Resigns key responder priority.
 
void resignTouchResponder (View *self)
 Resigns touch responder priority.
 
void resize (View *self, const SDL_Size *size)
 Resizes this View to the specified size.
 
void resolve (View *self, Outlet *outlets)
 Resolves the given Outlets from this View's hierarchy.
 
void respondToEvent (View *self, const SDL_Event *event)
 Responds to the specified event.
 
Set * select (View *self, const char *rule)
 Resolves all descendants (including this View) that match the given Selector rule.
 
ViewselectFirst (View *self, const char *rule)
 Resolves the first descendant View that matches the given Selector rule.
 
SDL_Size size (const View *self)
 
SDL_Size sizeThastFills (const View *self)
 
SDL_Size sizeThatContains (const View *self)
 
SDL_Size sizeThatFills (const View *self)
 
void sizeThatFits (const View *self)
 
void sizeToContain (View *self)
 Resizes this View to contain its subviews.
 
void sizeToFill (View *self)
 Resizes this View to fill its superview.
 
void sizeToFit (View *self)
 Resizes this View to fit its subviews.
 
 subviewWithIdentifier (const View *self, const char *identifier)
 
void updateBindings (View *self)
 Updates data bindings, prompting the appropriate layout changes.
 
SDL_Rect viewport (const View *self)
 
ViewviewWithCharacters (const char *chars, Outlet *outlets)
 Instantiates a View initialized with the given null-terminated JSON C string.
 
ViewviewWithData (const Data *data, Outlet *outlets)
 Instantiates a View initialized with the contents of data.
 
ViewviewWithDictionary (const Dictionary *dictionary, Outlet *outlets)
 Instantiates a View initialized with the attributes described in dictionary.
 
ViewviewWithResource (const Resource *resource, Outlet *outlets)
 Instantiates a View initialized with the JSON data in resource.
 
ViewviewWithResourceName (const char *name, Outlet *outlets)
 Instantiates a View initialized with the JSON Resource with the specified name.
 
Array * visibleSubviews (const View *self)
 
void warn (View *self, ViewWarningType type, const char *fmt,...)
 
void warn (View *self, WarningType level, const char *fmt,...)
 Appends a warning for this View.
 
void willMoveToWindow (View *self, SDL_Window *window)
 Informs this View that it will be added to the View hierarchy for the given window.
 

Data Fields

TabViewDelegate delegate
 The TabViewDelegate.
 
TabViewItemselectedTab
 The selected TabViewItem.
 
StackView stackView
 The superclass.
 
PageViewtabPageView
 The tab content container.
 
Array * tabs
 The TabViewItems.
 
StackViewtabSelectionView
 The tab selection container.
 
- Data Fields inherited from View
ViewAlignment alignment
 The alignment.
 
int autoresizingMask
 The ViewAutoresizing bitmask.
 
SDL_Color backgroundColor
 The background color.
 
SDL_Color borderColor
 The border color.
 
int borderWidth
 The border width.
 
Set * classNames
 The class names.
 
bool clipsSubviews
 If true, subviews will be clipped to this View's frame.
 
StylecomputedStyle
 The computed Style of this View.
 
SDL_Rect frame
 The frame, relative to the superview.
 
bool hidden
 If true, this View is not drawn.
 
char * identifier
 An optional identifier.
 
SDL_Size maxSize
 The maximum size this View may be resized to during layout.
 
SDL_Size minSize
 The minimum size this View may be resized to during layout.
 
bool needsApplyTheme
 If true, this View will apply the Theme before it is drawn.
 
bool needsLayout
 If true, this View will layout its subviews before it is drawn.
 
ViewnextResponder
 The next responder, or event handler, in the chain.
 
Object object
 The superclass.
 
ViewPadding padding
 The padding.
 
Stylestyle
 The element-level Style of this View.
 
Stylesheetstylesheet
 An optional Stylesheet.
 
Array * subviews
 The immediate subviews.
 
Viewsuperview
 The super View.
 
ViewControllerviewController
 The ViewController.
 
Array * warnings
 The Warnings this View generated.
 
SDL_Window * window
 The window.
 

Protected Attributes

TabViewInterface * interface
 The interface.
 
- Protected Attributes inherited from View
ViewInterface * interface
 The interface.
 

Detailed Description

TabViews allow for the display of multiple pages of information within a single view.

Definition at line 79 of file TabView.h.

Member Function Documentation

◆ _TabView()

Class * _TabView ( void  )

The TabView archetype.

Returns
The TabView Class.

Definition at line 303 of file TabView.c.

303 {
304 static Class *clazz;
305 static Once once;
306
307 do_once(&once, {
308 clazz = _initialize(&(const ClassDef) {
309 .name = "TabView",
310 .superclass = _StackView(),
311 .instanceSize = sizeof(TabView),
312 .interfaceOffset = offsetof(TabView, interface),
313 .interfaceSize = sizeof(TabViewInterface),
315 });
316 });
317
318 return clazz;
319}
static void initialize(Class *clazz)
Definition Box.c:123
Class * _StackView(void)
Definition StackView.c:287
TabViews allow for the display of multiple pages of information within a single view.
Definition TabView.h:79
TabViewInterface * interface
The interface.
Definition TabView.h:90

◆ addTab()

void addTab ( TabView self,
TabViewItem tab 
)

Adds the specified TabViewItem to this TabView.

Parameters
selfThe TabView.
tabThe TabViewItem.

Definition at line 133 of file TabView.c.

133 {
134
135 assert(tab);
136
137 $(self->tabs, addObject, tab);
138
139 $((View *) self->tabSelectionView, addSubview, (View *) tab->label);
140 $((View *) self->tabPageView, addSubview, tab->view);
141
142 if (self->delegate.didAddTab) {
143 self->delegate.didAddTab(self, tab);
144 }
145
146 if (self->selectedTab == NULL) {
147 $(self, selectTab, tab);
148 }
149}
void(* didAddTab)(TabView *tabView, TabViewItem *tab)
Called when a tab is added.
Definition TabView.h:57
PageView * tabPageView
The tab content container.
Definition TabView.h:105
TabViewItem * selectedTab
The selected TabViewItem.
Definition TabView.h:100
StackView * tabSelectionView
The tab selection container.
Definition TabView.h:110
Array * tabs
The TabViewItems.
Definition TabView.h:115
TabViewDelegate delegate
The TabViewDelegate.
Definition TabView.h:95
void selectTab(TabView *self, TabViewItem *tab)
Selects the specified TabViewItem.
Definition TabView.c:227
View * view
The View this TabViewItem embeds.
Definition TabViewItem.h:82
Label * label
The Label used to select this tab.
Definition TabViewItem.h:72
Views are the fundamental building blocks of ObjectivelyMVC user interfaces.
Definition View.h:134
void addSubview(View *self, View *subview)
Adds a subview to this view, to be drawn above its siblings.
Definition PageView.c:49

◆ initWithFrame()

TabView * initWithFrame ( TabView self,
const SDL_Rect *  frame 
)

Initializes this TabView with the specified frame.

Parameters
selfThe TabView.
frameThe frame.
Returns
The initialized TabView, or NULL on error.

Definition at line 155 of file TabView.c.

155 {
156
157 self = (TabView *) super(StackView, self, initWithFrame, frame);
158 if (self) {
159
160 self->tabPageView = $(alloc(PageView), initWithFrame, NULL);
161 assert(self->tabPageView);
162
163 self->tabs = $$(Array, array);
164 assert(self->tabs);
165
166 self->tabSelectionView = $(alloc(StackView), initWithFrame, NULL);
167 assert(self->tabSelectionView);
168
169 $((View *) self->tabSelectionView, addClassName, "tabSelectionView");
170 $((View *) self, addSubview, (View *) self->tabSelectionView);
171
172 $((View *) self->tabPageView, addClassName, "tabPageView");
173 $((View *) self, addSubview, (View *) self->tabPageView);
174 }
175
176 return self;
177}
PageViews manage their subviews as pages in a book.
Definition PageView.h:60
StackViews are containers that manage the arrangement of their subviews.
Definition StackView.h:68
TabView * initWithFrame(TabView *self, const SDL_Rect *frame)
Initializes this TabView with the specified frame.
Definition TabView.c:155
void addClassName(View *self, const char *className)
Adds the given class name to this View.
Definition View.c:159
SDL_Rect frame
The frame, relative to the superview.
Definition View.h:191

◆ removeTab()

void removeTab ( TabView self,
TabViewItem tab 
)

Removes the specified TabViewItem from this TabView.

Parameters
selfThe TabView.
tabThe TabViewItem.

Definition at line 183 of file TabView.c.

183 {
184
185 assert(tab);
186
187 if (self->delegate.willRemoveTab) {
188 self->delegate.willRemoveTab(self, tab);
189 }
190
191 retain(tab);
192
193 $(self->tabs, removeObject, tab);
194
195 $((View *) self->tabSelectionView, removeSubview, (View *) tab->label);
196 $((View *) self->tabPageView, removeSubview, tab->view);
197
198 if (self->selectedTab == tab) {
199 $(self, selectTab, NULL);
200 }
201
202 release(tab);
203}
void(* willRemoveTab)(TabView *tabView, TabViewItem *tab)
Called when a tab is to be removed.
Definition TabView.h:71
void removeSubview(View *self, View *subview)
Removes the given subview from this View.
Definition PageView.c:72

◆ selectTab()

void selectTab ( TabView self,
TabViewItem tab 
)

Selects the specified TabViewItem.

Parameters
selfThe TabView.
tabThe TabViewItem.

Definition at line 227 of file TabView.c.

227 {
228
229 if (self->selectedTab != tab) {
230
231 const Array *tabs = (Array *) self->tabs;
232
233 if (tab) {
234 self->selectedTab = tab;
235 } else {
236 self->selectedTab = $(tabs, firstObject);
237 }
238
240
241 if (self->selectedTab) {
242 $(self->tabPageView, setCurrentPage, self->selectedTab->view);
243
244 if (self->delegate.didSelectTab) {
245 self->delegate.didSelectTab(self, self->selectedTab);
246 }
247 }
248
249 self->stackView.view.needsLayout = true;
250 }
251}
static void setCurrentPage(PageView *self, View *currentPage)
Definition PageView.c:130
static void selectTab_enumerate(const Array *array, ident obj, ident data)
ArrayEnumerator for selectTab.
Definition TabView.c:208
View view
The superclass.
Definition StackView.h:73
void(* didSelectTab)(TabView *tabView, TabViewItem *tab)
Called when a tab is selected.
Definition TabView.h:64
StackView stackView
The superclass.
Definition TabView.h:84
bool needsLayout
If true, this View will layout its subviews before it is drawn.
Definition View.h:222
void enumerate(const View *self, ViewEnumerator enumerator, ident data)

◆ tabWithIdentifier()

TabViewItem * tabWithIdentifier ( const TabView self,
const char *  identifier 
)
Parameters
selfThe TabView.
identifierThe identifier of the desired TabViewItem.
Returns
The TabViewItem with the specified identifier.

Definition at line 275 of file TabView.c.

275 {
276 return $((Array *) self->tabs, find, tabWithIdentifier_predicate, (ident) identifier);
277}
static bool tabWithIdentifier_predicate(const ident obj, ident data)
NULL-safe Predicate for tabWithIdentifier.
Definition TabView.c:256
char * identifier
An optional identifier.
Definition View.h:202

Field Documentation

◆ delegate

TabViewDelegate TabView::delegate

The TabViewDelegate.

Definition at line 95 of file TabView.h.

◆ interface

TabViewInterface* TabView::interface
protected

The interface.

Definition at line 90 of file TabView.h.

◆ selectedTab

TabViewItem* TabView::selectedTab

The selected TabViewItem.

Definition at line 100 of file TabView.h.

◆ stackView

StackView TabView::stackView

The superclass.

Definition at line 84 of file TabView.h.

◆ tabPageView

PageView* TabView::tabPageView

The tab content container.

Definition at line 105 of file TabView.h.

◆ tabs

Array* TabView::tabs

The TabViewItems.

Definition at line 115 of file TabView.h.

◆ tabSelectionView

StackView* TabView::tabSelectionView

The tab selection container.

Definition at line 110 of file TabView.h.


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