Loading...
Searching...
No Matches
view_dispatcher.h File Reference

GUI: ViewDispatcher API. More...

#include "view.h"
#include "gui.h"
#include "scene_manager.h"

Go to the source code of this file.

Typedefs

typedef struct ViewDispatcher ViewDispatcher
 
typedef bool(* ViewDispatcherCustomEventCallback) (void *context, uint32_t event)
 Prototype for custom event callback.
 
typedef bool(* ViewDispatcherNavigationEventCallback) (void *context)
 Prototype for navigation event callback.
 
typedef void(* ViewDispatcherTickEventCallback) (void *context)
 Prototype for tick event callback.
 

Enumerations

enum  ViewDispatcherType { ViewDispatcherTypeDesktop , ViewDispatcherTypeWindow , ViewDispatcherTypeFullscreen }
 ViewDispatcher view_port placement. More...
 

Functions

ViewDispatcherview_dispatcher_alloc (void)
 Allocate ViewDispatcher instance.
 
ViewDispatcherview_dispatcher_alloc_ex (FuriEventLoop *loop)
 Allocate ViewDispatcher instance with an externally owned event loop.
 
void view_dispatcher_free (ViewDispatcher *view_dispatcher)
 Free ViewDispatcher instance.
 
FURI_DEPRECATED void view_dispatcher_enable_queue (ViewDispatcher *view_dispatcher)
 Enable queue support.
 
void view_dispatcher_send_custom_event (ViewDispatcher *view_dispatcher, uint32_t event)
 Send custom event.
 
void view_dispatcher_set_custom_event_callback (ViewDispatcher *view_dispatcher, ViewDispatcherCustomEventCallback callback)
 Set custom event handler.
 
void view_dispatcher_set_navigation_event_callback (ViewDispatcher *view_dispatcher, ViewDispatcherNavigationEventCallback callback)
 Set navigation event handler.
 
void view_dispatcher_set_tick_event_callback (ViewDispatcher *view_dispatcher, ViewDispatcherTickEventCallback callback, uint32_t tick_period)
 Set tick event handler.
 
void view_dispatcher_set_event_callback_context (ViewDispatcher *view_dispatcher, void *context)
 Set event callback context.
 
FuriEventLoopview_dispatcher_get_event_loop (ViewDispatcher *view_dispatcher)
 Get event_loop instance.
 
void view_dispatcher_run (ViewDispatcher *view_dispatcher)
 Run ViewDispatcher.
 
void view_dispatcher_stop (ViewDispatcher *view_dispatcher)
 Stop ViewDispatcher.
 
void view_dispatcher_add_view (ViewDispatcher *view_dispatcher, uint32_t view_id, View *view)
 Add view to ViewDispatcher.
 
void view_dispatcher_remove_view (ViewDispatcher *view_dispatcher, uint32_t view_id)
 Remove view from ViewDispatcher.
 
void view_dispatcher_switch_to_view (ViewDispatcher *view_dispatcher, uint32_t view_id)
 Switch to View.
 
void view_dispatcher_send_to_front (ViewDispatcher *view_dispatcher)
 Send ViewPort of this ViewDispatcher instance to front.
 
void view_dispatcher_send_to_back (ViewDispatcher *view_dispatcher)
 Send ViewPort of this ViewDispatcher instance to back.
 
void view_dispatcher_attach_to_gui (ViewDispatcher *view_dispatcher, Gui *gui, ViewDispatcherType type)
 Attach ViewDispatcher to GUI.
 

Detailed Description

GUI: ViewDispatcher API.

ViewDispatcher is used to connect several Views to a Gui instance, switch between them and handle various events. This is useful in applications featuring an advanced graphical user interface.

Internally, ViewDispatcher employs a FuriEventLoop instance together with two separate message queues for input and custom event handling. See FuriEventLoop for more information.

If no multi-view or complex event handling capabilities are required, consider using ViewHolder instead.

Warning
Views added to a ViewDispatcher MUST NOT be in a ViewStack at the same time.

Enumeration Type Documentation

◆ ViewDispatcherType

ViewDispatcher view_port placement.

Enumerator
ViewDispatcherTypeDesktop 

Desktop layer: fullscreen with status bar on top of it.

For internal usage.

ViewDispatcherTypeWindow 

Window layer: with status bar

ViewDispatcherTypeFullscreen 

Fullscreen layer: without status bar.

Function Documentation

◆ view_dispatcher_add_view()

void view_dispatcher_add_view ( ViewDispatcher * view_dispatcher,
uint32_t view_id,
View * view )

Add view to ViewDispatcher.

Parameters
view_dispatcherViewDispatcher instance
view_idView id to register
viewView instance

◆ view_dispatcher_alloc()

ViewDispatcher * view_dispatcher_alloc ( void )

Allocate ViewDispatcher instance.

Returns
pointer to ViewDispatcher instance

◆ view_dispatcher_alloc_ex()

ViewDispatcher * view_dispatcher_alloc_ex ( FuriEventLoop * loop)

Allocate ViewDispatcher instance with an externally owned event loop.

