123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787 |
- #include "main.h"
- #include "config.h"
- #include "api__gen_ml.h"
- #include "resource.h"
- #include "./navigation.h"
- #include "./ml_ipc_0313.h"
- #include <shlwapi.h>
- #include <strsafe.h>
- extern HNAVCTRL hNavigation;
- #define PASSWORD_MAXLEN 256
- void encode_mimestr(char *in, char *out)
- {
- char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- int shift = 0;
- int accum = 0;
- while (in && *in)
- {
- if (*in)
- {
- accum <<= 8;
- shift += 8;
- accum |= *in++;
- }
- while (shift >= 6)
- {
- shift -= 6;
- *out++ = alphabet[(accum >> shift) & 0x3F];
- }
- }
-
- if (shift == 4)
- {
- *out++ = alphabet[(accum & 0xF) << 2];
- *out++ = '=';
- }
- else if (shift == 2)
- {
- *out++ = alphabet[(accum & 0x3) << 4];
- *out++ = '=';
- *out++ = '=';
- }
- *out++ = 0;
- }
- int ResizeComboBoxDropDown(HWND hwndDlg, UINT id, const wchar_t * str, int width){
- SIZE size = {0};
- HWND control = GetDlgItem(hwndDlg, id);
- HDC hdc = GetDC(control);
- // get and select parent dialog's font so that it'll calculate things correctly
- HFONT font = (HFONT)SendMessage(hwndDlg,WM_GETFONT,0,0), oldfont = (HFONT)SelectObject(hdc,font);
- GetTextExtentPoint32W(hdc, str, lstrlenW(str)+1, &size);
- int ret = width;
- if(size.cx > width)
- {
- SendDlgItemMessage(hwndDlg, id, CB_SETDROPPEDWIDTH, size.cx, 0);
- ret = size.cx;
- }
- SelectObject(hdc, oldfont);
- ReleaseDC(control, hdc);
- return ret;
- }
- static void CenterPopup(HWND hwnd, HWND hCenter)
- {
- if (NULL == hwnd || NULL == hCenter)
- return;
- RECT centerRect, windowRect;
- if (!GetWindowRect(hwnd, &windowRect) || !GetWindowRect(hCenter, ¢erRect))
- return;
- windowRect.left = centerRect.left + ((centerRect.right - centerRect.left) - (windowRect.right - windowRect.left))/2;
- windowRect.top = centerRect.top + ((centerRect.bottom - centerRect.top) - (windowRect.bottom - windowRect.top))/2;
- SetWindowPos(hwnd, NULL, windowRect.left, windowRect.top, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
- }
- static INT MessageBoxWA(HWND hwnd, LPCWSTR pszText, LPCWSTR pszCaption, UINT uType)
- {
- WCHAR szText[128] = {0}, szCaption[2048] = {0};
- if (IS_INTRESOURCE(pszText))
- {
- if (NULL != pszText)
- {
- WASABI_API_LNGSTRINGW_BUF((INT)(INT_PTR)pszText, szText, ARRAYSIZE(szText));
- pszText = szText;
- }
- }
- if (IS_INTRESOURCE(pszCaption))
- {
- if (NULL != pszCaption)
- {
- WASABI_API_LNGSTRINGW_BUF((INT)(INT_PTR)pszCaption, szCaption, ARRAYSIZE(szCaption));
- pszCaption = szCaption;
- }
- }
- return MessageBoxW(hwnd, pszText, pszCaption, uType);
- }
- static INT_PTR CALLBACK Prefs1Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_INITDIALOG:
- {
- CheckDlgButton(hwndDlg, IDC_PLPLAYLIST, !!g_config->ReadInt(L"plplaymode", 1));
- CheckDlgButton(hwndDlg, IDC_VIEWPLAYMODE, !!g_config->ReadInt(L"viewplaymode", 1));
- wchar_t* str = WASABI_API_LNGSTRINGW(IDS_PLAY_SELECTED);
- SendDlgItemMessageW(hwndDlg, IDC_COMBO1, CB_ADDSTRING, 0, (LPARAM)str);
- int width = ResizeComboBoxDropDown(hwndDlg, IDC_COMBO1, str, 0);
- SendDlgItemMessageW(hwndDlg, IDC_COMBO1, CB_ADDSTRING, 0, (LPARAM)(str = WASABI_API_LNGSTRINGW(IDS_ENQUEUE_SELECTED)));
- ResizeComboBoxDropDown(hwndDlg, IDC_COMBO1, str, width);
- SendDlgItemMessage(hwndDlg, IDC_COMBO1, CB_SETCURSEL, g_config->ReadInt(L"enqueuedef", 0) ? 1 : 0, 0);
- CheckDlgButton(hwndDlg, IDC_CHECK1, !!g_config->ReadInt(L"attachlbolt", 0));
- CheckDlgButton(hwndDlg, IDC_PL_SEND_TO, !!g_config->ReadInt(L"pl_send_to", 1));
- CheckDlgButton(hwndDlg, IDC_PMP_SEND_TO, !!g_config->ReadInt(L"pmp_send_to", 1));
- if (!GetModuleHandleW(L"ml_pmp.dll")) EnableWindow(GetDlgItem(hwndDlg, IDC_PMP_SEND_TO), FALSE);
- CheckDlgButton(hwndDlg, IDC_WRITE_RATINGS, !!g_config->ReadInt(L"writeratings", 0));
- CheckDlgButton(hwndDlg, IDC_GROUP_BUTTONS, !!g_config->ReadInt(L"groupbtn", 1));
- int colresmode = g_config->ReadInt(L"column_resize_mode", 0);
- width = 0;
- SendDlgItemMessageW(hwndDlg, IDC_COMBO2, CB_ADDSTRING, 0, (LPARAM)(str = WASABI_API_LNGSTRINGW(IDS_COL_NORMAL)));
- width = ResizeComboBoxDropDown(hwndDlg, IDC_COMBO2, str, width);
- SendDlgItemMessageW(hwndDlg, IDC_COMBO2, CB_ADDSTRING, 0, (LPARAM)(str = WASABI_API_LNGSTRINGW(IDS_COL_SELONLY)));
- ResizeComboBoxDropDown(hwndDlg, IDC_COMBO2, str, width);
- SendDlgItemMessageW(hwndDlg, IDC_COMBO2, CB_ADDSTRING, 0, (LPARAM)(str = WASABI_API_LNGSTRINGW(IDS_COL_PROP)));
- ResizeComboBoxDropDown(hwndDlg, IDC_COMBO2, str, 0);
- SendDlgItemMessageW(hwndDlg, IDC_COMBO2, CB_SETCURSEL, colresmode, 0);
- }
- break;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDC_COMBO1:
- if (HIWORD(wParam) == CBN_SELCHANGE)
- {
- int a = (INT)SendDlgItemMessage(hwndDlg, IDC_COMBO1, CB_GETCURSEL, 0, 0),
- mode = g_config->ReadInt(L"enqueuedef", 0);
- if ((a == 1) != mode)
- {
- mode = (a == 1);
- g_config->WriteInt(L"enqueuedef", mode);
- HWND hView = (HWND)SENDMLIPC(g_hwnd, ML_IPC_GETCURRENTVIEW, 0);
- if (IsWindow(hView)) PostMessageW(hView, WM_DISPLAYCHANGE, 0, 0);
- }
- // v5.66+ - send a general notification so plug-ins can (if needed update on
- // the play / enqueue mode change (mainly added for ml_playlists)
- pluginMessage p = {ML_MSG_VIEW_PLAY_ENQUEUE_CHANGE, (INT_PTR)!!mode,
- (INT_PTR)!!g_config->ReadInt(L"groupbtn", 1), 0};
- SENDMLIPC(g_hwnd, ML_IPC_SEND_PLUGIN_MESSAGE, (WPARAM)&p);
- }
- break;
- case IDC_PL_SEND_TO:
- g_config->WriteInt(L"pl_send_to", !!IsDlgButtonChecked(hwndDlg, IDC_PL_SEND_TO));
- break;
- case IDC_PMP_SEND_TO:
- g_config->WriteInt(L"pmp_send_to", !!IsDlgButtonChecked(hwndDlg, IDC_PMP_SEND_TO));
- break;
- case IDC_WRITE_RATINGS:
- g_config->WriteInt(L"writeratings", !!IsDlgButtonChecked(hwndDlg, IDC_WRITE_RATINGS));
- break;
- case IDC_PLPLAYLIST:
- g_config->WriteInt(L"plplaymode", !!IsDlgButtonChecked(hwndDlg, IDC_PLPLAYLIST));
- break;
- case IDC_VIEWPLAYMODE:
- g_config->WriteInt(L"viewplaymode", !!IsDlgButtonChecked(hwndDlg, IDC_VIEWPLAYMODE));
- break;
- case IDC_COMBO2:
- if (HIWORD(wParam) == CBN_SELCHANGE)
- {
- int colresmode = (INT)SendDlgItemMessage(hwndDlg, IDC_COMBO2, CB_GETCURSEL, 0, 0);
- g_config->WriteInt(L"column_resize_mode", colresmode);
- }
- break;
- case IDC_CHECK1:
- g_config->WriteInt(L"attachlbolt", !!IsDlgButtonChecked(hwndDlg, IDC_CHECK1));
- break;
- case IDC_GROUP_BUTTONS:
- {
- g_config->WriteInt(L"groupbtn", !!IsDlgButtonChecked(hwndDlg, IDC_GROUP_BUTTONS));
- // refresh the current view as otherwise is a pain to dynamically update as needed
- PostMessage(g_hwnd, WM_USER + 30, 0, 0);
- break;
- }
- }
- break;
- }
- return 0;
- }
- static INT_PTR CALLBACK GetTVPassProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_INITDIALOG:
- {
- PostMessage(hwndDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hwndDlg, IDC_GPASS), TRUE);
- }
- break;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDOK:
- {
- char pass1[64] = {0};
- char password[4096] = {0};
- GetDlgItemTextA(hwndDlg, IDC_GPASS, pass1, sizeof(pass1) - 1);
- encode_mimestr(pass1, password);
- if (strcmp(password, g_config->ReadString("stctka", "none")) != 0)
- {
- wchar_t titleStr[32] = {0};
- MessageBoxW(NULL,
- WASABI_API_LNGSTRINGW(IDS_INVALID_PASSWORD),
- WASABI_API_LNGSTRINGW_BUF(IDS_INTERNET_ACCESS,titleStr,32),
- MB_OK);
- EndDialog(hwndDlg, 0);
- break;
- }
- else
- {
- EndDialog(hwndDlg, 1);
- break;
- }
- }
- case IDCANCEL:
- {
- EndDialog(hwndDlg, 0);
- break;
- }
- }
- break;
- }
- return 0;
- }
- static INT_PTR InternetPassword_OnInitDialog(HWND hwnd, HWND hFocus, LPARAM lParam)
- {
- HWND hControl = GetDlgItem(hwnd, IDC_EDIT_PASSWORD);
- if (NULL != hControl)
- PostMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)hControl, TRUE);
- hControl = GetDlgItem(hwnd, IDOK);
- if (NULL != hControl)
- EnableWindow(hControl, FALSE);
- HWND hCenter = (HWND)lParam;
- if (NULL != hCenter && IsWindow(hCenter))
- CenterPopup(hwnd, hCenter);
- SendMessage(hwnd, DM_REPOSITION, 0, 0L);
- return FALSE;
- }
- static BOOL InternetPassword_GetPassword(HWND hwnd, LPWSTR pszBuffer, INT cchBufferMax)
- {
-
- HWND hEdit1 = GetDlgItem(hwnd, IDC_EDIT_PASSWORD);
- HWND hEdit2 = GetDlgItem(hwnd, IDC_EDIT_PASSWORD_VERIFY);
- if (NULL != hEdit1 && NULL != hEdit2)
- {
- WCHAR szPwd1[PASSWORD_MAXLEN] = {0}, szPwd2[PASSWORD_MAXLEN] = {0};
-
- INT cchPwd1 = GetWindowTextW(hEdit1, szPwd1, ARRAYSIZE(szPwd1));
- INT cchPwd2 = GetWindowTextW(hEdit2, szPwd2, ARRAYSIZE(szPwd2));
- if (0 != cchPwd1 &&
- cchPwd1 == cchPwd2 &&
- CSTR_EQUAL == CompareStringW(LOCALE_USER_DEFAULT, 0, szPwd1, cchPwd1, szPwd2, cchPwd2))
- {
- if (NULL != pszBuffer && cchBufferMax > 0)
- {
- if (FAILED(StringCchCopyW(pszBuffer, cchBufferMax, szPwd1)))
- return FALSE;
- }
- return TRUE;
- }
- }
- return FALSE;
- }
- static void InternetPassword_OnCommand(HWND hwnd, INT commandId, INT eventId, HWND hControl)
- {
- switch (commandId)
- {
- case IDC_EDIT_PASSWORD:
- case IDC_EDIT_PASSWORD_VERIFY:
- switch(eventId)
- {
- case EN_UPDATE:
- HWND hButton = GetDlgItem(hwnd, IDOK);
- if (NULL != hButton)
- {
- EnableWindow(hButton, InternetPassword_GetPassword(hwnd, NULL, 0));
- }
- break;
- }
- break;
- case IDOK:
- {
- WCHAR szPassword[PASSWORD_MAXLEN] = {0};
- BOOL passwordOk = InternetPassword_GetPassword(hwnd, szPassword, ARRAYSIZE(szPassword));
- if (FALSE == passwordOk)
- {
- MessageBoxWA(hwnd, MAKEINTRESOURCEW(IDS_PASSWORD_NO_MATCH), MAKEINTRESOURCEW(IDS_INTERNET_ACCESS),
- MB_OK | MB_ICONEXCLAMATION);
- }
- else
- {
- char szPasswordAnsi[PASSWORD_MAXLEN * 2] = {0};
- BOOL fInvalidChar;
- if (0 == WideCharToMultiByte(CP_ACP, 0, szPassword, -1, szPasswordAnsi, ARRAYSIZE(szPasswordAnsi), NULL, &fInvalidChar) ||
- FALSE != fInvalidChar)
- {
- // TODO: put better error description
- LPCWSTR pszMessage = MAKEINTRESOURCEW(IDS_INVALID_PASSWORD);
- MessageBoxWA(hwnd, pszMessage, MAKEINTRESOURCEW(IDS_INTERNET_ACCESS), MB_OK | MB_ICONERROR);
- }
- else
- {
- char szEncoded[PASSWORD_MAXLEN * 2] = {0};
- encode_mimestr(szPasswordAnsi, szEncoded);
- g_config->WriteString("stctka", szEncoded);
- EndDialog(hwnd, IDOK);
- }
- }
- break;
- }
- case IDCANCEL:
- EndDialog(hwnd, IDCANCEL);
- break;
- }
- }
- static INT_PTR CALLBACK InternetPassword_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_INITDIALOG: return InternetPassword_OnInitDialog(hwnd, (HWND)wParam, lParam);
- case WM_COMMAND: InternetPassword_OnCommand(hwnd, LOWORD(wParam), HIWORD(wParam), (HWND)lParam); break;
- }
- return 0;
- }
- static INT_PTR CALLBACK Prefs2Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_INITDIALOG:
- {
- int passprompt = g_config->ReadInt(L"tvpp", 0);
- if (passprompt && strcmp("none", g_config->ReadString("stctka", "none")) == 0)
- {
- wchar_t titleStr[32] = {0};
- MessageBoxW(hwndDlg,
- WASABI_API_LNGSTRINGW(IDS_RATINGS_PASSWORD_MISSING),
- WASABI_API_LNGSTRINGW_BUF(IDS_SERCURITY_ALERT,titleStr,32),
- MB_OK);
- passprompt = 0;
- }
- CheckDlgButton(hwndDlg, IDC_CHECK_PASSPROMPT, passprompt);
- EnableWindow(GetDlgItem(hwndDlg, IDC_ITV_CHANGEPASS), passprompt);
- {
- int rating = g_config->ReadInt(L"tvrating", 7);
- CheckDlgButton(hwndDlg, IDC_CHECK_RATING0, !!(rating&1) || !!(rating&2));
- CheckDlgButton(hwndDlg, IDC_CHECK_RATING1, !!(rating&4));
- CheckDlgButton(hwndDlg, IDC_CHECK_RATING2, !!(rating&8));
- CheckDlgButton(hwndDlg, IDC_CHECK_RATING3, !!(rating&16) || !!(rating&32));
- CheckDlgButton(hwndDlg, IDC_CHECK_RATING4, !!(rating&64));
- }
- if (passprompt && strcmp("none", g_config->ReadString("stctka", "none")) != 0)
- {
- INT_PTR result = WASABI_API_DIALOGBOX(IDD_PREFS_ITV_GETPASS, hwndDlg, GetTVPassProc);
- if (!result)
- {
- HWND next = GetWindow(hwndDlg,GW_CHILD);
- HWND warning = GetDlgItem(hwndDlg,IDC_STATIC_INFO);
- while(IsWindow(next))
- {
- if(next != warning)
- {
- HWND remove = next;
- next = GetWindow(next, GW_HWNDNEXT);
- DestroyWindow(remove);
- }
- else
- {
- next = GetWindow(next, GW_HWNDNEXT);
- }
- }
- break;
- }
- else
- {
- DestroyWindow(GetDlgItem(hwndDlg,IDC_STATIC_INFO));
- }
- }
- else
- {
- DestroyWindow(GetDlgItem(hwndDlg,IDC_STATIC_INFO));
- }
- }
- break;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDC_CHECK_PASSPROMPT:
- {
- int passprompt = 0;
- if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_PASSPROMPT)) passprompt = 1;
- else g_config->WriteString("stctka", 0);
- EnableWindow(GetDlgItem(hwndDlg, IDC_ITV_CHANGEPASS), passprompt);
- break;
- }
- case IDC_ITV_CHANGEPASS:
- {
- WASABI_API_DIALOGBOXPARAMW(IDD_PREFS_ITV_ASSIGNPASS, hwndDlg, InternetPassword_DialogProc, (LPARAM)hwndDlg);
- break;
- }
- }
- break;
- case WM_DESTROY:
- {
- if(!IsWindow(GetDlgItem(hwndDlg,IDC_STATIC_INFO)))
- {
- int rating = 0;
- if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_RATING0)) rating |= (1 | 2);
- if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_RATING1)) rating |= 4;
- if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_RATING2)) rating |= 8;
- if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_RATING3)) rating |= (16 | 32);
- if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_RATING4)) rating |= 64;
- g_config->WriteInt(L"tvrating", rating);
- int passprompt = 0;
- if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_PASSPROMPT)) passprompt = 1;
- g_config->WriteInt(L"tvpp", passprompt);
- if (passprompt)
- {
- if (strcmp("none", g_config->ReadString("stctka", "none")) == 0)
- {
- WASABI_API_DIALOGBOX(IDD_PREFS_ITV_ASSIGNPASS, hwndDlg, InternetPassword_DialogProc);
- }
- }
- #if 0 // no radio
- radio_updateTvView(1);
- #endif
- }
- }
- break;
- }
- return 0;
- }
- C_Config *g_view_metaconf = NULL;
- static UINT msgNotify = 0;
- static HINSTANCE cloud_hinst;
- static int IPC_GET_CLOUD_HINST = -1, last_pos;
- static INT_PTR CALLBACK Prefs3Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- static int edit_inited;
- switch (uMsg)
- {
- case WM_INITDIALOG:
- {
- wchar_t buffer[MAX_PATH] = {0};
- edit_inited = 0;
- LPCWSTR pszPath = (LPCWSTR)SendMessageW(plugin.hwndParent, WM_WA_IPC, 0, IPC_GETPLUGINDIRECTORYW);
- if(PathCombineW(buffer, pszPath, L"ml_disc.dll") && PathFileExistsW(buffer))
- {
- PathCombineW(buffer, WINAMP_INI_DIR, L"Plugins\\ml\\cdrom.vmd");
- g_view_metaconf = new C_Config(buffer);
- CheckDlgButton(hwndDlg, IDC_SHOW_EJECT_ICONS, g_view_metaconf->ReadInt(L"showeject", 1));
- CheckDlgButton(hwndDlg, IDC_GROUP_DRIVES, g_view_metaconf->ReadInt(L"showparent", 0));
- if(!msgNotify) msgNotify = RegisterWindowMessageW(L"ripburn_nav_update");
- }
- else
- {
- DestroyWindow(GetDlgItem(hwndDlg,IDC_CD_DVD_ITEMS));
- DestroyWindow(GetDlgItem(hwndDlg,IDC_SHOW_EJECT_ICONS));
- DestroyWindow(GetDlgItem(hwndDlg,IDC_GROUP_DRIVES));
- RECT r;
- HWND frame = GetDlgItem(hwndDlg,IDC_ML_TREE_OPTS);
- GetWindowRect(frame, &r);
- SetWindowPos(frame, 0, 0, 0, (r.right - r.left), (r.bottom - r.top) - 72,
- SWP_NOZORDER|SWP_NOMOVE|SWP_NOACTIVATE);
- }
- CheckDlgButton(hwndDlg, IDC_SHOW_ICONS, !!g_config->ReadInt(L"Navigation_ShowIcons", 1));
- CheckDlgButton(hwndDlg, IDC_HIGHLIGHT_FULL_TREE_ITEM, !!g_config->ReadInt(L"Navigation_FullRowSel", 1));
- CheckDlgButton(hwndDlg, IDC_RCLICK_TO_SELECT, g_config->ReadInt(L"Navigation_MouseDownSel", 0));
- SetDlgItemInt(hwndDlg, IDC_ITEM_HEIGHT, g_config->ReadInt(L"Navigation_ItemHeight", 18), 0);
- CheckDlgButton(hwndDlg, IDC_PARENT_PODCASTS, g_config->ReadInt(L"podcast_parent", 0));
- /*if (IPC_GET_CLOUD_HINST == -1) IPC_GET_CLOUD_HINST = (INT)SendMessage(plugin.hwndParent, WM_WA_IPC, (WPARAM)&"WinampCloud", IPC_REGISTER_WINAMP_IPCMESSAGE);
- if (!cloud_hinst) cloud_hinst = (HINSTANCE)SendMessage(plugin.hwndParent, WM_WA_IPC, 0, IPC_GET_CLOUD_HINST);
- SendDlgItemMessageW(hwndDlg, IDC_TRANSFERS_COMBO, CB_SETITEMDATA, SendDlgItemMessageW(hwndDlg, IDC_TRANSFERS_COMBO, CB_ADDSTRING, 0, (LPARAM)L"as a top level tree item (default)"), 0);
- if (cloud_hinst && cloud_hinst != (HINSTANCE)1)
- SendDlgItemMessageW(hwndDlg, IDC_TRANSFERS_COMBO, CB_SETITEMDATA, SendDlgItemMessageW(hwndDlg, IDC_TRANSFERS_COMBO, CB_ADDSTRING, 0, (LPARAM)L"under the 'Cloud Library' item"), 1);
- SendDlgItemMessageW(hwndDlg, IDC_TRANSFERS_COMBO, CB_SETITEMDATA, SendDlgItemMessageW(hwndDlg, IDC_TRANSFERS_COMBO, CB_ADDSTRING, 0, (LPARAM)L"under the 'Devices' item"), 2);
- last_pos = g_config->ReadInt(L"txviewpos", 0);
- int i = 0, count = SendDlgItemMessageW(hwndDlg, IDC_TRANSFERS_COMBO, CB_GETCOUNT, 0, 0);
- for (; i < count; i++)
- {
- int item = SendDlgItemMessageW(hwndDlg, IDC_TRANSFERS_COMBO, CB_GETITEMDATA, i, 0);
- if (item == last_pos)
- {
- SendDlgItemMessageW(hwndDlg, IDC_TRANSFERS_COMBO, CB_SETCURSEL, i, 0);
- break;
- }
- }
- if (i == count)
- SendDlgItemMessageW(hwndDlg, IDC_TRANSFERS_COMBO, CB_SETCURSEL, 0, 0);*/
- edit_inited = 1;
- }
- break;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDC_SHOW_ICONS:
- g_config->WriteInt(L"Navigation_ShowIcons", !!IsDlgButtonChecked(hwndDlg, LOWORD(wParam)));
- NavCtrlI_UpdateLook(hNavigation);
- // tell ml_disc to update if present
- if(g_view_metaconf)SendMessage(plugin.hwndParent, msgNotify, 0, 0);
- break;
- case IDC_HIGHLIGHT_FULL_TREE_ITEM:
- g_config->WriteInt(L"Navigation_FullRowSel", !!IsDlgButtonChecked(hwndDlg, LOWORD(wParam)));
- NavCtrlI_UpdateLook(hNavigation);
- break;
- case IDC_RCLICK_TO_SELECT:
- g_config->WriteInt(L"Navigation_MouseDownSel", !!IsDlgButtonChecked(hwndDlg, LOWORD(wParam)));
- NavCtrlI_UpdateLook(hNavigation);
- break;
- case IDC_ITEM_HEIGHT:
- if(HIWORD(wParam) == EN_CHANGE && edit_inited)
- {
- BOOL success = 0;
- UINT val = GetDlgItemInt(hwndDlg, LOWORD(wParam), &success, 0);
- if(success)
- {
- g_config->WriteInt(L"Navigation_ItemHeight", val);
- NavCtrlI_UpdateLook(hNavigation);
- }
- }
- break;
- case IDC_SHOW_EJECT_ICONS:
- g_view_metaconf->WriteInt(L"showeject", !!IsDlgButtonChecked(hwndDlg, LOWORD(wParam)));
- SendMessage(plugin.hwndParent, msgNotify, 0, 0);
- NavCtrlI_UpdateLook(hNavigation);
- break;
- case IDC_GROUP_DRIVES:
- g_view_metaconf->WriteInt(L"showparent", !!IsDlgButtonChecked(hwndDlg, LOWORD(wParam)));
- SendMessage(plugin.hwndParent, msgNotify, 1, 0);
- NavCtrlI_UpdateLook(hNavigation);
- break;
- case IDC_PARENT_PODCASTS:
- {
- int parent = !!IsDlgButtonChecked(hwndDlg, LOWORD(wParam));
- g_config->WriteInt(L"podcast_parent", parent);
- pluginMessage p = {ML_MSG_DOWNLOADS_VIEW_POSITION, (INT_PTR)parent, (INT_PTR)1, 0};
- SENDMLIPC(g_hwnd, ML_IPC_SEND_PLUGIN_MESSAGE, (WPARAM)&p);
- NavCtrlI_UpdateLook(hNavigation);
- break;
- }
- case IDC_TRANSFERS_COMBO:
- if (HIWORD(wParam) == CBN_SELCHANGE)
- {
- int a = (INT)SendDlgItemMessage(hwndDlg, IDC_TRANSFERS_COMBO, CB_GETCURSEL, 0, 0);
- if (a != CB_ERR)
- {
- g_config->WriteInt(L"txviewpos", SendDlgItemMessageW(hwndDlg, IDC_TRANSFERS_COMBO, CB_GETITEMDATA, a, 0));
- wchar_t titleStr[32] = {0};
- if ((a != last_pos) &&
- MessageBoxW(hwndDlg, WASABI_API_LNGSTRINGW(IDS_RESTART_MESSAGE),
- WASABI_API_LNGSTRINGW_BUF(IDS_RESTART, titleStr, 32),
- MB_ICONQUESTION | MB_YESNO) == IDYES)
- {
- WritePrivateProfileStringW(L"winamp", L"show_prefs", L"-1", WINAMP_INI);
- PostMessage(plugin.hwndParent, WM_WA_IPC, 0, IPC_RESTARTWINAMP);
- }
- }
- }
- break;
- }
- break;
- case WM_DESTROY:
- if(g_view_metaconf)
- {
- delete(g_view_metaconf);
- g_view_metaconf = 0;
- }
- break;
- }
- return 0;
- }
- static INT_PTR CALLBACK Prefs4Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_INITDIALOG:
- {
- CheckDlgButton(hwndDlg, IDC_CHECK_USEPLFONT, !!g_config->ReadInt(L"plfont_everywhere", 1));
- CheckDlgButton(hwndDlg, IDC_FF_SCROLLBARS, config_use_ff_scrollbars);
- CheckDlgButton(hwndDlg, IDC_ALTERNATEITEMS, config_use_alternate_colors);
- CheckDlgButton(hwndDlg, IDC_SKINNED_MENUS, IsSkinnedPopupEnabled(FALSE));
- CheckDlgButton(hwndDlg, IDC_GENO, !!GetPrivateProfileIntW(L"winamp", L"geno", 1, WINAMP_INI));
- }
- break;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDC_CHECK_USEPLFONT:
- g_config->WriteInt(L"plfont_everywhere", !!IsDlgButtonChecked(hwndDlg, IDC_CHECK_USEPLFONT));
- PostMessage(plugin.hwndParent, WM_DISPLAYCHANGE, 0, 0);
- break;
- case IDC_FF_SCROLLBARS:
- config_use_ff_scrollbars = !!IsDlgButtonChecked(hwndDlg, IDC_FF_SCROLLBARS);
- g_config->WriteInt(L"ffsb", config_use_ff_scrollbars);
- PostMessage(plugin.hwndParent, WM_DISPLAYCHANGE, 0, 0);
- break;
- case IDC_ALTERNATEITEMS:
- config_use_alternate_colors = !!IsDlgButtonChecked(hwndDlg, IDC_ALTERNATEITEMS);
- g_config->WriteInt(L"alternate_items", config_use_alternate_colors);
- PostMessage(plugin.hwndParent, WM_DISPLAYCHANGE, 0, 0);
- break;
- case IDC_SKINNED_MENUS:
- EnableSkinnedPopup(BST_CHECKED == IsDlgButtonChecked(hwndDlg, IDC_SKINNED_MENUS));
- break;
- case IDC_GENO:
- {
- wchar_t buf[64] = {L"1"};
- StringCchPrintfW(buf, 64, L"%d", !!IsDlgButtonChecked(hwndDlg, IDC_GENO));
- WritePrivateProfileStringW(L"winamp", L"geno", buf, WINAMP_INI);
- break;
- }
- case IDC_RATING_COLUMN:
- SendMessage(g_hwnd,WM_COMMAND,MAKEWPARAM(ID_SHOW_RATINGTWEAK,0),0);
- break;
- }
- break;
- }
- return 0;
- }
- HWND subWnd = 0, prefsWnd = 0;
- static void _dosetsel(HWND hwndDlg)
- {
- HWND tabwnd = GetDlgItem(hwndDlg, IDC_TAB1);
- int sel = TabCtrl_GetCurSel(tabwnd);
- if (sel >= 0 && (sel != g_config->ReadInt(L"lastprefp", 0) || !subWnd))
- {
- g_config->WriteInt(L"lastprefp", sel);
- if (subWnd) DestroyWindow(subWnd);
- subWnd = 0;
- UINT t = 0;
- DLGPROC p;
- switch (sel)
- {
- case 0: t = IDD_PREFS1; p = Prefs1Proc; break;
- case 1: t = IDD_PREFS2; p = Prefs2Proc; break;
- case 2: t = IDD_PREFS3; p = Prefs3Proc; break;
- case 3: t = IDD_PREFS4; p = Prefs4Proc; break;
- }
- if (t) subWnd = WASABI_API_CREATEDIALOGW(t, hwndDlg, p);
- if (subWnd)
- {
- RECT r;
- GetClientRect(tabwnd, &r);
- TabCtrl_AdjustRect(tabwnd, FALSE, &r);
- SetWindowPos(subWnd, HWND_TOP, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_NOACTIVATE);
- ShowWindow(subWnd, SW_SHOWNA);
- }
- if (!SendMessage(plugin.hwndParent,WM_WA_IPC,IPC_ISWINTHEMEPRESENT,IPC_USE_UXTHEME_FUNC))
- {
- SendMessage(plugin.hwndParent,WM_WA_IPC,(WPARAM)tabwnd,IPC_USE_UXTHEME_FUNC);
- SendMessage(plugin.hwndParent,WM_WA_IPC,(WPARAM)subWnd,IPC_USE_UXTHEME_FUNC);
- }
- }
- }
- #define TabCtrl_InsertItemW(hwnd, iItem, pitem) \
- (int)SNDMSG((hwnd), TCM_INSERTITEMW, (WPARAM)(int)(iItem), (LPARAM)(const TC_ITEMW *)(pitem))
- // frame proc
- INT_PTR CALLBACK PrefsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_INITDIALOG:
- {
- TCITEMW item;
- HWND tabwnd = GetDlgItem(hwndDlg, IDC_TAB1);
- item.mask = TCIF_TEXT;
- item.pszText = WASABI_API_LNGSTRINGW(IDS_LIBRARY_OPTIONS);
- TabCtrl_InsertItemW(tabwnd, 0, &item);
- item.pszText = WASABI_API_LNGSTRINGW(IDS_ONLINE_MEDIA);
- TabCtrl_InsertItemW(tabwnd, 1, &item);
- item.pszText = WASABI_API_LNGSTRINGW(IDS_TREE_OPTIONS);
- TabCtrl_InsertItemW(tabwnd, 2, &item);
- item.pszText = WASABI_API_LNGSTRINGW(IDS_APPEARANCE);
- TabCtrl_InsertItemW(tabwnd, 3, &item);
- TabCtrl_SetCurSel(tabwnd, g_config->ReadInt(L"lastprefp", 0));
- _dosetsel(hwndDlg);
- prefsWnd = hwndDlg;
- }
- return 0;
- case WM_NOTIFY:
- {
- LPNMHDR p = (LPNMHDR) lParam;
- if (p->idFrom == IDC_TAB1 && p->code == TCN_SELCHANGE) _dosetsel(hwndDlg);
- }
- return 0;
- case WM_DESTROY:
- subWnd = NULL;
- prefsWnd = NULL;
- return 0;
- }
- return 0;
- }
- void refreshPrefs(INT_PTR screen)
- {
- if (subWnd && g_config->ReadInt(L"lastprefp", -1) == screen)
- {
- if (screen == 4) SendMessage(subWnd, WM_INITDIALOG, 0, 0);
- }
- }
- extern prefsDlgRecW myPrefsItem;
- void openPrefs(INT_PTR screen)
- {
- if (!subWnd)
- {
- if (screen != -1) g_config->WriteInt(L"lastprefp", (INT)screen);
- }
- else
- {
- if (screen != -1)
- {
- HWND tabwnd = GetDlgItem(prefsWnd, IDC_TAB1);
- TabCtrl_SetCurSel(tabwnd, screen);
- _dosetsel(prefsWnd);
- }
- }
- SendMessage(plugin.hwndParent, WM_WA_IPC, (WPARAM)&myPrefsItem, IPC_OPENPREFSTOPAGE);
- }
|