/* * cmd - CMD.EXE settings */ #include "tweakui.h" #include "winconp.h" #pragma message("Add help for CMD!") #pragma BEGIN_CONST_DATA KL const c_klFileComp = { phkCU, c_tszCmdPath, c_tszFileComp }; KL const c_klDirComp = { phkCU, c_tszCmdPath, c_tszDirComp }; KL const c_klWordDelim = { phkCU, TEXT("Console"), TEXT("WordDelimiters") }; #define WORD_DELIM_MAX 32 const static DWORD CODESEG rgdwHelp[] = { IDC_COMPLETIONGROUP, IDH_GROUP, IDC_FILECOMPTXT, IDH_CMDFILECOMP, IDC_FILECOMP, IDH_CMDFILECOMP, IDC_DIRCOMPTXT, IDH_CMDDIRCOMP, IDC_DIRCOMP, IDH_CMDDIRCOMP, 0, 0, }; #pragma END_CONST_DATA /***************************************************************************** * * Cmd_OnCommand * * Ooh, we got a command. * *****************************************************************************/ BOOL PASCAL Cmd_OnCommand(HWND hdlg, int id, UINT codeNotify) { switch (codeNotify) { case CBN_SELCHANGE: case EN_CHANGE: PropSheet_Changed(GetParent(hdlg), hdlg); break; } return 0; } /***************************************************************************** * * Cmd_InitComboBox * * Fill the combo box with stuff * *****************************************************************************/ void PASCAL Cmd_InitComboBox(HWND hwnd, int idc, PKL pkl) { DWORD dwVal = GetDwordPkl(pkl, 0); DWORD dw; hwnd = GetDlgItem(hwnd, idc); for (dw = 0; dw < 32; dw++) { TCHAR tszName[127]; if (LoadString(hinstCur, IDS_COMPLETION + dw, tszName, cA(tszName))) { int iItem = ComboBox_AddString(hwnd, tszName); ComboBox_SetItemData(hwnd, iItem, dw); if (dw == dwVal) { ComboBox_SetCurSel(hwnd, iItem); } } } } /***************************************************************************** * * Cmd_OnInitDialog * * Initialize the listview with the current restrictions. * *****************************************************************************/ BOOL PASCAL Cmd_OnInitDialog(HWND hdlg) { Cmd_InitComboBox(hdlg, IDC_FILECOMP, &c_klFileComp); Cmd_InitComboBox(hdlg, IDC_DIRCOMP, &c_klDirComp); TCHAR szDelim[WORD_DELIM_MAX]; HWND hwndDelim = GetDlgItem(hdlg, IDC_WORDDELIM); Edit_LimitText(hwndDelim, WORD_DELIM_MAX); GetStrPkl(szDelim, cA(szDelim), &c_klWordDelim); SetWindowText(hwndDelim, szDelim); return 1; } /***************************************************************************** * * Cmd_ForceConsoleRefresh * * Launch a dummy console to tickle the console subsystem into reloading * its settings. * *****************************************************************************/ void Cmd_ForceConsoleRefresh() { WinExec("cmd.exe /c ver", SW_HIDE); } /***************************************************************************** * * Cmd_ApplyComboBox * *****************************************************************************/ void PASCAL Cmd_ApplyComboBox(HWND hwnd, int idc, PKL pkl) { DWORD dw, dwVal = GetDwordPkl(pkl, 0); int iItem; hwnd = GetDlgItem(hwnd, idc); iItem = ComboBox_GetCurSel(hwnd); if (iItem >= 0) { dw = (DWORD)ComboBox_GetItemData(hwnd, iItem); if (dw != dwVal) { SetDwordPkl2(pkl, dw); } } } /***************************************************************************** * * Cmd_Apply * *****************************************************************************/ void PASCAL Cmd_Apply(HWND hdlg) { Cmd_ApplyComboBox(hdlg, IDC_FILECOMP, &c_klFileComp); Cmd_ApplyComboBox(hdlg, IDC_DIRCOMP, &c_klDirComp); TCHAR szDelim[WORD_DELIM_MAX]; TCHAR szDelimPrev[WORD_DELIM_MAX]; GetStrPkl(szDelimPrev, cA(szDelim), &c_klWordDelim); GetDlgItemText(hdlg, IDC_WORDDELIM, szDelim, cA(szDelim)); if (lstrcmp(szDelim, szDelimPrev) != 0) { if (szDelim[0]) { SetStrPkl(&c_klWordDelim, szDelim); } else { DelPkl(&c_klWordDelim); } Cmd_ForceConsoleRefresh(); } } /***************************************************************************** * * Cmd_OnNotify * * Ooh, we got a notification. * *****************************************************************************/ BOOL PASCAL Cmd_OnNotify(HWND hdlg, NMHDR FAR *pnm) { switch (pnm->code) { case PSN_APPLY: Cmd_Apply(hdlg); break; } return 0; } /***************************************************************************** * * Our window procedure. * *****************************************************************************/ INT_PTR EXPORT Cmd_DlgProc(HWND hdlg, UINT wm, WPARAM wParam, LPARAM lParam) { switch (wm) { case WM_INITDIALOG: return Cmd_OnInitDialog(hdlg); case WM_COMMAND: return Cmd_OnCommand(hdlg, (int)GET_WM_COMMAND_ID(wParam, lParam), (UINT)GET_WM_COMMAND_CMD(wParam, lParam)); case WM_NOTIFY: return Cmd_OnNotify(hdlg, (NMHDR FAR *)lParam); case WM_HELP: Common_OnHelp(lParam, &rgdwHelp[0]); break; case WM_CONTEXTMENU: Common_OnContextMenu(wParam, &rgdwHelp[0]); break; default: return 0; /* Unhandled */ } return 1; /* Handled */ }