pacenotes_installer\wizard\scene/
language.rs1use windows_sys::Win32::Foundation::{HWND, LPARAM, WPARAM};
2use windows_sys::Win32::UI::Controls as ctl;
3use windows_sys::Win32::UI::WindowsAndMessaging as wm;
4
5pub unsafe extern "system" fn language_page(
7 dialog: HWND,
8 message: u32,
9 _wparam: WPARAM,
10 lparam: LPARAM,
11) -> isize {
12 match message {
13 wm::WM_INITDIALOG => {
14 initialize(dialog, lparam);
15 1
16 }
17 wm::WM_NOTIFY => match crate::wizard::page::notify_code(lparam) {
18 Some(ctl::PSN_SETACTIVE) => {
19 crate::wizard::page::set_sheet_caption(dialog);
20 crate::wizard::page::set_header(dialog, crate::i18n::IDS_S1_TITLE);
21 crate::wizard::page::set_buttons(dialog, ctl::PSWIZB_NEXT);
22 crate::wizard::page::set_next_text(dialog, crate::i18n::IDS_BTN_CONTINUE);
23 crate::wizard::page::reply(dialog, 0)
24 }
25 Some(ctl::PSN_WIZNEXT) => {
26 apply_pick(dialog);
27 crate::wizard::page::reply(dialog, 0)
28 }
29 Some(ctl::PSN_QUERYCANCEL) => crate::wizard::page::query_cancel(dialog),
30 _ => 0,
31 },
32 _ => 0,
33 }
34}
35
36unsafe fn initialize(dialog: HWND, lparam: LPARAM) {
37 let state = crate::wizard::page::adopt_state(dialog, lparam);
38 let combo = crate::wizard::control_ids::IDC_S1_COMBO;
39 crate::ui::set_text(
40 dialog,
41 crate::wizard::control_ids::IDC_S1_PROMPT,
42 crate::i18n::IDS_S1_PROMPT,
43 );
44 crate::ui::set_text(
45 dialog,
46 crate::wizard::control_ids::IDC_S1_NOTE,
47 crate::i18n::IDS_S1_RESTART,
48 );
49 for language in crate::i18n::Language::ALL {
50 crate::ui::combo_add(dialog, combo, language.label());
51 }
52 let initial = state.map_or(crate::i18n::Language::En, |state| state.language);
54 crate::ui::combo_select(dialog, combo, initial.index());
55}
56
57unsafe fn apply_pick(dialog: HWND) {
59 let Some(state) = crate::wizard::page::state(dialog) else {
60 return;
61 };
62 let picked = crate::ui::combo_selection(dialog, crate::wizard::control_ids::IDC_S1_COMBO)
63 .map(crate::i18n::Language::from_index)
64 .unwrap_or(crate::i18n::Language::En);
65 state.language = picked;
66 crate::i18n::set_language(picked);
67}