winamp/Src/Winamp/options_plugins.cpp
2024-09-24 14:54:57 +02:00

203 lines
No EOL
6 KiB
C++

/** (c) Nullsoft, Inc. C O N F I D E N T I A L
** Filename:
** Project:
** Description:
** Author:
** Created:
**/
#include "main.h"
#include "Options.h"
#include "resource.h"
static int CALLBACK WINAPI BrowseCallbackProc_VIS( HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if (uMsg == BFFM_INITIALIZED)
{
SendMessageW(hwnd, BFFM_SETSELECTIONW, 1, (LPARAM)VISDIR);
// this is not nice but it fixes the selection not working correctly on all OSes
EnumChildWindows(hwnd, browseEnumProc, 0);
}
if (uMsg == WM_CREATE) SetWindowTextW(hwnd,getStringW(IDS_SELVISDIR,NULL,0));
return 0;
}
static int CALLBACK WINAPI BrowseCallbackProc_DSP( HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if (uMsg == BFFM_INITIALIZED)
{
SendMessageW(hwnd, BFFM_SETSELECTIONW, 1, (LPARAM)DSPDIR);
// this is not nice but it fixes the selection not working correctly on all OSes
EnumChildWindows(hwnd, browseEnumProc, 0);
}
if (uMsg == WM_CREATE) SetWindowTextW(hwnd,getStringW(IDS_SELDSPDIR,NULL,0));
return 0;
}
void SetButtonText(HWND hwndDlg, int id, wchar_t* path)
{
HWND control = GetDlgItem(hwndDlg, id);
HDC hdc = GetDC(control);
RECT r = {0};
wchar_t temp[MAX_PATH] = {0};
lstrcpynW(temp, path, MAX_PATH);
SelectObject(hdc, (HFONT)SendMessageW(control, WM_GETFONT, 0, 0));
GetClientRect(control, &r);
r.left += 5;
r.right -= 5;
DrawTextW(hdc, temp, -1, &r, DT_PATH_ELLIPSIS | DT_WORD_ELLIPSIS | DT_MODIFYSTRING);
SetWindowTextW(control, temp);
ReleaseDC(control, hdc);
}
INT_PTR CALLBACK PlugProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
hi helpinfo[]={
{IDC_VISDIR, IDS_P_PLUG_VISDIR},
{IDC_DSPDIR, IDS_P_PLUG_DSPDIR},
{IDC_VISPRIO, IDS_P_PLUG_PRIO},
{IDC_AUTOEXEC, IDS_P_PLUG_AUTO},
{IDC_DISVIS, IDS_P_PLUG_DIS},
{IDC_SAFEMODE, IDS_P_PLUG_SAFEMODE},
{IDC_SAFEMODEALWAYS, IDS_P_PLUG_SAFEMODEALWAYS},
{IDC_CHECK1, IDS_P_PLUG_DISSEHVIS},
{IDC_CHECK5, IDS_P_PLUG_DISSEHGEN},
{IDC_CHECK6, IDS_P_PLUG_DISSEHDSP},
};
DO_HELP();
if (uMsg == WM_INITDIALOG)
{
CheckDlgButton(hwndDlg, IDC_AUTOEXEC, config_visplugin_autoexec ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwndDlg, IDC_DISVIS, config_disvis ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwndDlg, IDC_CHECK1, (config_no_visseh & 1) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwndDlg, IDC_CHECK6, (config_no_visseh & 2) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwndDlg, IDC_CHECK5, (config_no_visseh & 4) ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwndDlg, IDC_SAFEMODEALWAYS, _r_i("safemode", 0) ? BST_CHECKED : BST_UNCHECKED);
SendDlgItemMessage(hwndDlg, IDC_VISPRIO, TBM_SETRANGE, TRUE, MAKELONG(0, 4));
SendDlgItemMessage(hwndDlg, IDC_VISPRIO, TBM_SETPOS, TRUE, config_visplugin_priority);
SetDlgItemTextW(hwndDlg, IDC_VISDIR, VISDIR);
SetButtonText(hwndDlg, IDC_VISDIR, VISDIR);
SetDlgItemTextW(hwndDlg, IDC_DSPDIR, DSPDIR);
SetButtonText(hwndDlg, IDC_DSPDIR, DSPDIR);
if (g_safeMode)
{
SetDlgItemTextW(hwndDlg, IDC_SAFEMODE, getStringW(IDS_RESTART_NORMAL, NULL, 0));
}
}
if (uMsg == WM_HSCROLL)
{
HWND swnd = (HWND)lParam;
if (swnd == GetDlgItem(hwndDlg, IDC_VISPRIO))
{
config_visplugin_priority = (unsigned char) SendDlgItemMessage(hwndDlg, IDC_VISPRIO, TBM_GETPOS, 0, 0);
vis_setprio();
}
}
if (uMsg == WM_COMMAND)
{
switch (LOWORD(wParam))
{
case IDC_CHECK1:
case IDC_CHECK5:
case IDC_CHECK6:
config_no_visseh =
(IsDlgButtonChecked(hwndDlg, IDC_CHECK1) ? 1 : 0) |
(IsDlgButtonChecked(hwndDlg, IDC_CHECK6) ? 2 : 0) |
(IsDlgButtonChecked(hwndDlg, IDC_CHECK5) ? 4 : 0);
break;
case IDC_AUTOEXEC:
config_visplugin_autoexec = IsDlgButtonChecked(hwndDlg, IDC_AUTOEXEC) ? 1 : 0;
break;
case IDC_DISVIS:
config_disvis = IsDlgButtonChecked(hwndDlg, IDC_DISVIS) ? 1 : 0;
break;
case IDC_VISDIR:
{
BROWSEINFOW bi = {0};
wchar_t name[MAX_PATH] = {0};
bi.hwndOwner = hMainWindow;
bi.pszDisplayName = name;
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
bi.lpfn = BrowseCallbackProc_VIS;
ITEMIDLIST *idlist = SHBrowseForFolderW(&bi);
if (idlist)
{
wchar_t path[MAX_PATH] = {0};
SHGetPathFromIDListW(idlist, path);
Shell_Free(idlist);
lstrcpynW(VISDIR, path, MAX_PATH);
SetDlgItemTextW(hwndDlg, IDC_VISDIR,VISDIR);
_w_sW("VISDir", VISDIR);
SetButtonText(hwndDlg, IDC_VISDIR, VISDIR);
}
}
return FALSE;
case IDC_DSPDIR:
{
BROWSEINFOW bi = {0};
wchar_t name[MAX_PATH] = {0};
bi.hwndOwner = hMainWindow;
bi.pszDisplayName = name;
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
bi.lpfn = BrowseCallbackProc_DSP;
ITEMIDLIST *idlist = SHBrowseForFolderW(&bi);
if (idlist)
{
wchar_t path[MAX_PATH] = {0};
SHGetPathFromIDListW(idlist, path);
Shell_Free(idlist);
lstrcpynW(DSPDIR, path, MAX_PATH);
SetDlgItemTextW(hwndDlg, IDC_DSPDIR, DSPDIR);
_w_sW("DSPDir", DSPDIR);
SetButtonText(hwndDlg, IDC_DSPDIR, DSPDIR);
}
}
return FALSE;
case IDC_SAFEMODE:
if (LPMessageBox(hwndDlg, IDS_RESTART_SAFE, IDS_RESTART, MB_YESNO | MB_ICONQUESTION | MB_TOPMOST) == IDYES)
{
_w_i("show_prefs", 30);
PostMessageW(hMainWindow, WM_USER, 0, (!g_safeMode ? IPC_RESTARTSAFEWINAMP : IPC_RESTARTWINAMP));
}
return FALSE;
case IDC_SAFEMODEALWAYS:
{
int mode = (IsDlgButtonChecked(hwndDlg, IDC_SAFEMODEALWAYS) ? 1 : 0);
_w_i("safemode", mode);
if (mode != !!g_safeMode)
{
if (LPMessageBox(hwndDlg, IDS_RESTART_SAFE, IDS_RESTART, MB_YESNO | MB_ICONQUESTION | MB_TOPMOST) == IDYES)
{
_w_i("show_prefs", 30);
PostMessageW(hMainWindow, WM_USER, 0, (!g_safeMode ? IPC_RESTARTSAFEWINAMP : IPC_RESTARTWINAMP));
}
}
return FALSE;
}
}
}
const int controls[] =
{
IDC_VISPRIO,
};
if (FALSE != DirectMouseWheel_ProcessDialogMessage(hwndDlg, uMsg, wParam, lParam, controls, ARRAYSIZE(controls)))
return TRUE;
return FALSE;
} //audio