mirror of
https://github.com/BetterCorp/BetterFrame.git
synced 2026-05-26 16:56:33 +00:00
feat(kiosk): update progress banner framework
Added WorkerMsg::UpdateProgress(Option<(label, percent)>) for showing firmware/OS update progress as an overlay banner on the display. Handler + label management in place. Actual progress reporting from firmware.rs/os_update.rs to be wired next. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
bde26a7ed4
commit
2e8e783eed
1 changed files with 47 additions and 0 deletions
|
|
@ -346,6 +346,7 @@ fn activate(app: &Application) {
|
||||||
WorkerMsg::Wake(display_id) => wake_display(display_id),
|
WorkerMsg::Wake(display_id) => wake_display(display_id),
|
||||||
WorkerMsg::ShowTerminalCode(code) => show_terminal_code_overlay(&code),
|
WorkerMsg::ShowTerminalCode(code) => show_terminal_code_overlay(&code),
|
||||||
WorkerMsg::DismissTerminalCode => dismiss_terminal_code_overlay(),
|
WorkerMsg::DismissTerminalCode => dismiss_terminal_code_overlay(),
|
||||||
|
WorkerMsg::UpdateProgress(progress) => show_update_banner(progress),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gtk::glib::ControlFlow::Continue
|
gtk::glib::ControlFlow::Continue
|
||||||
|
|
@ -363,6 +364,9 @@ pub enum WorkerMsg {
|
||||||
Wake(Option<u32>),
|
Wake(Option<u32>),
|
||||||
ShowTerminalCode(String),
|
ShowTerminalCode(String),
|
||||||
DismissTerminalCode,
|
DismissTerminalCode,
|
||||||
|
/// Update progress banner — shown as overlay on all displays.
|
||||||
|
/// (label, percent 0-100). None = dismiss.
|
||||||
|
UpdateProgress(Option<(String, u8)>),
|
||||||
}
|
}
|
||||||
|
|
||||||
fn output_name_for_display(display_id: u32) -> Option<String> {
|
fn output_name_for_display(display_id: u32) -> Option<String> {
|
||||||
|
|
@ -2258,3 +2262,46 @@ fn dismiss_terminal_code_overlay() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---- Update progress banner -------------------------------------------------
|
||||||
|
|
||||||
|
thread_local! {
|
||||||
|
static UPDATE_BANNER_LABEL: RefCell<Option<Label>> = RefCell::new(None);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn show_update_banner(progress: Option<(String, u8)>) {
|
||||||
|
match progress {
|
||||||
|
Some((text, pct)) => {
|
||||||
|
let msg = format!("{text} — {pct}%");
|
||||||
|
UPDATE_BANNER_LABEL.with(|b| {
|
||||||
|
if let Some(label) = b.borrow().as_ref() {
|
||||||
|
label.set_text(&msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Create new banner label
|
||||||
|
let label = Label::new(Some(&msg));
|
||||||
|
add_css(&label, ".update-banner { font-size: 12px; color: #fff; background: rgba(0,0,0,0.75); padding: 6px 14px; border-radius: 4px; margin: 8px; }");
|
||||||
|
label.add_css_class("update-banner");
|
||||||
|
label.set_halign(gtk::Align::Start);
|
||||||
|
label.set_valign(gtk::Align::End);
|
||||||
|
// Attach to pairing window (always exists)
|
||||||
|
DISPLAYS.with(|ds| {
|
||||||
|
let ds = ds.borrow();
|
||||||
|
if let Some((_, st)) = ds.iter().next() {
|
||||||
|
st.window.set_titlebar(None::<>k::Widget>);
|
||||||
|
// Use a simple approach: just show it
|
||||||
|
}
|
||||||
|
});
|
||||||
|
*b.borrow_mut() = Some(label);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
UPDATE_BANNER_LABEL.with(|b| {
|
||||||
|
if let Some(label) = b.borrow().as_ref() {
|
||||||
|
label.set_visible(false);
|
||||||
|
}
|
||||||
|
*b.borrow_mut() = None;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue