feat: add Show ETD toggle and wire ETD into usage cells

This commit is contained in:
Carlos Miguel C. Resurreccion 2026-06-19 17:04:01 +08:00
parent 1d4502bf8b
commit 97d26b080a

View File

@ -124,6 +124,7 @@ const IDM_LANG_RUSSIAN: u16 = 49;
const IDM_LANG_PORTUGUESE_BRAZIL: u16 = 50;
const IDM_MODEL_CLAUDE_CODE: u16 = 60;
const IDM_MODEL_CODEX: u16 = 61;
const IDM_SHOW_ETD: u16 = 74;
const DIVIDER_HIT_ZONE: i32 = 13; // LEFT_DIVIDER_W + DIVIDER_RIGHT_MARGIN
@ -427,6 +428,18 @@ fn refresh_usage_texts(state: &mut AppState) {
if let Some(claude_code) = data.claude_code.as_ref() {
state.session_text = poller::format_line(&claude_code.session, strings);
state.weekly_text = poller::format_line(&claude_code.weekly, strings);
if state.show_etd {
if let Some(s) =
poller::etd_suffix(&claude_code.session, poller::SESSION_WINDOW_SECS, strings)
{
state.session_text.push_str(&s);
}
if let Some(s) =
poller::etd_suffix(&claude_code.weekly, poller::WEEKLY_WINDOW_SECS, strings)
{
state.weekly_text.push_str(&s);
}
}
} else if state.show_claude_code {
state.session_text = "!".to_string();
state.weekly_text = "!".to_string();
@ -435,6 +448,18 @@ fn refresh_usage_texts(state: &mut AppState) {
if let Some(codex) = data.codex.as_ref() {
state.codex_session_text = poller::format_line(&codex.session, strings);
state.codex_weekly_text = poller::format_line(&codex.weekly, strings);
if state.show_etd {
if let Some(s) =
poller::etd_suffix(&codex.session, poller::SESSION_WINDOW_SECS, strings)
{
state.codex_session_text.push_str(&s);
}
if let Some(s) =
poller::etd_suffix(&codex.weekly, poller::WEEKLY_WINDOW_SECS, strings)
{
state.codex_weekly_text.push_str(&s);
}
}
} else if state.show_codex {
state.codex_session_text = "!".to_string();
state.codex_weekly_text = "!".to_string();
@ -2258,6 +2283,17 @@ unsafe extern "system" fn wnd_proc(
do_poll(sh);
});
}
IDM_SHOW_ETD => {
{
let mut state = lock_state();
if let Some(s) = state.as_mut() {
s.show_etd = !s.show_etd;
refresh_usage_texts(s);
}
}
save_state_settings();
render_layered();
}
IDM_LANG_SYSTEM
| IDM_LANG_ENGLISH
| IDM_LANG_DUTCH
@ -2339,6 +2375,7 @@ fn show_context_menu(hwnd: HWND) {
widget_visible,
show_claude_code,
show_codex,
show_etd,
) = {
let state = lock_state();
match state.as_ref() {
@ -2352,6 +2389,7 @@ fn show_context_menu(hwnd: HWND) {
s.widget_visible,
s.show_claude_code,
s.show_codex,
s.show_etd,
),
None => (
POLL_15_MIN,
@ -2363,6 +2401,7 @@ fn show_context_menu(hwnd: HWND) {
true,
true,
false,
false,
),
}
};
@ -2468,6 +2507,19 @@ fn show_context_menu(hwnd: HWND) {
PCWSTR::from_raw(reset_pos_str.as_ptr()),
);
let etd_str = native_interop::wide_str(strings.show_etd);
let etd_flags = if show_etd {
MF_CHECKED
} else {
MENU_ITEM_FLAGS(0)
};
let _ = AppendMenuW(
settings_menu,
etd_flags,
IDM_SHOW_ETD as usize,
PCWSTR::from_raw(etd_str.as_ptr()),
);
let language_menu = CreatePopupMenu().unwrap();
let system_label = native_interop::wide_str(strings.system_default);
let system_flags = if language_override.is_none() {