virtual void apply() { song_length = get_time_input(); silence_seconds = get_silence_input(); play_loops = get_loops_input(); mute_mask = get_mute_input(); input_asap::g_set_mute_mask(mute_mask); g_callback->on_state_changed(); }
virtual t_uint32 get_state() { if (song_length != get_time_input() || silence_seconds != get_silence_input() || play_loops != get_loops_input()) return preferences_state::changed /* | preferences_state::needs_restart_playback */ | preferences_state::resettable; if (mute_mask != get_mute_input()) return preferences_state::changed | preferences_state::resettable; return preferences_state::resettable; }
static INT_PTR CALLBACK settings_dialog_proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { int i; WORD wCtrl; switch (uMsg) { case WM_INITDIALOG: if (song_length <= 0) { CheckRadioButton(hDlg, IDC_UNLIMITED, IDC_LIMITED, IDC_UNLIMITED); SetDlgItemInt(hDlg, IDC_MINUTES, DEFAULT_SONG_LENGTH / 60, FALSE); SetDlgItemInt(hDlg, IDC_SECONDS, DEFAULT_SONG_LENGTH % 60, FALSE); enable_time_input(hDlg, FALSE); } else { CheckRadioButton(hDlg, IDC_UNLIMITED, IDC_LIMITED, IDC_LIMITED); SetDlgItemInt(hDlg, IDC_MINUTES, (UINT) song_length / 60, FALSE); SetDlgItemInt(hDlg, IDC_SECONDS, (UINT) song_length % 60, FALSE); enable_time_input(hDlg, TRUE); } if (silence_seconds <= 0) { CheckDlgButton(hDlg, IDC_SILENCE, BST_UNCHECKED); SetDlgItemInt(hDlg, IDC_SILSECONDS, DEFAULT_SILENCE_SECONDS, FALSE); EnableWindow(GetDlgItem(hDlg, IDC_SILSECONDS), FALSE); } else { CheckDlgButton(hDlg, IDC_SILENCE, BST_CHECKED); SetDlgItemInt(hDlg, IDC_SILSECONDS, (UINT) silence_seconds, FALSE); EnableWindow(GetDlgItem(hDlg, IDC_SILSECONDS), TRUE); } CheckRadioButton(hDlg, IDC_LOOPS, IDC_NOLOOPS, play_loops ? IDC_LOOPS : IDC_NOLOOPS); for (i = 0; i < 8; i++) CheckDlgButton(hDlg, IDC_MUTE1 + i, ((mute_mask >> i) & 1) != 0 ? BST_CHECKED : BST_UNCHECKED); return TRUE; case WM_COMMAND: wCtrl = LOWORD(wParam); BOOL enabled; switch (wCtrl) { case IDC_UNLIMITED: case IDC_LIMITED: enabled = (wCtrl == IDC_LIMITED); enable_time_input(hDlg, enabled); if (!enabled) song_length = -1; else { set_focus_and_select(hDlg, IDC_MINUTES); get_time_input(hDlg); } return TRUE; case IDC_SILENCE: enabled = (IsDlgButtonChecked(hDlg, IDC_SILENCE) == BST_CHECKED); EnableWindow(GetDlgItem(hDlg, IDC_SILSECONDS), enabled); if (!enabled) silence_seconds = -1; else { set_focus_and_select(hDlg, IDC_SILSECONDS); get_silence_input(hDlg); } return TRUE; case IDC_MINUTES: case IDC_SECONDS: if (HIWORD(wParam) == EN_CHANGE && IsDlgButtonChecked(hDlg, IDC_LIMITED) == BST_CHECKED) get_time_input(hDlg); return TRUE; case IDC_SILSECONDS: if (HIWORD(wParam) == EN_CHANGE && IsDlgButtonChecked(hDlg, IDC_SILENCE) == BST_CHECKED) get_silence_input(hDlg); return TRUE; case IDC_LOOPS: case IDC_NOLOOPS: play_loops = (IsDlgButtonChecked(hDlg, IDC_LOOPS) == BST_CHECKED); return TRUE; case IDC_MUTE1: case IDC_MUTE1 + 1: case IDC_MUTE1 + 2: case IDC_MUTE1 + 3: case IDC_MUTE1 + 4: case IDC_MUTE1 + 5: case IDC_MUTE1 + 6: case IDC_MUTE1 + 7: i = 1 << (wCtrl - IDC_MUTE1); if (IsDlgButtonChecked(hDlg, wCtrl) == BST_CHECKED) mute_mask = mute_mask | i; else mute_mask = mute_mask & ~i; input_asap::g_set_mute_mask(mute_mask); return TRUE; default: break; } default: break; } return FALSE; }