1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-05-28 11:48:45 +00:00

chore(eckhart): use dedicated function for menu buttons creation

This commit is contained in:
Lukas Bielesch 2025-05-06 14:59:26 +02:00 committed by obrusvit
parent 11fb6f3e90
commit 48ae2bad26
10 changed files with 123 additions and 187 deletions

View File

@ -15,7 +15,7 @@ use crate::{
base::{Decision, DecisionBuilder as _},
FlowController, FlowMsg, SwipeFlow,
},
geometry::{Alignment, Direction, LinearPlacement, Offset},
geometry::{Direction, LinearPlacement},
layout::util::StrOrBytes,
},
};
@ -218,29 +218,23 @@ fn content_main_menu(
let mut main_menu = VerticalMenu::<ShortMenuVec>::empty();
let mut main_menu_items = Vec::<usize, 3>::new();
if address_params {
main_menu.item(
Button::with_text(address_title)
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
main_menu.item(Button::new_menu_item(
address_title,
theme::menu_item_title(),
));
unwrap!(main_menu_items.push(MENU_ITEM_ADDRESS_INFO));
}
if account_params {
main_menu.item(
Button::with_text(TR::address_details__account_info.into())
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
main_menu.item(Button::new_menu_item(
TR::address_details__account_info.into(),
theme::menu_item_title(),
));
unwrap!(main_menu_items.push(MENU_ITEM_ACCOUNT_INFO));
}
main_menu.item(
Button::with_text(cancel_menu_label)
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
main_menu.item(Button::new_menu_item(
cancel_menu_label,
theme::menu_item_title_orange(),
));
unwrap!(main_menu_items.push(MENU_ITEM_CANCEL));
VerticalMenuScreen::<ShortMenuVec>::new(main_menu)
@ -436,29 +430,23 @@ pub fn new_confirm_output(
let mut summary_menu_items = Vec::<usize, 3>::new();
if extra_menu_item {
summary_menu.item(
Button::with_text(extra_title.unwrap_or(TString::empty()))
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
summary_menu.item(Button::new_menu_item(
extra_title.unwrap_or(TString::empty()),
theme::menu_item_title(),
));
unwrap!(summary_menu_items.push(MENU_ITEM_EXTRA_INFO));
}
if fee_menu_item {
summary_menu.item(
Button::with_text(TR::confirm_total__title_fee.into())
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
summary_menu.item(Button::new_menu_item(
TR::confirm_total__title_fee.into(),
theme::menu_item_title(),
));
unwrap!(summary_menu_items.push(MENU_ITEM_FEE_INFO));
}
summary_menu.item(
Button::with_text(cancel_menu_label)
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
summary_menu.item(Button::new_menu_item(
cancel_menu_label,
theme::menu_item_title_orange(),
));
unwrap!(summary_menu_items.push(MENU_ITEM_CANCEL));
let content_summary_menu = VerticalMenuScreen::new(summary_menu)
.with_header(Header::new(TString::empty()).with_close_button())

View File

@ -8,7 +8,7 @@ use crate::{
base::{Decision, DecisionBuilder as _},
FlowController, FlowMsg, SwipeFlow,
},
geometry::{Alignment, Direction, Offset},
geometry::{Alignment, Direction},
layout_eckhart::{component::Button, firmware::ShortMenuVec},
},
};
@ -83,14 +83,9 @@ pub fn new_confirm_reset(recovery: bool) -> Result<SwipeFlow, error::Error> {
})
.one_button_request(br);
let content_menu = VerticalMenuScreen::new(
VerticalMenu::<ShortMenuVec>::empty().with_item(
Button::with_text(TR::buttons__cancel.into())
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
),
)
let content_menu = VerticalMenuScreen::new(VerticalMenu::<ShortMenuVec>::empty().with_item(
Button::new_menu_item(TR::buttons__cancel.into(), theme::menu_item_title_orange()),
))
.with_header(
Header::new(title)
.with_right_button(Button::with_icon(theme::ICON_CROSS), HeaderMsg::Cancelled),

View File

@ -13,7 +13,7 @@ use crate::{
base::{Decision, DecisionBuilder as _},
FlowController, FlowMsg, SwipeFlow,
},
geometry::{Alignment, Direction, LinearPlacement, Offset},
geometry::{Direction, LinearPlacement},
},
};
@ -135,29 +135,23 @@ pub fn new_confirm_summary(
let mut menu_items = Vec::<usize, 3>::new();
if account_paragraphs.is_some() {
menu.item(
Button::with_text(TR::address_details__account_info.into())
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
menu.item(Button::new_menu_item(
TR::address_details__account_info.into(),
theme::menu_item_title(),
));
unwrap!(menu_items.push(MENU_ITEM_ACCOUNT_INFO));
}
if extra_paragraphs.is_some() {
menu.item(
Button::with_text(extra_title.unwrap_or(TR::buttons__more_info.into()))
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
menu.item(Button::new_menu_item(
extra_title.unwrap_or(TR::buttons__more_info.into()),
theme::menu_item_title(),
));
unwrap!(menu_items.push(MENU_ITEM_EXTRA_INFO));
}
menu.item(
Button::with_text(verb_cancel.unwrap_or(TR::buttons__cancel.into()))
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
menu.item(Button::new_menu_item(
verb_cancel.unwrap_or(TR::buttons__cancel.into()),
theme::menu_item_title_orange(),
));
unwrap!(menu_items.push(MENU_ITEM_CANCEL));
let content_menu = VerticalMenuScreen::new(menu)
.with_header(Header::new(title).with_close_button())

View File

@ -12,7 +12,7 @@ use crate::{
base::{Decision, DecisionBuilder as _},
FlowController, FlowMsg, SwipeFlow,
},
geometry::{Alignment, Direction, LinearPlacement, Offset},
geometry::{Direction, LinearPlacement},
layout::util::StrOrBytes,
},
};
@ -105,18 +105,14 @@ pub fn new_confirm_value_intro(
});
let menu_items = VerticalMenu::<ShortMenuVec>::empty()
.with_item(
Button::with_text(value_menu_label)
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
)
.with_item(
Button::with_text(cancel_menu_label)
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
.with_item(Button::new_menu_item(
value_menu_label,
theme::menu_item_title(),
))
.with_item(Button::new_menu_item(
cancel_menu_label,
theme::menu_item_title_orange(),
));
let content_menu = VerticalMenuScreen::new(menu_items)
.with_header(Header::new(TString::empty()).with_close_button())

View File

@ -9,7 +9,7 @@ use crate::{
base::{Decision, DecisionBuilder as _},
FlowController, FlowMsg, SwipeFlow,
},
geometry::{Alignment, Direction, Offset},
geometry::Direction,
},
};
@ -83,20 +83,16 @@ pub fn new_confirm_with_menu<T: AllowedTextContent + MaybeTrace + 'static>(
let mut menu_items = VerticalMenu::<ShortMenuVec>::empty();
if let Some(extra_menu_label) = extra_menu_label {
menu_items.item(
Button::with_text(extra_menu_label)
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
menu_items.item(Button::new_menu_item(
extra_menu_label,
theme::menu_item_title(),
));
}
menu_items.item(
Button::with_text(cancel_menu_label)
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
menu_items.item(Button::new_menu_item(
cancel_menu_label,
theme::menu_item_title_orange(),
));
let content_menu = VerticalMenuScreen::new(menu_items)
.with_header(Header::new(TString::empty()).with_close_button())

View File

@ -15,7 +15,7 @@ use crate::{
base::{Decision, DecisionBuilder as _},
FlowController, FlowMsg, SwipeFlow,
},
geometry::{Alignment, Direction, LinearPlacement, Offset},
geometry::{Direction, LinearPlacement},
layout::util::RecoveryType,
},
};
@ -207,20 +207,16 @@ pub fn new_continue_recovery_homepage(
));
let res = if show_instructions {
let content_menu = VerticalMenuScreen::new(
VerticalMenu::<ShortMenuVec>::empty().with_item(
Button::with_text(cancel_btn.into())
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
),
)
.with_header(Header::new(TString::empty()).with_close_button())
.map(|msg| match msg {
VerticalMenuScreenMsg::Selected(i) => Some(FlowMsg::Choice(i)),
VerticalMenuScreenMsg::Close => Some(FlowMsg::Cancelled),
_ => None,
});
let content_menu =
VerticalMenuScreen::new(VerticalMenu::<ShortMenuVec>::empty().with_item(
Button::new_menu_item(cancel_btn.into(), theme::menu_item_title_orange()),
))
.with_header(Header::new(TString::empty()).with_close_button())
.map(|msg| match msg {
VerticalMenuScreenMsg::Selected(i) => Some(FlowMsg::Choice(i)),
VerticalMenuScreenMsg::Close => Some(FlowMsg::Cancelled),
_ => None,
});
let mut res = SwipeFlow::new(&ContinueRecoveryBeforeShares::Main)?;
res.add_page(&ContinueRecoveryBeforeShares::Main, content_main)?
@ -229,22 +225,16 @@ pub fn new_continue_recovery_homepage(
} else if pages.is_none() {
let content_menu = VerticalMenuScreen::new(
VerticalMenu::<ShortMenuVec>::empty()
.with_item(
Button::with_text_and_subtext(
TR::words__recovery_share.into(),
TR::buttons__more_info.into(),
None,
)
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
)
.with_item(
Button::with_text(cancel_btn.into())
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
),
.with_item(Button::new_menu_item_with_subtext(
TR::words__recovery_share.into(),
theme::menu_item_title(),
TR::buttons__more_info.into(),
None,
))
.with_item(Button::new_menu_item(
cancel_btn.into(),
theme::menu_item_title_orange(),
)),
)
.with_header(Header::new(TR::recovery__title.into()).with_close_button())
.map(|msg| match msg {
@ -281,18 +271,14 @@ pub fn new_continue_recovery_homepage(
} else {
let content_menu = VerticalMenuScreen::new(
VerticalMenu::<ShortMenuVec>::empty()
.with_item(
Button::with_text(TR::recovery__title_remaining_shares.into())
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
)
.with_item(
Button::with_text(cancel_btn.into())
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
),
.with_item(Button::new_menu_item(
TR::recovery__title_remaining_shares.into(),
theme::menu_item_title(),
))
.with_item(Button::new_menu_item(
cancel_btn.into(),
theme::menu_item_title_orange(),
)),
)
.with_header(Header::new(TString::empty()).with_close_button())
.map(|msg| match msg {

View File

@ -13,7 +13,7 @@ use crate::{
base::{Decision, DecisionBuilder as _},
FlowController, FlowMsg, SwipeFlow,
},
geometry::{Alignment, Direction, LinearPlacement, Offset},
geometry::{Direction, LinearPlacement},
},
};
use heapless::Vec;
@ -135,24 +135,18 @@ pub fn new_get_address(
let content_menu = VerticalMenuScreen::new(
VerticalMenu::<ShortMenuVec>::empty()
.with_item(
Button::with_text(TR::address__qr_code.into())
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
)
.with_item(
Button::with_text(TR::address_details__account_info.into())
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
)
.with_item(
Button::with_text(TR::buttons__cancel.into())
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
),
.with_item(Button::new_menu_item(
TR::address__qr_code.into(),
theme::menu_item_title(),
))
.with_item(Button::new_menu_item(
TR::address_details__account_info.into(),
theme::menu_item_title(),
))
.with_item(Button::new_menu_item(
TR::buttons__cancel.into(),
theme::menu_item_title_orange(),
)),
)
.with_header(
Header::new(flow_title)

View File

@ -11,7 +11,7 @@ use crate::{
base::{Decision, DecisionBuilder as _},
FlowController, FlowMsg, SwipeFlow,
},
geometry::{Alignment, Direction, LinearPlacement, Offset},
geometry::{Direction, LinearPlacement},
},
};
@ -72,14 +72,12 @@ pub fn new_prompt_backup() -> Result<SwipeFlow, error::Error> {
_ => None,
});
let content_menu = VerticalMenuScreen::new(
VerticalMenu::<ShortMenuVec>::empty().with_item(
Button::with_text(TR::backup__title_skip.into())
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
let content_menu = VerticalMenuScreen::new(VerticalMenu::<ShortMenuVec>::empty().with_item(
Button::new_menu_item(
TR::backup__title_skip.into(),
theme::menu_item_title_orange(),
),
)
))
.with_header(
Header::new(title)
.with_right_button(Button::with_icon(theme::ICON_CROSS), HeaderMsg::Cancelled),

View File

@ -8,7 +8,7 @@ use crate::{
base::{Decision, DecisionBuilder as _},
FlowController, FlowMsg, SwipeFlow,
},
geometry::{Alignment, Direction, Offset},
geometry::Direction,
},
};
@ -88,18 +88,14 @@ pub fn new_request_number(
});
let menu_items = VerticalMenu::<ShortMenuVec>::empty()
.with_item(
Button::with_text(TR::buttons__more_info.into())
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
)
.with_item(
Button::with_text(TR::buttons__cancel.into())
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
);
.with_item(Button::new_menu_item(
TR::buttons__more_info.into(),
theme::menu_item_title(),
))
.with_item(Button::new_menu_item(
TR::buttons__cancel.into(),
theme::menu_item_title_orange(),
));
let content_menu = VerticalMenuScreen::new(menu_items)
.with_header(Header::new(TString::empty()).with_close_button())

View File

@ -11,7 +11,7 @@ use crate::{
base::{Decision, DecisionBuilder as _},
FlowController, FlowMsg, SwipeFlow,
},
geometry::{Alignment, Direction, LinearPlacement, Offset},
geometry::{Direction, LinearPlacement},
},
};
@ -91,18 +91,11 @@ pub fn new_show_danger(
let content_menu = VerticalMenuScreen::new(
VerticalMenu::<ShortMenuVec>::empty()
.with_separators()
.with_item(
Button::with_text(verb_cancel)
.styled(theme::menu_item_title())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
)
.with_item(
Button::with_text(TR::words__continue_anyway.into())
.styled(theme::menu_item_title_orange())
.with_text_align(Alignment::Start)
.with_content_offset(Offset::x(12)),
),
.with_item(Button::new_menu_item(verb_cancel, theme::menu_item_title()))
.with_item(Button::new_menu_item(
TR::words__continue_anyway.into(),
theme::menu_item_title_orange(),
)),
)
.with_header(
Header::new(menu_title.unwrap_or("".into()))