// ToolsDlg.cpp : implementation file // #include "stdafx.h" #include "p4win.h" #include "ToolsDlg.h" #include "MainFrm.h" #include "p4registry.h" #include "hlp\p4win.hh" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CToolsDlg dialog CToolsDlg::CToolsDlg(CWnd* pParent /*=NULL*/) : CDialog(CToolsDlg::IDD, pParent) { //{{AFX_DATA_INIT(CToolsDlg) //}}AFX_DATA_INIT Clear(); m_CurSel = -1; m_NbrSubMenus = 0; m_1stSubmenu = MAX_TOOLS+1; m_IsOK2Cr8SubMenu = FALSE; m_Finished = m_bEdit = FALSE; } void CToolsDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CToolsDlg) DDX_Control(pDX, IDC_MENULIST, m_MenuItemList); DDX_Text(pDX, IDC_COMMAND, m_Command); DDX_Check(pDX, IDC_CONSOLE, m_IsConsole); DDX_Text(pDX, IDC_INITDIR, m_InitDir); DDX_Text(pDX, IDC_ARGS, m_Args); DDX_Check(pDX, IDC_PROMPT, m_IsPrompt); DDX_Text(pDX, IDC_PROMPT_EDIT, m_PromptText); DDX_Check(pDX, IDC_OUTPUT2STATUSPANE, m_IsOutput2Status); DDX_Check(pDX, IDC_CLOSEWINDOW, m_IsCloseOnExit); DDX_Check(pDX, IDC_SHOWBROWSE, m_IsShowBrowse); DDX_Check(pDX, IDC_REFRESH, m_IsRefresh); DDX_Check(pDX, IDC_ADD2CONTEXT, m_OnContext); DDX_Text(pDX, IDC_EDIT_NAME, m_Name); DDX_Radio(pDX, IDC_RADIO_TOOL, m_MenuType); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CToolsDlg, CDialog) //{{AFX_MSG_MAP(CToolsDlg) ON_BN_CLICKED(IDC_ADD, OnAdd) ON_BN_CLICKED(IDC_BROWSE, OnBrowse) ON_BN_CLICKED(IDC_BROWSE_DIR, OnBrowseDir) ON_BN_CLICKED(IDC_CONSOLE, OnIsConsole) ON_BN_CLICKED(IDC_MOVE_DOWN, OnMoveDown) ON_BN_CLICKED(IDC_MOVE_UP, OnMoveUp) ON_BN_CLICKED(IDC_REMOVE, OnRemove) ON_BN_CLICKED(IDHELP, OnHelp) ON_BN_CLICKED(IDC_CHANGE, OnEdit) ON_BN_CLICKED(IDC_RADIO_TOOL, OnMenuTypeClick) ON_BN_CLICKED(IDC_RADIO_SUBMENU, OnMenuTypeClick) ON_LBN_SELCHANGE(IDC_MENULIST, OnSelchangeMenulist) ON_LBN_DBLCLK(IDC_MENULIST, OnDblclkMenuList) ON_EN_KILLFOCUS(IDC_ARGS, OnKillfocusArgs) ON_EN_KILLFOCUS(IDC_INITDIR, OnKillfocusInitDir) ON_BN_CLICKED(IDC_PROMPT, OnIsPrompt) ON_WM_HELPINFO() //}}AFX_MSG_MAP ON_MESSAGE(WM_STATUSADD, LoadVariables ) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CToolsDlg message handlers BOOL CToolsDlg::OnInitDialog() { CDialog::OnInitDialog(); CRect rect; m_CurSel = 0; m_OldbEdit = !m_bEdit; if (m_bEdit) { SetWindowText(m_Caption); GetDlgItem(IDC_STATIC_1)->SetWindowText(LoadStringResource(IDS_MENU_ITEM)); if (!m_IsOK2Cr8SubMenu) GetDlgItem(IDC_SUBMENU)->EnableWindow(FALSE); GetVariables(); UpdateData(FALSE); GetWindowRect(&rect); OffsetRect(&rect, GetSystemMetrics(SM_CYMENUSIZE), 0); MoveWindow(&rect, FALSE); } else { for (int i = -1; ++i < MAX_TOOLS; ) { m_ToolMenuName[i] = GET_P4REGPTR()->GetToolMenuName(i); m_ToolCommand[i] = GET_P4REGPTR()->GetToolCommand(i); m_ToolArgs[i] = GET_P4REGPTR()->GetToolArgs(i); m_ToolInitDir[i] = GET_P4REGPTR()->GetToolInitDir(i); m_ToolPromptText[i] = GET_P4REGPTR()->GetToolPromptText(i); m_ToolIsConsole[i] = GET_P4REGPTR()->GetToolIsConsole(i); m_ToolIsPrompt[i] = GET_P4REGPTR()->GetToolIsPrompt(i); m_ToolIsOutput2Status[i] = GET_P4REGPTR()->GetToolIsOutput2Status(i); m_ToolIsCloseOnExit[i] = GET_P4REGPTR()->GetToolIsCloseOnExit(i); m_ToolIsShowBrowse[i] = GET_P4REGPTR()->GetToolIsShowBrowse(i); m_ToolIsRefresh[i] = GET_P4REGPTR()->GetToolIsRefresh(i); m_ToolOnContext[i] = GET_P4REGPTR()->GetToolOnContext(i); m_NbrSubMenus += m_ToolIsSubMenu[i] = GET_P4REGPTR()->GetToolIsSubMenu(i); if (m_ToolIsSubMenu[i] && (i < m_1stSubmenu)) m_1stSubmenu = i; } LoadMenuItemList(); if (m_ToolMenuName[0].GetLength()) m_MenuItemList.SetCurSel(m_CurSel = 0); else GetDlgItem(IDC_MOVE_DOWN)->EnableWindow(FALSE); GetDlgItem(IDC_ARGS)->GetWindowRect(&rect); int w = rect.Width(); int h = rect.Height(); GetDlgItem(IDC_COMMAND)->GetWindowRect(&rect); ScreenToClient(&rect); GetDlgItem(IDC_COMMAND)->MoveWindow(rect.left, rect.top, w, h); GetDlgItem(IDC_INITDIR)->GetWindowRect(&rect); ScreenToClient(&rect); GetDlgItem(IDC_INITDIR)->MoveWindow(rect.left, rect.top, w, h); } LoadVariables(); GetDlgItem(IDC_MOVE_UP)->EnableWindow(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CToolsDlg::LoadMenuItemList() { while (m_MenuItemList.DeleteString(0) > 0) ; for (int i = -1; m_ToolMenuName[++i].GetLength(); ) { CString txt = m_ToolMenuName[i]; if (m_ToolIsSubMenu[i]) txt += LoadStringResource(IDS_A_SUBMENU); else if (i > m_1stSubmenu) txt = _T(" ") + txt; m_MenuItemList.AddString(txt); if (i >= MAX_TOOLS-1) { GetDlgItem(IDC_ADD)->EnableWindow(FALSE); break; } } } void CToolsDlg::OnSelchangeMenulist() { GetVariables(); m_CurSel = m_MenuItemList.GetCurSel(); GetDlgItem(IDC_MOVE_UP)->EnableWindow(m_CurSel > 0 ? TRUE : FALSE); GetDlgItem(IDC_MOVE_DOWN)->EnableWindow((m_CurSel < (m_MenuItemList.GetCount()-1)) ? TRUE : FALSE); LoadVariables(); } void CToolsDlg::OnAdd() { if (m_bEdit) { ASSERT(0); return; } CToolsDlg dlg; dlg.m_bEdit = TRUE; dlg.m_Caption = LoadStringResource(IDS_ADD_TOOLS_MENU_ITEM); dlg.m_Name = _T(""); dlg.m_MenuType = 0; dlg.m_Command = _T(""); dlg.m_Args = _T(""); dlg.m_InitDir = _T(""); dlg.m_PromptText = _T(""); dlg.m_IsConsole = FALSE; dlg.m_IsPrompt = FALSE; dlg.m_IsOutput2Status= FALSE; dlg.m_IsCloseOnExit= FALSE; dlg.m_IsShowBrowse = FALSE; dlg.m_IsRefresh = FALSE; dlg.m_OnContext = FALSE; if (m_NbrSubMenus < MAX_TOOLS_SUBMENUS) dlg.SetCanCr8SubMenu(TRUE); if ((dlg.DoModal() == IDOK) && (dlg.m_Name.GetLength())) { CString txt = dlg.m_Name; if ((m_CurSel = m_MenuItemList.AddString(txt)) >= 0) { if (dlg.GetIsSubMenu()) txt += LoadStringResource(IDS_A_SUBMENU); else if (m_CurSel > m_1stSubmenu) txt = _T(" ") + txt; m_MenuItemList.DeleteString(m_CurSel); m_MenuItemList.InsertString(m_CurSel, txt); m_ToolMenuName[m_CurSel] = dlg.m_Name; m_NbrSubMenus += m_ToolIsSubMenu[m_CurSel] = dlg.GetIsSubMenu(); if (m_ToolIsSubMenu[m_CurSel] && (m_CurSel < m_1stSubmenu)) m_1stSubmenu = m_CurSel; m_ToolCommand[m_CurSel] = dlg.m_Command; m_ToolArgs[m_CurSel] = dlg.m_Args; m_ToolInitDir[m_CurSel] = dlg.m_InitDir; m_ToolPromptText[m_CurSel] = dlg.m_PromptText; m_ToolIsConsole[m_CurSel] = dlg.m_IsConsole; m_ToolIsPrompt[m_CurSel] = dlg.m_IsPrompt; m_ToolIsOutput2Status[m_CurSel] = dlg.m_IsOutput2Status; m_ToolIsCloseOnExit[m_CurSel] = dlg.m_IsCloseOnExit; m_ToolIsShowBrowse[m_CurSel] = dlg.m_IsShowBrowse; m_ToolIsRefresh[m_CurSel] = dlg.m_IsRefresh; m_ToolOnContext[m_CurSel] = dlg.m_OnContext; LoadVariables(); GotoDlgCtrl(GetDlgItem(IDC_MENULIST)); m_MenuItemList.SetCurSel(m_CurSel); if (m_CurSel >= MAX_TOOLS-1) GetDlgItem(IDC_ADD)->EnableWindow(FALSE); } } GetDlgItem(IDC_MOVE_UP)->EnableWindow(m_CurSel > 0 ? TRUE : FALSE); GetDlgItem(IDC_MOVE_DOWN)->EnableWindow((m_CurSel < (m_MenuItemList.GetCount()-1)) ? TRUE : FALSE); } void CToolsDlg::OnEdit() { int i; if (m_bEdit) { ASSERT(0); return; } if (m_CurSel == -1) { MessageBeep(0); return; } BOOL bIsSubMenu; CToolsDlg dlg; dlg.m_bEdit = TRUE; dlg.m_Caption = LoadStringResource(IDS_EDIT_TOOLS_MENU_ITEM); dlg.m_Name = m_ToolMenuName[m_CurSel]; dlg.m_MenuType = bIsSubMenu = m_ToolIsSubMenu[m_CurSel]; dlg.m_Command = bIsSubMenu ? _T("") : m_ToolCommand[m_CurSel]; dlg.m_Args = bIsSubMenu ? _T("") : m_ToolArgs[m_CurSel]; dlg.m_InitDir = bIsSubMenu ? _T("") : m_ToolInitDir[m_CurSel]; dlg.m_PromptText = bIsSubMenu ? _T("") : m_ToolPromptText[m_CurSel]; dlg.m_IsConsole = bIsSubMenu ? FALSE : m_ToolIsConsole[m_CurSel]; dlg.m_IsPrompt = bIsSubMenu ? FALSE : m_ToolIsPrompt[m_CurSel]; dlg.m_IsOutput2Status= bIsSubMenu ? FALSE : m_ToolIsOutput2Status[m_CurSel]; dlg.m_IsCloseOnExit= bIsSubMenu ? FALSE : m_ToolIsCloseOnExit[m_CurSel]; dlg.m_IsShowBrowse = bIsSubMenu ? FALSE : m_ToolIsShowBrowse[m_CurSel]; dlg.m_IsRefresh = bIsSubMenu ? FALSE : m_ToolIsRefresh[m_CurSel]; dlg.m_OnContext = m_ToolOnContext[m_CurSel]; if ((m_NbrSubMenus < MAX_TOOLS_SUBMENUS) || m_ToolIsSubMenu[m_CurSel]) dlg.SetCanCr8SubMenu(TRUE); if ((dlg.DoModal() == IDOK) && (dlg.m_Name.GetLength())) { m_ToolMenuName[m_CurSel] = dlg.m_Name; CString txt = dlg.m_Name; if (dlg.GetIsSubMenu()) txt += LoadStringResource(IDS_A_SUBMENU); else if (m_CurSel > m_1stSubmenu) txt = _T(" ") + txt; m_MenuItemList.DeleteString(m_CurSel); m_MenuItemList.InsertString(m_CurSel, txt); if (m_ToolIsSubMenu[m_CurSel]) --m_NbrSubMenus; m_NbrSubMenus += m_ToolIsSubMenu[m_CurSel] = dlg.GetIsSubMenu(); if (m_ToolIsSubMenu[m_CurSel]) { if (m_CurSel < m_1stSubmenu) { m_1stSubmenu = m_CurSel; LoadMenuItemList(); } } else if (m_1stSubmenu == m_CurSel) { m_1stSubmenu = MAX_TOOLS+1; for (i = m_CurSel; ++i < MAX_TOOLS; ) { if (m_ToolIsSubMenu[i]) { m_1stSubmenu = i; break; } } LoadMenuItemList(); } m_ToolCommand[m_CurSel] = dlg.m_Command; m_ToolArgs[m_CurSel] = dlg.m_Args; m_ToolInitDir[m_CurSel] = dlg.m_InitDir; m_ToolPromptText[m_CurSel] = dlg.m_PromptText; m_ToolIsConsole[m_CurSel] = dlg.m_IsConsole; m_ToolIsPrompt[m_CurSel] = dlg.m_IsPrompt; m_ToolIsOutput2Status[m_CurSel] = dlg.m_IsOutput2Status; m_ToolIsCloseOnExit[m_CurSel] = dlg.m_IsCloseOnExit; m_ToolIsShowBrowse[m_CurSel] = dlg.m_IsShowBrowse; m_ToolIsRefresh[m_CurSel] = dlg.m_IsRefresh; m_ToolOnContext[m_CurSel] = dlg.m_OnContext; LoadVariables(); GotoDlgCtrl(GetDlgItem(IDC_MENULIST)); m_MenuItemList.SetCurSel(m_CurSel); } } void CToolsDlg::OnMoveDown() { if (m_CurSel >= 0 && (m_CurSel < (m_MenuItemList.GetCount()-1))) { GetVariables(); CString toolMenuName = m_ToolMenuName[m_CurSel+1]; CString toolCommand = m_ToolCommand[m_CurSel+1]; CString toolArgs = m_ToolArgs[m_CurSel+1]; CString toolInitDir = m_ToolInitDir[m_CurSel+1]; CString toolPromptText = m_ToolPromptText[m_CurSel+1]; BOOL toolIsConsole = m_ToolIsConsole[m_CurSel+1]; BOOL toolIsPrompt = m_ToolIsPrompt[m_CurSel+1]; BOOL toolIsOutput2Status = m_ToolIsOutput2Status[m_CurSel+1]; BOOL toolIsCloseOnExit = m_ToolIsCloseOnExit[m_CurSel+1]; BOOL toolIsShowBrowse = m_ToolIsShowBrowse[m_CurSel+1]; BOOL toolIsRefresh = m_ToolIsRefresh[m_CurSel+1]; BOOL toolOnContext = m_ToolOnContext[m_CurSel+1]; BOOL toolIsSubMenu = m_ToolIsSubMenu[m_CurSel+1]; m_ToolMenuName[m_CurSel+1] = m_ToolMenuName[m_CurSel]; m_ToolCommand[m_CurSel+1] = m_ToolCommand[m_CurSel]; m_ToolArgs[m_CurSel+1] = m_ToolArgs[m_CurSel]; m_ToolInitDir[m_CurSel+1] = m_ToolInitDir[m_CurSel]; m_ToolPromptText[m_CurSel+1] = m_ToolPromptText[m_CurSel]; m_ToolIsConsole[m_CurSel+1] = m_ToolIsConsole[m_CurSel]; m_ToolIsPrompt[m_CurSel+1] = m_ToolIsPrompt[m_CurSel]; m_ToolIsOutput2Status[m_CurSel+1] = m_ToolIsOutput2Status[m_CurSel]; m_ToolIsCloseOnExit[m_CurSel+1] = m_ToolIsCloseOnExit[m_CurSel]; m_ToolIsShowBrowse[m_CurSel+1] = m_ToolIsShowBrowse[m_CurSel]; m_ToolIsRefresh[m_CurSel+1] = m_ToolIsRefresh[m_CurSel]; m_ToolOnContext[m_CurSel+1] = m_ToolOnContext[m_CurSel]; m_ToolIsSubMenu[m_CurSel+1] = m_ToolIsSubMenu[m_CurSel]; m_ToolMenuName[m_CurSel] = toolMenuName; m_ToolCommand[m_CurSel] = toolCommand; m_ToolArgs[m_CurSel] = toolArgs; m_ToolInitDir[m_CurSel] = toolInitDir; m_ToolPromptText[m_CurSel] = toolPromptText; m_ToolIsConsole[m_CurSel] = toolIsConsole; m_ToolIsPrompt[m_CurSel] = toolIsPrompt; m_ToolIsOutput2Status[m_CurSel] = toolIsOutput2Status; m_ToolIsCloseOnExit[m_CurSel] = toolIsCloseOnExit; m_ToolIsShowBrowse[m_CurSel] = toolIsShowBrowse; m_ToolIsRefresh[m_CurSel] = toolIsRefresh; m_ToolOnContext[m_CurSel] = toolOnContext; m_ToolIsSubMenu[m_CurSel] = toolIsSubMenu; if (m_ToolIsSubMenu[m_CurSel] && (m_CurSel < m_1stSubmenu)) m_1stSubmenu = m_CurSel; else if (m_1stSubmenu < MAX_TOOLS+1 && !m_ToolIsSubMenu[m_1stSubmenu]) m_1stSubmenu = m_CurSel+1; m_MenuItemList.DeleteString(m_CurSel); CString txt = m_ToolMenuName[m_CurSel]; if (m_ToolIsSubMenu[m_CurSel]) txt += LoadStringResource(IDS_A_SUBMENU); else if (m_CurSel > m_1stSubmenu) txt = _T(" ") + txt; m_MenuItemList.InsertString(m_CurSel, txt); m_CurSel++; m_MenuItemList.DeleteString(m_CurSel); txt = m_ToolMenuName[m_CurSel]; if (m_ToolIsSubMenu[m_CurSel]) txt += LoadStringResource(IDS_A_SUBMENU); else if (m_CurSel > m_1stSubmenu) txt = _T(" ") + txt; m_MenuItemList.InsertString(m_CurSel, txt); LoadVariables(); GotoDlgCtrl(GetDlgItem(IDC_MENULIST)); m_MenuItemList.SetCurSel(m_CurSel); GetDlgItem(IDC_MOVE_UP)->EnableWindow(m_CurSel > 0 ? TRUE : FALSE); GetDlgItem(IDC_MOVE_DOWN)->EnableWindow((m_CurSel < (m_MenuItemList.GetCount()-1)) ? TRUE : FALSE); } else MessageBeep(0); } void CToolsDlg::OnMoveUp() { if (m_CurSel > 0) { GetVariables(); CString toolMenuName = m_ToolMenuName[m_CurSel-1]; CString toolCommand = m_ToolCommand[m_CurSel-1]; CString toolArgs = m_ToolArgs[m_CurSel-1]; CString toolInitDir = m_ToolInitDir[m_CurSel-1]; CString toolPromptText = m_ToolPromptText[m_CurSel-1]; BOOL toolIsConsole = m_ToolIsConsole[m_CurSel-1]; BOOL toolIsPrompt = m_ToolIsPrompt[m_CurSel-1]; BOOL toolIsOutput2Status = m_ToolIsOutput2Status[m_CurSel-1]; BOOL toolIsCloseOnExit = m_ToolIsCloseOnExit[m_CurSel-1]; BOOL toolIsShowBrowse = m_ToolIsShowBrowse[m_CurSel-1]; BOOL toolIsRefresh = m_ToolIsRefresh[m_CurSel-1]; BOOL toolOnContext = m_ToolOnContext[m_CurSel-1]; BOOL toolIsSubMenu = m_ToolIsSubMenu[m_CurSel-1]; m_ToolMenuName[m_CurSel-1] = m_ToolMenuName[m_CurSel]; m_ToolCommand[m_CurSel-1] = m_ToolCommand[m_CurSel]; m_ToolArgs[m_CurSel-1] = m_ToolArgs[m_CurSel]; m_ToolInitDir[m_CurSel-1] = m_ToolInitDir[m_CurSel]; m_ToolPromptText[m_CurSel-1] = m_ToolPromptText[m_CurSel]; m_ToolIsConsole[m_CurSel-1] = m_ToolIsConsole[m_CurSel]; m_ToolIsPrompt[m_CurSel-1] = m_ToolIsPrompt[m_CurSel]; m_ToolIsOutput2Status[m_CurSel-1] = m_ToolIsOutput2Status[m_CurSel]; m_ToolIsCloseOnExit[m_CurSel-1] = m_ToolIsCloseOnExit[m_CurSel]; m_ToolIsShowBrowse[m_CurSel-1] = m_ToolIsShowBrowse[m_CurSel]; m_ToolIsRefresh[m_CurSel-1] = m_ToolIsRefresh[m_CurSel]; m_ToolOnContext[m_CurSel-1] = m_ToolOnContext[m_CurSel]; m_ToolIsSubMenu[m_CurSel-1] = m_ToolIsSubMenu[m_CurSel]; m_ToolMenuName[m_CurSel] = toolMenuName; m_ToolCommand[m_CurSel] = toolCommand; m_ToolArgs[m_CurSel] = toolArgs; m_ToolInitDir[m_CurSel] = toolInitDir; m_ToolPromptText[m_CurSel] = toolPromptText; m_ToolIsConsole[m_CurSel] = toolIsConsole; m_ToolIsPrompt[m_CurSel] = toolIsPrompt; m_ToolIsOutput2Status[m_CurSel] = toolIsOutput2Status; m_ToolIsCloseOnExit[m_CurSel] = toolIsCloseOnExit; m_ToolIsShowBrowse[m_CurSel] = toolIsShowBrowse; m_ToolIsRefresh[m_CurSel] = toolIsRefresh; m_ToolOnContext[m_CurSel] = toolOnContext; m_ToolIsSubMenu[m_CurSel] = toolIsSubMenu; if (m_ToolIsSubMenu[m_CurSel-1] && (m_CurSel-1 < m_1stSubmenu)) m_1stSubmenu = m_CurSel-1; else if (m_1stSubmenu < MAX_TOOLS+1 && !m_ToolIsSubMenu[m_1stSubmenu]) m_1stSubmenu = m_CurSel; m_MenuItemList.DeleteString(m_CurSel); CString txt = m_ToolMenuName[m_CurSel]; if (m_ToolIsSubMenu[m_CurSel]) txt += LoadStringResource(IDS_A_SUBMENU); else if (m_CurSel > m_1stSubmenu) txt = _T(" ") + txt; m_MenuItemList.InsertString(m_CurSel, txt); m_CurSel--; m_MenuItemList.DeleteString(m_CurSel); txt = m_ToolMenuName[m_CurSel]; if (m_ToolIsSubMenu[m_CurSel]) txt += LoadStringResource(IDS_A_SUBMENU); else if (m_CurSel > m_1stSubmenu) txt = _T(" ") + txt; m_MenuItemList.InsertString(m_CurSel, txt); LoadVariables(); GotoDlgCtrl(GetDlgItem(IDC_MENULIST)); m_MenuItemList.SetCurSel(m_CurSel); GetDlgItem(IDC_MOVE_UP)->EnableWindow(m_CurSel > 0 ? TRUE : FALSE); GetDlgItem(IDC_MOVE_DOWN)->EnableWindow((m_CurSel < (m_MenuItemList.GetCount()-1)) ? TRUE : FALSE); } else MessageBeep(0); } void CToolsDlg::OnRemove() { if (m_CurSel >= 0) { int old1stSubmenu = m_1stSubmenu; GetVariables(); if (m_ToolIsSubMenu[m_CurSel]) --m_NbrSubMenus; if (m_1stSubmenu == m_CurSel) m_1stSubmenu = MAX_TOOLS+1; int i; for (i = m_CurSel; ++i < m_MenuItemList.GetCount(); ) { m_ToolMenuName[i-1] = m_ToolMenuName[i]; m_ToolCommand[i-1] = m_ToolCommand[i]; m_ToolArgs[i-1] = m_ToolArgs[i]; m_ToolInitDir[i-1] = m_ToolInitDir[i]; m_ToolPromptText[i-1] = m_ToolPromptText[i]; m_ToolIsConsole[i-1] = m_ToolIsConsole[i]; m_ToolIsPrompt[i-1] = m_ToolIsPrompt[i]; m_ToolIsOutput2Status[i-1] = m_ToolIsOutput2Status[i]; m_ToolIsCloseOnExit[i-1] = m_ToolIsCloseOnExit[i]; m_ToolIsShowBrowse[i-1] = m_ToolIsShowBrowse[i]; m_ToolIsRefresh[i-1] = m_ToolIsRefresh[i]; m_ToolOnContext[i-1] = m_ToolOnContext[i]; m_ToolIsSubMenu[i-1] = m_ToolIsSubMenu[i]; if (m_ToolIsSubMenu[i-1] && ((i-1) < m_1stSubmenu)) m_1stSubmenu = i-1; } m_ToolMenuName[i-1].Empty(); m_MenuItemList.DeleteString(m_CurSel); if (m_CurSel >= m_MenuItemList.GetCount()) m_CurSel = m_MenuItemList.GetCount() - 1; if (old1stSubmenu != m_1stSubmenu) LoadMenuItemList(); LoadVariables(); GotoDlgCtrl(GetDlgItem(IDC_MENULIST)); m_MenuItemList.SetCurSel(m_CurSel); GetDlgItem(IDC_ADD)->EnableWindow(TRUE); GetDlgItem(IDC_MOVE_UP)->EnableWindow(m_CurSel > 0 ? TRUE : FALSE); GetDlgItem(IDC_MOVE_DOWN)->EnableWindow((m_CurSel < (m_MenuItemList.GetCount()-1)) ? TRUE : FALSE); } else MessageBeep(0); } void CToolsDlg::OnBrowse() { UpdateData(); CFileDialog fDlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NONETWORKBUTTON | OFN_PATHMUSTEXIST, LoadStringResource(IDS_TOOLS_DLG_FILTER), this, MainFrame()->m_osVer.dwMajorVersion < 5 ? OPENFILENAME_SIZE_VERSION_400 : sizeof(OPENFILENAME)); TCHAR buf[MAX_PATH]; // Zero 1st char so commdlg knows we aren't providing a default filename buf[0]=_T('\0'); fDlg.m_ofn.lpstrFile= buf; fDlg.m_ofn.nMaxFile= MAX_PATH; // Set the dlg caption CString title = LoadStringResource(IDS_SELECT_THE_COMMAND); fDlg.m_ofn.lpstrTitle = title; // We dont need no stinking file title fDlg.m_ofn.lpstrFileTitle=NULL; // Set the initial directory CString initDir = _T("\\"); int slashpos; if ((slashpos = m_Command.ReverseFind(_T('\\'))) != -1) initDir = m_Command.Left(slashpos); fDlg.m_ofn.lpstrInitialDir=initDir; fDlg.m_ofn.lpstrCustomFilter= NULL; // Set filter index fDlg.m_ofn.nFilterIndex=1; int retcode=fDlg.DoModal(); if(retcode == IDOK) { m_Command = fDlg.GetPathName(); } else { CString errorTxt; if(retcode == IDCANCEL) // an error { DWORD exError=CommDlgExtendedError(); if(exError != 0) errorTxt.FormatMessage(IDS_EXTENDED_ERROR_n_IN_FILEDIALOG, exError); } else { DWORD error=GetLastError(); if(error) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); errorTxt = (TCHAR *)lpMsgBuf; } else errorTxt=LoadStringResource(IDS_UNKNOWN_FILEDIALOG_ERROR); } if(errorTxt.GetLength() > 0) AfxMessageBox(errorTxt, MB_ICONSTOP); } UpdateData(FALSE); } void CToolsDlg::OnBrowseDir() { UpdateData(); CString newfolder = TheApp()->BrowseForFolder(m_hWnd, m_InitDir.IsEmpty() ? TheApp()->m_ClientRoot : m_InitDir, LoadStringResource(IDS_CHOOSE_TEMP_DIR), BIF_NEWDIALOGSTYLE); if (!newfolder.IsEmpty()) { m_InitDir = newfolder; UpdateData(FALSE); } } void CToolsDlg::OnIsConsole() { if (m_CurSel >= 0) { GetVariables(); if (!m_IsConsole) { m_ToolIsOutput2Status[m_CurSel] = m_IsOutput2Status = FALSE; m_ToolIsCloseOnExit[m_CurSel] = m_IsCloseOnExit = FALSE; } LoadVariables(); } } void CToolsDlg::OnIsPrompt() { if (m_CurSel >= 0) { GetVariables(); if (!m_IsPrompt) m_ToolIsShowBrowse[m_CurSel] = m_IsShowBrowse = FALSE; LoadVariables(); } } void CToolsDlg::OnHelp() { AfxGetApp()->WinHelp(TASK_ADDING_COMMANDS_TO_THE_TOOLS_MENU); } BOOL CToolsDlg::OnHelpInfo(HELPINFO* pHelpInfo) { OnHelp(); return TRUE; } void CToolsDlg::OnOK() { int i; GetVariables(); if (!m_bEdit) { for (i = -1; ++i < MAX_TOOLS; ) { if (m_ToolMenuName[i].GetLength() == 0) { m_ToolCommand[i].Empty(); m_ToolArgs[i].Empty(); m_ToolInitDir[i].Empty(); m_ToolPromptText[i].Empty(); m_ToolIsConsole[i] = FALSE; m_ToolIsPrompt[i] = FALSE; m_ToolIsOutput2Status[i] = FALSE; m_ToolIsCloseOnExit[i] = FALSE; m_ToolIsShowBrowse[i] = FALSE; m_ToolIsRefresh[i] = FALSE; m_ToolOnContext[i] = FALSE; m_ToolIsSubMenu[i] = FALSE; } else if (m_ToolCommand[i].IsEmpty() && m_ToolArgs[i].IsEmpty() && m_ToolInitDir[i].IsEmpty() && m_ToolIsSubMenu[i] == FALSE) { CString txt; txt.FormatMessage(IDS_YOU_MUST_ENTER_SOMETHING_IN_FIELD_FOR_TOOL_s, m_ToolMenuName[i]); AfxMessageBox(txt, MB_ICONERROR); m_MenuItemList.SetCurSel(m_CurSel = i); LoadVariables(); GotoDlgCtrl(GetDlgItem(IDC_COMMAND)); return; } if (!m_ToolIsConsole[i]) { m_ToolIsOutput2Status[i] = FALSE; m_ToolIsCloseOnExit[i] = FALSE; } if (!m_ToolIsPrompt[i]) m_ToolIsShowBrowse[i] = FALSE; GET_P4REGPTR()->SetToolMenuName(i, m_ToolMenuName[i]); GET_P4REGPTR()->SetToolCommand(i, m_ToolCommand[i]); GET_P4REGPTR()->SetToolArgs(i, m_ToolArgs[i]); GET_P4REGPTR()->SetToolInitDir(i, m_ToolInitDir[i]); GET_P4REGPTR()->SetToolPromptText(i, m_ToolPromptText[i]); GET_P4REGPTR()->SetToolIsConsole(i, m_ToolIsConsole[i]); GET_P4REGPTR()->SetToolIsPrompt(i, m_ToolIsPrompt[i]); GET_P4REGPTR()->SetToolIsOutput2Status(i, m_ToolIsOutput2Status[i]); GET_P4REGPTR()->SetToolIsCloseOnExit(i, m_ToolIsCloseOnExit[i]); GET_P4REGPTR()->SetToolIsShowBrowse(i, m_ToolIsShowBrowse[i]); GET_P4REGPTR()->SetToolIsRefresh(i, m_ToolIsRefresh[i]); GET_P4REGPTR()->SetToolOnContext(i, m_ToolOnContext[i]); GET_P4REGPTR()->SetToolIsSubMenu(i, m_ToolIsSubMenu[i]); } } m_Finished = TRUE; CDialog::OnOK(); } LRESULT CToolsDlg::LoadVariables(WPARAM, LPARAM) { if (m_CurSel >= 0) { BOOL bIsSubMenu = m_MenuType = m_ToolIsSubMenu[m_CurSel]; m_Command = bIsSubMenu ? _T("") : m_ToolCommand[m_CurSel]; m_Args = bIsSubMenu ? _T("") : m_ToolArgs[m_CurSel]; m_InitDir = bIsSubMenu ? _T("") : m_ToolInitDir[m_CurSel]; m_PromptText = bIsSubMenu ? _T("") : m_ToolPromptText[m_CurSel]; m_IsConsole = bIsSubMenu ? FALSE : m_ToolIsConsole[m_CurSel]; m_IsPrompt = bIsSubMenu ? FALSE : m_ToolIsPrompt[m_CurSel]; m_IsOutput2Status= bIsSubMenu ? FALSE : m_ToolIsOutput2Status[m_CurSel]; m_IsCloseOnExit= bIsSubMenu ? FALSE : m_ToolIsCloseOnExit[m_CurSel]; m_IsShowBrowse = bIsSubMenu ? FALSE : m_ToolIsShowBrowse[m_CurSel]; m_IsRefresh = bIsSubMenu ? FALSE : m_ToolIsRefresh[m_CurSel]; m_OnContext = m_ToolOnContext[m_CurSel]; m_Name = m_ToolMenuName[m_CurSel]; UpdateData( FALSE ); GetDlgItem(IDC_COMMAND)->EnableWindow(!bIsSubMenu); GetDlgItem(IDC_ARGS)->EnableWindow(!bIsSubMenu); GetDlgItem(IDC_INITDIR)->EnableWindow(!bIsSubMenu); GetDlgItem(IDC_CONSOLE)->EnableWindow(!bIsSubMenu); GetDlgItem(IDC_PROMPT)->EnableWindow(!bIsSubMenu); GetDlgItem(IDC_OUTPUT2STATUSPANE)->EnableWindow(m_IsConsole); GetDlgItem(IDC_CLOSEWINDOW)->EnableWindow(m_IsConsole); GetDlgItem(IDC_SHOWBROWSE)->EnableWindow(m_IsPrompt); GetDlgItem(IDC_PROMPT_EDIT)->EnableWindow(m_IsPrompt); GetDlgItem(IDC_PROMPT_LABEL)->EnableWindow(m_IsPrompt); GetDlgItem(IDC_REFRESH)->EnableWindow(!bIsSubMenu); if (m_bEdit) { if (m_OldbEdit != m_bEdit) { GetDlgItem(IDC_STATIC_2)->ShowWindow(SW_SHOW); GetDlgItem(IDC_EDIT_NAME)->ShowWindow(SW_SHOW); GetDlgItem(IDC_EDIT_NAME)->EnableWindow(TRUE); GetDlgItem(IDC_STATIC_3)->ShowWindow(SW_SHOW); GetDlgItem(IDC_RADIO_TOOL)->ShowWindow(SW_SHOW); GetDlgItem(IDC_RADIO_TOOL)->EnableWindow(TRUE); GetDlgItem(IDC_RADIO_SUBMENU)->ShowWindow(SW_SHOW); GetDlgItem(IDC_RADIO_SUBMENU)->EnableWindow(TRUE); GotoDlgCtrl(GetDlgItem(IDC_EDIT_NAME)); GetDlgItem(IDC_ADD)->EnableWindow(FALSE); GetDlgItem(IDC_CHANGE)->EnableWindow(FALSE); GetDlgItem(IDC_REMOVE)->EnableWindow(FALSE); GetDlgItem(IDC_MOVE_UP)->EnableWindow(FALSE); GetDlgItem(IDC_MOVE_DOWN)->EnableWindow(FALSE); GetDlgItem(IDC_MENULIST)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ADD)->ShowWindow(SW_HIDE); GetDlgItem(IDC_CHANGE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_REMOVE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_MOVE_UP)->ShowWindow(SW_HIDE); GetDlgItem(IDC_MOVE_DOWN)->ShowWindow(SW_HIDE); GetDlgItem(IDC_COMMAND)->SendMessage(EM_SETREADONLY, FALSE, 0); GetDlgItem(IDC_COMMAND)->ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_FRAMECHANGED); GetDlgItem(IDC_ARGS)->SendMessage(EM_SETREADONLY, FALSE, 0); GetDlgItem(IDC_ARGS)->ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_FRAMECHANGED); GetDlgItem(IDC_INITDIR)->SendMessage(EM_SETREADONLY, FALSE, 0); GetDlgItem(IDC_INITDIR)->ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_FRAMECHANGED); GetDlgItem(IDC_PROMPT_EDIT)->SendMessage(EM_SETREADONLY, FALSE, 0); GetDlgItem(IDC_PROMPT_EDIT)->ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_FRAMECHANGED); m_OldbEdit = m_bEdit; } GetDlgItem(IDC_BROWSE)->EnableWindow(!bIsSubMenu); GetDlgItem(IDC_BROWSE_DIR)->EnableWindow(!bIsSubMenu); GetDlgItem(IDC_BROWSE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_BROWSE_DIR)->ShowWindow(SW_SHOW); GetDlgItem(IDC_CONSOLE)->ModifyStyle(BS_CHECKBOX|BS_FLAT, BS_AUTOCHECKBOX, 0); GetDlgItem(IDC_PROMPT)->ModifyStyle(BS_CHECKBOX|BS_FLAT, BS_AUTOCHECKBOX, 0); GetDlgItem(IDC_OUTPUT2STATUSPANE)->ModifyStyle(BS_CHECKBOX|BS_FLAT, BS_AUTOCHECKBOX, 0); GetDlgItem(IDC_CLOSEWINDOW)->ModifyStyle(BS_CHECKBOX|BS_FLAT, BS_AUTOCHECKBOX, 0); GetDlgItem(IDC_SHOWBROWSE)->ModifyStyle(BS_CHECKBOX|BS_FLAT, BS_AUTOCHECKBOX, 0); GetDlgItem(IDC_REFRESH)->ModifyStyle(BS_CHECKBOX|BS_FLAT, BS_AUTOCHECKBOX, 0); GetDlgItem(IDC_ADD2CONTEXT)->ModifyStyle(BS_CHECKBOX|BS_FLAT, BS_AUTOCHECKBOX, 0); } else { if (m_OldbEdit != m_bEdit) { GetDlgItem(IDC_STATIC_2)->ShowWindow(SW_HIDE); GetDlgItem(IDC_EDIT_NAME)->ShowWindow(SW_HIDE); GetDlgItem(IDC_EDIT_NAME)->EnableWindow(FALSE); GetDlgItem(IDC_STATIC_3)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO_TOOL)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO_TOOL)->EnableWindow(FALSE); GetDlgItem(IDC_RADIO_SUBMENU)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO_SUBMENU)->EnableWindow(FALSE); GetDlgItem(IDC_MENULIST)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ADD)->ShowWindow(SW_SHOW); GetDlgItem(IDC_CHANGE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_REMOVE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_MOVE_UP)->ShowWindow(SW_SHOW); GetDlgItem(IDC_MOVE_DOWN)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ADD)->EnableWindow(TRUE); GetDlgItem(IDC_CHANGE)->EnableWindow(TRUE); GetDlgItem(IDC_REMOVE)->EnableWindow(TRUE); GetDlgItem(IDC_MOVE_UP)->EnableWindow(TRUE); GetDlgItem(IDC_MOVE_DOWN)->EnableWindow(TRUE); GotoDlgCtrl(GetDlgItem(IDC_MENULIST)); GetDlgItem(IDC_COMMAND)->SendMessage(EM_SETREADONLY, TRUE, 0); GetDlgItem(IDC_COMMAND)->ModifyStyleEx(WS_EX_CLIENTEDGE, 0, SWP_FRAMECHANGED); GetDlgItem(IDC_ARGS)->SendMessage(EM_SETREADONLY, TRUE, 0); GetDlgItem(IDC_ARGS)->ModifyStyleEx(WS_EX_CLIENTEDGE, 0, SWP_FRAMECHANGED); GetDlgItem(IDC_INITDIR)->SendMessage(EM_SETREADONLY, TRUE, 0); GetDlgItem(IDC_INITDIR)->ModifyStyleEx(WS_EX_CLIENTEDGE, 0, SWP_FRAMECHANGED); GetDlgItem(IDC_PROMPT_EDIT)->SendMessage(EM_SETREADONLY, TRUE, 0); GetDlgItem(IDC_PROMPT_EDIT)->ModifyStyleEx(WS_EX_CLIENTEDGE, 0, SWP_FRAMECHANGED); GetDlgItem(IDC_BROWSE)->EnableWindow(FALSE); GetDlgItem(IDC_BROWSE_DIR)->EnableWindow(FALSE); GetDlgItem(IDC_BROWSE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BROWSE_DIR)->ShowWindow(SW_HIDE); GetDlgItem(IDC_CONSOLE)->ModifyStyle(BS_AUTOCHECKBOX, BS_CHECKBOX|BS_FLAT, 0); GetDlgItem(IDC_PROMPT)->ModifyStyle(BS_AUTOCHECKBOX, BS_CHECKBOX|BS_FLAT, 0); GetDlgItem(IDC_CLOSEWINDOW)->ModifyStyle(BS_AUTOCHECKBOX, BS_CHECKBOX|BS_FLAT, 0); GetDlgItem(IDC_OUTPUT2STATUSPANE)->ModifyStyle(BS_AUTOCHECKBOX, BS_CHECKBOX|BS_FLAT, 0); GetDlgItem(IDC_SHOWBROWSE)->ModifyStyle(BS_AUTOCHECKBOX, BS_CHECKBOX|BS_FLAT, 0); GetDlgItem(IDC_REFRESH)->ModifyStyle(BS_AUTOCHECKBOX, BS_CHECKBOX|BS_FLAT, 0); GetDlgItem(IDC_ADD2CONTEXT)->ModifyStyle(BS_AUTOCHECKBOX, BS_CHECKBOX|BS_FLAT, 0); m_OldbEdit = m_bEdit; } } } return 0; } void CToolsDlg::GetVariables() { UpdateData( ); if (m_CurSel >= 0) { m_ToolMenuName[m_CurSel] = m_Name; m_ToolIsSubMenu[m_CurSel] = m_MenuType; m_ToolCommand[m_CurSel] = m_Command; m_ToolArgs[m_CurSel] = m_Args; m_ToolInitDir[m_CurSel] = m_InitDir; m_ToolPromptText[m_CurSel] = m_PromptText; m_ToolIsConsole[m_CurSel] = m_IsConsole; m_ToolIsPrompt[m_CurSel] = m_IsPrompt; m_ToolIsOutput2Status[m_CurSel] = m_IsOutput2Status; m_ToolIsCloseOnExit[m_CurSel] = m_IsCloseOnExit; m_ToolIsShowBrowse[m_CurSel] = m_IsShowBrowse; m_ToolIsRefresh[m_CurSel] = m_IsRefresh; m_ToolOnContext[m_CurSel] = m_OnContext; } } void CToolsDlg::OnMenuTypeClick() { GetVariables(); LoadVariables(); } void CToolsDlg::Clear() { m_Command.Empty(); m_IsConsole = FALSE; m_InitDir.Empty(); m_PromptText.Empty(); m_Args.Empty(); m_IsPrompt = FALSE; m_IsOutput2Status = FALSE; m_IsCloseOnExit = FALSE; m_IsShowBrowse = FALSE; m_IsRefresh = FALSE; m_OnContext = FALSE; if (::IsWindow(m_hWnd)) { GetDlgItem(IDC_OUTPUT2STATUSPANE)->EnableWindow(FALSE); GetDlgItem(IDC_CLOSEWINDOW)->EnableWindow(FALSE); GetDlgItem(IDC_SHOWBROWSE)->EnableWindow(FALSE); UpdateData( FALSE ); } } void CToolsDlg::OnDblclkMenuList() { OnEdit(); } void CToolsDlg::OnKillfocusArgs() { if (!m_Finished) { UpdateData( ); CString cmdline = m_Command + _T(' ') + m_Args; int i = MainFrame()->FindPercentArg(cmdline, 0); if ((i != -1) && (MainFrame()->FindPercentArg(cmdline, i+1) != -1)) { CString txt = LoadStringResource(IDS_MORE_THAN_ONE_REPLACEABLE_FILE_ARG_NOT_ALLOWED) + cmdline; AfxMessageBox(txt, MB_ICONSTOP); GotoDlgCtrl(GetDlgItem(IDC_ARGS)); } } } void CToolsDlg::OnKillfocusInitDir() { if (!m_Finished) { UpdateData( ); int i = m_InitDir.Find(_T('%')); if ((i == 0) && (m_InitDir.GetAt(1) == _T('F'))) { m_InitDir.SetAt(1, _T('f')); UpdateData(FALSE); } if ((i == 0) && (m_InitDir != _T("%f"))) { CString txt = LoadStringResource(IDS_ONLY_PERCENT_F_MAY_BE_USED) + m_Args; AfxMessageBox(txt, MB_ICONSTOP); GotoDlgCtrl(GetDlgItem(IDC_INITDIR)); } } } void CToolsDlg::OnCancel() { m_Finished = TRUE; CDialog::OnCancel(); }