mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-28 22:56:07 +00:00
203 lines
6 KiB
C++
203 lines
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
|