123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- #include "precomp__gen_ff.h"
- #include "resource.h"
- #include <commctrl.h>
- #include "wa2cfgitems.h"
- #include "gen.h"
- #include "prefs.h"
- #include "../Agave/Language/api_language.h"
- #include <api/skin/skinparse.h>
- void turnonoff(HWND wnd, int *t, int n, int v);
- extern int toggle_from_wa2;
- extern HWND subWnd;
- static int auto_res = -1;
- static int cur_res = 10;
- static DWORD cur_res_last = 0;
- static int cur_res_total = 0;
- static int cur_res_num = 0;
- static int old_res = 0;
- static int dock_dist = 0;
- static int dock_dist2 = 0;
- static int spin_inc = 0;
- static int spin_show = 0;
- static int spin_hide = 0;
- int desktopalpha_unavail[] = {IDC_STATIC_DA1, IDC_CHECK_DESKTOPALPHA};
- static const wchar_t *getScrollTextSpeedW(float v)
- {
- int skipn = (int)((1.0f / v) - 1 + 0.5f);
- static wchar_t buf[64];
- ZERO(buf);
- switch (skipn)
- {
- case 0: return WASABI_API_LNGSTRINGW_BUF(IDS_FASTER, buf, 64);
- case 1: return WASABI_API_LNGSTRINGW_BUF(IDS_FAST, buf, 64);
- case 2: return WASABI_API_LNGSTRINGW_BUF(IDS_AVERAGE, buf, 64);
- case 3: return WASABI_API_LNGSTRINGW_BUF(IDS_SLOW, buf, 64);
- case 4: return WASABI_API_LNGSTRINGW_BUF(IDS_SLOWER, buf, 64);
- }
- return WASABI_API_LNGSTRINGW_BUF(IDS_N_A, buf, 64);
- }
- static void nextRes(HWND dlg)
- {
- if (cur_res == 250)
- {
- cfg_uioptions_timerresolution.setValueAsInt(old_res);
- SetDlgItemTextW(dlg, IDC_TXT, WASABI_API_LNGSTRINGW(IDS_FAILED_TO_DETECT_OPTIMAL_RESOLUTION));
- }
- else
- {
- if (cur_res >= 100)
- cur_res += 5;
- else if (cur_res >= 50)
- cur_res += 2;
- else
- cur_res++;
- SetDlgItemTextW(dlg, IDC_TXT, StringPrintfW(WASABI_API_LNGSTRINGW(IDS_AUTO_DETECTING), cur_res));
- cur_res_last = Wasabi::Std::getTickCount();
- cur_res_total = 0;
- cur_res_num = 0;
- SetTimer(dlg, 1, cur_res, NULL);
- }
- }
- static INT_PTR CALLBACK autoTimerResProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_INITDIALOG:
- {
- old_res = cfg_uioptions_timerresolution.getValueAsInt();
- cur_res = -1;
- return 1;
- }
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDCANCEL:
- cfg_uioptions_timerresolution.setValueAsInt(old_res);
- EndDialog(hwndDlg, 0);
- return 0;
- case IDOK:
- if (cur_res == -1)
- {
- cfg_uioptions_timerresolution.setValueAsInt(250);
- EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE);
- SetDlgItemTextW(hwndDlg, IDC_TXT, WASABI_API_LNGSTRINGW(IDS_PREPARING_AUTO_DETECTION));
- SetTimer(hwndDlg, 2, 1000, NULL);
- }
- else EndDialog(hwndDlg, IDOK);
- return 0;
- }
- break;
- case WM_TIMER:
- {
- if (wParam == 1)
- {
- DWORD now = Wasabi::Std::getTickCount();
- cur_res_total += now - cur_res_last;
- cur_res_num++;
- cur_res_last = now;
- int m = 5;
- if (cur_res >= 100) m = 2;
- else if (cur_res >= 50) m = 3;
- if (cur_res_num == m)
- {
- float average = (float)cur_res_total / (float)m;
- if (average <= (float)cur_res*1.1)
- {
- auto_res = cur_res;
- cfg_uioptions_timerresolution.setValueAsInt(old_res);
- SetDlgItemTextW(hwndDlg, IDC_TXT, StringPrintfW(WASABI_API_LNGSTRINGW(IDS_AUTO_DETECTION_SUCCESSFUL), cur_res));
- SetDlgItemTextW(hwndDlg, IDOK, WASABI_API_LNGSTRINGW(IDS_ACCEPT));
- EnableWindow(GetDlgItem(hwndDlg, IDOK), TRUE);
- }
- else
- {
- nextRes(hwndDlg);
- }
- }
- return 0;
- }
- else if (wParam == 2)
- {
- KillTimer(hwndDlg, 2);
- cur_res = 9;
- nextRes(hwndDlg);
- return 0;
- }
- break;
- }
- }
- return FALSE;
- }
- static void autoTimerRes(HWND dlg)
- {
- INT_PTR r = WASABI_API_DIALOGBOXW(IDD_AUTOTIMERRES, dlg, autoTimerResProc);
- if (r == IDOK)
- {
- cfg_uioptions_timerresolution.setValueAsInt(auto_res);
- SendMessageW(GetDlgItem(dlg, IDC_SLIDER_TIMERRESOLUTION), TBM_SETPOS, 1, auto_res);
- SetDlgItemTextW(dlg, IDC_STATIC_TIMERRES, StringPrintfW(WASABI_API_LNGSTRINGW(IDS_TIMERS_RESOLUTION), auto_res));
- }
- }
- INT_PTR CALLBACK ffPrefsProc1(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_INITDIALOG:
- {
- dock_dist = dock_dist2 = spin_inc = spin_show = spin_hide = 0;
- CheckDlgButton(hwndDlg, IDC_CHECK_DESKTOPALPHA, cfg_uioptions_desktopalpha.getValueAsInt());
- if (!Wasabi::Std::Wnd::isDesktopAlphaAvailable()) turnonoff(hwndDlg, desktopalpha_unavail, sizeof(desktopalpha_unavail)/sizeof(int), 0);
- SendMessageW(GetDlgItem(hwndDlg, IDC_SLIDER_TIMERRESOLUTION), TBM_SETRANGEMAX, 0, 250);
- SendMessageW(GetDlgItem(hwndDlg, IDC_SLIDER_TIMERRESOLUTION), TBM_SETRANGEMIN, 0, 10);
- SendMessageW(GetDlgItem(hwndDlg, IDC_SLIDER_TIMERRESOLUTION), TBM_SETPOS, 1, cfg_uioptions_timerresolution.getValueAsInt());
- SetDlgItemTextW(hwndDlg, IDC_STATIC_TIMERRES, StringPrintfW(WASABI_API_LNGSTRINGW(IDS_TIMERS_RESOLUTION), cfg_uioptions_timerresolution.getValueAsInt()));
- CheckDlgButton(hwndDlg, IDC_CHECK_TOOLTIPS, cfg_uioptions_tooltips.getValueAsInt());
- CheckDlgButton(hwndDlg, IDC_CHECK_DOCKING, cfg_options_docking.getValueAsInt());
- CheckDlgButton(hwndDlg, IDC_CHECK_DOCKING2, cfg_options_appbarondrag.getValueAsInt());
- SendMessageW(GetDlgItem(hwndDlg,IDC_SPIN_DOCKDISTANCE),UDM_SETRANGE,0,MAKELONG(1000,0));
- SetDlgItemInt(hwndDlg, IDC_EDIT_DOCKDISTANCE, cfg_options_dockingdistance.getValueAsInt(), 0);
- SendMessageW(GetDlgItem(hwndDlg,IDC_SPIN_DOCKDISTANCE2),UDM_SETRANGE,0,MAKELONG(1000,0));
- SetDlgItemInt(hwndDlg, IDC_EDIT_DOCKDISTANCE2, cfg_options_appbardockingdistance.getValueAsInt(), 0);
- SetDlgItemTextA(hwndDlg, IDC_EDIT_INCREMENT, StringPrintf("%d", cfg_uioptions_textincrement.getValueAsInt()));
- SendMessageW(GetDlgItem(hwndDlg, IDC_SLIDER_TICKERSPEED), TBM_SETRANGEMAX, 0, 4);
- SendMessageW(GetDlgItem(hwndDlg, IDC_SLIDER_TICKERSPEED), TBM_SETRANGEMIN, 0, 0);
- SendMessageW(GetDlgItem(hwndDlg, IDC_SLIDER_TICKERSPEED), TBM_SETPOS, 1, (int)(1.0f / cfg_uioptions_textspeed.getValueAsDouble() - 1.0f + 0.5f));
- SetDlgItemTextW(hwndDlg, IDC_STATIC_TICKER, StringPrintfW(WASABI_API_LNGSTRINGW(IDS_TEXT_SCROLL_SPEED), getScrollTextSpeedW((float)cfg_uioptions_textspeed.getValueAsDouble())));
- SendMessageW(GetDlgItem(hwndDlg,IDC_SPIN_SHOWTIME),UDM_SETRANGE,0,MAKELONG(9999,0));
- SetDlgItemInt(hwndDlg, IDC_EDIT_SHOWTIME, cfg_uioptions_appbarsshowtime.getValueAsInt(), 0);
- SendMessageW(GetDlgItem(hwndDlg,IDC_SPIN_HIDETIME),UDM_SETRANGE,0,MAKELONG(9999,0));
- SetDlgItemInt(hwndDlg, IDC_EDIT_HIDETIME, cfg_uioptions_appbarshidetime.getValueAsInt(), 0);
- dock_dist = dock_dist2 = spin_inc = spin_show = spin_hide = 1;
- return 1;
- }
- case WM_COMMAND:
- toggle_from_wa2 = 1;
- switch (LOWORD(wParam))
- {
- case IDC_CHECK_DESKTOPALPHA:
- cfg_uioptions_desktopalpha.setValueAsInt(IsDlgButtonChecked(hwndDlg, IDC_CHECK_DESKTOPALPHA));
- return 0;
- case IDC_BUTTON_AUTOTIMERRES:
- autoTimerRes(hwndDlg);
- return 0;
- case IDC_CHECK_TOOLTIPS:
- cfg_uioptions_tooltips.setValueAsInt(IsDlgButtonChecked(hwndDlg, IDC_CHECK_TOOLTIPS));
- return 0;
- case IDC_CHECK_DOCKING:
- cfg_options_docking.setValueAsInt(IsDlgButtonChecked(hwndDlg, IDC_CHECK_DOCKING));
- return 0;
- case IDC_CHECK_DOCKING2:
- cfg_options_appbarondrag.setValueAsInt(IsDlgButtonChecked(hwndDlg, IDC_CHECK_DOCKING2));
- return 0;
- case IDC_EDIT_DOCKDISTANCE:
- if (HIWORD(wParam) == EN_CHANGE && dock_dist)
- {
- int t, a = GetDlgItemInt(hwndDlg, IDC_EDIT_DOCKDISTANCE, &t, 0);
- if (t) cfg_options_dockingdistance.setValueAsInt(a);
- }
- return 0;
- case IDC_EDIT_DOCKDISTANCE2:
- if (HIWORD(wParam) == EN_CHANGE && dock_dist2)
- {
- int t, a = GetDlgItemInt(hwndDlg, IDC_EDIT_DOCKDISTANCE2, &t, 0);
- if (t) cfg_options_appbardockingdistance.setValueAsInt(a);
- }
- return 0;
- case IDC_EDIT_INCREMENT:
- if (HIWORD(wParam) == EN_CHANGE && spin_inc)
- {
- int t, a = GetDlgItemInt(hwndDlg, IDC_EDIT_INCREMENT, &t, 0);
- if (t) cfg_uioptions_textincrement.setValueAsInt(a);
- }
- return 0;
- case IDC_EDIT_SHOWTIME:
- if (HIWORD(wParam) == EN_CHANGE && spin_show)
- {
- int t, a = GetDlgItemInt(hwndDlg, IDC_EDIT_SHOWTIME, &t, 0);
- if (t) cfg_uioptions_appbarsshowtime.setValueAsInt(a);
- }
- return 0;
- case IDC_EDIT_HIDETIME:
- if (HIWORD(wParam) == EN_CHANGE && spin_hide)
- {
- int t, a = GetDlgItemInt(hwndDlg, IDC_EDIT_HIDETIME, &t, 0);
- if (t) cfg_uioptions_appbarshidetime.setValueAsInt(a);
- }
- return 0;
- }
- toggle_from_wa2 = 0;
- break;
- case WM_HSCROLL:
- {
- int t = (int)SendMessageW((HWND) lParam, TBM_GETPOS, 0, 0);
- HWND ctrl = (HWND) lParam;
- if (ctrl == GetDlgItem(hwndDlg, IDC_SLIDER_TIMERRESOLUTION))
- {
- cfg_uioptions_timerresolution.setValueAsInt(t);
- SetDlgItemTextW(hwndDlg, IDC_STATIC_TIMERRES, StringPrintfW(WASABI_API_LNGSTRINGW(IDS_TIMERS_RESOLUTION), cfg_uioptions_timerresolution.getValueAsInt()));
- }
- else if (ctrl == GetDlgItem(hwndDlg, IDC_SLIDER_TICKERSPEED))
- {
- cfg_uioptions_textspeed.setValueAsDouble(1.0 / (float)(t + 1));
- SetDlgItemTextW(hwndDlg, IDC_STATIC_TICKER, StringPrintfW(WASABI_API_LNGSTRINGW(IDS_TEXT_SCROLL_SPEED), getScrollTextSpeedW((float)cfg_uioptions_textspeed.getValueAsDouble())));
- }
- break;
- }
- case WM_DESTROY:
- subWnd = NULL;
- dock_dist = dock_dist2 = spin_inc = spin_show = spin_hide = 0;
- return 0;
- }
- const int controls[] =
- {
- IDC_SLIDER_TIMERRESOLUTION,
- IDC_SLIDER_TICKERSPEED,
- };
- if (FALSE != WASABI_API_APP->DirectMouseWheel_ProcessDialogMessage(hwndDlg, uMsg, wParam, lParam, controls, ARRAYSIZE(controls)))
- return TRUE;
- return 0;
- }
|