If this constructor is used instead of view_dispatcher_alloc, the burden of freeing the event loop is placed on the caller.

Parameters
looppointer to FuriEventLoop instance
Returns
pointer to ViewDispatcher instance

◆ view_dispatcher_attach_to_gui()

void view_dispatcher_attach_to_gui ( ViewDispatcher * view_dispatcher,
Gui * gui,
ViewDispatcherType type )

Attach ViewDispatcher to GUI.

Parameters
view_dispatcherViewDispatcher instance
guiGUI instance to attach to
[in]typeThe type

◆ view_dispatcher_enable_queue()

FURI_DEPRECATED void view_dispatcher_enable_queue ( ViewDispatcher * view_dispatcher)

Enable queue support.

Deprecated
Do NOT use in new code and remove all calls to it from existing code. The queue support is now always enabled during construction. If no queue support is required, consider using ViewHolder instead.
Parameters
view_dispatcherViewDispatcher instance

◆ view_dispatcher_free()

void view_dispatcher_free ( ViewDispatcher * view_dispatcher)

Free ViewDispatcher instance.

Warning
All added views MUST be removed using view_dispatcher_remove_view() before calling this function.
Parameters
view_dispatcherpointer to ViewDispatcher

◆ view_dispatcher_get_event_loop()

FuriEventLoop * view_dispatcher_get_event_loop ( ViewDispatcher * view_dispatcher)

Get event_loop instance.

Use the return value to connect additional supported primitives (message queues, timers, etc) to this ViewDispatcher instance's event loop.

Warning
Do NOT call furi_event_loop_run() on the returned instance, it is done internally in the view_dispatcher_run() call.
Parameters
view_dispatcherViewDispatcher instance
Returns
The event_loop instance.

◆ view_dispatcher_remove_view()

void view_dispatcher_remove_view ( ViewDispatcher * view_dispatcher,
uint32_t view_id )

Remove view from ViewDispatcher.

Parameters
view_dispatcherViewDispatcher instance
view_idView id to remove

◆ view_dispatcher_run()

void view_dispatcher_run ( ViewDispatcher * view_dispatcher)

Run ViewDispatcher.

This function will start the event loop and block until view_dispatcher_stop() is called or the current thread receives a FuriSignalExit signal.

Parameters
view_dispatcherViewDispatcher instance

◆ view_dispatcher_send_custom_event()

void view_dispatcher_send_custom_event ( ViewDispatcher * view_dispatcher,
uint32_t event )

Send custom event.

Parameters
view_dispatcherViewDispatcher instance
[in]eventThe event

◆ view_dispatcher_send_to_back()

void view_dispatcher_send_to_back ( ViewDispatcher * view_dispatcher)

Send ViewPort of this ViewDispatcher instance to back.

Parameters
view_dispatcherViewDispatcher instance

◆ view_dispatcher_send_to_front()

void view_dispatcher_send_to_front ( ViewDispatcher * view_dispatcher)

Send ViewPort of this ViewDispatcher instance to front.

Parameters
view_dispatcherViewDispatcher instance

◆ view_dispatcher_set_custom_event_callback()

void view_dispatcher_set_custom_event_callback ( ViewDispatcher * view_dispatcher,
ViewDispatcherCustomEventCallback callback )

Set custom event handler.

Called on Custom Event, if it is not consumed by view

Parameters
view_dispatcherViewDispatcher instance
callbackViewDispatcherCustomEventCallback instance

◆ view_dispatcher_set_event_callback_context()

void view_dispatcher_set_event_callback_context ( ViewDispatcher * view_dispatcher,
void * context )

Set event callback context.

Parameters
view_dispatcherViewDispatcher instance
contextpointer to context

◆ view_dispatcher_set_navigation_event_callback()

void view_dispatcher_set_navigation_event_callback ( ViewDispatcher * view_dispatcher,
ViewDispatcherNavigationEventCallback callback )

Set navigation event handler.

Called on Input Short Back Event, if it is not consumed by view

Parameters
view_dispatcherViewDispatcher instance
callbackViewDispatcherNavigationEventCallback instance

◆ view_dispatcher_set_tick_event_callback()

void view_dispatcher_set_tick_event_callback ( ViewDispatcher * view_dispatcher,
ViewDispatcherTickEventCallback callback,
uint32_t tick_period )

Set tick event handler.

Warning
Requires the event loop to be owned by the view dispatcher, i.e. it should have been instantiated with view_dispatcher_alloc, not view_dispatcher_alloc_ex.
Parameters
view_dispatcherViewDispatcher instance
callbackViewDispatcherTickEventCallback
tick_periodcallback call period

◆ view_dispatcher_stop()

void view_dispatcher_stop ( ViewDispatcher * view_dispatcher)

Stop ViewDispatcher.

Parameters
view_dispatcherViewDispatcher instance

◆ view_dispatcher_switch_to_view()

void view_dispatcher_switch_to_view ( ViewDispatcher * view_dispatcher,
uint32_t view_id )

Switch to View.

Parameters
view_dispatcherViewDispatcher instance
view_idView id to register
Warning
switching may be delayed till input events complementarity reached