31static void addEmptyHeader(
nbgl_layout_t *layout, uint16_t height)
33 nbgl_layoutHeader_t headerDesc
34 = {.type = HEADER_EMPTY, .separationLine =
false, .emptySpace.height = height};
35 nbgl_layoutAddHeader(layout, &headerDesc);
40 uint16_t availableHeight,
43 if (content->
title != NULL) {
44 nbgl_layoutHeader_t headerDesc = {.type = HEADER_BACK_AND_TEXT,
45 .separationLine =
true,
47 .backAndText.tuneId = content->
tuneId,
48 .backAndText.text = content->
title};
49 nbgl_layoutAddHeader(layout, &headerDesc);
53 nbgl_layoutAddTopRightButton(
56 switch (content->
type) {
63 nbgl_layoutAddLongPressButton(layout,
78 buttonInfo.fittingContent =
false;
79 buttonInfo.
icon = NULL;
80 buttonInfo.onBottom =
true;
81 buttonInfo.
style = BLACK_BACKGROUND;
90 addEmptyHeader(layout, SMALL_CENTERING_HEADER);
97 addEmptyHeader(layout, SMALL_CENTERING_HEADER);
101 nbgl_layoutUpFooter_t upFooterDesc
102 = {.type = UP_FOOTER_TIP_BOX,
107 nbgl_layoutAddUpFooter(layout, &upFooterDesc);
114 addEmptyHeader(layout, SMALL_CENTERING_HEADER);
116 nbgl_layoutAddTagValueList(layout, &content->
tagValueList);
121 addEmptyHeader(layout, SMALL_CENTERING_HEADER);
127 buttonInfo.fittingContent =
true;
133 buttonInfo.onBottom =
false;
140 addEmptyHeader(layout, SMALL_CENTERING_HEADER);
146 buttonInfo.fittingContent =
true;
152 buttonInfo.onBottom =
false;
159 nbgl_layoutHorizontalButtons_t choice
165 nbgl_layoutAddHorizontalButtons(layout, &choice);
169 buttonInfo.fittingContent =
false;
170 buttonInfo.
icon = NULL;
171 buttonInfo.
style = BLACK_BACKGROUND;
175 buttonInfo.onBottom =
true;
185 if (availableHeight > 10) {
186 nbgl_layoutAddSeparationLine(layout);
199 -= nbgl_layoutAddTextWithAlias(layout,
211 if (availableHeight > 10) {
212 nbgl_layoutAddSeparationLine(layout);
218 nbgl_layoutAddRadioChoice(layout, &content->
choicesList);
232 availableHeight -= nbgl_layoutAddTouchableBar(layout, &bar);
234 if (availableHeight > 10) {
235 nbgl_layoutAddSeparationLine(layout);
266 .style = LARGE_CASE_INFO,
267 .icon = &CHECK_CIRCLE_ICON,
270 layoutDescription.
modal =
false;
271 layoutDescription.withLeftBorder =
true;
274 layoutDescription.tapActionText =
"";
275 layoutDescription.tapActionToken = tapActionToken;
276 layoutDescription.tapTuneId = TUNE_TAP_CASUAL;
278 layoutDescription.
ticker.tickerCallback = ticker->tickerCallback;
279 layoutDescription.
ticker.tickerIntervale = ticker->tickerIntervale;
280 layoutDescription.
ticker.tickerValue = ticker->tickerValue;
304 layoutDescription.withLeftBorder =
true;
308 nbgl_layoutAddSpinner(layout, text, NULL, initPosition);
331 layoutDescription.
modal =
false;
332 layoutDescription.withLeftBorder =
true;
338 layoutDescription.tapTuneId = info->
tuneId;
341 if (ticker != NULL) {
342 layoutDescription.
ticker.tickerCallback = ticker->tickerCallback;
343 layoutDescription.
ticker.tickerIntervale = ticker->tickerIntervale;
344 layoutDescription.
ticker.tickerValue = ticker->tickerValue;
347 layoutDescription.
ticker.tickerCallback = NULL;
351 nbgl_layoutAddSwipe(layout,
360 addEmptyHeader(layout, SMALL_CENTERING_HEADER);
398 nbgl_layoutChoiceButtons_t buttonsInfo = {.topText = info->
actionButtonText,
399 .bottomText =
"Quit app",
404 ? STRONG_ACTION_AND_FOOTER_STYLE
405 : SOFT_ACTION_AND_FOOTER_STYLE;
406 nbgl_layoutAddChoiceButtons(layout, &buttonsInfo);
426 nbgl_layoutAddBottomButton(
447 nbgl_layoutChoiceButtons_t buttonsInfo
451 .style = ROUNDED_AND_FOOTER_STYLE,
455 layoutDescription.withLeftBorder =
true;
458 layoutDescription.tapActionText = NULL;
460 layoutDescription.
ticker.tickerCallback = NULL;
463 addEmptyHeader(layout, MEDIUM_CENTERING_HEADER);
464 nbgl_layoutAddChoiceButtons(layout, &buttonsInfo);
491 bool headerAdded =
false;
493 layoutDescription.
modal = modal;
494 layoutDescription.withLeftBorder =
true;
496 layoutDescription.
ticker.tickerCallback = NULL;
501 layoutDescription.tapTuneId = nav->
tuneId;
504 layoutDescription.tapActionText = NULL;
511 availableHeight -= nbgl_layoutAddFooter(
515 availableHeight -= nbgl_layoutAddSplitFooter(layout,
523 availableHeight -= nbgl_layoutAddProgressIndicator(layout,
533 nbgl_layoutFooter_t footerDesc;
534 bool drawFooter =
true;
537 nbgl_layoutHeader_t headerDesc = {.type = HEADER_RIGHT_TEXT,
538 .separationLine =
false,
541 .rightText.tuneId = nav->
tuneId};
542 availableHeight -= nbgl_layoutAddHeader(layout, &headerDesc);
545 footerDesc.separationLine =
true;
548 footerDesc.type = FOOTER_NAV;
549 footerDesc.navigation.activePage = nav->
activePage;
550 footerDesc.navigation.nbPages = nav->
nbPages;
553 footerDesc.navigation.withPageIndicator =
false;
555 footerDesc.navigation.tuneId = nav->
tuneId;
558 footerDesc.type = FOOTER_TEXT_AND_NAV;
560 footerDesc.textAndNav.tuneId = nav->
tuneId;
561 footerDesc.textAndNav.token = nav->
quitToken;
562 footerDesc.textAndNav.navigation.activePage = nav->
activePage;
563 footerDesc.textAndNav.navigation.nbPages = nav->
nbPages;
564 footerDesc.textAndNav.navigation.withExitKey =
false;
566 footerDesc.textAndNav.navigation.visibleIndicator
568 footerDesc.textAndNav.navigation.withPageIndicator =
true;
570 footerDesc.textAndNav.navigation.tuneId = nav->
tuneId;
575 footerDesc.type = FOOTER_SIMPLE_TEXT;
577 footerDesc.simpleText.mutedOut =
false;
578 footerDesc.simpleText.token = nav->
quitToken;
579 footerDesc.simpleText.tuneId = nav->
tuneId;
585 availableHeight -= nbgl_layoutAddExtendedFooter(layout, &footerDesc);
590 availableHeight -= nbgl_layoutAddProgressIndicator(
597 addContent(content, layout, availableHeight, headerAdded);
@ ICON_ILLUSTRATION
simple icon
@ INFO_LONG_PRESS
a centered info and a long press button
@ EXTENDED_CENTER
a centered content and a possible tip-box
@ CHOICES_LIST
list of choices through radio buttons
@ CENTERED_INFO
a centered info
@ SWITCHES_LIST
list of switches with descriptions
@ TAG_VALUE_DETAILS
a tag/value pair and a small button to get details.
@ INFOS_LIST
list of infos with titles
@ TAG_VALUE_CONFIRM
tag/value pairs and a black button/footer to confirm/cancel.
@ TAG_VALUE_LIST
list of tag/value pairs
@ BARS_LIST
list of touchable bars (with > on the right to go to sub-pages)
@ INFO_BUTTON
a centered info and a simple black button
#define LOG_DEBUG(__logger,...)
void(* nbgl_layoutTouchCallback_t)(int token, uint8_t index)
prototype of function to be called when an object is touched
int nbgl_layoutAddContentCenter(nbgl_layout_t *layout, const nbgl_contentCenter_t *info)
int nbgl_layoutAddCenteredInfo(nbgl_layout_t *layout, const nbgl_layoutCenteredInfo_t *info)
Creates an area on the center of the main panel, with a possible icon/image, a possible text in black...
int nbgl_layoutAddText(nbgl_layout_t *layout, const char *text, const char *subText, nbgl_contentCenteredInfoStyle_t style)
Creates an area with given text and sub text, using the given style.
int nbgl_layoutDraw(nbgl_layout_t *layout)
Applies given layout. The screen will be redrawn.
@ WHITE_BACKGROUND
rounded bordered button, with text/icon in black, on white background
void * nbgl_layout_t
type shared externally
int nbgl_layoutAddSwitch(nbgl_layout_t *layout, const nbgl_layoutSwitch_t *switchLayout)
Creates an area in main panel to display a switch.
int nbgl_layoutAddButton(nbgl_layout_t *layout, const nbgl_layoutButton_t *buttonInfo)
Creates an area in main panel to display a button, with the given style.
nbgl_layout_t * nbgl_layoutGet(const nbgl_layoutDescription_t *description)
returns a layout of the given type. The layout is reset
int nbgl_layoutRelease(nbgl_layout_t *layout)
Release the layout obtained with nbgl_layoutGet()
API of the Advanced BOLOS Graphical Library, for predefined pages.
nbgl_page_t * nbgl_pageDrawGenericContent(nbgl_layoutTouchCallback_t onActionCallback, const nbgl_pageNavigationInfo_t *nav, nbgl_pageContent_t *content)
nbgl_page_t * nbgl_pageDrawInfo(nbgl_layoutTouchCallback_t onActionCallback, const nbgl_screenTickerConfiguration_t *ticker, const nbgl_pageInfoDescription_t *info)
void * nbgl_page_t
type shared externally
@ NAV_WITH_BUTTONS
move forward and backward with buttons in bottom nav bar
@ NAV_WITH_TAP
move forward with "tap" and possibly backward with top left arrow
nbgl_page_t * nbgl_pageDrawLedgerInfo(nbgl_layoutTouchCallback_t onActionCallback, const nbgl_screenTickerConfiguration_t *ticker, const char *text, int tapActionToken)
nbgl_page_t * nbgl_pageDrawConfirmation(nbgl_layoutTouchCallback_t onActionCallback, const nbgl_pageConfirmationDescription_t *info)
int nbgl_pageRelease(nbgl_page_t *)
nbgl_page_t * nbgl_pageDrawSpinner(const char *text, uint8_t initPosition)
nbgl_page_t * nbgl_pageDrawGenericContentExt(nbgl_layoutTouchCallback_t onActionCallback, const nbgl_pageNavigationInfo_t *nav, nbgl_pageContent_t *content, bool modal)
@ QUIT_APP_TEXT
A full width button with "Quit app" text (only for bottom button)
@ INFO_ICON
info (i) icon in the button.
@ QUIT_ICON
quit (X) icon in the button.
@ NO_BUTTON_STYLE
no button.
@ SETTINGS_ICON
settings (wheel) icon in the button.
struct PACKED__ nbgl_screenTickerConfiguration_s nbgl_screenTickerConfiguration_t
struct to configure a screen layer
struct PACKED__ nbgl_icon_details_s nbgl_icon_details_t
Represents all information about an icon.
const uint8_t * tokens
array of tokens, one for each bar (nbBars items)
const char *const * barTexts
array of texts for each bar (nbBars items, in black/bold)
tune_index_e tuneId
if not NBGL_NO_TUNE, a tune will be played when a bar is touched
uint8_t nbBars
number of elements in barTexts and tokens array
This structure contains info to build a centered (vertically and horizontally) area,...
const nbgl_icon_details_t * icon
the icon (can be null)
const char * title
title in black large (can be null)
nbgl_contentIllustrationType_t illustrType
This structure contains info to build a centered (vertically and horizontally) area,...
const char * text1
first text (can be null)
nbgl_contentTipBox_t tipBox
if text field is NULL, no tip-box
nbgl_contentCenter_t contentCenter
centered content (icon + text(s))
const char * buttonText
text of the long press button
const nbgl_icon_details_t * icon
a buffer containing the 1BPP icon
const char * text
centered text in large case
tune_index_e tuneId
if not NBGL_NO_TUNE, a tune will be played when button is touched
const char *const * infoContents
array of contents of infos (in black)
const char *const * infoTypes
array of types of infos (in black/bold)
const nbgl_contentValueExt_t * infoExtensions
uint8_t nbInfos
number of elements in infoTypes and infoContents array
tune_index_e tuneId
if not NBGL_NO_TUNE, a tune will be played when button is touched
const char * longPressText
text of the long press button
const nbgl_icon_details_t * icon
a buffer containing the 1BPP icon
const char * text
centered text in large case
tune_index_e tuneId
if not NBGL_NO_TUNE, a tune will be played when details button is touched
const char * confirmationText
text of the confirmation button, if NULL "It matches" is used
uint8_t detailsButtonToken
uint8_t confirmationToken
the token used as argument of the onActionCallback
nbgl_contentTagValueList_t tagValueList
list of tag/value pairs
const char * detailsButtonText
this text is used for "details" button (if NULL, no button)
const nbgl_icon_details_t * detailsButtonIcon
icon to use in details button
const nbgl_icon_details_t * detailsButtonIcon
icon to use in details button
uint8_t detailsButtonToken
const char * detailsButtonText
this text is used for "details" button
nbgl_contentTagValueList_t tagValueList
list of tag/value pairs
tune_index_e tuneId
if not NBGL_NO_TUNE, a tune will be played when details button is touched
uint8_t nbMaxLinesForValue
if > 0, set the max number of lines for value field.
const char * text
text of the tip-box
const nbgl_icon_details_t * icon
icon of the tip-box
uint8_t token
token used when tip-box is tapped
tune_index_e tuneId
tune played when tip-box is tapped
const char * fullValue
full string of the value when used as an alias
This structure contains info to build a clickable "bar" with a text and an icon.
bool inactive
if set to true, the bar is grayed-out and cannot be touched
const char * text
text (can be NULL)
uint8_t token
the token that will be used as argument of the callback
bool large
set to true only for the main level of OS settings
const char * subText
sub text (can be NULL)
tune_index_e tuneId
if not NBGL_NO_TUNE, a tune will be played
const nbgl_icon_details_t * iconLeft
a buffer containing the 1BPP icon for icon on left (can be NULL)
const nbgl_icon_details_t * iconRight
Structure containing all information when creating a layout. This structure must be passed as argumen...
nbgl_screenTickerConfiguration_t ticker
nbgl_layoutButtonCallback_t onActionCallback
the callback to be called on any action on the layout
Structure containing all specific information when creating a confirmation page.
const char * cancelText
the text used for cancel action, if NULL a simple X button is used
uint8_t confirmationToken
the token used as argument of the onActionCallback
bool modal
if true, page is open as a modal
const char * confirmationText
text of the confirmation button
nbgl_layoutCenteredInfo_t centeredInfo
description of the centered info to be used
tune_index_e tuneId
if not NBGL_NO_TUNE, a tune will be played when button is pressed
This structure contains data to build a page in multi-pages mode (nbgl_pageDrawGenericContent)
nbgl_contentTagValueDetails_t tagValueDetails
TAG_VALUE_DETAILS type
const char * title
text for the title of the page (if NULL, no title)
uint8_t topRightToken
token used when top-right button (if not NULL) is touched
nbgl_contentInfoLongPress_t infoLongPress
INFO_LONG_PRESS type
nbgl_contentRadioChoice_t choicesList
CHOICES_LIST type
nbgl_contentSwitchesList_t switchesList
SWITCHES_LIST type
tune_index_e tuneId
if not NBGL_NO_TUNE, a tune will be played when title is touched
nbgl_contentBarsList_t barsList
BARS_LIST type
nbgl_contentInfoButton_t infoButton
INFO_BUTTON type
nbgl_contentInfoList_t infosList
INFOS_LIST type
nbgl_contentTagValueList_t tagValueList
TAG_VALUE_LIST type
const nbgl_icon_details_t * topRightIcon
nbgl_contentType_t type
type of page content in the following union
nbgl_contentCenteredInfo_t centeredInfo
CENTERED_INFO type
nbgl_contentTagValueConfirm_t tagValueConfirm
TAG_VALUE_CONFIRM type
nbgl_contentExtendedCenter_t extendedCenter
EXTENDED_CENTER type
Structure containing all specific information when creating an information page.
nbgl_layoutButtonStyle_t actionButtonStyle
style of "action" button
const char * actionButtonText
if not NULL an "action" button is set under the centered info
const char * tapActionText
uint8_t bottomButtonsToken
const char * footerText
if not NULL, add a touchable footer
nbgl_pageButtonStyle_t topRightStyle
style to apply to the Top-Right button
uint8_t topRightToken
the token that will be used as argument of the onActionCallback
bool isSwipeable
if true, main area is swipeable
tune_index_e tuneId
if not NBGL_NO_TUNE, a tune will be played when button/footer is pressed
uint8_t footerToken
the token that will be used as argument of the onActionCallback
const nbgl_icon_details_t * actionButtonIcon
potential icon of "action" button
nbgl_pageButtonStyle_t bottomButtonStyle
style to apply to the Bottom button
nbgl_layoutCenteredInfo_t centeredInfo
description of the centered info to be used
Structure containing all specific information when creating a multi-screens page.
uint8_t nbPages
the number of pages to display (if <2, no navigation bar)
uint8_t quitToken
the token used as argument of the actionCallback when the footer is touched
uint8_t skipToken
if skipText is NULL the token used when right part of footer is touched
nbgl_pageNavigationType_t navType
uint8_t activePage
the index of the page to display at start-up
bool progressIndicator
if set to true, display a progress indicator on top of the page
nbgl_pageNavWithButtons_t navWithButtons
structure used when navigation with buttons
nbgl_pageNavWithTap_t navWithTap
structure used when navigation with "tap"
tune_index_e tuneId
if not NBGL_NO_TUNE, a tune will be played when next or back is pressed
bool visiblePageIndicator
if set to true, the page indicator will be visible in navigation
bool quitButton
if set to true, a quit button (X) is displayed in the nav bar
const char * quitText
the text displayed in footer (on the left), used to quit (only on Flex)
bool backButton
if set to true, a back button (<-) is displayed in the nav bar
const char * quitText
the text displayed in footer, used to quit
const char * nextPageText
uint8_t nbSwitches
number of elements in switches and tokens array
const nbgl_contentSwitch_t * switches
array of switches (nbSwitches items)