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

A Control allowing users to select one or more Options. More...

#include <Select.h>

Inheritance diagram for Select:
Control View

Public Member Functions

Class * _Select (void)
 The Select archetype.
 
void addOption (Select *self, const char *title, ident value)
 Creates and adds a new Option to this Select.
 
SelectinitWithFrame (Select *self, const SDL_Rect *frame)
 Initializes this Select with the specified frame and style.
 
OptionoptionWithValue (const Select *self, ident value)
 
void removeAllOptions (Select *self)
 Removes all Options from this Select.
 
void removeOption (Select *self, Option *option)
 Removes the specified Option.
 
void removeOptionWithValue (Select *self, ident value)
 Removes first the Option with the given value.
 
OptionselectedOption (const Select *self)
 
Array * selectedOptions (const Select *self)
 
void selectOption (Select *self, Option *option)
 Selects the given Option.
 
void selectOptionWithValue (Select *self, ident value)
 Selects the first Option with the given value.
 
- Public Member Functions inherited from Control
Class * _Control (void)
 The Control archetype.
 
bool captureEvent (Control *self, const SDL_Event *event)
 Captures a given event, potentially altering the state of this Control.
 
Control initWithFrame (Control *self, const SDL_Rect *frame)
 Initializes this Control with the specified frame and style.
 
bool isDisabled (const Control *self)
 
bool isFocused (const Control *self)
 
bool isHighlighted (const Control *self)
 
bool isSelected (const Control *self)
 
void stateDidChange (Control *self)
 Called when the state of this Control changes.
 
- 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

Comparator comparator
 An optional Comparator to sort Options.
 
Control control
 The superclass.
 
SelectDelegate delegate
 The SelectDelegate.
 
Array * options
 The Options.
 
StackViewstackView
 The StackView for rendering the Options.
 
- Data Fields inherited from Control
ControlBevel bevel
 The ControlBevel.
 
ControlSelection selection
 The ControlSelection.
 
unsigned int state
 The bit mask of ControlState.
 
View view
 The superclass.
 
- 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

SelectInterface * interface
 The interface.
 
- Protected Attributes inherited from Control
ControlInterface * interface
 The interface.
 
- Protected Attributes inherited from View
ViewInterface * interface
 The interface.
 

Detailed Description

A Control allowing users to select one or more Options.

Definition at line 63 of file Select.h.

Member Function Documentation

◆ _Select()

Class * _Select ( void  )

The Select archetype.

Returns
The Select Class.

Definition at line 463 of file Select.c.

463 {
464 static Class *clazz;
465 static Once once;
466
467 do_once(&once, {
468 clazz = _initialize(&(const ClassDef) {
469 .name = "Select",
470 .superclass = _Control(),
471 .instanceSize = sizeof(Select),
472 .interfaceOffset = offsetof(Select, interface),
473 .interfaceSize = sizeof(SelectInterface),
475 });
476 });
477
478 return clazz;
479}
static void initialize(Class *clazz)
Definition Box.c:123
Class * _Control(void)
The Control archetype.
Definition Control.c:391
A Control allowing users to select one or more Options.
Definition Select.h:63
SelectInterface * interface
The interface.
Definition Select.h:74

◆ addOption()

void addOption ( Select self,
const char *  title,
ident  value 
)

Creates and adds a new Option to this Select.

Parameters
selfThe Select.
titleThe Option title.
valueThe Option value.

Definition at line 253 of file Select.c.

253 {
254
255 Option *option = $(alloc(Option), initWithTitle, title, value);
256 assert(option);
257
258 $(self->options, addObject, option);
259
260 $((Array *) self->options, enumerate, addOption_removeSubview, self->stackView);
261
262 if (self->comparator) {
263 $(self->options, sort, self->comparator);
264 }
265
266 $((Array *) self->options, enumerate, addOption_addSubview, self->stackView);
267
269 if ($(self, selectedOption) == NULL) {
270 $(option, setSelected, true);
271 }
272 }
273
274 option->view.nextResponder = (View *) self;
275
276 release(option);
277
278 self->control.view.needsLayout = true;
279}
static Button * initWithTitle(Button *self, const char *title)
Definition Button.c:174
static void setSelected(CollectionItemView *self, bool isSelected)
@ ControlSelectionSingle
Definition Control.h:56
static void addOption_removeSubview(const Array *array, ident obj, ident data)
ArrayEnumerator to remove Options from the stackView.
Definition Select.c:238
static void addOption_addSubview(const Array *array, ident obj, ident data)
ArrayEnumerator to add Options to the stackView.
Definition Select.c:245
View view
The superclass.
Definition Control.h:88
ControlSelection selection
The ControlSelection.
Definition Control.h:109
Select Options.
Definition Option.h:41
View view
The superclass.
Definition Option.h:46
Option * selectedOption(const Select *self)
Definition Select.c:419
Comparator comparator
An optional Comparator to sort Options.
Definition Select.h:79
Array * options
The Options.
Definition Select.h:89
StackView * stackView
The StackView for rendering the Options.
Definition Select.h:94
Control control
The superclass.
Definition Select.h:68
Views are the fundamental building blocks of ObjectivelyMVC user interfaces.
Definition View.h:134
View * nextResponder
The next responder, or event handler, in the chain.
Definition View.h:229
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)

◆ initWithFrame()

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

Initializes this Select with the specified frame and style.

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

Definition at line 285 of file Select.c.

