diff options
Diffstat (limited to 'protocols/Weather/src/weather_opt.cpp')
-rw-r--r-- | protocols/Weather/src/weather_opt.cpp | 277 |
1 files changed, 90 insertions, 187 deletions
diff --git a/protocols/Weather/src/weather_opt.cpp b/protocols/Weather/src/weather_opt.cpp index edadf953fa..8422c28370 100644 --- a/protocols/Weather/src/weather_opt.cpp +++ b/protocols/Weather/src/weather_opt.cpp @@ -28,70 +28,54 @@ static BOOL opt_startup; int RedrawFrame(WPARAM wParam, LPARAM lParam); //============ LOADING AND SAVING OPTIONS =========== -// -// set a string to default -// in = string to determine which field to set default "CBNEHXPp" -void SetTextDefault(const char* in) -{ - wchar_t str[MAX_TEXT_SIZE]; - if (strchr(in, 'C') != nullptr) { - wcsncpy(str, C_DEFAULT, MAX_TEXT_SIZE - 1); - wSetData(&opt.cText, str); - } - if (strchr(in, 'b') != nullptr) { - wcsncpy(str, b_DEFAULT, MAX_TEXT_SIZE - 1); - wSetData(&opt.bTitle, str); - } - if (strchr(in, 'B') != nullptr) { - wcsncpy(str, B_DEFAULT, MAX_TEXT_SIZE - 1); - wSetData(&opt.bText, str); - } - if (strchr(in, 'N') != nullptr) { - wcsncpy(str, N_DEFAULT, MAX_TEXT_SIZE - 1); - wSetData(&opt.nText, str); - } - if (strchr(in, 'E') != nullptr) { - wcsncpy(str, E_DEFAULT, MAX_TEXT_SIZE - 1); - wSetData(&opt.eText, str); - } - if (strchr(in, 'H') != nullptr) { - wcsncpy(str, H_DEFAULT, MAX_TEXT_SIZE - 1); - wSetData(&opt.hText, str); - } - if (strchr(in, 'X') != nullptr) { - wcsncpy(str, X_DEFAULT, MAX_TEXT_SIZE - 1); - wSetData(&opt.xText, str); - } - if (strchr(in, 'P') != nullptr) { - wcsncpy(str, P_DEFAULT, MAX_TEXT_SIZE - 1); - wSetData(&opt.pTitle, str); - } - if (strchr(in, 'p') != nullptr) { - wcsncpy(str, p_DEFAULT, MAX_TEXT_SIZE - 1); - wSetData(&opt.pText, str); - } - if (strchr(in, 'S') != nullptr) { - wcsncpy(str, s_DEFAULT, MAX_TEXT_SIZE - 1); - wSetData(&opt.sText, str); +const wchar_t* GetDefaultText(int c) +{ + switch (c) { + case 'C': + return L"%n [%t, %c]"; + case 'b': + return TranslateT("Weather Condition for %n as of %u"); + case 'B': + return TranslateT("Feel-Like: %f\\nPressure: %p\\nWind: %i %w\\nHumidity: %m\\nDew Point: %e\\nVisibility: %v\\n\\nSun Rise: %r\\nSun Set: %y\\n\\n5 Days Forecast:\\n%[Forecast Day 1]\\n%[Forecast Day 2]\\n%[Forecast Day 3]\\n%[Forecast Day 4]\\n%[Forecast Day 5]"); + case 'X': case 'N': + return TranslateT("%c\\nTemperature: %t\\nFeel-Like: %f\\nPressure: %p\\nWind: %i %w\\nHumidity: %m\\nDew Point: %e\\nVisibility: %v\\n\\nSun Rise: %r\\nSun Set: %y\\n\\n5 Days Forecast:\\n%[Forecast Day 1]\\n%[Forecast Day 2]\\n%[Forecast Day 3]\\n%[Forecast Day 4]\\n%[Forecast Day 5]"); + case 'E': + return TranslateT("%n at %u: %c, %t (feel-like %f) Wind: %i %w Humidity: %m"); + case 'H': + return TranslateT("%c, %t (feel-like %f) Wind: %i %w Humidity: %m"); + case 'S': + return TranslateT("Temperature: %[Temperature]"); + case 'P': + return TranslateT("%n (%u)"); + case 'p': + return TranslateT("%c, %t\\nToday: High %h, Low %l"); } + return L""; } -void DestroyOptions(void) +CMStringW GetTextValue(int c) { - wfree(&opt.cText); - wfree(&opt.bTitle); - wfree(&opt.bText); - wfree(&opt.nText); - wfree(&opt.eText); - wfree(&opt.hText); - wfree(&opt.xText); - wfree(&opt.pTitle); - wfree(&opt.pText); - wfree(&opt.sText); + CMStringW ret; + + switch (c) { + case 'C': ret = g_plugin.getMStringW("DisplayText"); break; + case 'b': ret = g_plugin.getMStringW("BriefTextTitle"); break; + case 'B': ret = g_plugin.getMStringW("BriefText"); break; + case 'N': ret = g_plugin.getMStringW("NoteText"); break; + case 'E': ret = g_plugin.getMStringW("ExtText"); break; + case 'H': ret = g_plugin.getMStringW("HistoryText"); break; + case 'X': ret = g_plugin.getMStringW("ExtraText"); break; + case 'S': ret = g_plugin.getMStringW("StatusText"); break; + case 'P': ret = g_plugin.getMStringW("PopupTitle"); break; + case 'p': ret = g_plugin.getMStringW("PopupText"); break; + } + + return (ret.IsEmpty()) ? GetDefaultText(c) : ret; } // load options from database + set default if the setting does not exist + void LoadOptions(void) { memset(&opt, 0, sizeof(opt)); @@ -120,47 +104,6 @@ void LoadOptions(void) opt.DoNotAppendUnit = g_plugin.getByte("DoNotAppendUnit", 0); opt.NoFrac = g_plugin.getByte("NoFractions", 0); - // texts - if (szValue = g_plugin.getWStringA("DisplayText")) - wSetData(&opt.cText, TranslateW(szValue)); - else - SetTextDefault("C"); - - if (szValue = g_plugin.getWStringA("BriefTextTitle")) - wSetData(&opt.bTitle, TranslateW(szValue)); - else - SetTextDefault("b"); - - if (szValue = g_plugin.getWStringA("BriefText")) - wSetData(&opt.bText, TranslateW(szValue)); - else - SetTextDefault("B"); - - if (szValue = g_plugin.getWStringA("NoteText")) - wSetData(&opt.nText, TranslateW(szValue)); - else - SetTextDefault("N"); - - if (szValue = g_plugin.getWStringA("ExtText")) - wSetData(&opt.eText, TranslateW(szValue)); - else - SetTextDefault("E"); - - if (szValue = g_plugin.getWStringA("HistoryText")) - wSetData(&opt.hText, TranslateW(szValue)); - else - SetTextDefault("H"); - - if (szValue = g_plugin.getWStringA("ExtraText")) - wSetData(&opt.xText, TranslateW(szValue)); - else - SetTextDefault("X"); - - if (szValue = g_plugin.getWStringA("StatusText")) - wSetData(&opt.sText, TranslateW(szValue)); - else - SetTextDefault("S"); - // advanced opt.DisCondIcon = g_plugin.getByte("DisableConditionIcon", false); // popup options @@ -178,16 +121,6 @@ void LoadOptions(void) opt.RightClickAction = g_plugin.getDword("RightClickAction", IDM_M1); // popup delay opt.pDelay = g_plugin.getDword("PopupDelay", 0); - // popup texts - if (szValue = g_plugin.getWStringA("PopupTitle")) - wSetData(&opt.pTitle, szValue); - else - SetTextDefault("P"); - - if (szValue = g_plugin.getWStringA("PopupText")) - wSetData(&opt.pText, szValue); - else - SetTextDefault("p"); // misc if (szValue = g_plugin.getWStringA("Default")) @@ -218,15 +151,6 @@ void SaveOptions(void) g_plugin.setWString("DegreeSign", opt.DegreeSign); g_plugin.setByte("DoNotAppendUnit", (BYTE)opt.DoNotAppendUnit); g_plugin.setByte("NoFractions", (BYTE)opt.NoFrac); - // texts - g_plugin.setWString("DisplayText", opt.cText); - g_plugin.setWString("BriefTextTitle", opt.bTitle); - g_plugin.setWString("BriefText", opt.bText); - g_plugin.setWString("NoteText", opt.nText); - g_plugin.setWString("ExtText", opt.eText); - g_plugin.setWString("HistoryText", opt.hText); - g_plugin.setWString("ExtraText", opt.xText); - g_plugin.setWString("StatusText", opt.sText); // advanced g_plugin.setByte("DisableConditionIcon", (BYTE)opt.DisCondIcon); // popup options @@ -244,9 +168,6 @@ void SaveOptions(void) g_plugin.setDword("RightClickAction", opt.RightClickAction); // popup delay g_plugin.setDword("PopupDelay", opt.pDelay); - // popup texts - g_plugin.setWString("PopupTitle", opt.pTitle); - g_plugin.setWString("PopupText", opt.pText); // misc stuff g_plugin.setWString("Default", opt.Default); } @@ -387,37 +308,25 @@ static INT_PTR CALLBACK OptionsProc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM l //============ TEXT OPTION DIALOG ============ -static void LoadTextSettings(HWND hdlg) -{ - // load text option settings from memory - SetDlgItemText(hdlg, IDC_CTEXT, opt.cText); - SetDlgItemText(hdlg, IDC_BTITLE, opt.bTitle); - SetDlgItemText(hdlg, IDC_BTEXT, opt.bText); - SetDlgItemText(hdlg, IDC_ETEXT, opt.eText); - SetDlgItemText(hdlg, IDC_NTEXT, opt.nText); - SetDlgItemText(hdlg, IDC_HTEXT, opt.hText); - SetDlgItemText(hdlg, IDC_XTEXT, opt.xText); - SetDlgItemText(hdlg, IDC_BTITLE2, opt.sText); -} +// text option dialog -// free the display text settings from memory -static void FreeTextVar(void) +struct { - wfree(&opt.cText); - wfree(&opt.bText); - wfree(&opt.bTitle); - wfree(&opt.eText); - wfree(&opt.nText); - wfree(&opt.hText); - wfree(&opt.xText); - wfree(&opt.sText); + wchar_t c; + int id; + char *setting; } - -// text option dialog - -static const char *varname[8] = { "C", "b", "B", "N", "X", "E", "H", "S" }; -static const int cname[8] = { IDC_CTEXT, IDC_BTITLE, IDC_BTEXT, IDC_NTEXT, IDC_XTEXT, IDC_ETEXT, IDC_HTEXT, IDC_BTITLE2 }; -static wchar_t* const *var[8] = { &opt.cText, &opt.bTitle, &opt.bText, &opt.nText, &opt.xText, &opt.eText, &opt.hText, &opt.sText }; +static controls[] = +{ + { 'C', IDC_CTEXT, "DisplayText" }, + { 'b', IDC_BTITLE, "BriefTextTitle" }, + { 'B', IDC_BTEXT, "BriefText" }, + { 'N', IDC_NTEXT, "NoteText" }, + { 'X', IDC_XTEXT, "ExtText" }, + { 'E', IDC_ETEXT, "HistoryText" }, + { 'H', IDC_HTEXT, "ExtraText" }, + { 'S', IDC_BTITLE2, "StatusText" }, +}; static INT_PTR CALLBACK DlgProcText(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) { @@ -432,10 +341,14 @@ static INT_PTR CALLBACK DlgProcText(HWND hdlg, UINT msg, WPARAM wParam, LPARAM l GetWindowRect(hdlg, &rc); SetWindowPos(hdlg, HWND_TOPMOST, rc.left, rc.top, 0, 0, SWP_NOSIZE); TranslateDialogDefault(hdlg); + // generate the display text for variable list wcsncpy(str, VAR_LIST_OPT, _countof(str) - 1); SetDlgItemText(hdlg, IDC_VARLIST, str); + for (auto &it : controls) + SetDlgItemText(hdlg, it.id, GetTextValue(it.c)); + // make the more variable and other buttons flat SendDlgItemMessage(hdlg, IDC_MORE, BUTTONSETASFLATBTN, TRUE, 0); SendDlgItemMessage(hdlg, IDC_TM1, BUTTONSETASFLATBTN, TRUE, 0); @@ -447,8 +360,8 @@ static INT_PTR CALLBACK DlgProcText(HWND hdlg, UINT msg, WPARAM wParam, LPARAM l SendDlgItemMessage(hdlg, IDC_TM7, BUTTONSETASFLATBTN, TRUE, 0); SendDlgItemMessage(hdlg, IDC_TM8, BUTTONSETASFLATBTN, TRUE, 0); SendDlgItemMessage(hdlg, IDC_RESET, BUTTONSETASFLATBTN, TRUE, 0); + // load the settings - LoadTextSettings(hdlg); opt_startup = FALSE; return TRUE; @@ -486,25 +399,26 @@ static INT_PTR CALLBACK DlgProcText(HWND hdlg, UINT msg, WPARAM wParam, LPARAM l hMenu = LoadMenu(g_plugin.getInst(), MAKEINTRESOURCE(IDR_TMMENU)); hMenu1 = GetSubMenu(hMenu, 0); TranslateMenu(hMenu1); - switch (TrackPopupMenu(hMenu1, TPM_LEFTBUTTON | TPM_RETURNCMD, pos.left, pos.bottom, 0, hdlg, nullptr)) { - case ID_MPREVIEW: - { - // show the preview in a message box, using the weather data from the default station - WEATHERINFO winfo = LoadWeatherInfo(opt.DefStn); - GetDisplay(&winfo, *var[LOWORD(wParam) - IDC_TM1], str); - MessageBox(nullptr, str, TranslateT("Weather Protocol Text Preview"), MB_OK | MB_TOPMOST); + { + auto &var = controls[int(LOWORD(wParam)) - IDC_TM1]; + + switch (TrackPopupMenu(hMenu1, TPM_LEFTBUTTON | TPM_RETURNCMD, pos.left, pos.bottom, 0, hdlg, nullptr)) { + case ID_MPREVIEW: + { + // show the preview in a message box, using the weather data from the default station + WEATHERINFO winfo = LoadWeatherInfo(opt.DefStn); + wchar_t buf[2] = { var.c, 0 }; + GetDisplay(&winfo, buf, str); + MessageBox(nullptr, str, TranslateT("Weather Protocol Text Preview"), MB_OK | MB_TOPMOST); + } + break; + + case ID_MRESET: + SetDlgItemText(hdlg, var.id, GetDefaultText(var.c)); break; } - case ID_MRESET: - unsigned varo = LOWORD(wParam) - IDC_TM1; - // remove the old setting from db and free memory - wchar_t* vartmp = *var[varo]; - wfree(&vartmp); - SetTextDefault(varname[varo]); - SetDlgItemText(hdlg, cname[varo], *var[varo]); - break; + DestroyMenu(hMenu); } - DestroyMenu(hMenu); break; case IDC_RESET: @@ -517,14 +431,14 @@ static INT_PTR CALLBACK DlgProcText(HWND hdlg, UINT msg, WPARAM wParam, LPARAM l switch (TrackPopupMenu(hMenu1, TPM_LEFTBUTTON | TPM_RETURNCMD, pos.left, pos.bottom, 0, hdlg, nullptr)) { case ID_T1: // reset to the strings in memory, discard all changes - LoadTextSettings(hdlg); + for (auto &it : controls) + SetDlgItemText(hdlg, it.id, GetTextValue(it.c)); break; case ID_T2: // reset to the default setting - FreeTextVar(); - SetTextDefault("CbBENHX"); - LoadTextSettings(hdlg); + for (auto &it : controls) + SetDlgItemText(hdlg, it.id, GetDefaultText(it.c)); break; } DestroyMenu(hMenu); @@ -536,25 +450,14 @@ static INT_PTR CALLBACK DlgProcText(HWND hdlg, UINT msg, WPARAM wParam, LPARAM l case PSN_APPLY: // save the option wchar_t textstr[MAX_TEXT_SIZE]; - // free memory for old settings - FreeTextVar(); - // save new settings to memory - GetDlgItemText(hdlg, IDC_CTEXT, textstr, _countof(textstr)); - wSetData(&opt.cText, textstr); - GetDlgItemText(hdlg, IDC_BTEXT, textstr, _countof(textstr)); - wSetData(&opt.bText, textstr); - GetDlgItemText(hdlg, IDC_BTITLE, textstr, _countof(textstr)); - wSetData(&opt.bTitle, textstr); - GetDlgItemText(hdlg, IDC_ETEXT, textstr, _countof(textstr)); - wSetData(&opt.eText, textstr); - GetDlgItemText(hdlg, IDC_NTEXT, textstr, _countof(textstr)); - wSetData(&opt.nText, textstr); - GetDlgItemText(hdlg, IDC_HTEXT, textstr, _countof(textstr)); - wSetData(&opt.hText, textstr); - GetDlgItemText(hdlg, IDC_XTEXT, textstr, _countof(textstr)); - wSetData(&opt.xText, textstr); - GetDlgItemText(hdlg, IDC_BTITLE2, textstr, _countof(textstr)); - wSetData(&opt.sText, textstr); + for (auto &it : controls) { + GetDlgItemText(hdlg, it.id, textstr, _countof(textstr)); + if (!mir_wstrcmpi(textstr, GetDefaultText(it.c))) + g_plugin.delSetting(it.setting); + else + g_plugin.setWString(it.setting, textstr); + } + SaveOptions(); UpdateAllInfo(0, 0); break; |