All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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.

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