void LastRecentFileList::updateMenu() { NppParameters *pNppParam = NppParameters::getInstance(); if (!_hasSeparators && _size > 0) { //add separators NativeLangSpeaker *pNativeLangSpeaker = pNppParam->getNativeLangSpeaker(); generic_string recentFileList = pNativeLangSpeaker->getSpecialMenuEntryName("RecentFiles"); generic_string openAllFiles = pNativeLangSpeaker->getNativeLangMenuString(IDM_OPEN_ALL_RECENT_FILE); generic_string cleanFileList = pNativeLangSpeaker->getNativeLangMenuString(IDM_CLEAN_RECENT_FILE_LIST); if (recentFileList == TEXT("")) recentFileList = TEXT("&Recent Files"); if (openAllFiles == TEXT("")) openAllFiles = TEXT("Open All Recent Files"); if (cleanFileList == TEXT("")) cleanFileList = TEXT("Empty Recent Files List"); if (!isSubMenuMode()) ::InsertMenu(_hMenu, _posBase + 0, MF_BYPOSITION, UINT(-1), 0); ::InsertMenu(_hMenu, _posBase + 1, MF_BYPOSITION, IDM_OPEN_ALL_RECENT_FILE, openAllFiles.c_str()); ::InsertMenu(_hMenu, _posBase + 2, MF_BYPOSITION, IDM_CLEAN_RECENT_FILE_LIST, cleanFileList.c_str()); ::InsertMenu(_hMenu, _posBase + 3, MF_BYPOSITION, UINT(-1), 0); _hasSeparators = true; if (isSubMenuMode()) { ::InsertMenu(_hParentMenu, _posBase + 0, MF_BYPOSITION | MF_POPUP, UINT(_hMenu), (LPCTSTR)recentFileList.c_str()); ::InsertMenu(_hParentMenu, _posBase + 1, MF_BYPOSITION, UINT(-1), 0); } } else if (_hasSeparators && _size == 0) //remove separators { ::RemoveMenu(_hMenu, _posBase + 3, MF_BYPOSITION); ::RemoveMenu(_hMenu, IDM_CLEAN_RECENT_FILE_LIST, MF_BYCOMMAND); ::RemoveMenu(_hMenu, IDM_OPEN_ALL_RECENT_FILE, MF_BYCOMMAND); ::RemoveMenu(_hMenu, _posBase + 0, MF_BYPOSITION); _hasSeparators = false; if (isSubMenuMode()) { // Remove "Recent Files" Entry and the separator from the main menu ::RemoveMenu(_hParentMenu, _posBase + 1, MF_BYPOSITION); ::RemoveMenu(_hParentMenu, _posBase + 0, MF_BYPOSITION); // Remove the last left separator from the submenu ::RemoveMenu(_hMenu, 0, MF_BYPOSITION); } } //Remove all menu items for(int i = 0; i < _size; ++i) { ::RemoveMenu(_hMenu, _lrfl.at(i)._id, MF_BYCOMMAND); } //Then readd them, so everything stays in sync for(int j = 0; j < _size; ++j) { generic_string strBuffer(BuildMenuFileName(pNppParam->getRecentFileCustomLength(), j, _lrfl.at(j)._name)); ::InsertMenu(_hMenu, _posBase + j, MF_BYPOSITION, _lrfl.at(j)._id, strBuffer.c_str()); } }
BOOL CALLBACK RunDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM) { switch (message) { case WM_COMMAND : { switch (wParam) { case IDCANCEL : display(false); return TRUE; case IDOK : { TCHAR cmd[MAX_PATH]; ::GetDlgItemText(_hSelf, IDC_COMBO_RUN_PATH, cmd, MAX_PATH); _cmdLine = cmd; HINSTANCE hInst = run(_hParent); if (int(hInst) > 32) { addTextToCombo(_cmdLine.c_str()); display(false); } else { removeTextFromCombo(_cmdLine.c_str()); } return TRUE; } case IDC_BUTTON_SAVE : { std::vector<UserCommand> & theUserCmds = (NppParameters::getInstance())->getUserCommandList(); int nbCmd = theUserCmds.size(); int cmdID = ID_USER_CMD + nbCmd; TCHAR cmd[MAX_PATH]; ::GetDlgItemText(_hSelf, IDC_COMBO_RUN_PATH, cmd, MAX_PATH); UserCommand uc(Shortcut(), cmd, cmdID); uc.init(_hInst, _hSelf); if (uc.doDialog() != -1) { HMENU hRunMenu = ::GetSubMenu((HMENU)::SendMessage(_hParent, NPPM_INTERNAL_GETMENU, 0, 0), MENUINDEX_RUN); int const posBase = 2; if (nbCmd == 0) ::InsertMenu(hRunMenu, posBase - 1, MF_BYPOSITION, (unsigned int)-1, 0); theUserCmds.push_back(uc); ::InsertMenu(hRunMenu, posBase + nbCmd, MF_BYPOSITION, cmdID, uc.toMenuItemString().c_str()); if (nbCmd == 0) { // Insert the separator and modify/delete command ::InsertMenu(hRunMenu, posBase + nbCmd + 1, MF_BYPOSITION, (unsigned int)-1, 0); NativeLangSpeaker *pNativeLangSpeaker = (NppParameters::getInstance())->getNativeLangSpeaker(); generic_string nativeLangShortcutMapperMacro = pNativeLangSpeaker->getNativeLangMenuString(IDM_SETTING_SHORTCUT_MAPPER_MACRO); if (nativeLangShortcutMapperMacro == TEXT("")) nativeLangShortcutMapperMacro = TEXT("Modify Shortcut/Delete Command..."); ::InsertMenu(hRunMenu, posBase + nbCmd + 2, MF_BYCOMMAND, IDM_SETTING_SHORTCUT_MAPPER_RUN, nativeLangShortcutMapperMacro.c_str()); } (NppParameters::getInstance())->getAccelerator()->updateShortcuts(); } return TRUE; } case IDC_BUTTON_FILE_BROWSER : { FileDialog fd(_hSelf, _hInst); fd.setExtFilter(TEXT("Executable file : "), TEXT(".exe"), TEXT(".com"), TEXT(".cmd"), TEXT(".bat"), NULL); fd.setExtFilter(TEXT("All files : "), TEXT(".*"), NULL); if (const TCHAR *fn = fd.doOpenSingleFileDlg()) { if(wcschr(fn, ' ') != NULL) { generic_string fn_quotes(fn); fn_quotes = TEXT("\"") + fn_quotes + TEXT("\""); addTextToCombo(fn_quotes.c_str()); } else { addTextToCombo(fn); } } return TRUE; } default : break; } } } return FALSE; }