285 {
286
287 self = (Select *) super(Control, self, initWithFrame, frame);
288 if (self) {
289
291
292 self->options = $$(Array, arrayWithCapacity, 8);
293 assert(self->options);
294
295 self->stackView = $(alloc(StackView), initWithFrame, NULL);
296 assert(self->stackView);
297
298 $((View *) self, addSubview, (View *) self->stackView);
299 }
300
301 return self;
302}
Controls are Views which capture and respond to events.
Definition Control.h:83
Select * initWithFrame(Select *self, const SDL_Rect *frame)
Initializes this Select with the specified frame and style.
Definition Select.c:285
StackViews are containers that manage the arrangement of their subviews.
Definition StackView.h:68
void addSubview(View *self, View *subview)
Adds a subview to this view, to be drawn above its siblings.
Definition PageView.c:49
SDL_Rect frame
The frame, relative to the superview.
Definition View.h:191

◆ optionWithValue()

Option * optionWithValue ( const Select self,
ident  value 
)
Parameters
selfThe Select.
valueThe Option value.
Returns
The first Option with the given value.

Definition at line 315 of file Select.c.

315 {
316 return $((Array *) self->options, find, optionWithValue_predicate, value);
317}
static bool optionWithValue_predicate(ident obj, ident data)
Predicate function for optionWithValue.
Definition Select.c:307

◆ removeAllOptions()

void removeAllOptions ( Select self)

Removes all Options from this Select.

Parameters
selfThe Select.

Definition at line 330 of file Select.c.

330 {
331 $((Array *) self->options, enumerate, removeAllOptions_enumerate, self);
332}
static void removeAllOptions_enumerate(const Array *array, ident obj, ident data)
ArrayEnumerator for removeAllOptions.
Definition Select.c:322

◆ removeOption()

void removeOption ( Select self,
Option option 
)

Removes the specified Option.

Parameters
selfThe Select.
optionThe Option to remove.

Definition at line 338 of file Select.c.

338 {
339
340 if ($((Array *) self->options, containsObject, option)) {
341
342 $(self->options, removeObject, option);
343 $((View *) self->stackView, removeSubview, (View *) option);
344
346 if ($(self, selectedOption) == NULL) {
347 Option *first_option = $((Array *) self->options, firstObject);
348 if (first_option) {
349 $(self, selectOption, first_option);
350 }
351 }
352 }
353
354 self->control.view.needsLayout = true;
355 }
356}
void selectOption(Select *self, Option *option)
Selects the given Option.
Definition Select.c:381
void removeSubview(View *self, View *subview)
Removes the given subview from this View.
Definition PageView.c:72

◆ removeOptionWithValue()

void removeOptionWithValue ( Select self,
ident  value 
)

Removes first the Option with the given value.

Parameters
selfThe Select.
valueThe Option value.

Definition at line 362 of file Select.c.

362 {
363
364 Option *option = (Option *) $(self, optionWithValue, value);
365 if (option) {
366 $(self, removeOption, option);
367 }
368}
void removeOption(Select *self, Option *option)
Removes the specified Option.
Definition Select.c:338
Option * optionWithValue(const Select *self, ident value)
Definition Select.c:315

◆ selectedOption()

Option * selectedOption ( const Select self)
Parameters
selfThe Select.
Returns
The first selected Option, or NULL.
Remarks
This is a convenience method for ControlSelectionSingle. For ControlSelectionMultiple, use Select::selectedOptions.

Definition at line 419 of file Select.c.

419 {
420 return $((Array *) self->options, find, selectedOptions_predicate, NULL);
421}
static bool selectedOptions_predicate(ident obj, ident data)
Predicate for selectedOption and selectedOptions.
Definition Select.c:411

◆ selectedOptions()

Array * selectedOptions ( const Select self)
Parameters
selfThe Select.
Returns
An Array containing the selected Options.

Definition at line 427 of file Select.c.

427 {
428 return $((Array *) self->options, filteredArray, selectedOptions_predicate, NULL);
429}

◆ selectOption()

void selectOption ( Select self,
Option option 
)

Selects the given Option.

Parameters
selfThe Select.
optionThe Option to select.

Definition at line 381 of file Select.c.

381 {
382
384 $((Array *) self->options, enumerate, selectOption_enumerate, NULL);
385 }
386
387 if (option) {
388
389 if (option && option->isSelected == false) {
390 $(option, setSelected, true);
391 }
392 }
393
394 self->control.view.needsLayout = true;
395}
static void selectOption_enumerate(const Array *array, ident obj, ident data)
ArrayEnumerator for enforcing ControlSelectionSingle.
Definition Select.c:373
bool isSelected
True if this Option is selected, false otherwise.
Definition Option.h:57

◆ selectOptionWithValue()

void selectOptionWithValue ( Select self,
ident  value 
)

Selects the first Option with the given value.

Parameters
selfThe Select.
valueThe Option value.

Definition at line 401 of file Select.c.

401 {
402
403 Option *option = $(self, optionWithValue, value);
404
405 $(self, selectOption, option);
406}

Field Documentation

◆ comparator

Comparator Select::comparator

An optional Comparator to sort Options.

Definition at line 79 of file Select.h.

◆ control

Control Select::control

The superclass.

Definition at line 68 of file Select.h.

◆ delegate

SelectDelegate Select::delegate

The SelectDelegate.

Definition at line 84 of file Select.h.

◆ interface

SelectInterface* Select::interface
protected

The interface.

Definition at line 74 of file Select.h.

◆ options

Array* Select::options

The Options.

Definition at line 89 of file Select.h.

◆ stackView

StackView* Select::stackView

The StackView for rendering the Options.

Definition at line 94 of file Select.h.


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