diff --git a/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp b/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp index 07a5314b1..48c321b34 100644 --- a/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp +++ b/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp @@ -91,8 +91,6 @@ bool PluginsManager::loadPlugins(const char *dir) if ((!pi->_funcItems) || (pi->_nbFuncItem <= 0)) throw string("Missing \"FuncItems\" array, or the nb of Function Item is not set correctly"); - getCustomizedShortcuts(pi->_moduleName, pi->_funcItems, pi->_nbFuncItem); - for (int c = 0 ; c < pi->_nbFuncItem ; c++) if (!pi->_funcItems[c]._pFunc) throw string("\"FuncItems\" array is not set correctly"); @@ -219,6 +217,11 @@ void PluginsManager::setMenu(HMENU hMenu, const char *menuName) itemName += "\t"; itemName += pcs.toString(); } + else + { //no ShortcutKey is provided, add an disabled shortcut (so it can still be mapped, Paramaters class can still index any changes and the toolbar wont funk out + PluginCmdShortcut pcs(Shortcut(itemName.c_str(), false, false, false, 0x00), cmdID, _pluginInfos[i]->_moduleName, j); //VK_NULL and everything disabled, the menu name is left alone + pluginCmdSCList.push_back(pcs); + } ::InsertMenu(_pluginInfos[i]->_pluginMenu, j, MF_BYPOSITION, cmdID, itemName.c_str()); if (_pluginInfos[i]->_funcItems[j]._init2Check) ::CheckMenuItem(_hPluginsMenu, cmdID, MF_BYCOMMAND | MF_CHECKED); diff --git a/PowerEditor/src/MISC/PluginsManager/PluginsManager.h b/PowerEditor/src/MISC/PluginsManager/PluginsManager.h index 7c8280072..d709dc0f2 100644 --- a/PowerEditor/src/MISC/PluginsManager/PluginsManager.h +++ b/PowerEditor/src/MISC/PluginsManager/PluginsManager.h @@ -124,7 +124,7 @@ public: HMENU getMenuHandle() { return _hPluginsMenu; }; - +/* void getCustomizedShortcuts(char *pluginName, FuncItem *funcItems, int nbFuncItem) { vector & pluginCustomizedCmds = (NppParameters::getInstance())->getPluginCustomizedCmds(); @@ -143,6 +143,7 @@ public: } } }; +*/ void disable() {_isDisabled = true;}; private: diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index 5fd588933..48aa59082 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -1318,17 +1318,17 @@ void Notepad_plus::checkLangsMenu(int id) const for (int i = IDM_LANG_USER + 1 ; i <= IDM_LANG_USER_LIMIT ; i++) { - if (::GetMenuString(::GetMenu(_hSelf), i, menuLangName, sizeof(menuLangName), MF_BYCOMMAND)) + if (::GetMenuString(_mainMenuHandle, i, menuLangName, sizeof(menuLangName), MF_BYCOMMAND)) if (!strcmp(userLangName, menuLangName)) { - ::CheckMenuRadioItem(::GetMenu(_hSelf), IDM_LANG_C, IDM_LANG_USER_LIMIT, i, MF_BYCOMMAND); + ::CheckMenuRadioItem(_mainMenuHandle, IDM_LANG_C, IDM_LANG_USER_LIMIT, i, MF_BYCOMMAND); return; } } } } } - ::CheckMenuRadioItem(::GetMenu(_hSelf), IDM_LANG_C, IDM_LANG_USER_LIMIT, id, MF_BYCOMMAND); + ::CheckMenuRadioItem(_mainMenuHandle, IDM_LANG_C, IDM_LANG_USER_LIMIT, id, MF_BYCOMMAND); } string Notepad_plus::getLangDesc(LangType langType, bool shortDesc) @@ -1853,7 +1853,7 @@ BOOL Notepad_plus::notify(SCNotification *notification) ::ScreenToClient(_pDocTab->getHSelf(), &clientPoint); ::SendMessage(_pDocTab->getHSelf(), WM_LBUTTONDOWN, 2, MAKELONG(clientPoint.x, clientPoint.y)); - bool isEnable = ((::GetMenuState(::GetMenu(_hSelf), IDM_FILE_SAVE, MF_BYCOMMAND)&MF_DISABLED) == 0); + bool isEnable = ((::GetMenuState(_mainMenuHandle, IDM_FILE_SAVE, MF_BYCOMMAND)&MF_DISABLED) == 0); _tabPopupMenu.enableItem(IDM_FILE_SAVE, isEnable); bool isUserReadOnly = _pEditView->isCurrentBufUserReadOnly(); @@ -2099,7 +2099,7 @@ void Notepad_plus::addHotSpot(bool docIsModifing) _pEditView->execute(SCI_SETTARGETSTART, startPos); _pEditView->execute(SCI_SETTARGETEND, endPos); - vector> hotspotStylers; + vector > hotspotStylers; //char *regExprStr0 = "http://[a-z0-9_-+.:?=/%]*";//"http://[^ \\t\\\"]*"; //char *regExprStr1 = "[a-zA-Z0-9._]+@[a-zA-Z0-9_]+.[a-zA-Z0-9_]+"; @@ -2388,7 +2388,7 @@ void Notepad_plus::command(int id) case IDM_EDIT_PASTE: { int eolMode = int(_pEditView->execute(SCI_GETEOLMODE)); - _pEditView->execute(WM_PASTE); + _pEditView->execute(SCI_PASTE); //if (!(_pEditView->getCurrentBuffer()).isBin()) _pEditView->execute(SCI_CONVERTEOLS, eolMode); } @@ -3315,6 +3315,7 @@ void Notepad_plus::command(int id) { ShortcutMapper shortcutMapper; shortcutMapper.init(_hInst, _hSelf); + changeShortcutmapperLang(&shortcutMapper); shortcutMapper.doDialog(_isRTL); shortcutMapper.destroy(); break; @@ -3685,7 +3686,7 @@ void Notepad_plus::command(int id) for (int i = IDM_FILEMENU_LASTONE + 1 ; i < (IDM_FILEMENU_LASTONE + _lastRecentFileList.getMaxNbLRF() + 1) ; i++) { char fn[MAX_PATH]; - int res = ::GetMenuString(::GetMenu(_hSelf), i, fn, sizeof(fn), MF_BYCOMMAND); + int res = ::GetMenuString(_mainMenuHandle, i, fn, sizeof(fn), MF_BYCOMMAND); if (res) { doOpen(fn); @@ -3697,7 +3698,7 @@ void Notepad_plus::command(int id) for (int i = IDM_FILEMENU_LASTONE + 1 ; i < (IDM_FILEMENU_LASTONE + _lastRecentFileList.getMaxNbLRF() + 1) ; i++) { char fn[MAX_PATH]; - int res = ::GetMenuString(::GetMenu(_hSelf), i, fn, sizeof(fn), MF_BYCOMMAND); + int res = ::GetMenuString(_mainMenuHandle, i, fn, sizeof(fn), MF_BYCOMMAND); if (res) { _lastRecentFileList.remove(fn); @@ -3733,7 +3734,7 @@ void Notepad_plus::command(int id) //changeDlgLang(_windowsDlg.getHSelf(), "Window"); } break; - +/* case IDC_KEY_HOME : _pEditView->execute(SCI_VCHOMEWRAP); break; @@ -3749,12 +3750,12 @@ void Notepad_plus::command(int id) case IDC_KEY_SELECT_2_END : _pEditView->execute(SCI_LINEENDWRAPEXTEND); break; - +*/ default : if (id > IDM_FILE_EXIT && id < (IDM_FILE_EXIT + _lastRecentFileList.getMaxNbLRF() + 1)) { char fn[MAX_PATH]; - int res = ::GetMenuString(::GetMenu(_hSelf), id, fn, sizeof(fn), MF_BYCOMMAND); + int res = ::GetMenuString(_mainMenuHandle, id, fn, sizeof(fn), MF_BYCOMMAND); if (res) { if (doOpen(fn)) @@ -3766,7 +3767,7 @@ void Notepad_plus::command(int id) else if ((id > IDM_LANG_USER) && (id < IDM_LANG_USER_LIMIT)) { char langName[langNameLenMax]; - ::GetMenuString(::GetMenu(_hSelf), id, langName, sizeof(langName), MF_BYCOMMAND); + ::GetMenuString(_mainMenuHandle, id, langName, sizeof(langName), MF_BYCOMMAND); _pEditView->setCurrentDocUserType(langName); setLangStatus(L_USER); checkLangsMenu(id); @@ -3849,9 +3850,9 @@ void Notepad_plus::command(int id) case IDM_EDIT_STREAM_COMMENT: case IDM_EDIT_TRIMTRAILING: case IDM_EDIT_SETREADONLY : - case IDM_EDIT_FULLPATHTOCLIP : - case IDM_EDIT_FILENAMETOCLIP : - case IDM_EDIT_CURRENTDIRTOCLIP : + case IDM_EDIT_FULLPATHTOCLIP : + case IDM_EDIT_FILENAMETOCLIP : + case IDM_EDIT_CURRENTDIRTOCLIP : case IDM_EDIT_CLEARREADONLY : case IDM_EDIT_RTL : case IDM_EDIT_LTR : @@ -4607,7 +4608,7 @@ void Notepad_plus::checkUnicodeMenuItems(UniMode um) const default : id = IDM_FORMAT_ANSI; } - ::CheckMenuRadioItem(::GetMenu(_hSelf), IDM_FORMAT_ANSI, IDM_FORMAT_AS_UTF_8, id, MF_BYCOMMAND); + ::CheckMenuRadioItem(_mainMenuHandle, IDM_FORMAT_ANSI, IDM_FORMAT_AS_UTF_8, id, MF_BYCOMMAND); } static bool isInList(string word, const vector & wordArray) @@ -5076,6 +5077,100 @@ void Notepad_plus::changePrefereceDlgLang() } +void Notepad_plus::changeShortcutLang() +{ + if (!_nativeLang) return; + + NppParameters * pNppParam = NppParameters::getInstance(); + vector & mainshortcuts = pNppParam->getUserShortcuts(); + vector & scinshortcuts = pNppParam->getScintillaKeyList(); + int mainSize = (int)mainshortcuts.size(); + int scinSize = (int)scinshortcuts.size(); + + TiXmlNode *shortcuts = _nativeLang->FirstChild("Shortcuts"); + if (!shortcuts) return; + + shortcuts = shortcuts->FirstChild("Main"); + if (!shortcuts) return; + + TiXmlNode *entriesRoot = shortcuts->FirstChild("Entries"); + if (!entriesRoot) return; + + for (TiXmlNode *childNode = entriesRoot->FirstChildElement("Item"); + childNode ; + childNode = childNode->NextSibling("Item") ) + { + TiXmlElement *element = childNode->ToElement(); + int index, id; + if (element->Attribute("index", &index) && element->Attribute("id", &id)) + { + if (index > -1 && index < mainSize) { //valid index only + const char *name = element->Attribute("name"); + CommandShortcut csc = mainshortcuts[index]; + if (csc.getID() == id) { + strncpy(csc._name, name, 64); + mainshortcuts[index] = csc; + } + } + } + } + + //Scintilla + shortcuts = _nativeLang->FirstChild("Shortcuts"); + if (!shortcuts) return; + + shortcuts = shortcuts->FirstChild("Scintilla"); + if (!shortcuts) return; + + entriesRoot = shortcuts->FirstChild("Entries"); + if (!entriesRoot) return; + + for (TiXmlNode *childNode = entriesRoot->FirstChildElement("Item"); + childNode ; + childNode = childNode->NextSibling("Item") ) + { + TiXmlElement *element = childNode->ToElement(); + int index; + if (element->Attribute("index", &index)) + { + if (index > -1 && index < scinSize) { //valid index only + const char *name = element->Attribute("name"); + ScintillaKeyMap skm = scinshortcuts[index]; + strncpy(skm._name, name, 64); + scinshortcuts[index] = skm; + } + } + } + +} + +void Notepad_plus::changeShortcutmapperLang(ShortcutMapper * sm) +{ + if (!_nativeLang) return; + + TiXmlNode *shortcuts = _nativeLang->FirstChild("Dialog"); + if (!shortcuts) return; + + shortcuts = shortcuts->FirstChild("ShortcutMapper"); + if (!shortcuts) return; + + for (TiXmlNode *childNode = shortcuts->FirstChildElement("Item"); + childNode ; + childNode = childNode->NextSibling("Item") ) + { + TiXmlElement *element = childNode->ToElement(); + int index; + if (element->Attribute("index", &index)) + { + if (index > -1 && index < 5) { //valid index only + const char *name = element->Attribute("name"); + sm->translateTab(index, name); + } + } + } +} + + TiXmlNode * searchDlgNode(TiXmlNode *node, const char *dlgTagName) { TiXmlNode *dlgNode = node->FirstChild(dlgTagName); @@ -5394,21 +5489,26 @@ bool Notepad_plus::addCurrentMacro() { vector & theMacros = (NppParameters::getInstance())->getMacroList(); - MacroShortcut ms(_macro); + int nbMacro = theMacros.size(); + + int cmdID = ID_MACRO + nbMacro; + MacroShortcut ms(Shortcut(), _macro, cmdID); ms.init(_hInst, _hSelf); + ms._canModifyName = true; + if (ms.doDialog() != -1) { + HMENU hMacroMenu = ::GetSubMenu(_mainMenuHandle, MENUINDEX_MACRO); + int const posBase = 6; //separator at index 5 + if (nbMacro == 0) + { + ::InsertMenu(hMacroMenu, posBase-1, MF_BYPOSITION, (unsigned int)-1, 0); //no separator yet, add one + } + theMacros.push_back(ms); - HMENU hMacroMenu = ::GetSubMenu(::GetMenu(_hSelf), MENUINDEX_MACRO); - int const posBase = 3; - int nbMacro = theMacros.size(); - if (nbMacro == 1) - ::InsertMenu(hMacroMenu, posBase + 1, MF_BYPOSITION, (unsigned int)-1, 0); - //char menuString[64]; - //sprintf(menuString, "%s%s%s", ms._name, "\t", ms.toString().c_str()); - ::InsertMenu(hMacroMenu, posBase + 1 + nbMacro, MF_BYPOSITION, ID_MACRO + nbMacro - 1, ms.toMenuItemString().c_str()); + ::InsertMenu(hMacroMenu, posBase + nbMacro, MF_BYPOSITION, cmdID, ms.toMenuItemString().c_str()); _isMacrosScModified = true; - _accelerator.uptdateShortcuts(); + _accelerator.updateShortcuts(); return true; } return false; @@ -5622,19 +5722,6 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa // Menu _mainMenuHandle = ::GetMenu(_hSelf); - string pluginsTrans, windowTrans; - changeMenuLang(pluginsTrans, windowTrans); - - _windowsMenu.init(_hInst, GetMenu(_hSelf), windowTrans.c_str()); - - - vector & shortcuts = pNppParam->getUserShortcuts(); - for (size_t i = 0 ; i < shortcuts.size() ; i++) - { - changeMenuShortcut(shortcuts[i].getID(), shortcuts[i].toString().c_str()); - } - //::DrawMenuBar(_hSelf); - _pDocTab = &_mainDocTab; _pEditView = &_mainEditView; @@ -5693,10 +5780,6 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa _mainEditView.showWrapSymbol(svp1._wrapSymbolShow); _subEditView.showWrapSymbol(svp2._wrapSymbolShow); - //checkMenuItem(IDM_SETTING_HISTORY_DONT_CHECK, !nppGUI._checkHistoryFiles); - //checkMenuItem(IDM_SETTING_TRAYICON, nppGUI._isMinimizedToTray); - //checkMenuItem(IDM_SETTING_REMEMBER_LAST_SESSION, nppGUI._rememberLastSession); - _mainEditView.performGlobalStyles(); _subEditView.performGlobalStyles(); @@ -5743,7 +5826,6 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa TabBarPlus::setDbClk2Close((tabBarStatus & TAB_DBCLK2CLOSE) != 0); TabBarPlus::setVertical((tabBarStatus & TAB_VERTICAL) != 0); TabBarPlus::setMultiLine((tabBarStatus & TAB_MULTILINE) != 0); - //TabBarPlus::setNoTabBar((tabBarStatus & TAB_NOTABBAR) != 0); //--Splitter Section--// bool isVertical = (nppGUI._splitterPos == POS_VERTICAL); @@ -5760,8 +5842,6 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa _statusBar.setPartWidth(STATUSBAR_UNICODE_TYPE, 100); _statusBar.setPartWidth(STATUSBAR_TYPING_MODE, 30); _statusBar.display(willBeShown); - // - //checkMenuItem(IDM_VIEW_STATUSBAR, willBeShown); _findReplaceDlg.init(_hInst, hwnd, &_pEditView); _incrementFindDlg.init(_hInst, hwnd, &_findReplaceDlg); @@ -5770,8 +5850,6 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa _aboutDlg.init(_hInst, hwnd); _runDlg.init(_hInst, hwnd); _runMacroDlg.init(_hInst, hwnd); - - //checkMenuItem(IDM_SETTING_TAB_REPLCESPACE, nppGUI._tabReplacedBySpace); _pMainWindow = &_mainDocTab; @@ -5811,7 +5889,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa //dynamicCheckMenuAndTB(); _mainEditView.defineDocType(L_TXT); - HMENU hMenu = ::GetSubMenu(::GetMenu(_hSelf), MENUINDEX_FILE); + HMENU hMenu = ::GetSubMenu(_mainMenuHandle, MENUINDEX_FILE); int nbLRFile = pNppParam->getNbLRFile(); @@ -5839,73 +5917,57 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa checkSyncState(); - // Macro Menu - std::vector & macros = pNppParam->getMacroList(); - HMENU hMacroMenu = ::GetSubMenu(::GetMenu(_hSelf), MENUINDEX_MACRO); - size_t const posBase = 4; - size_t nbMacro = macros.size(); - if (nbMacro >= 1) - ::InsertMenu(hMacroMenu, posBase + 1, MF_BYPOSITION, (unsigned int)-1, 0); - for (size_t i = 0 ; i < nbMacro ; i++) - { - ::InsertMenu(hMacroMenu, posBase + i + 2, MF_BYPOSITION, ID_MACRO + i, macros[i].toMenuItemString().c_str()); - } - // Run Menu - std::vector & userCommands = pNppParam->getUserCommandList(); - HMENU hRunMenu = ::GetSubMenu(::GetMenu(_hSelf), MENUINDEX_RUN); - int const runPosBase = 1; - size_t nbUserCommand = userCommands.size(); - if (nbUserCommand >= 1) - ::InsertMenu(hRunMenu, runPosBase + 1, MF_BYPOSITION, (unsigned int)-1, 0); - for (size_t i = 0 ; i < nbUserCommand ; i++) - { - ::InsertMenu(hRunMenu, runPosBase + i + 2, MF_BYPOSITION, ID_USER_CMD + i, userCommands[i].toMenuItemString().c_str()); - } - - _scintillaCtrls4Plugins.init(_hInst, hwnd); - - // Updater menu item - if (!nppGUI._doesExistUpdater) - { - //::MessageBox(NULL, "pas de updater", "", MB_OK); - ::DeleteMenu(::GetMenu(_hSelf), IDM_UPDATE_NPP, MF_BYCOMMAND); - ::DrawMenuBar(hwnd); - } // Plugin Manager NppData nppData; nppData._nppHandle = _hSelf; nppData._scintillaMainHandle = _mainEditView.getHSelf(); nppData._scintillaSecondHandle = _subEditView.getHSelf(); + _scintillaCtrls4Plugins.init(_hInst, hwnd); + _pluginsManager.init(nppData); - - //if (!pNppParam->isNoPlugin()) _pluginsManager.loadPlugins(); - const char *appDataNpp = pNppParam->getAppDataNppDir(); if (appDataNpp[0]) _pluginsManager.loadPlugins(appDataNpp); - _pluginsManager.setMenu(::GetMenu(_hSelf), pluginsTrans.c_str()); + // Menu + string pluginsTrans, windowTrans; + changeMenuLang(pluginsTrans, windowTrans); - // To notify plugins that toolbar icons can be registered - SCNotification scnN; - scnN.nmhdr.code = NPPN_TBMODIFICATION; - scnN.nmhdr.hwndFrom = _hSelf; - scnN.nmhdr.idFrom = 0; - _pluginsManager.notify(&scnN); + // Macro Menu + std::vector & macros = pNppParam->getMacroList(); + HMENU hMacroMenu = ::GetSubMenu(_mainMenuHandle, MENUINDEX_MACRO); + size_t const posBase = 6; + size_t nbMacro = macros.size(); + if (nbMacro >= 1) + ::InsertMenu(hMacroMenu, posBase - 1, MF_BYPOSITION, (unsigned int)-1, 0); + for (size_t i = 0 ; i < nbMacro ; i++) + { + ::InsertMenu(hMacroMenu, posBase + i, MF_BYPOSITION, ID_MACRO + i, macros[i].toMenuItemString().c_str()); + } + // Run Menu + std::vector & userCommands = pNppParam->getUserCommandList(); + HMENU hRunMenu = ::GetSubMenu(_mainMenuHandle, MENUINDEX_RUN); + int const runPosBase = 2; + size_t nbUserCommand = userCommands.size(); + if (nbUserCommand >= 1) + ::InsertMenu(hRunMenu, runPosBase - 1, MF_BYPOSITION, (unsigned int)-1, 0); + for (size_t i = 0 ; i < nbUserCommand ; i++) + { + ::InsertMenu(hRunMenu, runPosBase + i, MF_BYPOSITION, ID_USER_CMD + i, userCommands[i].toMenuItemString().c_str()); + } - // Shortcut Accelerator : should be the last one since it will cacpture all the shortcut - _accelerator.init(::LoadAccelerators(_hInst, MAKEINTRESOURCE(IDR_NPP_ACCELERATORS))); - - if (_accelerator.uptdateShortcuts(hwnd)) - _isCmdScModified = true; - - pNppParam->setAccelerator(&_accelerator); - + // Updater menu item + if (!nppGUI._doesExistUpdater) + { + //::MessageBox(NULL, "pas de updater", "", MB_OK); + ::DeleteMenu(_mainMenuHandle, IDM_UPDATE_NPP, MF_BYCOMMAND); + ::DrawMenuBar(hwnd); + } //Languages Menu - hMenu = ::GetSubMenu(::GetMenu(_hSelf), MENUINDEX_LANGUAGE); + hMenu = ::GetSubMenu(_mainMenuHandle, MENUINDEX_LANGUAGE); // Add external languages to menu for (int i = 0 ; i < pNppParam->getNbExternalLang() ; i++) @@ -5947,6 +6009,14 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa ::InsertMenu(hMenu, pos + i, MF_BYPOSITION, IDM_LANG_USER + i + 1, userLangContainer.getName()); } + //Plugin menu + _pluginsManager.setMenu(_mainMenuHandle, pluginsTrans.c_str()); + + //Windows menu + _windowsMenu.init(_hInst, _mainMenuHandle, windowTrans.c_str()); + + //The menu is loaded, add in all the accelerators + // Update context menu strings vector & tmp = pNppParam->getContextMenuItems(); size_t len = tmp.size(); @@ -5975,8 +6045,73 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa } } + + //Input all the menu item names into shortcut list + //This will automatically do all translations, since menu translation has been done already + vector & shortcuts = pNppParam->getUserShortcuts(); + len = shortcuts.size(); + int readI, writeI; + for(size_t i = 0; i < len; i++) { + CommandShortcut csc = shortcuts[i]; + if (!csc._name[0]) { + if (::GetMenuString(_mainMenuHandle, csc.getID(), csc._name, 64, MF_BYCOMMAND)) { + readI = 0; writeI = 0; + while(csc._name[readI] != 0) + { + if (csc._name[readI] == '&') + { + readI++; + continue; + } + if (csc._name[readI] == '\t') + { + csc._name[writeI] = 0; + break; + } + csc._name[writeI] = csc._name[readI]; + writeI++; + readI++; + } + csc._name[writeI] = 0; + } + } + shortcuts[i] = csc; + } + + //Translate non-menu shortcuts + changeShortcutLang(); + + //Update plugin shortcuts, all plugin commands should be available now + pNppParam->reloadPluginCmds(); + + // Shortcut Accelerator : should be the last one since it will capture all the shortcuts + _accelerator.init(::LoadAccelerators(_hInst, MAKEINTRESOURCE(IDR_NPP_ACCELERATORS)), _mainMenuHandle, _hSelf); + pNppParam->setAccelerator(&_accelerator); + + if (_accelerator.updateShortcuts()) + _isCmdScModified = true; + + // Scintilla key accelerator + vector scints; + scints.push_back(_mainEditView.getHSelf()); + scints.push_back(_subEditView.getHSelf()); + _scintaccelerator.init(&scints, _mainMenuHandle, _hSelf); + + pNppParam->setScintillaAccelerator(&_scintaccelerator); + _scintaccelerator.updateKeys(); + + ::DrawMenuBar(_hSelf); + + //-- Tool Bar Section --// toolBarStatusType tbStatus = nppGUI._toolBarStatus; + + // To notify plugins that toolbar icons can be registered + SCNotification scnN; + scnN.nmhdr.code = NPPN_TBMODIFICATION; + scnN.nmhdr.hwndFrom = _hSelf; + scnN.nmhdr.idFrom = 0; + _pluginsManager.notify(&scnN); // TB_LARGE par default int iconSize = 32; @@ -6745,9 +6880,9 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa && (deltaLastLine >= 0)) // and no lines removed? break; // exit - // Update the line count, but only if the number of lines is shrinking. + // Update the line count, but only if the number of lines remaining is shrinking. // Otherwise, the macro playback may never end. - if (deltaLastLine < 0) + if (deltaLastLine < deltaCurrLine) lastLine += deltaLastLine; // save current line @@ -6859,7 +6994,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa case NPPM_INTERNAL_CMDLIST_MODIFIED : { _isCmdScModified = true; - changeMenuShortcut(lParam, (const char *)wParam); + //changeMenuShortcut(lParam, (const char *)wParam); ::DrawMenuBar(_hSelf); return TRUE; } @@ -7547,6 +7682,7 @@ bool Notepad_plus::getIntegralDockingData(tTbData & dockData, int & iCont, bool return false; } +/* void Notepad_plus::changeMenuShortcut(unsigned long cmdID, const char *shortcutStr) { char cmdName[64]; @@ -7563,7 +7699,7 @@ void Notepad_plus::changeMenuShortcut(unsigned long cmdID, const char *shortcutS itemStr += shortcutStr; ::ModifyMenu(_mainMenuHandle, cmdID, MF_BYCOMMAND, cmdID, itemStr.c_str()); } - +*/ void Notepad_plus::getCurrentOpenedFiles(Session & session) { @@ -7826,3 +7962,5 @@ winVer getWindowsVersion() return WV_UNKNOWN; } + + diff --git a/PowerEditor/src/Notepad_plus.h b/PowerEditor/src/Notepad_plus.h index 029d0980f..45649e1bb 100644 --- a/PowerEditor/src/Notepad_plus.h +++ b/PowerEditor/src/Notepad_plus.h @@ -290,8 +290,7 @@ public: }; void saveShortcuts() { - if (_isCmdScModified || _isMacrosScModified || _isUserCmdScModified || _isScintillaKeyModified || _isPluginCmdScModified) - (NppParameters::getInstance())->writeShortcuts(_isCmdScModified, _isMacrosScModified, _isUserCmdScModified, _isScintillaKeyModified, _isPluginCmdScModified); + NppParameters::getInstance()->writeShortcuts(); }; void saveSession(const Session & session){ @@ -310,6 +309,8 @@ public: void changeUserDefineLang(); void changeMenuLang(string & pluginsTrans, string & windowTrans); void changePrefereceDlgLang(); + void changeShortcutLang(); + void changeShortcutmapperLang(ShortcutMapper * sm); const char * getNativeTip(int btnID); void changeToolBarIcons(); @@ -451,6 +452,7 @@ private: int _zoomOriginalValue; Accelerator _accelerator; + ScintillaAccelerator _scintaccelerator; bool _isCmdScModified; bool _isMacrosScModified; @@ -507,7 +509,7 @@ private: HWND _hParent; } _scintillaCtrls4Plugins; - vector> _hideLinesMarks; + vector > _hideLinesMarks; static LRESULT CALLBACK Notepad_plus_Proc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam); LRESULT runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam); @@ -833,7 +835,6 @@ private: void getMatchedFileNames(const char *dir, const vector & patterns, vector & fileNames, bool isRecursive); void doSynScorll(HWND hW); - void changeMenuShortcut(unsigned long cmdID, const char *shortcutStr); void setWorkingDir(char *dir) { if (NppParameters::getInstance()->getNppGUI()._saveOpenKeepInSameDir) return; diff --git a/PowerEditor/src/Notepad_plus.rc b/PowerEditor/src/Notepad_plus.rc index 26d90be64..e2b6e1dbc 100644 --- a/PowerEditor/src/Notepad_plus.rc +++ b/PowerEditor/src/Notepad_plus.rc @@ -9,7 +9,7 @@ version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License @@ -22,32 +22,32 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "menuCmdID.h" VS_VERSION_INFO VERSIONINFO -FILEVERSION VERSION_DIGITALVALUE -PRODUCTVERSION VERSION_DIGITALVALUE -FILEFLAGSMASK 0x3fL +FILEVERSION VERSION_DIGITALVALUE +PRODUCTVERSION VERSION_DIGITALVALUE +FILEFLAGSMASK 0x3fL FILEFLAGS 0 FILEOS VOS_NT_WINDOWS32 FILETYPE VFT_APP FILESUBTYPE VFT2_UNKNOWN BEGIN - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "Don HO don.h@free.fr\0" - VALUE "FileDescription", "Notepad++ : a free (GNU) source code editor\0" - VALUE "FileVersion", VERSION_VALUE - VALUE "InternalName", "npp.exe\0" - VALUE "LegalCopyright", "Copyleft 1998-2006 by Don HO\0" - VALUE "OriginalFilename", "Notepad++.exe\0" - VALUE "ProductName", "Notepad++\0" - VALUE "ProductVersion", VERSION_VALUE - END - END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "Don HO don.h@free.fr\0" + VALUE "FileDescription", "Notepad++ : a free (GNU) source code editor\0" + VALUE "FileVersion", VERSION_VALUE + VALUE "InternalName", "npp.exe\0" + VALUE "LegalCopyright", "Copyleft 1998-2006 by Don HO\0" + VALUE "OriginalFilename", "Notepad++.exe\0" + VALUE "ProductName", "Notepad++\0" + VALUE "ProductVersion", VERSION_VALUE + END + END END // The GCC resouce compiler has different behavior the M$ resource compiler @@ -121,374 +121,374 @@ END // remains consistent on all systems. IDI_M30ICON ICON "icons\\npp.ico" IDI_NEW_OFF_ICON ICON "icons\\new_off.ico" -IDI_OPEN_OFF_ICON ICON "icons\\open_off.ico" -IDI_SAVE_OFF_ICON ICON "icons\\save_off.ico" +IDI_OPEN_OFF_ICON ICON "icons\\open_off.ico" +IDI_SAVE_OFF_ICON ICON "icons\\save_off.ico" IDI_SAVEALL_OFF_ICON ICON "icons\\saveall_off.ico" -IDI_CLOSE_OFF_ICON ICON "icons\\supp_off.ico" -IDI_CLOSEALL_OFF_ICON ICON "icons\\suppall_off.ico" +IDI_CLOSE_OFF_ICON ICON "icons\\supp_off.ico" +IDI_CLOSEALL_OFF_ICON ICON "icons\\suppall_off.ico" IDI_CUT_OFF_ICON ICON "icons\\cut_off.ico" -IDI_COPY_OFF_ICON ICON "icons\\dupli_off.ico" -IDI_PASTE_OFF_ICON ICON "icons\\paste_off.ico" -IDI_UNDO_OFF_ICON ICON "icons\\undo_off.ico" -IDI_REDO_OFF_ICON ICON "icons\\redo_off.ico" -IDI_FIND_OFF_ICON ICON "icons\\find_off.ico" +IDI_COPY_OFF_ICON ICON "icons\\dupli_off.ico" +IDI_PASTE_OFF_ICON ICON "icons\\paste_off.ico" +IDI_UNDO_OFF_ICON ICON "icons\\undo_off.ico" +IDI_REDO_OFF_ICON ICON "icons\\redo_off.ico" +IDI_FIND_OFF_ICON ICON "icons\\find_off.ico" IDI_REPLACE_OFF_ICON ICON "icons\\findrep_off.ico" -IDI_ZOOMIN_OFF_ICON ICON "icons\\zoomIn_off.ico" -IDI_ZOOMOUT_OFF_ICON ICON "icons\\zoomOut_off.ico" -IDI_VIEW_UD_DLG_OFF_ICON ICON "icons\\userDefineDlg_off.ico" -IDI_VIEW_ALL_CHAR_OFF_ICON ICON "icons\\allChars_off.ico" -IDI_VIEW_INDENT_OFF_ICON ICON "icons\\indentGuide_off.ico" -IDI_VIEW_WRAP_OFF_ICON ICON "icons\\wrap_off.ico" -IDI_PRINT_OFF_ICON ICON "icons\\imprim_off.ico" +IDI_ZOOMIN_OFF_ICON ICON "icons\\zoomIn_off.ico" +IDI_ZOOMOUT_OFF_ICON ICON "icons\\zoomOut_off.ico" +IDI_VIEW_UD_DLG_OFF_ICON ICON "icons\\userDefineDlg_off.ico" +IDI_VIEW_ALL_CHAR_OFF_ICON ICON "icons\\allChars_off.ico" +IDI_VIEW_INDENT_OFF_ICON ICON "icons\\indentGuide_off.ico" +IDI_VIEW_WRAP_OFF_ICON ICON "icons\\wrap_off.ico" +IDI_PRINT_OFF_ICON ICON "icons\\imprim_off.ico" IDI_NEW_ON_ICON ICON "icons\\new_on.ico" IDI_OPEN_ON_ICON ICON "icons\\open_on.ico" IDI_SAVE_ON_ICON ICON "icons\\save_on.ico" IDI_SAVEALL_ON_ICON ICON "icons\\saveall_on.ico" -IDI_CLOSE_ON_ICON ICON "icons\\supp_on.ico" +IDI_CLOSE_ON_ICON ICON "icons\\supp_on.ico" IDI_CLOSEALL_ON_ICON ICON "icons\\suppall_on.ico" IDI_CUT_ON_ICON ICON "icons\\cut_on.ico" IDI_COPY_ON_ICON ICON "icons\\dupli_on.ico" -IDI_PASTE_ON_ICON ICON "icons\\paste_on.ico" +IDI_PASTE_ON_ICON ICON "icons\\paste_on.ico" IDI_UNDO_ON_ICON ICON "icons\\undo_on.ico" IDI_REDO_ON_ICON ICON "icons\\redo_on.ico" IDI_FIND_ON_ICON ICON "icons\\find_on.ico" IDI_REPLACE_ON_ICON ICON "icons\\findrep_on.ico" -IDI_ZOOMIN_ON_ICON ICON "icons\\zoomIn_on.ico" -IDI_ZOOMOUT_ON_ICON ICON "icons\\zoomOut_on.ico" -IDI_VIEW_UD_DLG_ON_ICON ICON "icons\\userDefineDlg_on.ico" -IDI_VIEW_ALL_CHAR_ON_ICON ICON "icons\\allChars_on.ico" -IDI_VIEW_INDENT_ON_ICON ICON "icons\\indentGuide_on.ico" -IDI_VIEW_WRAP_ON_ICON ICON "icons\\wrap_on.ico" -IDI_PRINT_ON_ICON ICON "icons\\imprim_on.ico" +IDI_ZOOMIN_ON_ICON ICON "icons\\zoomIn_on.ico" +IDI_ZOOMOUT_ON_ICON ICON "icons\\zoomOut_on.ico" +IDI_VIEW_UD_DLG_ON_ICON ICON "icons\\userDefineDlg_on.ico" +IDI_VIEW_ALL_CHAR_ON_ICON ICON "icons\\allChars_on.ico" +IDI_VIEW_INDENT_ON_ICON ICON "icons\\indentGuide_on.ico" +IDI_VIEW_WRAP_ON_ICON ICON "icons\\wrap_on.ico" +IDI_PRINT_ON_ICON ICON "icons\\imprim_on.ico" IDI_SAVE_DISABLE_ICON ICON "icons\\save_dis.ico" IDI_SAVEALL_DISABLE_ICON ICON "icons\\saveall_dis.ico" IDI_CUT_DISABLE_ICON ICON "icons\\cut_dis.ico" IDI_COPY_DISABLE_ICON ICON "icons\\dupli_dis.ico" -IDI_PASTE_DISABLE_ICON ICON "icons\\paste_dis.ico" +IDI_PASTE_DISABLE_ICON ICON "icons\\paste_dis.ico" IDI_UNDO_DISABLE_ICON ICON "icons\\undo_dis.ico" IDI_REDO_DISABLE_ICON ICON "icons\\redo_dis.ico" // -IDI_SAVED_ICON ICON "icons\\saved.ico" -IDI_UNSAVED_ICON ICON "icons\\unsaved.ico" -IDI_READONLY_ICON ICON "icons\\readonly.ico" -IDI_DELETE_ICON ICON "icons\\delete.ico" +IDI_SAVED_ICON ICON "icons\\saved.ico" +IDI_UNSAVED_ICON ICON "icons\\unsaved.ico" +IDI_READONLY_ICON ICON "icons\\readonly.ico" +IDI_DELETE_ICON ICON "icons\\delete.ico" -IDI_FIND_RESULT_ICON ICON "icons\\findResult.ico" +IDI_FIND_RESULT_ICON ICON "icons\\findResult.ico" -IDC_DRAG_TAB CURSOR "cursors\\drag.cur" -IDC_DRAG_INTERDIT_TAB CURSOR "cursors\\drag_interdit.cur" -IDC_DRAG_PLUS_TAB CURSOR "cursors\\drag_plus.cur" +IDC_DRAG_TAB CURSOR "cursors\\drag.cur" +IDC_DRAG_INTERDIT_TAB CURSOR "cursors\\drag_interdit.cur" +IDC_DRAG_PLUS_TAB CURSOR "cursors\\drag_plus.cur" -IDR_FILENEW BITMAP "icons\\newFile.bmp" -IDR_FILEOPEN BITMAP "icons\\openFile.bmp" -IDR_FILESAVE BITMAP "icons\\saveFile.bmp" -IDR_SAVEALL BITMAP "icons\\saveAll.bmp" -IDR_CLOSEFILE BITMAP "icons\\closeFile.bmp" -IDR_CLOSEALL BITMAP "icons\\closeAll.bmp" -IDR_FIND BITMAP "icons\\find.bmp" -IDR_REPLACE BITMAP "icons\\findReplace.bmp" -IDR_ZOOMIN BITMAP "icons\\zoomIn.bmp" -IDR_ZOOMOUT BITMAP "icons\\zoomOut.bmp" -IDR_WRAP BITMAP "icons\\wrap.bmp" -IDR_INVISIBLECHAR BITMAP "icons\\invisibleChar.bmp" -IDR_INDENTGUIDE BITMAP "icons\\indentGuide.bmp" -IDR_SHOWPANNEL BITMAP "icons\\showPannel.bmp" -IDR_STARTRECORD BITMAP "icons\\startRecord.bmp" -IDR_STOPRECORD BITMAP "icons\\stopRecord.bmp" -IDR_PLAYRECORD BITMAP "icons\\playRecord.bmp" -IDR_M_PLAYRECORD BITMAP "icons\\playRecord_m.bmp" -IDR_SAVERECORD BITMAP "icons\\saveRecord.bmp" -IDR_CUT BITMAP "icons\\cut.bmp" -IDR_COPY BITMAP "icons\\copy.bmp" -IDR_PASTE BITMAP "icons\\paste.bmp" -IDR_UNDO BITMAP "icons\\undo.bmp" -IDR_REDO BITMAP "icons\\redo.bmp" +IDR_FILENEW BITMAP "icons\\newFile.bmp" +IDR_FILEOPEN BITMAP "icons\\openFile.bmp" +IDR_FILESAVE BITMAP "icons\\saveFile.bmp" +IDR_SAVEALL BITMAP "icons\\saveAll.bmp" +IDR_CLOSEFILE BITMAP "icons\\closeFile.bmp" +IDR_CLOSEALL BITMAP "icons\\closeAll.bmp" +IDR_FIND BITMAP "icons\\find.bmp" +IDR_REPLACE BITMAP "icons\\findReplace.bmp" +IDR_ZOOMIN BITMAP "icons\\zoomIn.bmp" +IDR_ZOOMOUT BITMAP "icons\\zoomOut.bmp" +IDR_WRAP BITMAP "icons\\wrap.bmp" +IDR_INVISIBLECHAR BITMAP "icons\\invisibleChar.bmp" +IDR_INDENTGUIDE BITMAP "icons\\indentGuide.bmp" +IDR_SHOWPANNEL BITMAP "icons\\showPannel.bmp" +IDR_STARTRECORD BITMAP "icons\\startRecord.bmp" +IDR_STOPRECORD BITMAP "icons\\stopRecord.bmp" +IDR_PLAYRECORD BITMAP "icons\\playRecord.bmp" +IDR_M_PLAYRECORD BITMAP "icons\\playRecord_m.bmp" +IDR_SAVERECORD BITMAP "icons\\saveRecord.bmp" +IDR_CUT BITMAP "icons\\cut.bmp" +IDR_COPY BITMAP "icons\\copy.bmp" +IDR_PASTE BITMAP "icons\\paste.bmp" +IDR_UNDO BITMAP "icons\\undo.bmp" +IDR_REDO BITMAP "icons\\redo.bmp" -IDR_SYNCV BITMAP "icons\\syncV.bmp" -IDR_SYNCH BITMAP "icons\\syncH.bmp" -IDR_PRINT BITMAP "icons\\print.bmp" +IDR_SYNCV BITMAP "icons\\syncV.bmp" +IDR_SYNCH BITMAP "icons\\syncH.bmp" +IDR_PRINT BITMAP "icons\\print.bmp" IDR_CLOSETAB BITMAP "icons\\closeTabButton.bmp" IDR_CLOSETAB_INACT BITMAP "icons\\closeTabButton_inact.bmp" IDR_CLOSETAB_HOVER BITMAP "icons\\closeTabButton_hover.bmp" IDR_CLOSETAB_PUSH BITMAP "icons\\closeTabButton_push.bmp" IDI_STARTRECORD_OFF_ICON ICON "icons\\startrecord_off.ico" -IDI_STARTRECORD_ON_ICON ICON "icons\\startrecord_on.ico" -IDI_STARTRECORD_DISABLE_ICON ICON "icons\\startrecord_dis.ico" -IDI_STOPRECORD_OFF_ICON ICON "icons\\stoprecord_off.ico" -IDI_STOPRECORD_ON_ICON ICON "icons\\stoprecord_on.ico" -IDI_STOPRECORD_DISABLE_ICON ICON "icons\\stoprecord_dis.ico" -IDI_PLAYRECORD_OFF_ICON ICON "icons\\playrecord_off.ico" -IDI_PLAYRECORD_ON_ICON ICON "icons\\playrecord_on.ico" -IDI_PLAYRECORD_DISABLE_ICON ICON "icons\\playrecord_dis.ico" -IDI_SAVERECORD_OFF_ICON ICON "icons\\saverecord_off.ico" -IDI_SAVERECORD_ON_ICON ICON "icons\\saverecord_on.ico" -IDI_SAVERECORD_DISABLE_ICON ICON "icons\\saverecord_dis.ico" +IDI_STARTRECORD_ON_ICON ICON "icons\\startrecord_on.ico" +IDI_STARTRECORD_DISABLE_ICON ICON "icons\\startrecord_dis.ico" +IDI_STOPRECORD_OFF_ICON ICON "icons\\stoprecord_off.ico" +IDI_STOPRECORD_ON_ICON ICON "icons\\stoprecord_on.ico" +IDI_STOPRECORD_DISABLE_ICON ICON "icons\\stoprecord_dis.ico" +IDI_PLAYRECORD_OFF_ICON ICON "icons\\playrecord_off.ico" +IDI_PLAYRECORD_ON_ICON ICON "icons\\playrecord_on.ico" +IDI_PLAYRECORD_DISABLE_ICON ICON "icons\\playrecord_dis.ico" +IDI_SAVERECORD_OFF_ICON ICON "icons\\saverecord_off.ico" +IDI_SAVERECORD_ON_ICON ICON "icons\\saverecord_on.ico" +IDI_SAVERECORD_DISABLE_ICON ICON "icons\\saverecord_dis.ico" -IDI_SYNCV_OFF_ICON ICON "icons\\syncV_off.ico" -IDI_SYNCV_ON_ICON ICON "icons\\syncV_on.ico" -IDI_SYNCV_DISABLE_ICON ICON "icons\\syncV_dis.ico" -IDI_SYNCH_OFF_ICON ICON "icons\\syncH_off.ico" -IDI_SYNCH_ON_ICON ICON "icons\\syncH_on.ico" -IDI_SYNCH_DISABLE_ICON ICON "icons\\syncH_dis.ico" +IDI_SYNCV_OFF_ICON ICON "icons\\syncV_off.ico" +IDI_SYNCV_ON_ICON ICON "icons\\syncV_on.ico" +IDI_SYNCV_DISABLE_ICON ICON "icons\\syncV_dis.ico" +IDI_SYNCH_OFF_ICON ICON "icons\\syncH_off.ico" +IDI_SYNCH_ON_ICON ICON "icons\\syncH_on.ico" +IDI_SYNCH_DISABLE_ICON ICON "icons\\syncH_dis.ico" // multi run macro IDI_MMPLAY_DIS_ICON ICON "icons\\playrecord_m_dis.ico" IDI_MMPLAY_OFF_ICON ICON "icons\\playrecord_m_off.ico" -IDI_MMPLAY_ON_ICON ICON "icons\\playrecord_m_on.ico" +IDI_MMPLAY_ON_ICON ICON "icons\\playrecord_m_on.ico" IDR_M30_MENU MENU BEGIN POPUP "&File" BEGIN - MENUITEM "&New\tCtrl+N", IDM_FILE_NEW - MENUITEM "&Open...\tCtrl+O", IDM_FILE_OPEN + MENUITEM "&New", IDM_FILE_NEW + MENUITEM "&Open...", IDM_FILE_OPEN MENUITEM "Re&load from disk", IDM_FILE_RELOAD - MENUITEM "&Save\tCtrl+S", IDM_FILE_SAVE - MENUITEM "Save &As...\tCtrl+Alt+S", IDM_FILE_SAVEAS - MENUITEM "Sav&e All\tCtrl+Shift+S", IDM_FILE_SAVEALL - MENUITEM "&Close\tCtrl+W", IDM_FILE_CLOSE - MENUITEM "Cl&ose All", IDM_FILE_CLOSEALL - MENUITEM "Close All but Active Document", IDM_FILE_CLOSEALL_BUT_CURRENT - MENUITEM SEPARATOR - MENUITEM "Load Session...", IDM_FILE_LOADSESSION - MENUITEM "Save Session...", IDM_FILE_SAVESESSION - MENUITEM SEPARATOR - MENUITEM "Print...\tCtrl+P", IDM_FILE_PRINT - MENUITEM "Print Now!", IDM_FILE_PRINTNOW - MENUITEM SEPARATOR - MENUITEM "E&xit\tAlt+F4", IDM_FILE_EXIT + MENUITEM "&Save", IDM_FILE_SAVE + MENUITEM "Save &As...", IDM_FILE_SAVEAS + MENUITEM "Sav&e All", IDM_FILE_SAVEALL + MENUITEM "&Close", IDM_FILE_CLOSE + MENUITEM "Cl&ose All", IDM_FILE_CLOSEALL + MENUITEM "Close All but Active Document", IDM_FILE_CLOSEALL_BUT_CURRENT + MENUITEM SEPARATOR + MENUITEM "Load Session...", IDM_FILE_LOADSESSION + MENUITEM "Save Session...", IDM_FILE_SAVESESSION + MENUITEM SEPARATOR + MENUITEM "Print...", IDM_FILE_PRINT + MENUITEM "Print Now!", IDM_FILE_PRINTNOW + MENUITEM SEPARATOR + MENUITEM "E&xit", IDM_FILE_EXIT END POPUP "&Edit" BEGIN - MENUITEM "&Undo\tCtrl+Z", IDM_EDIT_UNDO - MENUITEM "&Redo\tCtrl+Y", IDM_EDIT_REDO + MENUITEM "&Undo", IDM_EDIT_UNDO + MENUITEM "&Redo", IDM_EDIT_REDO MENUITEM SEPARATOR - MENUITEM "Cu&t\tCtrl+X", IDM_EDIT_CUT - MENUITEM "&Copy\tCtrl+C", IDM_EDIT_COPY - MENUITEM "&Paste\tCtrl+V", IDM_EDIT_PASTE - MENUITEM "&Delete\tDel", IDM_EDIT_DELETE - MENUITEM "Select A&ll\tCtrl+A", IDM_EDIT_SELECTALL - MENUITEM SEPARATOR - MENUITEM "Copy Current full file path to Clipboard", IDM_EDIT_FULLPATHTOCLIP - MENUITEM "Copy Current file name to Clipboard", IDM_EDIT_FILENAMETOCLIP - MENUITEM "Copy Current dir path to Clipboard", IDM_EDIT_CURRENTDIRTOCLIP - MENUITEM SEPARATOR - MENUITEM "Insert TAB (Indent)\tTAB", IDM_EDIT_INS_TAB - MENUITEM "Remove TAB (Outdent)\tShift+TAB", IDM_EDIT_RMV_TAB - MENUITEM "Duplicate current line\tCtrl+D", IDM_EDIT_DUP_LINE - MENUITEM "Split lines\tCtrl+I", IDM_EDIT_SPLIT_LINES - MENUITEM "Join lines\tCtrl+J", IDM_EDIT_JOIN_LINES - MENUITEM "Move Up current line\tCtrl+Shift+Up", IDM_EDIT_LINE_UP - MENUITEM "Move Down current line\tCtrl+Shift+Down", IDM_EDIT_LINE_DOWN - MENUITEM "Trim Trailing Space", IDM_EDIT_TRIMTRAILING - MENUITEM SEPARATOR - MENUITEM "Column Editor...\tAlt+C", IDM_EDIT_COLUMNMODE - MENUITEM SEPARATOR - MENUITEM "to &Upper case\tCtrl+Shift+U", IDM_EDIT_UPPERCASE - MENUITEM "to &Lower case\tCtrl+U", IDM_EDIT_LOWERCASE - MENUITEM SEPARATOR - MENUITEM "Block toggle comment \tCtrl+Q", IDM_EDIT_BLOCK_COMMENT - MENUITEM "Block comment\tCtrl+K", IDM_EDIT_BLOCK_COMMENT_SET - MENUITEM "Block uncomment\tCtrl+Shift+K", IDM_EDIT_BLOCK_UNCOMMENT - MENUITEM "Stream comment\tCtrl+Shift+Q", IDM_EDIT_STREAM_COMMENT - MENUITEM SEPARATOR - MENUITEM "Function completion\tCtrl+SPACE", IDM_EDIT_AUTOCOMPLETE - MENUITEM "Word completion\tCtrl+Shift+SPACE", IDM_EDIT_AUTOCOMPLETE_CURRENTFILE - MENUITEM SEPARATOR - MENUITEM "Set Read Only", IDM_EDIT_SETREADONLY - MENUITEM "Clear Read Only Flag", IDM_EDIT_CLEARREADONLY - MENUITEM SEPARATOR - MENUITEM "Text Direction RTL\tCtrl+Alt+R", IDM_EDIT_RTL - MENUITEM "Text Direction LTR\tCtrl+Alt+L", IDM_EDIT_LTR + MENUITEM "Cu&t", IDM_EDIT_CUT + MENUITEM "&Copy", IDM_EDIT_COPY + MENUITEM "&Paste", IDM_EDIT_PASTE + MENUITEM "&Delete", IDM_EDIT_DELETE + MENUITEM "Select A&ll", IDM_EDIT_SELECTALL + MENUITEM SEPARATOR + MENUITEM "Copy Current full file path to Clipboard", IDM_EDIT_FULLPATHTOCLIP + MENUITEM "Copy Current file name to Clipboard", IDM_EDIT_FILENAMETOCLIP + MENUITEM "Copy Current dir path to Clipboard", IDM_EDIT_CURRENTDIRTOCLIP + MENUITEM SEPARATOR + MENUITEM "Insert TAB (Indent)", IDM_EDIT_INS_TAB + MENUITEM "Remove TAB (Outdent)", IDM_EDIT_RMV_TAB + MENUITEM "Duplicate current line", IDM_EDIT_DUP_LINE + MENUITEM "Split lines", IDM_EDIT_SPLIT_LINES + MENUITEM "Join lines", IDM_EDIT_JOIN_LINES + MENUITEM "Move Up current line", IDM_EDIT_LINE_UP + MENUITEM "Move Down current line", IDM_EDIT_LINE_DOWN + MENUITEM "Trim Trailing Space", IDM_EDIT_TRIMTRAILING + MENUITEM SEPARATOR + MENUITEM "Column Editor...", IDM_EDIT_COLUMNMODE + MENUITEM SEPARATOR + MENUITEM "to &Upper case", IDM_EDIT_UPPERCASE + MENUITEM "to &Lower case", IDM_EDIT_LOWERCASE + MENUITEM SEPARATOR + MENUITEM "Block toggle comment ", IDM_EDIT_BLOCK_COMMENT + MENUITEM "Block comment", IDM_EDIT_BLOCK_COMMENT_SET + MENUITEM "Block uncomment", IDM_EDIT_BLOCK_UNCOMMENT + MENUITEM "Stream comment", IDM_EDIT_STREAM_COMMENT + MENUITEM SEPARATOR + MENUITEM "Function completion", IDM_EDIT_AUTOCOMPLETE + MENUITEM "Word completion", IDM_EDIT_AUTOCOMPLETE_CURRENTFILE + MENUITEM SEPARATOR + MENUITEM "Set Read Only", IDM_EDIT_SETREADONLY + MENUITEM "Clear Read Only Flag", IDM_EDIT_CLEARREADONLY + MENUITEM SEPARATOR + MENUITEM "Text Direction RTL", IDM_EDIT_RTL + MENUITEM "Text Direction LTR", IDM_EDIT_LTR END POPUP "&Search" BEGIN - MENUITEM "&Find...\tCtrl+F", IDM_SEARCH_FIND - MENUITEM "Find in files...\tCtrl+Shift+F", IDM_SEARCH_FINDINFILES - MENUITEM "Find &Next\tF3", IDM_SEARCH_FINDNEXT - MENUITEM "Find &Previous\tShift+F3", IDM_SEARCH_FINDPREV - MENUITEM "Find (volatile) Next\tCtrl+F3", IDM_SEARCH_VOLATILE_FINDNEXT - MENUITEM "Find (volatile) Previous\tCtrl+Shift+F3", IDM_SEARCH_VOLATILE_FINDPREV - MENUITEM "Mark all\tCtrl+M", IDM_SEARCH_MARKALL - MENUITEM "Unmark all\tCtrl+Shift+M", IDM_SEARCH_UNMARKALL - MENUITEM "&Replace...\tCtrl+H", IDM_SEARCH_REPLACE - MENUITEM "&Incremental Search...\tCtrl+Alt+I", IDM_SEARCH_FINDINCREMENT - MENUITEM "&Go to line...\tCtrl+G", IDM_SEARCH_GOTOLINE - MENUITEM SEPARATOR - MENUITEM "Go to matching brace\tCtrl+B", IDM_SEARCH_GOTOMATCHINGBRACE - MENUITEM SEPARATOR - MENUITEM "Toggle Bookmark\tCtrl+F2" , IDM_SEARCH_TOGGLE_BOOKMARK - MENUITEM "Next Bookmark\tF2", IDM_SEARCH_NEXT_BOOKMARK - MENUITEM "Previous Bookmark\tShift+F2", IDM_SEARCH_PREV_BOOKMARK - MENUITEM "Clear all Bookmarks", IDM_SEARCH_CLEAR_BOOKMARKS + MENUITEM "&Find...", IDM_SEARCH_FIND + MENUITEM "Find in files...", IDM_SEARCH_FINDINFILES + MENUITEM "Find &Next", IDM_SEARCH_FINDNEXT + MENUITEM "Find &Previous", IDM_SEARCH_FINDPREV + MENUITEM "Find (volatile) Next", IDM_SEARCH_VOLATILE_FINDNEXT + MENUITEM "Find (volatile) Previous", IDM_SEARCH_VOLATILE_FINDPREV + MENUITEM "Mark all", IDM_SEARCH_MARKALL + MENUITEM "Unmark all", IDM_SEARCH_UNMARKALL + MENUITEM "&Replace...", IDM_SEARCH_REPLACE + MENUITEM "&Incremental Search...", IDM_SEARCH_FINDINCREMENT + MENUITEM "&Go to line...", IDM_SEARCH_GOTOLINE + MENUITEM SEPARATOR + MENUITEM "Go to matching brace", IDM_SEARCH_GOTOMATCHINGBRACE + MENUITEM SEPARATOR + MENUITEM "Toggle Bookmark" , IDM_SEARCH_TOGGLE_BOOKMARK + MENUITEM "Next Bookmark", IDM_SEARCH_NEXT_BOOKMARK + MENUITEM "Previous Bookmark", IDM_SEARCH_PREV_BOOKMARK + MENUITEM "Clear all Bookmarks", IDM_SEARCH_CLEAR_BOOKMARKS END - POPUP "&View" - BEGIN - MENUITEM "Toggle Full Screen Mode\tF11", IDM_VIEW_FULLSCREENTOGGLE - MENUITEM "Always on top", IDM_VIEW_ALWAYSONTOP + POPUP "&View" + BEGIN + MENUITEM "Toggle Full Screen Mode", IDM_VIEW_FULLSCREENTOGGLE + MENUITEM "Always on top", IDM_VIEW_ALWAYSONTOP - MENUITEM SEPARATOR - MENUITEM "Show White Space and TAB", IDM_VIEW_TAB_SPACE - MENUITEM "Show End Of Line", IDM_VIEW_EOL - MENUITEM "Show all characters", IDM_VIEW_ALL_CHARACTERS - MENUITEM SEPARATOR - MENUITEM "Show Indent guide", IDM_VIEW_INDENT_GUIDE - MENUITEM "Wrap", IDM_VIEW_WRAP - MENUITEM "Show wrap symbol", IDM_VIEW_WRAP_SYMBOL - MENUITEM "User Define Dialog...", IDM_VIEW_USER_DLG - MENUITEM SEPARATOR - MENUITEM "Zoom &in\tCtrl-Mouse Wheel Up", IDM_VIEW_ZOOMIN - MENUITEM "Zoom &out\tCtrl-Mouse Wheel Down", IDM_VIEW_ZOOMOUT - MENUITEM "Restore default zoom setting\tCtrl-/(Keypad)", IDM_VIEW_ZOOMRESTORE - MENUITEM SEPARATOR - MENUITEM "Fold all\tAlt+0", IDM_VIEW_TOGGLE_FOLDALL - MENUITEM "Collapse the current level\tCtrl+Alt+F", IDM_VIEW_FOLD_CURRENT - MENUITEM "Uncollapse the current level\tCtrl+Alt+Shift+F", IDM_VIEW_UNFOLD_CURRENT - POPUP "Collapse the level" - BEGIN - MENUITEM "1\tAlt+1" , IDM_VIEW_FOLD_1 - MENUITEM "2\tAlt+2", IDM_VIEW_FOLD_2 - MENUITEM "3\tAlt+3", IDM_VIEW_FOLD_3 - MENUITEM "4\tAlt+4", IDM_VIEW_FOLD_4 - MENUITEM "5\tAlt+5" , IDM_VIEW_FOLD_5 - MENUITEM "6\tAlt+6", IDM_VIEW_FOLD_6 - MENUITEM "7\tAlt+7", IDM_VIEW_FOLD_7 - MENUITEM "8\tAlt+8", IDM_VIEW_FOLD_8 - END - POPUP "Uncollapse the level" - BEGIN - MENUITEM "1\tAlt+Shift+1" , IDM_VIEW_UNFOLD_1 - MENUITEM "2\tAlt+Shift+2", IDM_VIEW_UNFOLD_2 - MENUITEM "3\tAlt+Shift+3", IDM_VIEW_UNFOLD_3 - MENUITEM "4\tAlt+Shift+4", IDM_VIEW_UNFOLD_4 - MENUITEM "5\tAlt+Shift+5" , IDM_VIEW_UNFOLD_5 - MENUITEM "6\tAlt+Shift+6", IDM_VIEW_UNFOLD_6 - MENUITEM "7\tAlt+Shift+7", IDM_VIEW_UNFOLD_7 - MENUITEM "8\tAlt+Shift+8", IDM_VIEW_UNFOLD_8 - END - MENUITEM "Unfold all\tAlt+Shift+0", IDM_VIEW_TOGGLE_UNFOLDALL - MENUITEM SEPARATOR - MENUITEM "Hide lines\tAlt+H", IDM_VIEW_HIDELINES - MENUITEM SEPARATOR - MENUITEM "Go to another view", IDM_VIEW_GOTO_ANOTHER_VIEW - MENUITEM "Clone to another view", IDM_VIEW_CLONE_TO_ANOTHER_VIEW - MENUITEM "Synchronize Vertical Scrolling", IDM_VIEW_SYNSCROLLV - MENUITEM "Synchronize Horizontal Scrolling", IDM_VIEW_SYNSCROLLH - //MENUITEM SEPARATOR - //MENUITEM "Veritcal", IDM_VIEW_DRAWTABBAR_VERTICAL - //MENUITEM "Multiline", IDM_VIEW_DRAWTABBAR_MULTILINE - END - - POPUP "For&mat" - BEGIN - MENUITEM "Convert to Windows Format", IDM_FORMAT_TODOS - MENUITEM "Convert to UNIX Format", IDM_FORMAT_TOUNIX - MENUITEM "Convert to Mac Format", IDM_FORMAT_TOMAC - MENUITEM SEPARATOR - MENUITEM "Encode in ANSI", IDM_FORMAT_ANSI - MENUITEM "Encode in UTF-8 without BOM", IDM_FORMAT_AS_UTF_8 - MENUITEM "Encode in UTF-8", IDM_FORMAT_UTF_8 - MENUITEM "Encode in UCS-2 Big Endian", IDM_FORMAT_UCS_2BE - MENUITEM "Encode in UCS-2 Little Endian", IDM_FORMAT_UCS_2LE - //MENUITEM SEPARATOR - END - - POPUP "&Language" - BEGIN - - MENUITEM "Ada", IDM_LANG_ADA - MENUITEM "ASP", IDM_LANG_ASP - MENUITEM "Assembly", IDM_LANG_ASM - MENUITEM "AutoIt", IDM_LANG_AU3 - MENUITEM "Batch", IDM_LANG_BATCH - MENUITEM "C", IDM_LANG_C - MENUITEM "C#", IDM_LANG_CS - MENUITEM "C++", IDM_LANG_CPP - MENUITEM "Caml", IDM_LANG_CAML - MENUITEM "Cmake", IDM_LANG_CMAKE - MENUITEM "CSS", IDM_LANG_CSS - MENUITEM "Diff", IDM_LANG_DIFF - MENUITEM "Flash actionscript", IDM_LANG_FLASH - MENUITEM "Fortran", IDM_LANG_FORTRAN - MENUITEM "Haskell", IDM_LANG_HASKELL - MENUITEM "HTML", IDM_LANG_HTML - MENUITEM "INNO", IDM_LANG_INNO - MENUITEM "Java", IDM_LANG_JAVA - MENUITEM "Javascript", IDM_LANG_JS - MENUITEM "KIXtart", IDM_LANG_KIX - MENUITEM "LISP", IDM_LANG_LISP - MENUITEM "Lua", IDM_LANG_LUA - MENUITEM "Makefile", IDM_LANG_MAKEFILE - MENUITEM "Matlab", IDM_LANG_MATLAB - MENUITEM "MS INI file", IDM_LANG_INI - MENUITEM "MS-DOS Style", IDM_LANG_ASCII - MENUITEM "Normal Text", IDM_LANG_TEXT - MENUITEM "NSIS", IDM_LANG_NSIS - MENUITEM "Objective-C", IDM_LANG_OBJC - MENUITEM "Pascal", IDM_LANG_PASCAL - MENUITEM "Perl", IDM_LANG_PERL - MENUITEM "PHP", IDM_LANG_PHP - MENUITEM "Postscript", IDM_LANG_PS - MENUITEM "Properties", IDM_LANG_PROPS - MENUITEM "Python", IDM_LANG_PYTHON - MENUITEM "rc resource file", IDM_LANG_RC - MENUITEM "Ruby", IDM_LANG_RUBY - MENUITEM "Shell", IDM_LANG_SH - MENUITEM "Scheme", IDM_LANG_SCHEME - MENUITEM "Smalltalk", IDM_LANG_SMALLTALK - MENUITEM "SQL", IDM_LANG_SQL - MENUITEM "TCL", IDM_LANG_TCL - MENUITEM "TeX", IDM_LANG_TEX - MENUITEM "VB", IDM_LANG_VB - MENUITEM "VHDL", IDM_LANG_VHDL - MENUITEM "Verilog", IDM_LANG_VERILOG - MENUITEM "XML", IDM_LANG_XML - MENUITEM "YAML", IDM_LANG_YAML MENUITEM SEPARATOR - MENUITEM "User Defined", IDM_LANG_USER - END + MENUITEM "Show White Space and TAB", IDM_VIEW_TAB_SPACE + MENUITEM "Show End Of Line", IDM_VIEW_EOL + MENUITEM "Show all characters", IDM_VIEW_ALL_CHARACTERS + MENUITEM SEPARATOR + MENUITEM "Show Indent guide", IDM_VIEW_INDENT_GUIDE + MENUITEM "Wrap", IDM_VIEW_WRAP + MENUITEM "Show wrap symbol", IDM_VIEW_WRAP_SYMBOL + MENUITEM "User Define Dialog...", IDM_VIEW_USER_DLG + MENUITEM SEPARATOR + MENUITEM "Zoom &in", IDM_VIEW_ZOOMIN + MENUITEM "Zoom &out", IDM_VIEW_ZOOMOUT + MENUITEM "Restore default zoom setting", IDM_VIEW_ZOOMRESTORE + MENUITEM SEPARATOR + MENUITEM "Fold all", IDM_VIEW_TOGGLE_FOLDALL + MENUITEM "Collapse the current level", IDM_VIEW_FOLD_CURRENT + MENUITEM "Uncollapse the current level", IDM_VIEW_UNFOLD_CURRENT + POPUP "Collapse the level" + BEGIN + MENUITEM "1" , IDM_VIEW_FOLD_1 + MENUITEM "2", IDM_VIEW_FOLD_2 + MENUITEM "3", IDM_VIEW_FOLD_3 + MENUITEM "4", IDM_VIEW_FOLD_4 + MENUITEM "5" , IDM_VIEW_FOLD_5 + MENUITEM "6", IDM_VIEW_FOLD_6 + MENUITEM "7", IDM_VIEW_FOLD_7 + MENUITEM "8", IDM_VIEW_FOLD_8 + END + POPUP "Uncollapse the level" + BEGIN + MENUITEM "1" , IDM_VIEW_UNFOLD_1 + MENUITEM "2", IDM_VIEW_UNFOLD_2 + MENUITEM "3", IDM_VIEW_UNFOLD_3 + MENUITEM "4", IDM_VIEW_UNFOLD_4 + MENUITEM "5" , IDM_VIEW_UNFOLD_5 + MENUITEM "6", IDM_VIEW_UNFOLD_6 + MENUITEM "7", IDM_VIEW_UNFOLD_7 + MENUITEM "8", IDM_VIEW_UNFOLD_8 + END + MENUITEM "Unfold all", IDM_VIEW_TOGGLE_UNFOLDALL + MENUITEM SEPARATOR + MENUITEM "Hide lines", IDM_VIEW_HIDELINES + MENUITEM SEPARATOR + MENUITEM "Go to another view", IDM_VIEW_GOTO_ANOTHER_VIEW + MENUITEM "Clone to another view", IDM_VIEW_CLONE_TO_ANOTHER_VIEW + MENUITEM "Synchronize Vertical Scrolling", IDM_VIEW_SYNSCROLLV + MENUITEM "Synchronize Horizontal Scrolling", IDM_VIEW_SYNSCROLLH + //MENUITEM SEPARATOR + //MENUITEM "Vertical tabbar", IDM_VIEW_DRAWTABBAR_VERTICAL + //MENUITEM "Multiline tabbar", IDM_VIEW_DRAWTABBAR_MULTILINE + END + + POPUP "For&mat" + BEGIN + MENUITEM "Convert to Windows Format", IDM_FORMAT_TODOS + MENUITEM "Convert to UNIX Format", IDM_FORMAT_TOUNIX + MENUITEM "Convert to Mac Format", IDM_FORMAT_TOMAC + MENUITEM SEPARATOR + MENUITEM "Encode in ANSI", IDM_FORMAT_ANSI + MENUITEM "Encode in UTF-8 without BOM", IDM_FORMAT_AS_UTF_8 + MENUITEM "Encode in UTF-8", IDM_FORMAT_UTF_8 + MENUITEM "Encode in UCS-2 Big Endian", IDM_FORMAT_UCS_2BE + MENUITEM "Encode in UCS-2 Little Endian", IDM_FORMAT_UCS_2LE + //MENUITEM SEPARATOR + END - POPUP "Se&ttings" - BEGIN + POPUP "&Language" + BEGIN + + MENUITEM "Ada", IDM_LANG_ADA + MENUITEM "ASP", IDM_LANG_ASP + MENUITEM "Assembly", IDM_LANG_ASM + MENUITEM "AutoIt", IDM_LANG_AU3 + MENUITEM "Batch", IDM_LANG_BATCH + MENUITEM "C", IDM_LANG_C + MENUITEM "C#", IDM_LANG_CS + MENUITEM "C++", IDM_LANG_CPP + MENUITEM "Caml", IDM_LANG_CAML + MENUITEM "Cmake", IDM_LANG_CMAKE + MENUITEM "CSS", IDM_LANG_CSS + MENUITEM "Diff", IDM_LANG_DIFF + MENUITEM "Flash actionscript", IDM_LANG_FLASH + MENUITEM "Fortran", IDM_LANG_FORTRAN + MENUITEM "Haskell", IDM_LANG_HASKELL + MENUITEM "HTML", IDM_LANG_HTML + MENUITEM "INNO", IDM_LANG_INNO + MENUITEM "Java", IDM_LANG_JAVA + MENUITEM "Javascript", IDM_LANG_JS + MENUITEM "KIXtart", IDM_LANG_KIX + MENUITEM "LISP", IDM_LANG_LISP + MENUITEM "Lua", IDM_LANG_LUA + MENUITEM "Makefile", IDM_LANG_MAKEFILE + MENUITEM "Matlab", IDM_LANG_MATLAB + MENUITEM "MS INI file", IDM_LANG_INI + MENUITEM "MS-DOS Style", IDM_LANG_ASCII + MENUITEM "Normal Text", IDM_LANG_TEXT + MENUITEM "NSIS", IDM_LANG_NSIS + MENUITEM "Objective-C", IDM_LANG_OBJC + MENUITEM "Pascal", IDM_LANG_PASCAL + MENUITEM "Perl", IDM_LANG_PERL + MENUITEM "PHP", IDM_LANG_PHP + MENUITEM "Postscript", IDM_LANG_PS + MENUITEM "Properties", IDM_LANG_PROPS + MENUITEM "Python", IDM_LANG_PYTHON + MENUITEM "rc resource file", IDM_LANG_RC + MENUITEM "Ruby", IDM_LANG_RUBY + MENUITEM "Shell", IDM_LANG_SH + MENUITEM "Scheme", IDM_LANG_SCHEME + MENUITEM "Smalltalk", IDM_LANG_SMALLTALK + MENUITEM "SQL", IDM_LANG_SQL + MENUITEM "TCL", IDM_LANG_TCL + MENUITEM "TeX", IDM_LANG_TEX + MENUITEM "VB", IDM_LANG_VB + MENUITEM "VHDL", IDM_LANG_VHDL + MENUITEM "Verilog", IDM_LANG_VERILOG + MENUITEM "XML", IDM_LANG_XML + MENUITEM "YAML", IDM_LANG_YAML + MENUITEM SEPARATOR + MENUITEM "User Defined", IDM_LANG_USER + END + + POPUP "Se&ttings" + BEGIN MENUITEM "Preferences...", IDM_SETTING_PREFERECE - MENUITEM "Styler Configurator...", IDM_LANGSTYLE_CONFIG_DLG - MENUITEM "Shortcut Mapper...", IDM_SETTING_SHORTCUT_MAPPER - END + MENUITEM "Styler Configurator...", IDM_LANGSTYLE_CONFIG_DLG + MENUITEM "Shortcut Mapper...", IDM_SETTING_SHORTCUT_MAPPER + END - POPUP "Macro" - BEGIN - MENUITEM "&Start Recording\tCtrl+Shift+R", IDM_MACRO_STARTRECORDINGMACRO - MENUITEM "&Stop Recording\tCtrl+Shift+R", IDM_MACRO_STOPRECORDINGMACRO - MENUITEM "&Playback\tCtrl+Shift+P", IDM_MACRO_PLAYBACKRECORDEDMACRO - MENUITEM "&Save current recorded macro", IDM_MACRO_SAVECURRENTMACRO - MENUITEM "&Run a macro multiple times...", IDM_MACRO_RUNMULTIMACRODLG - END + POPUP "Macro" + BEGIN + MENUITEM "Start Re&cording", IDM_MACRO_STARTRECORDINGMACRO + MENUITEM "S&top Recording", IDM_MACRO_STOPRECORDINGMACRO + MENUITEM "&Playback", IDM_MACRO_PLAYBACKRECORDEDMACRO + MENUITEM "&Save current recorded macro", IDM_MACRO_SAVECURRENTMACRO + MENUITEM "&Run a macro multiple times...", IDM_MACRO_RUNMULTIMACRODLG + END - POPUP "Run" - BEGIN - MENUITEM "&Run...\tF5", IDM_EXECUTE - END + POPUP "Run" + BEGIN + MENUITEM "&Run...", IDM_EXECUTE + END - POPUP "&?" - BEGIN - MENUITEM "Notepad++ Home", IDM_HOMESWEETHOME - MENUITEM "Notepad++ Project Page", IDM_PROJECTPAGE - MENUITEM "Online help", IDM_ONLINEHELP - MENUITEM "Wiki FAQ", IDM_WIKIFAQ - MENUITEM "Forums", IDM_FORUM - MENUITEM "Get more plugins", IDM_PLUGINSHOME + POPUP "&?" + BEGIN + MENUITEM "Notepad++ Home", IDM_HOMESWEETHOME + MENUITEM "Notepad++ Project Page", IDM_PROJECTPAGE + MENUITEM "Online help", IDM_ONLINEHELP + MENUITEM "Wiki FAQ", IDM_WIKIFAQ + MENUITEM "Forum", IDM_FORUM + MENUITEM "Get more plugins", IDM_PLUGINSHOME MENUITEM SEPARATOR - MENUITEM "Update Notepad++", IDM_UPDATE_NPP - MENUITEM "About Notepad++\tF1", IDM_ABOUT - END + MENUITEM "Update Notepad++", IDM_UPDATE_NPP + MENUITEM "About Notepad++", IDM_ABOUT + END - MENUITEM "X", IDM_FILE_CLOSE, HELP + MENUITEM "X", IDM_FILE_CLOSE, HELP END IDD_ABOUTBOX DIALOGEX 0, 0, 271, 240 @@ -504,8 +504,8 @@ BEGIN LTEXT "Home Page :",IDC_STATIC,21,54,47,8 LTEXT "http://notepad-plus.sourceforge.net/",IDC_HOME_ADDR,78,54,126,8 EDITTEXT IDC_LICENCE_EDIT,31,99,209,96,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL - //LS: CompileDateInAboutDialog: Automatically insert compile date as additional version info! - EDITTEXT IDC_BUILD_DATETIME,150,2,150,10, ES_READONLY | NOT WS_BORDER + //LS: CompileDateInAboutDialog: Automatically insert compile date as additional version info! + EDITTEXT IDC_BUILD_DATETIME,150,2,150,10, ES_READONLY | NOT WS_BORDER CONTROL "",IDI_M30ICON,"Static",SS_OWNERDRAW,21,10,20,20 END @@ -515,14 +515,14 @@ EXSTYLE WS_EX_TOOLWINDOW | WS_EX_WINDOWEDGE CAPTION "Go To Line #" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "You are here :", ID_URHERE_STATIC,5,8,95,8,NOT WS_GROUP - LTEXT "0123456789",ID_CURRLINE,100,8,45,8,NOT WS_GROUP - LTEXT "You want to go :", ID_UGO_STATIC,5,21,95,8 + LTEXT "You are here :", ID_URHERE_STATIC,5,8,95,8,NOT WS_GROUP + LTEXT "0123456789",ID_CURRLINE,100,8,45,8,NOT WS_GROUP + LTEXT "You want to go :", ID_UGO_STATIC,5,21,95,8 EDITTEXT ID_GOLINE_EDIT,100,20,45,12,ES_NUMBER - LTEXT "You can't go further than :", ID_NOMORETHAN_STATIC,5,49,92,8,NOT WS_GROUP - LTEXT "0123456789",ID_LASTLINE,99,49,45,8,NOT WS_GROUP - DEFPUSHBUTTON "&Go !",IDOK,155,21,70,14,BS_NOTIFY - PUSHBUTTON "I'm going nowhere",IDCANCEL,155,43,70,14,BS_NOTIFY + LTEXT "You can't go further than :", ID_NOMORETHAN_STATIC,5,49,92,8,NOT WS_GROUP + LTEXT "0123456789",ID_LASTLINE,99,49,45,8,NOT WS_GROUP + DEFPUSHBUTTON "&Go !",IDOK,155,21,70,14,BS_NOTIFY + PUSHBUTTON "I'm going nowhere",IDCANCEL,155,43,70,14,BS_NOTIFY END IDD_VALUE_DLG DIALOGEX 0, 0, 74, 17 @@ -531,7 +531,7 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | EXSTYLE WS_EX_TOOLWINDOW FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - LTEXT "STATIC :",IDC_VALUE_STATIC,6,4,45,8 + LTEXT "STATIC :",IDC_VALUE_STATIC,6,4,45,8 EDITTEXT IDC_VALUE_EDIT,49,2,18,14,ES_NUMBER,WS_EX_DLGMODALFRAME END @@ -540,85 +540,158 @@ END IDR_NPP_ACCELERATORS ACCELERATORS BEGIN + //Only Alt-F4 accelerator as Stub. rest gets loaded on runtime + VK_F4, IDM_FILE_EXIT, VIRTKEY, ALT - "N", IDM_FILE_NEW, VIRTKEY, CONTROL - "O", IDM_FILE_OPEN, VIRTKEY, CONTROL - "W", IDM_FILE_CLOSE, VIRTKEY, CONTROL - "S", IDM_FILE_SAVE, VIRTKEY, CONTROL - "S", IDM_FILE_SAVEALL, VIRTKEY, CONTROL, SHIFT - "S", IDM_FILE_SAVEAS, VIRTKEY, CONTROL, ALT - "P", IDM_FILE_PRINT, VIRTKEY, CONTROL - VK_F4, IDM_FILE_EXIT, ALT, VIRTKEY - "F", IDM_SEARCH_FIND, VIRTKEY, CONTROL - "F", IDM_SEARCH_FINDINFILES, VIRTKEY, CONTROL, SHIFT - "I", IDM_SEARCH_FINDINCREMENT, VIRTKEY, CONTROL, ALT - "H", IDM_SEARCH_REPLACE, VIRTKEY, CONTROL - "G", IDM_SEARCH_GOTOLINE, VIRTKEY, CONTROL - "B", IDM_SEARCH_GOTOMATCHINGBRACE, VIRTKEY, CONTROL - "I", IDM_EDIT_SPLIT_LINES, VIRTKEY, CONTROL - "J", IDM_EDIT_JOIN_LINES, VIRTKEY, CONTROL - VK_F1, IDM_ABOUT, VIRTKEY - VK_F2, IDM_SEARCH_TOGGLE_BOOKMARK, VIRTKEY, CONTROL - VK_F2, IDM_SEARCH_NEXT_BOOKMARK, VIRTKEY - VK_F2, IDM_SEARCH_PREV_BOOKMARK, VIRTKEY, SHIFT - VK_F3, IDM_SEARCH_FINDNEXT, VIRTKEY - VK_F3, IDM_SEARCH_FINDPREV, VIRTKEY, SHIFT +/* +//File menu + "N", IDM_FILE_NEW, VIRTKEY, CONTROL + "O", IDM_FILE_OPEN, VIRTKEY, CONTROL + //"R", IDM_FILE_RELOAD, VIRTKEY, CONTROL, SHIFT + "S", IDM_FILE_SAVE, VIRTKEY, CONTROL + "S", IDM_FILE_SAVEAS, VIRTKEY, CONTROL, ALT + "S", IDM_FILE_SAVEALL, VIRTKEY, CONTROL, SHIFT + "W", IDM_FILE_CLOSE, VIRTKEY, CONTROL + //"None", IDM_FILE_CLOSEALL, VIRTKEY, CONTROL + //"None", IDM_FILE_CLOSEALL_BUT_CURRENT, VIRTKEY, CONTROL + "P", IDM_FILE_PRINT, VIRTKEY, CONTROL + //"None", IDM_FILE_PRINTNOW, VIRTKEY, CONTROL + //"None", IDM_OPEN_ALL_RECENT_FILE, VIRTKEY, CONTROL + VK_F4, IDM_FILE_EXIT, VIRTKEY, ALT - VK_F3, IDM_SEARCH_VOLATILE_FINDNEXT, VIRTKEY, CONTROL - VK_F3, IDM_SEARCH_VOLATILE_FINDPREV, VIRTKEY, CONTROL, SHIFT - - "M", IDM_SEARCH_MARKALL, VIRTKEY, CONTROL - "M", IDM_SEARCH_UNMARKALL, VIRTKEY, CONTROL, SHIFT +//Edit menu + //"Z", IDM_EDIT_UNDO, VIRTKEY, CONTROL + //"Y", IDM_EDIT_REDO, VIRTKEY, CONTROL + //"X", IDM_EDIT_CUT, VIRTKEY, CONTROL + //"C", IDM_EDIT_COPY, VIRTKEY, CONTROL + //"V", IDM_EDIT_PASTE, VIRTKEY, CONTROL + //VK_DEL, IDM_EDIT_DELETE, VIRTKEY + //"A", IDM_EDIT_SELECTALL, VIRTKEY, CONTROL + //"None", IDM_EDIT_FULLPATHTOCLIP, VIRTKEY, CONTROL + //"None", IDM_EDIT_FILENAMETOCLIP, VIRTKEY, CONTROL + //"None", IDM_EDIT_CURRENTDIRTOCLIP, VIRTKEY, CONTROL + //VK_TAB, IDM_EDIT_INS_TAB, VIRTKEY + //VK_TAB, IDM_EDIT_RMV_TAB, VIRTKEY, SHIFT + //"D", IDM_EDIT_DUP_LINE, VIRTKEY, CONTROL + "I", IDM_EDIT_SPLIT_LINES, VIRTKEY, CONTROL + "J", IDM_EDIT_JOIN_LINES, VIRTKEY, CONTROL + VK_UP, IDM_EDIT_LINE_UP, VIRTKEY, CONTROL, SHIFT + VK_DOWN, IDM_EDIT_LINE_DOWN, VIRTKEY, CONTROL, SHIFT + //VK_SPACE, IDM_EDIT_TRIMTRAILING, VIRTKEY, CONTROL, ALT, SHIFT + "C", IDM_EDIT_COLUMNMODE, VIRTKEY, ALT + "U", IDM_EDIT_UPPERCASE, VIRTKEY, CONTROL, SHIFT + "U", IDM_EDIT_LOWERCASE, VIRTKEY, CONTROL + "Q", IDM_EDIT_BLOCK_COMMENT, VIRTKEY, CONTROL + "K", IDM_EDIT_BLOCK_COMMENT_SET, VIRTKEY, CONTROL + "K", IDM_EDIT_BLOCK_UNCOMMENT, VIRTKEY, CONTROL, SHIFT + "Q", IDM_EDIT_STREAM_COMMENT, VIRTKEY, CONTROL, SHIFT + VK_SPACE, IDM_EDIT_AUTOCOMPLETE, VIRTKEY, CONTROL + VK_SPACE, IDM_EDIT_AUTOCOMPLETE_CURRENTFILE, VIRTKEY, CONTROL, SHIFT + "R", IDM_EDIT_RTL, VIRTKEY, CONTROL, ALT + "L", IDM_EDIT_LTR, VIRTKEY, CONTROL, ALT - VK_F5, IDM_EXECUTE, VIRTKEY - VK_F11, IDM_VIEW_FULLSCREENTOGGLE, VIRTKEY - VK_TAB, IDC_PREV_DOC, VIRTKEY, CONTROL, SHIFT - VK_TAB, IDC_NEXT_DOC, VIRTKEY, CONTROL +//Search menu + "F", IDM_SEARCH_FIND, VIRTKEY, CONTROL + "F", IDM_SEARCH_FINDINFILES, VIRTKEY, CONTROL, SHIFT + VK_F3, IDM_SEARCH_FINDNEXT, VIRTKEY + VK_F3, IDM_SEARCH_FINDPREV, VIRTKEY, SHIFT + VK_F3, IDM_SEARCH_VOLATILE_FINDNEXT, VIRTKEY, CONTROL + VK_F3, IDM_SEARCH_VOLATILE_FINDPREV, VIRTKEY, CONTROL, SHIFT + "M", IDM_SEARCH_MARKALL, VIRTKEY, CONTROL + "M", IDM_SEARCH_UNMARKALL, VIRTKEY, CONTROL, SHIFT + "H", IDM_SEARCH_REPLACE, VIRTKEY, CONTROL + "I", IDM_SEARCH_FINDINCREMENT, VIRTKEY, CONTROL, ALT + "G", IDM_SEARCH_GOTOLINE, VIRTKEY, CONTROL + "B", IDM_SEARCH_GOTOMATCHINGBRACE, VIRTKEY, CONTROL + VK_F2, IDM_SEARCH_TOGGLE_BOOKMARK, VIRTKEY, CONTROL + VK_F2, IDM_SEARCH_NEXT_BOOKMARK, VIRTKEY + VK_F2, IDM_SEARCH_PREV_BOOKMARK, VIRTKEY, SHIFT + //VK_F2, IDM_SEARCH_CLEAR_BOOKMARKS, VIRTKEY, ALT - VK_SPACE, IDM_EDIT_AUTOCOMPLETE, VIRTKEY, CONTROL - VK_SPACE, IDM_EDIT_AUTOCOMPLETE_CURRENTFILE, VIRTKEY, CONTROL, SHIFT - VK_UP, IDM_EDIT_LINE_UP, VIRTKEY, CONTROL, SHIFT - VK_DOWN, IDM_EDIT_LINE_DOWN, VIRTKEY, CONTROL, SHIFT - "U", IDM_EDIT_UPPERCASE, VIRTKEY, CONTROL, SHIFT - "U", IDM_EDIT_LOWERCASE, VIRTKEY, CONTROL - "R", IDC_EDIT_TOGGLEMACRORECORDING, VIRTKEY, CONTROL, SHIFT - "P", IDM_MACRO_PLAYBACKRECORDEDMACRO, VIRTKEY, CONTROL, SHIFT - "Q", IDM_EDIT_BLOCK_COMMENT, VIRTKEY, CONTROL - "K", IDM_EDIT_BLOCK_COMMENT_SET, VIRTKEY, CONTROL - "K", IDM_EDIT_BLOCK_UNCOMMENT, VIRTKEY, CONTROL, SHIFT - "Q", IDM_EDIT_STREAM_COMMENT, VIRTKEY, CONTROL, SHIFT - "V", IDM_EDIT_PASTE, VIRTKEY, CONTROL +//View menu + VK_F11, IDM_VIEW_FULLSCREENTOGGLE, VIRTKEY + //VK_F11, IDM_VIEW_ALWAYSONTOP, VIRTKEY, CONTROL + //VK_F10, IDM_VIEW_TAB_SPACE, VIRTKEY + //VK_F10, IDM_VIEW_EOL, VIRTKEY, CONTROL + //VK_F10, IDM_VIEW_ALL_CHARACTERS, VIRTKEY, ALT + //VK_F10, IDM_VIEW_INDENT_GUIDE, VIRTKEY, ALT + //VK_F10, IDM_VIEW_WRAP, VIRTKEY, ALT + //VK_F10, IDM_VIEW_WRAP_SYMBOL, VIRTKEY, ALT + //VK_F10, IDM_VIEW_USER_DLG, VIRTKEY, ALT + //VK_F10, IDM_VIEW_ZOOMIN, VIRTKEY, ALT + //VK_F10, IDM_VIEW_ZOOMOUT, VIRTKEY, ALT + //VK_F10, IDM_VIEW_ZOOMRESTORE, VIRTKEY, ALT + "0", IDM_VIEW_TOGGLE_FOLDALL, VIRTKEY, ALT + "F", IDM_VIEW_FOLD_CURRENT, VIRTKEY, CONTROL, ALT + "1", IDM_VIEW_FOLD_1, VIRTKEY, ALT + "2", IDM_VIEW_FOLD_2, VIRTKEY, ALT + "3", IDM_VIEW_FOLD_3, VIRTKEY, ALT + "4", IDM_VIEW_FOLD_4, VIRTKEY, ALT + "5", IDM_VIEW_FOLD_5, VIRTKEY, ALT + "6", IDM_VIEW_FOLD_6, VIRTKEY, ALT + "7", IDM_VIEW_FOLD_7, VIRTKEY, ALT + "8", IDM_VIEW_FOLD_8, VIRTKEY, ALT + "F", IDM_VIEW_UNFOLD_CURRENT, VIRTKEY, CONTROL, ALT, SHIFT + "1", IDM_VIEW_UNFOLD_1, VIRTKEY, ALT, SHIFT + "2", IDM_VIEW_UNFOLD_2, VIRTKEY, ALT, SHIFT + "3", IDM_VIEW_UNFOLD_3, VIRTKEY, ALT, SHIFT + "4", IDM_VIEW_UNFOLD_4, VIRTKEY, ALT, SHIFT + "5", IDM_VIEW_UNFOLD_5, VIRTKEY, ALT, SHIFT + "6", IDM_VIEW_UNFOLD_6, VIRTKEY, ALT, SHIFT + "7", IDM_VIEW_UNFOLD_7, VIRTKEY, ALT, SHIFT + "8", IDM_VIEW_UNFOLD_8, VIRTKEY, ALT, SHIFT + "0", IDM_VIEW_TOGGLE_UNFOLDALL, VIRTKEY, ALT, SHIFT + "H", IDM_VIEW_HIDELINES, VIRTKEY, ALT + //"H", IDM_VIEW_GOTO_ANOTHER_VIEW, VIRTKEY, ALT + //"H", IDM_VIEW_CLONE_TO_ANOTHER_VIEW, VIRTKEY, ALT + //"H", IDM_VIEW_SYNSCROLLV, VIRTKEY, ALT + //"H", IDM_VIEW_SYNSCROLLH, VIRTKEY, ALT + +//Format menu + //"N", IDM_FORMAT_TODOS, VIRTKEY, ALT + //"N", IDM_FORMAT_TOUNIX, VIRTKEY, ALT, SHIFT + //"N", IDM_FORMAT_TOMAC, VIRTKEY, CONTROL, SHIFT + //"E", IDM_FORMAT_ANSI, VIRTKEY, CONTROL + //"E", IDM_FORMAT_UTF_8, VIRTKEY, CONTROL, SHIFT + //"E", IDM_FORMAT_AS_UTF_8, VIRTKEY, ALT + //"E", IDM_FORMAT_UCS_2BE, VIRTKEY, ALT, SHIFT + //"E", IDM_FORMAT_UCS_2LE, VIRTKEY, CONTROL, ALT, SHIFT - "0", IDM_VIEW_TOGGLE_FOLDALL, ALT, VIRTKEY - "1", IDM_VIEW_FOLD_1, ALT, VIRTKEY - "2", IDM_VIEW_FOLD_2, ALT, VIRTKEY - "3", IDM_VIEW_FOLD_3, ALT, VIRTKEY - "4", IDM_VIEW_FOLD_4, ALT, VIRTKEY - "5", IDM_VIEW_FOLD_5, ALT, VIRTKEY - "6", IDM_VIEW_FOLD_6, ALT, VIRTKEY - "7", IDM_VIEW_FOLD_7, ALT, VIRTKEY - "8", IDM_VIEW_FOLD_8, ALT, VIRTKEY +//Settings menu + //"P", IDM_SETTING_PREFERECE, VIRTKEY, ALT + //"P", IDM_LANGSTYLE_CONFIG_DLG, VIRTKEY, CONTROL, SHIFT + //"P", IDM_SETTING_SHORTCUT_MAPPER, VIRTKEY, CONTROL, ALT, SHIFT + +//Macro menu + "R", IDC_EDIT_TOGGLEMACRORECORDING, VIRTKEY, CONTROL, SHIFT + "P", IDM_MACRO_PLAYBACKRECORDEDMACRO, VIRTKEY, CONTROL, SHIFT + //"M", IDM_MACRO_SAVECURRENTMACRO, VIRTKEY, ALT + //"M", IDM_MACRO_RUNMULTIMACRODLG, VIRTKEY, ALT, SHIFT - "0", IDM_VIEW_TOGGLE_UNFOLDALL, VIRTKEY, ALT, SHIFT - "1", IDM_VIEW_UNFOLD_1, VIRTKEY, ALT, SHIFT - "2", IDM_VIEW_UNFOLD_2, VIRTKEY, ALT, SHIFT - "3", IDM_VIEW_UNFOLD_3, VIRTKEY, ALT, SHIFT - "4", IDM_VIEW_UNFOLD_4, VIRTKEY, ALT, SHIFT - "5", IDM_VIEW_UNFOLD_5, VIRTKEY, ALT, SHIFT - "6", IDM_VIEW_UNFOLD_6, VIRTKEY, ALT, SHIFT - "7", IDM_VIEW_UNFOLD_7, VIRTKEY, ALT, SHIFT - "8", IDM_VIEW_UNFOLD_8, VIRTKEY, ALT, SHIFT +//Run menu + VK_F5, IDM_EXECUTE, VIRTKEY - "F", IDM_VIEW_FOLD_CURRENT, VIRTKEY, CONTROL, ALT - "F", IDM_VIEW_UNFOLD_CURRENT, VIRTKEY, CONTROL, ALT, SHIFT - "L", IDM_EDIT_LTR, VIRTKEY, CONTROL, ALT - "R", IDM_EDIT_RTL, VIRTKEY, CONTROL, ALT - "C", IDM_EDIT_COLUMNMODE, VIRTKEY, ALT - "H", IDM_VIEW_HIDELINES, VIRTKEY, ALT - - VK_HOME, IDC_KEY_HOME, VIRTKEY - VK_END, IDC_KEY_END, VIRTKEY - VK_HOME, IDC_KEY_SELECT_2_HOME, VIRTKEY, SHIFT - VK_END, IDC_KEY_SELECT_2_END, VIRTKEY, SHIFT +//Window menu + //"W", IDM_WINDOW_WINDOWS, VIRTKEY, ALT + +//Help menu + //VK_F1, IDM_HOMESWEETHOME, VIRTKEY + //VK_F1, IDM_PROJECTPAGE, VIRTKEY + //VK_F1, IDM_ONLINEHELP, VIRTKEY + //VK_F1, IDM_FORUM, VIRTKEY + //VK_F1, IDM_PLUGINSHOME, VIRTKEY + VK_F1, IDM_ABOUT, VIRTKEY + +//Misc accelerators + VK_TAB, IDC_PREV_DOC, VIRTKEY, CONTROL, SHIFT + VK_TAB, IDC_NEXT_DOC, VIRTKEY, CONTROL + + //Scintilla accelerators. Do not use this table + //VK_HOME, IDC_KEY_HOME, VIRTKEY + //VK_END, IDC_KEY_END, VIRTKEY + //VK_HOME, IDC_KEY_SELECT_2_HOME, VIRTKEY, SHIFT + //VK_END, IDC_KEY_SELECT_2_END, VIRTKEY, SHIFT +*/ + END diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index cdbc517da..c74e9f91a 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -19,7 +19,293 @@ #include "ScintillaEditView.h" #include -//#include +#include "keys.h" + +struct WinMenuKeyDefinition { //more or less matches accelerator table definition, easy copy/paste + //const char * name; //name retrieved from menu? + int vKey; + int functionId; + bool isCtrl; + bool isAlt; + bool isShift; + char * specialName; //Used when no real menu name exists (in case of toggle for example) +}; + + +struct ScintillaKeyDefinition { + const char * name; + int functionId; + bool isCtrl; + bool isAlt; + bool isShift; + int vKey; + int redirFunctionId; //this gets set when a function is being redirected through Notepad++ if Scintilla doesnt do it properly :) +}; + +WinMenuKeyDefinition winKeyDefs[] = { //array of accelerator keys for all std menu items, values can be 0 for vKey, which means its unused + {VK_N, IDM_FILE_NEW, true, false, false, NULL}, + {VK_O, IDM_FILE_OPEN, true, false, false, NULL}, + {VK_NULL, IDM_FILE_RELOAD, false, false, false, NULL}, + {VK_S, IDM_FILE_SAVE, true, false, false, NULL}, + {VK_S, IDM_FILE_SAVEAS, true, true, false, NULL}, + {VK_S, IDM_FILE_SAVEALL, true, false, true, NULL}, + {VK_W, IDM_FILE_CLOSE, true, false, false, NULL}, + {VK_NULL, IDM_FILE_CLOSEALL, false, false, false, NULL}, + {VK_NULL, IDM_FILE_CLOSEALL_BUT_CURRENT, false, false, false, NULL}, + {VK_NULL, IDM_FILE_LOADSESSION, false, false, false, NULL}, + {VK_NULL, IDM_FILE_SAVESESSION, false, false, false, NULL}, + {VK_P, IDM_FILE_PRINT, true, false, false, NULL}, + {VK_NULL, IDM_FILE_PRINTNOW, false, false, false, NULL}, + {VK_NULL, IDM_OPEN_ALL_RECENT_FILE, false, false, false, "Open All Recent Files"}, + {VK_NULL, IDM_CLEAN_RECENT_FILE_LIST, false, false, false, "Clean Recent Files List"}, + {VK_F4, IDM_FILE_EXIT, false, true, false, NULL}, + +// {VK_NULL, IDM_EDIT_UNDO, false, false, false, NULL}, +// {VK_NULL, IDM_EDIT_REDO, false, false, false, NULL}, +// {VK_NULL, IDM_EDIT_CUT, false, false, false, NULL}, +// {VK_NULL, IDM_EDIT_COPY, false, false, false, NULL}, +// {VK_NULL, IDM_EDIT_PASTE, false, false, false, NULL}, +// {VK_NULL, IDM_EDIT_DELETE, false, false, false, NULL}, +// {VK_NULL, IDM_EDIT_SELECTALL, false, false, false, NULL}, + {VK_NULL, IDM_EDIT_FULLPATHTOCLIP, false, false, false, NULL}, + {VK_NULL, IDM_EDIT_FILENAMETOCLIP, false, false, false, NULL}, + {VK_NULL, IDM_EDIT_CURRENTDIRTOCLIP, false, false, false, NULL}, +// {VK_NULL, IDM_EDIT_INS_TAB, false, false, false, NULL}, +// {VK_NULL, IDM_EDIT_RMV_TAB, false, false, false, NULL}, +// {VK_NULL, IDM_EDIT_DUP_LINE, false, false, false, NULL}, + {VK_I, IDM_EDIT_SPLIT_LINES, true, false, false, NULL}, + {VK_J, IDM_EDIT_JOIN_LINES, true, false, false, NULL}, + {VK_UP, IDM_EDIT_LINE_UP, true, false, true, NULL}, + {VK_DOWN, IDM_EDIT_LINE_DOWN, true, false, true, NULL}, + {VK_NULL, IDM_EDIT_TRIMTRAILING, false, false, false, NULL}, + {VK_C, IDM_EDIT_COLUMNMODE, false, true, false, NULL}, + {VK_U, IDM_EDIT_UPPERCASE, true, false, true, NULL}, + {VK_U, IDM_EDIT_LOWERCASE, true, false, false, NULL}, + {VK_Q, IDM_EDIT_BLOCK_COMMENT, true, false, false, NULL}, + {VK_K, IDM_EDIT_BLOCK_COMMENT_SET, true, false, false, NULL}, + {VK_K, IDM_EDIT_BLOCK_UNCOMMENT, true, false, true, NULL}, + {VK_Q, IDM_EDIT_STREAM_COMMENT, true, false, true, NULL}, + {VK_SPACE, IDM_EDIT_AUTOCOMPLETE, true, false, false, NULL}, + {VK_SPACE, IDM_EDIT_AUTOCOMPLETE_CURRENTFILE, true, false, true, NULL}, + {VK_R, IDM_EDIT_RTL, true, true, false, NULL}, + {VK_L, IDM_EDIT_LTR, true, true, false, NULL}, + + {VK_F, IDM_SEARCH_FIND, true, false, false, NULL}, + {VK_F, IDM_SEARCH_FINDINFILES, true, false, true, NULL}, + {VK_F3, IDM_SEARCH_FINDNEXT, false, false, false, NULL}, + {VK_F3, IDM_SEARCH_FINDPREV, false, false, true, NULL}, + {VK_F3, IDM_SEARCH_VOLATILE_FINDNEXT, true, false, false, NULL}, + {VK_F3, IDM_SEARCH_VOLATILE_FINDPREV, true, false, true, NULL}, + {VK_M, IDM_SEARCH_MARKALL, true, false, false, NULL}, + {VK_M, IDM_SEARCH_UNMARKALL, true, false, true, NULL}, + {VK_H, IDM_SEARCH_REPLACE, true, false, false, NULL}, + {VK_I, IDM_SEARCH_FINDINCREMENT, true, true, false, NULL}, + {VK_G, IDM_SEARCH_GOTOLINE, true, false, false, NULL}, + {VK_B, IDM_SEARCH_GOTOMATCHINGBRACE, true, false, false, NULL}, + {VK_F2, IDM_SEARCH_TOGGLE_BOOKMARK, true, false, false, NULL}, + {VK_F2, IDM_SEARCH_NEXT_BOOKMARK, false, false, false, NULL}, + {VK_F2, IDM_SEARCH_PREV_BOOKMARK, false, false, true, NULL}, + {VK_NULL, IDM_SEARCH_CLEAR_BOOKMARKS, false, false, false, NULL}, + + {VK_F11, IDM_VIEW_FULLSCREENTOGGLE, false, false, false, NULL}, + {VK_NULL, IDM_VIEW_ALWAYSONTOP, false, false, false, NULL}, + {VK_NULL, IDM_VIEW_TAB_SPACE, false, false, false, NULL}, + {VK_NULL, IDM_VIEW_EOL, false, false, false, NULL}, + {VK_NULL, IDM_VIEW_ALL_CHARACTERS, false, false, false, NULL}, + {VK_NULL, IDM_VIEW_INDENT_GUIDE, false, false, false, NULL}, + {VK_NULL, IDM_VIEW_WRAP, false, false, false, NULL}, + {VK_NULL, IDM_VIEW_WRAP_SYMBOL, false, false, false, NULL}, + {VK_NULL, IDM_VIEW_USER_DLG, false, false, false, NULL}, + //{VK_NULL, IDM_VIEW_ZOOMIN, false, false, false, NULL}, + //{VK_NULL, IDM_VIEW_ZOOMOUT, false, false, false, NULL}, + {VK_NULL, IDM_VIEW_ZOOMRESTORE, false, false, false, NULL}, + {VK_0, IDM_VIEW_TOGGLE_FOLDALL, false, true, false, NULL}, + {VK_F, IDM_VIEW_FOLD_CURRENT, true, true, false, NULL}, + {VK_1, IDM_VIEW_FOLD_1, false, true, false, NULL}, + {VK_2, IDM_VIEW_FOLD_2, false, true, false, NULL}, + {VK_3, IDM_VIEW_FOLD_3, false, true, false, NULL}, + {VK_4, IDM_VIEW_FOLD_4, false, true, false, NULL}, + {VK_5, IDM_VIEW_FOLD_5, false, true, false, NULL}, + {VK_6, IDM_VIEW_FOLD_6, false, true, false, NULL}, + {VK_7, IDM_VIEW_FOLD_7, false, true, false, NULL}, + {VK_8, IDM_VIEW_FOLD_8, false, true, false, NULL}, + {VK_F, IDM_VIEW_UNFOLD_CURRENT, true, true, true, NULL}, + {VK_1, IDM_VIEW_UNFOLD_1, false, true, true, NULL}, + {VK_2, IDM_VIEW_UNFOLD_2, false, true, true, NULL}, + {VK_3, IDM_VIEW_UNFOLD_3, false, true, true, NULL}, + {VK_4, IDM_VIEW_UNFOLD_4, false, true, true, NULL}, + {VK_5, IDM_VIEW_UNFOLD_5, false, true, true, NULL}, + {VK_6, IDM_VIEW_UNFOLD_6, false, true, true, NULL}, + {VK_7, IDM_VIEW_UNFOLD_7, false, true, true, NULL}, + {VK_8, IDM_VIEW_UNFOLD_8, false, true, true, NULL}, + {VK_0, IDM_VIEW_TOGGLE_UNFOLDALL, false, true, true, NULL}, + {VK_H, IDM_VIEW_HIDELINES, false, true, false, NULL}, + {VK_NULL, IDM_VIEW_GOTO_ANOTHER_VIEW, false, false, false, NULL}, + {VK_NULL, IDM_VIEW_CLONE_TO_ANOTHER_VIEW, false, false, false, NULL}, + {VK_NULL, IDM_VIEW_SYNSCROLLV, false, false, false, NULL}, + {VK_NULL, IDM_VIEW_SYNSCROLLH, false, false, false, NULL}, + + {VK_NULL, IDM_FORMAT_TODOS, false, false, false, NULL}, + {VK_NULL, IDM_FORMAT_TOUNIX, false, false, false, NULL}, + {VK_NULL, IDM_FORMAT_TOMAC, false, false, false, NULL}, + {VK_NULL, IDM_FORMAT_ANSI, false, false, false, NULL}, + {VK_NULL, IDM_FORMAT_UTF_8, false, false, false, NULL}, + {VK_NULL, IDM_FORMAT_AS_UTF_8, false, false, false, NULL}, + {VK_NULL, IDM_FORMAT_UCS_2BE, false, false, false, NULL}, + {VK_NULL, IDM_FORMAT_UCS_2LE, false, false, false, NULL}, + + {VK_NULL, IDM_SETTING_PREFERECE, false, false, false, NULL}, + {VK_NULL, IDM_LANGSTYLE_CONFIG_DLG, false, false, false, NULL}, + {VK_NULL, IDM_SETTING_SHORTCUT_MAPPER, false, false, false, NULL}, + + {VK_R, IDC_EDIT_TOGGLEMACRORECORDING, true, false, true, "Toggle macro record"}, + {VK_P, IDM_MACRO_PLAYBACKRECORDEDMACRO, true, false, true, NULL}, + {VK_NULL, IDM_MACRO_SAVECURRENTMACRO, false, false, false, NULL}, + {VK_NULL, IDM_MACRO_RUNMULTIMACRODLG, false, false, false, NULL}, + + {VK_F5, IDM_EXECUTE, false, false, false, NULL}, + +// {VK_NULL, IDM_WINDOW_WINDOWS, false, false, false, NULL}, + + {VK_NULL, IDM_HOMESWEETHOME, false, false, false, NULL}, + {VK_NULL, IDM_PROJECTPAGE, false, false, false, NULL}, + {VK_NULL, IDM_ONLINEHELP, false, false, false, NULL}, + {VK_NULL, IDM_FORUM, false, false, false, NULL}, + {VK_NULL, IDM_PLUGINSHOME, false, false, false, NULL}, + {VK_F1, IDM_ABOUT, false, false, false, NULL}, + + {VK_TAB, IDC_PREV_DOC, true, false, true, "Switch to previous document"}, + {VK_TAB, IDC_NEXT_DOC, true, false, false, "Switch to next document"}, +}; + + +ScintillaKeyDefinition scintKeyDefs[] = { //array of accelerator keys for all possible scintilla functions, values can be 0 for vKey, which means its unused + {"SCI_CUT", SCI_CUT, true, false, false, VK_X, IDM_EDIT_CUT}, + {"SCI_COPY", SCI_COPY, true, false, false, VK_C, IDM_EDIT_COPY}, + {"SCI_PASTE", SCI_PASTE, true, false, false, VK_V, IDM_EDIT_PASTE}, + {"SCI_SELECTALL", SCI_SELECTALL, true, false, false, VK_A, IDM_EDIT_SELECTALL}, + {"SCI_CLEAR", SCI_CLEAR, false, false, false, VK_DELETE, IDM_EDIT_DELETE}, + {"SCI_CLEARALL", SCI_CLEARALL, false, false, false, 0, 0}, + {"SCI_UNDO", SCI_UNDO, true, false, false, VK_Z, IDM_EDIT_UNDO}, + {"SCI_REDO", SCI_REDO, true, false, false, VK_Y, IDM_EDIT_REDO}, + {"SCI_NEWLINE", SCI_NEWLINE, false, false, false, VK_RETURN, 0}, + {"SCI_TAB", SCI_TAB, false, false, false, VK_TAB, IDM_EDIT_INS_TAB}, + {"SCI_BACKTAB", SCI_BACKTAB, false, false, true, VK_TAB, IDM_EDIT_RMV_TAB}, + {"SCI_FORMFEED", SCI_FORMFEED, false, false, false, 0, 0}, + {"SCI_ZOOMIN", SCI_ZOOMIN, true, false, false, VK_ADD, IDM_VIEW_ZOOMIN}, + {"SCI_ZOOMOUT", SCI_ZOOMOUT, true, false, false, VK_SUBTRACT,IDM_VIEW_ZOOMOUT}, + {"SCI_SETZOOM", SCI_SETZOOM, true, false, false, VK_DIVIDE, 0}, + {"SCI_SELECTIONDUPLICATE", SCI_SELECTIONDUPLICATE, true, false, false, VK_D, IDM_EDIT_DUP_LINE}, + {"SCI_LINESJOIN", SCI_LINESJOIN, false, false, false, 0, 0}, + {"SCI_SCROLLCARET", SCI_SCROLLCARET, false, false, false, 0, 0}, + {"SCI_EDITTOGGLEOVERTYPE", SCI_EDITTOGGLEOVERTYPE, false, false, false, VK_INSERT, 0}, + {"SCI_MOVECARETINSIDEVIEW", SCI_MOVECARETINSIDEVIEW, false, false, false, 0, 0}, + {"SCI_LINEDOWN", SCI_LINEDOWN, false, false, false, VK_DOWN, 0}, + {"SCI_LINEDOWNEXTEND", SCI_LINEDOWNEXTEND, false, false, true, VK_DOWN, 0}, + {"SCI_LINEDOWNRECTEXTEND", SCI_LINEDOWNRECTEXTEND, false, true, true, VK_DOWN, 0}, + {"SCI_LINESCROLLDOWN", SCI_LINESCROLLDOWN, true, false, false, VK_DOWN, 0}, + {"SCI_LINEUP", SCI_LINEUP, false, false, false, VK_UP, 0}, + {"SCI_LINEUPEXTEND", SCI_LINEUPEXTEND, false, false, true, VK_UP, 0}, + {"SCI_LINEUPRECTEXTEND", SCI_LINEUPRECTEXTEND, false, true, true, VK_UP, 0}, + {"SCI_LINESCROLLUP", SCI_LINESCROLLUP, true, false, false, VK_UP, 0}, + {"SCI_PARADOWN", SCI_PARADOWN, true, false, false, VK_OEM_6, 0}, + {"SCI_PARADOWNEXTEND", SCI_PARADOWNEXTEND, true, false, true, VK_OEM_6, 0}, + {"SCI_PARAUP", SCI_PARAUP, true, false, false, VK_OEM_4, 0}, + {"SCI_PARAUPEXTEND", SCI_PARAUPEXTEND, true, false, true, VK_OEM_4, 0}, + {"SCI_CHARLEFT", SCI_CHARLEFT, false, false, false, VK_LEFT, 0}, + {"SCI_CHARLEFTEXTEND", SCI_CHARLEFTEXTEND, false, false, true, VK_LEFT, 0}, + {"SCI_CHARLEFTRECTEXTEND", SCI_CHARLEFTRECTEXTEND, false, true, true, VK_LEFT, 0}, + {"SCI_CHARRIGHT", SCI_CHARRIGHT, false, false, false, VK_RIGHT, 0}, + {"SCI_CHARRIGHTEXTEND", SCI_CHARRIGHTEXTEND, false, false, true, VK_RIGHT, 0}, + {"SCI_CHARRIGHTRECTEXTEND", SCI_CHARRIGHTRECTEXTEND, false, true, true, VK_RIGHT, 0}, + {"SCI_WORDLEFT", SCI_WORDLEFT, true, false, false, VK_LEFT, 0}, + {"SCI_WORDLEFTEXTEND", SCI_WORDLEFTEXTEND, true, false, true, VK_LEFT, 0}, + {"SCI_WORDRIGHT", SCI_WORDRIGHT, true, false, false, VK_RIGHT, 0}, + {"SCI_WORDRIGHTEXTEND", SCI_WORDRIGHTEXTEND, false, false, false, 0, 0}, + {"SCI_WORDLEFTEND", SCI_WORDLEFTEND, false, false, false, 0, 0}, + {"SCI_WORDLEFTENDEXTEND", SCI_WORDLEFTENDEXTEND, false, false, false, 0, 0}, + {"SCI_WORDRIGHTEND", SCI_WORDRIGHTEND, false, false, false, 0, 0}, + {"SCI_WORDRIGHTEXTEND", SCI_WORDRIGHTEXTEND, true, false, true, VK_RIGHT, 0}, + {"SCI_WORDPARTLEFT", SCI_WORDPARTLEFT, true, false, false, VK_OEM_2, 0}, + {"SCI_WORDPARTLEFTEXTEND", SCI_WORDPARTLEFTEXTEND, true, false, true, VK_OEM_2, 0}, + {"SCI_WORDPARTRIGHT", SCI_WORDPARTRIGHT, true, false, false, VK_OEM_5, 0}, + {"SCI_WORDPARTRIGHTEXTEND", SCI_WORDPARTRIGHTEXTEND, true, false, true, VK_OEM_5, 0}, + {"SCI_HOME", SCI_HOME, false, false, false, 0, 0}, + {"SCI_HOMEEXTEND", SCI_HOMEEXTEND, false, false, false, 0, 0}, + {"SCI_HOMERECTEXTEND", SCI_HOMERECTEXTEND, false, false, false, 0, 0}, + {"SCI_HOMEDISPLAY", SCI_HOMEDISPLAY, false, true, false, VK_HOME, 0}, + {"SCI_HOMEDISPLAYEXTEND", SCI_HOMEDISPLAYEXTEND, false, false, false, 0, 0}, + {"SCI_HOMEWRAP", SCI_HOMEWRAP, false, false, false, 0, 0}, + {"SCI_HOMEWRAPEXTEND", SCI_HOMEWRAPEXTEND, false, false, false, 0, 0}, + {"SCI_VCHOME", SCI_VCHOME, false, false, false, VK_HOME, 0}, + {"SCI_VCHOMEEXTEND", SCI_VCHOMEEXTEND, false, false, true, VK_HOME, 0}, + {"SCI_VCHOMERECTEXTEND", SCI_VCHOMERECTEXTEND, false, true, true, VK_HOME, 0}, + {"SCI_VCHOMEWRAP", SCI_VCHOMEWRAP, false, false, false, 0, 0}, + {"SCI_VCHOMEWRAPEXTEND", SCI_VCHOMEWRAPEXTEND, false, false, false, 0, 0}, + {"SCI_LINEEND", SCI_LINEEND, false, false, false, VK_END, 0}, + {"SCI_LINEENDEXTEND", SCI_LINEENDEXTEND, false, false, true, VK_END, 0}, + {"SCI_LINEENDRECTEXTEND", SCI_LINEENDRECTEXTEND, false, true, true, VK_END, 0}, + {"SCI_LINEENDDISPLAY", SCI_LINEENDDISPLAY, false, true, false, VK_END, 0}, + {"SCI_LINEENDDISPLAYEXTEND", SCI_LINEENDDISPLAYEXTEND, false, false, false, 0, 0}, + {"SCI_LINEENDWRAP", SCI_LINEENDWRAP, false, false, false, 0, 0}, + {"SCI_LINEENDWRAPEXTEND", SCI_LINEENDWRAPEXTEND, false, false, false, 0, 0}, + {"SCI_DOCUMENTSTART", SCI_DOCUMENTSTART, true, false, false, VK_HOME, 0}, + {"SCI_DOCUMENTSTARTEXTEND", SCI_DOCUMENTSTARTEXTEND, true, false, true, VK_HOME, 0}, + {"SCI_DOCUMENTEND", SCI_DOCUMENTEND, true, false, false, VK_END, 0}, + {"SCI_DOCUMENTENDEXTEND", SCI_DOCUMENTENDEXTEND, true, false, true, VK_END, 0}, + {"SCI_PAGEUP", SCI_PAGEUP, false, false, false, VK_PRIOR, 0}, + {"SCI_PAGEUPEXTEND", SCI_PAGEUPEXTEND, false, false, true, VK_PRIOR, 0}, + {"SCI_PAGEUPRECTEXTEND", SCI_PAGEUPRECTEXTEND, false, true, true, VK_PRIOR, 0}, + {"SCI_PAGEDOWN", SCI_PAGEDOWN, false, false, false, VK_NEXT, 0}, + {"SCI_PAGEDOWNEXTEND", SCI_PAGEDOWNEXTEND, false, false, true, VK_NEXT, 0}, + {"SCI_PAGEDOWNRECTEXTEND", SCI_PAGEDOWNRECTEXTEND, false, true, true, VK_NEXT, 0}, + {"SCI_STUTTEREDPAGEUP", SCI_STUTTEREDPAGEUP, false, false, false, 0, 0}, + {"SCI_STUTTEREDPAGEUPEXTEND", SCI_STUTTEREDPAGEUPEXTEND, false, false, false, 0, 0}, + {"SCI_STUTTEREDPAGEDOWN", SCI_STUTTEREDPAGEDOWN, false, false, false, 0, 0}, + {"SCI_STUTTEREDPAGEDOWNEXTEND", SCI_STUTTEREDPAGEDOWNEXTEND,false, false, false, 0, 0}, + {"SCI_DELETEBACK", SCI_DELETEBACK, false, false, false, VK_BACK, 0}, + {"SCI_DELETEBACKNOTLINE", SCI_DELETEBACKNOTLINE, false, false, false, 0, 0}, + {"SCI_DELWORDLEFT", SCI_DELWORDLEFT, true, false, false, VK_BACK, 0}, + {"SCI_DELWORDRIGHT", SCI_DELWORDRIGHT, true, false, false, VK_DELETE, 0}, + {"SCI_DELLINELEFT", SCI_DELLINELEFT, true, false, true, VK_BACK, 0}, + {"SCI_DELLINERIGHT", SCI_DELLINERIGHT, true, false, true, VK_DELETE, 0}, + {"SCI_LINEDELETE", SCI_LINEDELETE, true, false, true, VK_L, 0}, + {"SCI_LINECUT", SCI_LINECUT, true, false, false, VK_L, 0}, + {"SCI_LINECOPY", SCI_LINECOPY, true, false, true, VK_T, 0}, + {"SCI_LINETRANSPOSE", SCI_LINETRANSPOSE, true, false, false, VK_T, 0}, + {"SCI_LINEDUPLICATE", SCI_LINEDUPLICATE, false, false, false, 0, 0}, + {"SCI_CANCEL", SCI_CANCEL, false, false, false, VK_ESCAPE, 0} + //{"SCI_EMPTYUNDOBUFFER", SCI_EMPTYUNDOBUFFER, false, false, false, 0, 0}, + //{"SCI_TOGGLECARETSTICKY", SCI_TOGGLECARETSTICKY, false, false, false, 0, 0}, + //{"SCI_CALLTIPCANCEL", SCI_CALLTIPCANCEL, false, false, false, 0, 0}, + //{"SCI_SETSAVEPOINT", SCI_SETSAVEPOINT, false, false, false, 0, 0}, + //{"SCI_CLEARDOCUMENTSTYLE", SCI_CLEARDOCUMENTSTYLE, false, false, false, 0, 0}, + //{"SCI_CUT", SCI_CUT, false, false, true, VK_DELETE, 0}, + //{"SCI_COPY", SCI_COPY, true, false, false, VK_INSERT, 0}, + //{"SCI_PASTE", SCI_PASTE, false, false, true, VK_INSERT, 0}, + //{"SCI_CHOOSECARETX", SCI_CHOOSECARETX, false, false, false, 0, 0}, + //{"SCI_AUTOCCOMPLETE", SCI_AUTOCCOMPLETE, false, false, false, 0, 0}, + //{"SCI_AUTOCCANCEL", SCI_AUTOCCANCEL, false, false, false, 0, 0}, + //{"SCI_CLEARREGISTEREDIMAGES", SCI_CLEARREGISTEREDIMAGES, false, false, false, 0, 0}, + //{"SCI_HOMEDISPLAYEXTEND", SCI_HOMEDISPLAYEXTEND, false, true, true, VK_HOME, 0}, + //{SCI_LINEENDDISPLAYEXTEND, SCI_LINEENDDISPLAYEXTEND, false, true, true, VK_END, 0}, + //{"SCI_DELETEBACK", SCI_DELETEBACK, false, false, true, VK_BACK, 0}, + //{"SCI_DELWORDRIGHTEND", SCI_DELWORDRIGHTEND, false, false, false, 0, 0}, + //{"SCI_LOWERCASE", SCI_LOWERCASE, false, false, false, 0, 0}, + //{"SCI_UPPERCASE", SCI_UPPERCASE, false, false, false, 0, 0}, + //{"SCI_LOWERCASE", SCI_LOWERCASE, true, false, false, VK_U, 0}, + //{"SCI_UPPERCASE", SCI_UPPERCASE, true, false, true, VK_U, 0}, + //{"SCI_NEWLINE", SCI_NEWLINE, false, false, true, VK_RETURN, 0}, + //{"SCI_FORMFEED", SCI_FORMFEED, true, false, false, VK_L, 0}, + //{"SCI_CLEARALLCMDKEYS", SCI_CLEARALLCMDKEYS, false, false, false, 0, 0}, + //{"SCI_STARTRECORD", SCI_STARTRECORD, false, false, false, 0, 0}, + //{"SCI_STOPRECORD", SCI_STOPRECORD, false, false, false, 0, 0}, + //{"SCI_SEARCHANCHOR", SCI_SEARCHANCHOR, false, false, false, 0, 0}, + //{"SCI_TARGETFROMSELECTION", SCI_TARGETFROMSELECTION, false, false, false, 0, 0}, + //{"SCI_STYLERESETDEFAULT", SCI_STYLERESETDEFAULT, false, false, false, 0, 0}, + //{"SCI_STYLECLEARALL", SCI_STYLECLEARALL, false, false, false, 0, 0}, + //{"SCI_UNDO", SCI_UNDO, false, true, false, VK_BACK, 0} +}; NppParameters * NppParameters::_pSelf = new NppParameters; @@ -45,6 +331,10 @@ NppParameters::NppParameters() : _pXmlDoc(NULL),_pXmlUserDoc(NULL), _pXmlUserSty PathAppend(notepadStylePath, notepadStyleFile); _asNotepadStyle = (PathFileExists(notepadStylePath) == TRUE); + + //Load initial accelerator key definitions + initMenuKeys(); + initScintillaKeys(); } void cutString(const char *str2cut, vector & patternVect) @@ -316,14 +606,10 @@ bool NppParameters::load(/*bool noUserPath*/) getShortcutsFromXmlTree(); getMacrosFromXmlTree(); getUserCmdsFromXmlTree(); - getPluginCmdsFromXmlTree(); // fill out _scintillaModifiedKeys : // those user defined Scintilla key will be used remap Scintilla Key Array getScintKeysFromXmlTree(); - - // initialize entire Scintilla Key Array - initScintillaKeys(); } //---------------------------------// @@ -570,31 +856,29 @@ bool NppParameters::getScintKeysFromXmlTree() return true; } -void NppParameters::initScintillaKeys() +void NppParameters::initMenuKeys() { - // Cut/Copy/Paste - _scintillaKeyCommands.push_back(ScintillaKeyMap("CUT", IDSCINTILLA_KEY_CUT, SCI_CUT, true, false, false, 0x58/*VK_X*/, IDM_EDIT_CUT)); - _scintillaKeyCommands.push_back(ScintillaKeyMap("COPY", IDSCINTILLA_KEY_COPY, SCI_COPY, true, false, false, 0x43/*VK_C*/, IDM_EDIT_COPY)); - _scintillaKeyCommands.push_back(ScintillaKeyMap("PASTE", IDSCINTILLA_KEY_PASTE, SCI_PASTE, true, false, false, 0x56/*VK_V*/, IDM_EDIT_PASTE)); - _scintillaKeyCommands.push_back(ScintillaKeyMap("DEL", IDSCINTILLA_KEY_DEL, SCI_CLEAR, false, false, false, VK_DELETE, IDM_EDIT_DELETE)); - _scintillaKeyCommands.push_back(ScintillaKeyMap("SELECT ALL", IDSCINTILLA_KEY_SELECTALL, SCI_SELECTALL, true, false, false, 0x41/*VK_A*/, IDM_EDIT_SELECTALL)); - _scintillaKeyCommands.push_back(ScintillaKeyMap("OUTDENT", IDSCINTILLA_KEY_OUTDENT, SCI_BACKTAB, false, false, true, VK_TAB, IDM_EDIT_RMV_TAB)); - _scintillaKeyCommands.push_back(ScintillaKeyMap("UNDO", IDSCINTILLA_KEY_UNDO, SCI_UNDO, true, false, false, 0x5A/*VK_Z*/, IDM_EDIT_UNDO)); - _scintillaKeyCommands.push_back(ScintillaKeyMap("REDO", IDSCINTILLA_KEY_REDO, SCI_REDO, true, false, false, 0x59/*VK_Y*/, IDM_EDIT_REDO)); + int nrCommands = sizeof(winKeyDefs)/sizeof(WinMenuKeyDefinition); + WinMenuKeyDefinition wkd; + for(int i = 0; i < nrCommands; i++) + { + wkd = winKeyDefs[i]; + Shortcut sc( (wkd.specialName?wkd.specialName:""), wkd.isCtrl, wkd.isAlt, wkd.isShift, wkd.vKey); + _shortcuts.push_back( CommandShortcut(sc, wkd.functionId) ); + } +} + +void NppParameters::initScintillaKeys() { + + int nrCommands = sizeof(scintKeyDefs)/sizeof(ScintillaKeyDefinition); + + ScintillaKeyDefinition skd; + + for(int i = 0; i < nrCommands; i++) { + skd = scintKeyDefs[i]; + _scintillaKeyCommands.push_back(ScintillaKeyMap(Shortcut(skd.name, skd.isCtrl, skd.isAlt, skd.isShift, skd.vKey), skd.functionId, skd.redirFunctionId)); + } - // Line operation - _scintillaKeyCommands.push_back(ScintillaKeyMap("DUPLICATE LINE", IDSCINTILLA_KEY_LINE_DUP, SCI_LINEDUPLICATE, true, false, false, 0x44/*VK_D*/, IDM_EDIT_DUP_LINE)); - _scintillaKeyCommands.push_back(ScintillaKeyMap("CUT LINE", IDSCINTILLA_KEY_LINE_CUT, SCI_LINECUT, true, false, false, 0x4C/*VK_L*/)); - _scintillaKeyCommands.push_back(ScintillaKeyMap("DELETE LINE", IDSCINTILLA_KEY_LINE_DEL, SCI_LINEDELETE, true, false, true, 0x4C/*VK_L*/)); - _scintillaKeyCommands.push_back(ScintillaKeyMap("TRANSPOSE LINE", IDSCINTILLA_KEY_LINE_TRANS, SCI_LINETRANSPOSE, true, false, false, 0x54/*VK_T*/)); - _scintillaKeyCommands.push_back(ScintillaKeyMap("COPY LINE", IDSCINTILLA_KEY_LINE_COPY, SCI_LINECOPY, true, false, true, 0x54/*VK_T*/)); - //SCI_DELETEBACK - //SCI_DELETEBACKNOTLINE - - //SCI_DELWORDLEFT - //SCI_DELWORDRIGHT - //SCI_DELLINELEFT - //SCI_DELLINERIGHT } bool NppParameters::getContextMenuFromXmlTree() @@ -799,9 +1083,20 @@ void NppParameters::feedShortcut(TiXmlNode *node) if (idStr) { Shortcut sc; - if (getShortcuts(childNode, sc) && sc.isValid()) + if (getShortcuts(childNode, sc))// && sc.isValid()) //do not validate { - _shortcuts.push_back(CommandShortcut(id, sc)); + //find the commandid that matches this Shortcut sc and alter it, push back its index in the modified list, if not present + int len = (int)_shortcuts.size(); + for(int i = 0; i < len; i++) + { + if (_shortcuts[i].getID() == id) + { //found our match + CommandShortcut csc = CommandShortcut(sc, id); + strncpy(csc._name, _shortcuts[i]._name, nameLenMax); + _shortcuts[i] = csc; + addUserModifiedIndex(i); + } + } } } } @@ -817,18 +1112,20 @@ void NppParameters::feedMacros(TiXmlNode *node) childNode = childNode->NextSibling("Macro") ) { Shortcut sc; - if (getShortcuts(childNode, sc) && sc.isValid()) + if (getShortcuts(childNode, sc))// && sc.isValid()) { - MacroShortcut ms(sc); - getActions(childNode, ms); - if (ms.isValid()) - _macros.push_back(ms); + Macro macro; + getActions(childNode, macro); + int cmdID = ID_MACRO + _macros.size(); + MacroShortcut ms(sc, macro, cmdID); + //if (ms.isValid()) + _macros.push_back(ms); } } } -void NppParameters::getActions(TiXmlNode *node, MacroShortcut & macroShortcut) +void NppParameters::getActions(TiXmlNode *node, Macro & macro) { for (TiXmlNode *childNode = node->FirstChildElement("Action"); childNode ; @@ -853,7 +1150,7 @@ void NppParameters::getActions(TiXmlNode *node, MacroShortcut & macroShortcut) sParam = ""; recordedMacroStep step(type, msg, wParam, lParam, sParam); if (step.isValid()) - (macroShortcut.getMacro()).push_back(step); + macro.push_back(step); } } @@ -868,18 +1165,18 @@ void NppParameters::feedUserCmds(TiXmlNode *node) childNode = childNode->NextSibling("Command") ) { Shortcut sc; - if (getShortcuts(childNode, sc) && sc.isValid()) + if (getShortcuts(childNode, sc))// && sc.isValid()) { - UserCommand uc(sc); TiXmlNode *aNode = childNode->FirstChild(); if (aNode) { const char *cmdStr = aNode->Value(); if (cmdStr) { - uc._cmd = cmdStr; - if (uc.isValid()) - _userCommands.push_back(uc); + int cmdID = ID_USER_CMD + _userCommands.size(); + UserCommand uc(sc, cmdStr, cmdID); + //if (uc.isValid()) + _userCommands.push_back(uc); } } } @@ -896,18 +1193,33 @@ void NppParameters::feedPluginCustomizedCmds(TiXmlNode *node) childNode = childNode->NextSibling("PluginCommand") ) { Shortcut sc; - if (getShortcuts(childNode, sc) && sc.isValid()) + if (getShortcuts(childNode, sc))// && sc.isValid()) { const char *moduleName = (childNode->ToElement())->Attribute("moduleName"); if (!moduleName) - moduleName = ""; + continue; int internalID = -1; const char *internalIDStr = (childNode->ToElement())->Attribute("internalID", &internalID); - PluginCmdShortcut pcs(sc, -1, moduleName, internalID); - if (pcs.isValid()) - _pluginCustomizedCmds.push_back(pcs); + if (!internalIDStr) + continue; + + //Find the corresponding plugincommand and alter it, put the index in the list + int len = (int)_pluginCommands.size(); + for(int i = 0; i < len; i++) + { + PluginCmdShortcut pscOrig = _pluginCommands[i]; + if (!_strnicmp(pscOrig.getModuleName(), moduleName, strlen(moduleName)) && pscOrig.getInternalID() == internalID) + { + //Found matching command + PluginCmdShortcut pcs(sc, _pluginCommands[i].getID(), moduleName, internalID); + strncpy(pcs._name, pscOrig._name, 64); + _pluginCommands[i] = pcs; + addPluginModifiedIndex(i); + break; + } + } } } } @@ -921,14 +1233,33 @@ void NppParameters::feedScintKeys(TiXmlNode *node) childNode ; childNode = childNode->NextSibling("ScintKey") ) { - int id; - const char *idStr = (childNode->ToElement())->Attribute("id", &id); - if (idStr) + Shortcut sc; + if (getShortcuts(childNode, sc)) { - ScintillaKeyMap skmm(id); - if (getScintKey(childNode, skmm) && skmm.isValid()) + int scintKey; + const char *keyStr = (childNode->ToElement())->Attribute("ScintID", &scintKey); + if (!keyStr) + continue; + + int menuID; + keyStr = (childNode->ToElement())->Attribute("menuCmdID", &menuID); + if (!keyStr) + continue; + + //Find the corresponding scintillacommand and alter it, put the index in the list + size_t len = _scintillaKeyCommands.size(); + for(size_t i = 0; i < len; i++) { - _scintillaModifiedKeys.push_back(skmm); + ScintillaKeyMap skmOrig = _scintillaKeyCommands[i]; + if (skmOrig.getScintillaKeyID() == scintKey &&skmOrig.getMenuCmdID() == menuID) + { + //Found matching command + ScintillaKeyMap skm(sc, scintKey, menuID); + strncpy(skm._name, skmOrig._name, 64); + _scintillaKeyCommands[i] = skm; + addScintillaModifiedIndex(i); + break; + } } } } @@ -962,7 +1293,7 @@ bool NppParameters::getShortcuts(TiXmlNode *node, Shortcut & sc) if (!keyStr) return false; - strcpy(sc._name, name); + strncpy(sc._name, name, 64); sc._isCtrl = isCtrl; sc._isAlt = isAlt; sc._isShift = isShift; @@ -970,25 +1301,6 @@ bool NppParameters::getShortcuts(TiXmlNode *node, Shortcut & sc) return true; } -bool NppParameters::getScintKey(TiXmlNode *node, ScintillaKeyMap & skm) -{ - if (getShortcuts(node, skm)) - { - int scintKey; - const char *keyStr = (node->ToElement())->Attribute("ScintID", &scintKey); - if (!keyStr) - return false; - - int menuID; - keyStr = (node->ToElement())->Attribute("menuCmdID", &menuID); - if (!keyStr) - return false; - skm.setScintKey(scintKey); - skm.setMenuID(menuID); - return true; - } - return false; -} const int loadFailed = 100; const int missingName = 101; @@ -1057,7 +1369,6 @@ void NppParameters::writeUserDefinedLang() void NppParameters::insertCmd(TiXmlNode *shortcutsRoot, const CommandShortcut & cmd) { TiXmlNode *sc = shortcutsRoot->InsertEndChild(TiXmlElement("Shortcut")); - sc->ToElement()->SetAttribute("name", cmd._name); sc->ToElement()->SetAttribute("id", cmd.getID()); sc->ToElement()->SetAttribute("Ctrl", cmd._isCtrl?"yes":"no"); sc->ToElement()->SetAttribute("Alt", cmd._isAlt?"yes":"no"); @@ -1112,14 +1423,12 @@ void NppParameters::insertScintKey(TiXmlNode *scintKeyRoot, const ScintillaKeyMa { TiXmlNode *keyRoot = scintKeyRoot->InsertEndChild(TiXmlElement("ScintKey")); - keyRoot->ToElement()->SetAttribute("name", scintKeyMap._name); - keyRoot->ToElement()->SetAttribute("id", scintKeyMap.getID()); + keyRoot->ToElement()->SetAttribute("ScintID", scintKeyMap.getScintillaKeyID()); + keyRoot->ToElement()->SetAttribute("menuCmdID", scintKeyMap.getMenuCmdID()); keyRoot->ToElement()->SetAttribute("Ctrl", scintKeyMap._isCtrl?"yes":"no"); keyRoot->ToElement()->SetAttribute("Alt", scintKeyMap._isAlt?"yes":"no"); keyRoot->ToElement()->SetAttribute("Shift", scintKeyMap._isShift?"yes":"no"); keyRoot->ToElement()->SetAttribute("Key", scintKeyMap._key); - keyRoot->ToElement()->SetAttribute("ScintID", scintKeyMap.getScintillaKey()); - keyRoot->ToElement()->SetAttribute("menuCmdID", scintKeyMap.getMenuCmdID()); } void NppParameters::writeSession(const Session & session, const char *fileName) @@ -1182,7 +1491,7 @@ void NppParameters::writeSession(const Session & session, const char *fileName) } -void NppParameters::writeShortcuts(bool rewriteCmdSc, bool rewriteMacrosSc, bool rewriteUserCmdSc, bool rewriteScintillaKey, bool rewritePluginCmdSc) +void NppParameters::writeShortcuts() { if (!_pXmlShortcutDoc) { @@ -1197,75 +1506,60 @@ void NppParameters::writeShortcuts(bool rewriteCmdSc, bool rewriteMacrosSc, bool //root = _pXmlShortcutDoc->FirstChild("NotepadPlus"); } - if (rewriteCmdSc) + TiXmlNode *cmdRoot = root->FirstChild("InternalCommands"); + if (cmdRoot) + root->RemoveChild(cmdRoot); + + cmdRoot = root->InsertEndChild(TiXmlElement("InternalCommands")); + for (size_t i = 0 ; i < _customizedShortcuts.size() ; i++) { - TiXmlNode *cmdRoot = root->FirstChild("InternalCommands"); - if (cmdRoot) - root->RemoveChild(cmdRoot); - - cmdRoot = root->InsertEndChild(TiXmlElement("InternalCommands")); - - for (size_t i = 0 ; i < _shortcuts.size() ; i++) - { - insertCmd(cmdRoot, _shortcuts[i]); - } + int index = _customizedShortcuts[i]; + CommandShortcut csc = _shortcuts[index]; + insertCmd(cmdRoot, csc); } - if (rewriteMacrosSc) - { - TiXmlNode *macrosRoot = root->FirstChild("Macros"); - if (macrosRoot) - root->RemoveChild(macrosRoot); + TiXmlNode *macrosRoot = root->FirstChild("Macros"); + if (macrosRoot) + root->RemoveChild(macrosRoot); - macrosRoot = root->InsertEndChild(TiXmlElement("Macros")); - - for (size_t i = 0 ; i < _macros.size() ; i++) - { - insertMacro(macrosRoot, _macros[i]); - } + macrosRoot = root->InsertEndChild(TiXmlElement("Macros")); + + for (size_t i = 0 ; i < _macros.size() ; i++) + { + insertMacro(macrosRoot, _macros[i]); } - if (rewriteUserCmdSc) + TiXmlNode *userCmdRoot = root->FirstChild("UserDefinedCommands"); + if (userCmdRoot) + root->RemoveChild(userCmdRoot); + + userCmdRoot = root->InsertEndChild(TiXmlElement("UserDefinedCommands")); + + for (size_t i = 0 ; i < _userCommands.size() ; i++) { - TiXmlNode *userCmdRoot = root->FirstChild("UserDefinedCommands"); - if (userCmdRoot) - root->RemoveChild(userCmdRoot); - - userCmdRoot = root->InsertEndChild(TiXmlElement("UserDefinedCommands")); - - for (size_t i = 0 ; i < _userCommands.size() ; i++) - { - insertUserCmd(userCmdRoot, _userCommands[i]); - } + insertUserCmd(userCmdRoot, _userCommands[i]); } - if (rewriteScintillaKey) - { - TiXmlNode *scitillaKeyRoot = root->FirstChild("ScintillaKeys"); - if (scitillaKeyRoot) - root->RemoveChild(scitillaKeyRoot); + TiXmlNode *pluginCmdRoot = root->FirstChild("PluginCommands"); + if (pluginCmdRoot) + root->RemoveChild(pluginCmdRoot); - scitillaKeyRoot = root->InsertEndChild(TiXmlElement("ScintillaKeys")); - for (size_t i = 0 ; i < _scintillaModifiedKeys.size() ; i++) - { - insertScintKey(scitillaKeyRoot, _scintillaModifiedKeys[i]); - } + pluginCmdRoot = root->InsertEndChild(TiXmlElement("PluginCommands")); + for (size_t i = 0 ; i < _pluginCustomizedCmds.size() ; i++) + { + insertPluginCmd(pluginCmdRoot, _pluginCommands[_pluginCustomizedCmds[i]]); } - if (rewritePluginCmdSc) - { - TiXmlNode *pluginCmdRoot = root->FirstChild("PluginCommands"); - if (pluginCmdRoot) - root->RemoveChild(pluginCmdRoot); + TiXmlNode *scitillaKeyRoot = root->FirstChild("ScintillaKeys"); + if (scitillaKeyRoot) + root->RemoveChild(scitillaKeyRoot); - pluginCmdRoot = root->InsertEndChild(TiXmlElement("PluginCommands")); - for (size_t i = 0 ; i < _pluginCustomizedCmds.size() ; i++) - { - insertPluginCmd(pluginCmdRoot, _pluginCustomizedCmds[i]); - } + scitillaKeyRoot = root->InsertEndChild(TiXmlElement("ScintillaKeys")); + for (size_t i = 0 ; i < _scintillaModifiedKeyIndices.size() ; i++) + { + insertScintKey(scitillaKeyRoot, _scintillaKeyCommands[_scintillaModifiedKeyIndices[i]]); } - if (rewriteCmdSc || rewriteMacrosSc || rewriteUserCmdSc || rewriteScintillaKey || rewritePluginCmdSc) - _pXmlShortcutDoc->SaveFile(); + _pXmlShortcutDoc->SaveFile(); } int NppParameters::addUserLangToEnd(const UserLangContainer & userLang, const char *newName) @@ -3546,3 +3840,57 @@ void NppParameters::stylerStrOp(bool op) } } +void NppParameters::addUserModifiedIndex(int index) +{ + size_t len = _customizedShortcuts.size(); + bool found = false; + for(size_t i = 0; i < len; i++) + { + if (_customizedShortcuts[i] == index) + { + found = true; + break; + } + } + if (!found) + { + _customizedShortcuts.push_back(index); + } +} + +void NppParameters::addPluginModifiedIndex(int index) +{ + size_t len = _pluginCustomizedCmds.size(); + bool found = false; + for(size_t i = 0; i < len; i++) + { + if (_pluginCustomizedCmds[i] == index) + { + found = true; + break; + } + } + if (!found) + { + _pluginCustomizedCmds.push_back(index); + } +} + +void NppParameters::addScintillaModifiedIndex(int index) +{ + size_t len = _scintillaModifiedKeyIndices.size(); + bool found = false; + for(size_t i = 0; i < len; i++) + { + if (_scintillaModifiedKeyIndices[i] == index) + { + found = true; + break; + } + } + if (!found) + { + _scintillaModifiedKeyIndices.push_back(index); + } +} + diff --git a/PowerEditor/src/Parameters.h b/PowerEditor/src/Parameters.h index 05b4e6013..7501d67f1 100644 --- a/PowerEditor/src/Parameters.h +++ b/PowerEditor/src/Parameters.h @@ -899,7 +899,7 @@ public: vector * getExternalLexerDoc() { return &_pXmlExternalLexerDoc;}; void writeUserDefinedLang(); - void writeShortcuts(bool rewriteCmdSc, bool rewriteMacrosSc, bool rewriteUserCmdSc, bool rewriteScintillaKey, bool rewritePluginCmdSc); + void writeShortcuts(); void writeSession(const Session & session, const char *fileName = NULL); @@ -977,15 +977,18 @@ public: bool isRemappingShortcut() const {return _shortcuts.size() != 0;}; vector & getUserShortcuts() {return _shortcuts;}; + vector & getUserModifiedShortcuts() {return _customizedShortcuts;}; + void addUserModifiedIndex(int index); + vector & getMacroList() {return _macros;}; vector & getUserCommandList() {return _userCommands;}; vector & getPluginCommandList() {return _pluginCommands;}; - vector & getPluginCustomizedCmds() {return _pluginCustomizedCmds;}; + vector & getPluginModifiedKeyIndices() {return _pluginCustomizedCmds;}; + void addPluginModifiedIndex(int index); vector & getScintillaKeyList() {return _scintillaKeyCommands;}; - vector & getScintillaModifiedKeys() {return _scintillaModifiedKeys;}; - - //vector & getNoMenuCmdNames() {return _noMenuCmdNames;}; + vector & getScintillaModifiedKeyIndices() {return _scintillaModifiedKeyIndices;}; + void addScintillaModifiedIndex(int index); vector & getContextMenuItems() {return _contextMenuItems;}; const Session & getSession() const {return _session;}; @@ -993,6 +996,9 @@ public: void setAccelerator(Accelerator *pAccel) {_pAccelerator = pAccel;}; Accelerator * getAccelerator() {return _pAccelerator;}; + void setScintillaAccelerator(ScintillaAccelerator *pScintAccel) {_pScintAccelerator = pScintAccel;}; + ScintillaAccelerator * getScintillaAccelerator() {return _pScintAccelerator;}; + const char * getNppPath() const {return _nppPath;}; const char * getAppDataNppDir() const {return _appdataNppDir;}; @@ -1047,6 +1053,9 @@ public: }; bool asNotepadStyle() const {return _asNotepadStyle;}; + bool reloadPluginCmds() { + return getPluginCmdsFromXmlTree(); + } private: NppParameters(); ~NppParameters() { @@ -1101,14 +1110,16 @@ private: WNDPROC _enableThemeDialogTextureFuncAddr; - vector _shortcuts; - vector _macros; - vector _userCommands; - vector _pluginCommands; - vector _pluginCustomizedCmds; + vector _shortcuts; //main menu shortuts. Static size + vector _customizedShortcuts; //altered main menu shortcuts. Indices static. Needed when saving alterations + vector _macros; //macro shortcuts, dynamic size, defined on loading macros and adding/deleting them + vector _userCommands; //run shortcuts, dynamic size, defined on loading run commands and adding/deleting them + vector _pluginCommands; //plugin commands, dynamic size, defined on loading plugins + vector _pluginCustomizedCmds; //plugincommands that have been altered. Indices determined after loading ALL plugins. Needed when saving alterations + + vector _scintillaKeyCommands; //scintilla keycommands. Static size + vector _scintillaModifiedKeyIndices; //modified scintilla keys. Indices static, determined by searching for commandId. Needed when saving alterations - vector _scintillaKeyCommands; - vector _scintillaModifiedKeys; //vector _noMenuCmdNames; vector _contextMenuItems; @@ -1121,6 +1132,7 @@ private: char _appdataNppDir[MAX_PATH]; // sentinel of the absence of "doLocalConf.xml" : (_appdataNppDir == "")?"doLocalConf.xml present":"doLocalConf.xml absent" Accelerator *_pAccelerator; + ScintillaAccelerator * _pScintAccelerator; FindDlgTabTitiles _findDlgTabTitiles; bool _asNotepadStyle; @@ -1144,7 +1156,6 @@ private: bool getUserStylersFromXmlTree(); bool getUserDefineLangsFromXmlTree(); bool getShortcutsFromXmlTree(); - void initScintillaKeys(); bool getMacrosFromXmlTree(); bool getUserCmdsFromXmlTree(); @@ -1174,9 +1185,8 @@ private: void feedPluginCustomizedCmds(TiXmlNode *node); void feedScintKeys(TiXmlNode *node); - void getActions(TiXmlNode *node, MacroShortcut & macroShortcut); + void getActions(TiXmlNode *node, Macro & macro); bool getShortcuts(TiXmlNode *node, Shortcut & sc); - bool getScintKey(TiXmlNode *node, ScintillaKeyMap & skm); void writeStyle2Element(Style & style2Wite, Style & style2Sync, TiXmlElement *element); void insertUserLang2Tree(TiXmlNode *node, UserLangContainer *userLang); @@ -1190,6 +1200,8 @@ private: void insertDockingParamNode(TiXmlNode *GUIRoot); void writeExcludedLangList(TiXmlElement *element); void writePrintSetting(TiXmlElement *element); + void initMenuKeys(); //initialise menu keys and scintilla keys. Other keys are initialized on their own + void initScintillaKeys(); //these functions have to be called first before any modifications are loaded }; #endif //PARAMETERS_H diff --git a/PowerEditor/src/ScitillaComponent/ScintillaEditView.h b/PowerEditor/src/ScitillaComponent/ScintillaEditView.h index 019e11fb1..8263108a4 100644 --- a/PowerEditor/src/ScitillaComponent/ScintillaEditView.h +++ b/PowerEditor/src/ScitillaComponent/ScintillaEditView.h @@ -79,7 +79,7 @@ const bool fold_collapse = false; const bool UPPERCASE = true; const bool LOWERCASE = false; -typedef vector> ColumnModeInfo; +typedef vector > ColumnModeInfo; const unsigned char MASK_FORMAT = 0x03; const unsigned char MASK_ZERO_LEADING = 0x04; const unsigned char BASE_10 = 0x00; // Dec diff --git a/PowerEditor/src/WinControls/Grid/ShortcutMapper.cpp b/PowerEditor/src/WinControls/Grid/ShortcutMapper.cpp index bf7b61ad3..91da26243 100644 --- a/PowerEditor/src/WinControls/Grid/ShortcutMapper.cpp +++ b/PowerEditor/src/WinControls/Grid/ShortcutMapper.cpp @@ -20,12 +20,35 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "ShortcutMapper.h" #include "Notepad_plus.h" +void ShortcutMapper::initTabs() { + HWND hTab = _hTabCtrl = ::GetDlgItem(_hSelf, IDC_BABYGRID_TABBAR); + TCITEM tie; + tie.mask = TCIF_TEXT; + tie.pszText = tabNames[0]; + ::SendMessage(hTab, TCM_INSERTITEM, 0, (LPARAM)(&tie) ); + tie.pszText = tabNames[1]; + ::SendMessage(hTab, TCM_INSERTITEM, 1, (LPARAM)(&tie) ); + tie.pszText = tabNames[2]; + ::SendMessage(hTab, TCM_INSERTITEM, 2, (LPARAM)(&tie) ); + tie.pszText = tabNames[3]; + ::SendMessage(hTab, TCM_INSERTITEM, 3, (LPARAM)(&tie) ); + tie.pszText = tabNames[4]; + ::SendMessage(hTab, TCM_INSERTITEM, 4, (LPARAM)(&tie) ); +} + +void ShortcutMapper::translateTab(int index, const char * newname) { + if (index < 0 || index > 4) + return; + strncpy(tabNames[index], newname, maxTabName); +} + void ShortcutMapper::initBabyGrid() { RECT rect; getClientRect(rect); _babygrid.init(_hInst, _hSelf, IDD_BABYGRID_ID1); - _babygrid.reSizeTo(rect); + //_babygrid.reSizeTo(rect); + _babygrid.reSizeToWH(rect); _babygrid.hideCursor(); _babygrid.makeColAutoWidth(); _babygrid.setColsNumbered(false); @@ -36,34 +59,72 @@ void ShortcutMapper::initBabyGrid() { void ShortcutMapper::fillOutBabyGrid() { NppParameters *nppParam = NppParameters::getInstance(); - vector &skms = nppParam->getScintillaKeyList(); - int nbScitillaMsg = skms.size(); - _pAccel = nppParam->getAccelerator(); - _babygrid.setLineColNumber(_pAccel->_nbAccelItems + nbScitillaMsg, 2); + _babygrid.clear(); + + size_t nrItems = 0; + + switch(_currentState) { + case STATE_MENU: { + nrItems = nppParam->getUserShortcuts().size(); + _babygrid.setLineColNumber(nrItems, 2); + break; } + case STATE_MACRO: { + nrItems = nppParam->getMacroList().size(); + _babygrid.setLineColNumber(nrItems, 2); + break; } + case STATE_USER: { + nrItems = nppParam->getUserCommandList().size(); + _babygrid.setLineColNumber(nrItems, 2); + break; } + case STATE_PLUGIN: { + nrItems = nppParam->getPluginCommandList().size(); + _babygrid.setLineColNumber(nrItems, 2); + break; } + case STATE_SCINTILLA: { + nrItems = nppParam->getScintillaKeyList().size(); + _babygrid.setLineColNumber(nrItems, 2); + break; } + } + _babygrid.setText(0, 1, "Name"); _babygrid.setText(0, 2, "Shortcut"); - int i = 0 ; - for ( ; i < _pAccel->_nbAccelItems ; i++) - { - unsigned char vFlg = _pAccel->_pAccelArray[i].fVirt; - string shortcut = (vFlg & FCONTROL)?"Ctrl+":""; - shortcut += (vFlg & FALT)?"Alt+":""; - shortcut += (vFlg & FSHIFT)?"Shift+":""; - string key; - getKeyStrFromVal((unsigned char)_pAccel->_pAccelArray[i].key, key); - shortcut += key; - _babygrid.setText(i+1, 2, shortcut.c_str()); - - string shortcutName; - getNameStrFromCmd(_pAccel->_pAccelArray[i].cmd, shortcutName); - _babygrid.setText(i+1, 1, shortcutName.c_str()); - } - - for (size_t j = 0 ; i < _pAccel->_nbAccelItems + nbScitillaMsg ; i++, j++) - { - _babygrid.setText(i+1, 1, skms[j]._name); - _babygrid.setText(i+1, 2, skms[j].toString().c_str()); + switch(_currentState) { + case STATE_MENU: { + vector & cshortcuts = nppParam->getUserShortcuts(); + for(size_t i = 0; i < nrItems; i++) { + _babygrid.setText(i+1, 1, cshortcuts[i]._name); + _babygrid.setText(i+1, 2, cshortcuts[i].toString().c_str()); + } + break; } + case STATE_MACRO: { + vector & cshortcuts = nppParam->getMacroList(); + for(size_t i = 0; i < nrItems; i++) { + _babygrid.setText(i+1, 1, cshortcuts[i]._name); + _babygrid.setText(i+1, 2, cshortcuts[i].toString().c_str()); + } + break; } + case STATE_USER: { + vector & cshortcuts = nppParam->getUserCommandList(); + for(size_t i = 0; i < nrItems; i++) { + _babygrid.setText(i+1, 1, cshortcuts[i]._name); + _babygrid.setText(i+1, 2, cshortcuts[i].toString().c_str()); + } + break; } + case STATE_PLUGIN: { + vector & cshortcuts = nppParam->getPluginCommandList(); + for(size_t i = 0; i < nrItems; i++) { + _babygrid.setText(i+1, 1, cshortcuts[i]._name); + _babygrid.setText(i+1, 2, cshortcuts[i].toString().c_str()); + } + break; } + case STATE_SCINTILLA: { + vector & cshortcuts = nppParam->getScintillaKeyList(); + for(size_t i = 0; i < nrItems; i++) { + _babygrid.setText(i+1, 1, cshortcuts[i]._name); + _babygrid.setText(i+1, 2, cshortcuts[i].toString().c_str()); + } + break; } } } @@ -73,16 +134,45 @@ BOOL CALLBACK ShortcutMapper::run_dlgProc(UINT message, WPARAM wParam, LPARAM lP { case WM_INITDIALOG : { + initBabyGrid(); + initTabs(); fillOutBabyGrid(); _babygrid.display(); goToCenter(); return TRUE; } + case WM_NOTIFY: { + NMHDR nmh = *((NMHDR*)lParam); + if (nmh.hwndFrom == _hTabCtrl) { + if (nmh.code == TCN_SELCHANGE) { + int index = TabCtrl_GetCurSel(_hTabCtrl); + switch (index) { + case 0: + _currentState = STATE_MENU; + break; + case 1: + _currentState = STATE_MACRO; + break; + case 2: + _currentState = STATE_USER; + break; + case 3: + _currentState = STATE_PLUGIN; + break; + case 4: + _currentState = STATE_SCINTILLA; + break; + } + fillOutBabyGrid(); + } + } + break; } + case WM_COMMAND : { - switch (wParam) + switch (LOWORD(wParam)) { case IDCANCEL : { @@ -100,256 +190,201 @@ BOOL CALLBACK ShortcutMapper::run_dlgProc(UINT message, WPARAM wParam, LPARAM lP NppParameters *nppParam = NppParameters::getInstance(); int row = _babygrid.getSelectedRow(); - if (row <= _pAccel->_nbAccelItems) - { - ACCEL accel = _pAccel->_pAccelArray[row-1]; - string shortcutName; - DWORD cmdID = _pAccel->_pAccelArray[row-1].cmd; - ShortcutType st = getNameStrFromCmd(cmdID, shortcutName); - - Shortcut shortcut(shortcutName.c_str(), (accel.fVirt & FCONTROL) != 0, (accel.fVirt & FALT) != 0, (accel.fVirt & FSHIFT) != 0, (unsigned char)accel.key); - shortcut.init(_hInst, _hSelf); - shortcut.setNameReadOnly((st != TYPE_CMD) && (st != TYPE_PLUGINCMD)); - - Shortcut oldSc = shortcut; - - if ((shortcut.doDialog() != -1) && (oldSc != shortcut)) - { - // Update the key map - _pAccel->_pAccelArray[row-1].fVirt = FVIRTKEY | (shortcut._isCtrl?FCONTROL:0) | (shortcut._isAlt?FALT:0) | (shortcut._isShift?FSHIFT:0); - _pAccel->_pAccelArray[row-1].key = shortcut._key; - _pAccel->reNew(); - - // Update the GUI - string sc = shortcut.toString(); - _babygrid.setText(row, 2, sc.c_str()); - - // Add (or update) shortcut to vector in order to save what we have done - if (st == TYPE_CMD) - { - int index = -1; - vector & shortcutList = nppParam->getUserShortcuts(); - - for (size_t i = 0 ; i < shortcutList.size() ; i++) - { - if (cmdID == shortcutList[i].getID()) - { - index = i; - break; - } - } - - if (index != -1) - shortcutList[index].copyShortcut(shortcut); - else - shortcutList.push_back(CommandShortcut(cmdID, shortcut)); - - ::SendMessage(_hParent, NPPM_INTERNAL_CMDLIST_MODIFIED, (WPARAM)sc.c_str(), cmdID); + switch(_currentState) { + case STATE_MENU: { + //Get CommandShortcut corresponding to row + vector & shortcuts = nppParam->getUserShortcuts(); + CommandShortcut csc = shortcuts[row - 1], prevcsc = shortcuts[row - 1]; + csc.init(_hInst, _hSelf); + if (csc.doDialog() != -1 && prevcsc != csc) { //shortcut was altered + nppParam->addUserModifiedIndex(row-1); + shortcuts[row - 1] = csc; + _babygrid.setText(row, 2, csc.toString().c_str()); + //Notify current Accelerator class to update everything + nppParam->getAccelerator()->updateShortcuts(); + //::SendMessage(_hParent, NPPM_INTERNAL_CMDLIST_MODIFIED, (WPARAM)sc.c_str(), cmdID); } - else if (st == TYPE_MACRO) - { - vector & theMacros = nppParam->getMacroList(); - const int i = cmdID - ID_MACRO; - theMacros[i].copyShortcut(shortcut); + break; } + case STATE_MACRO: { + //Get MacroShortcut corresponding to row + vector & shortcuts = nppParam->getMacroList(); + MacroShortcut msc = shortcuts[row - 1], prevmsc = shortcuts[row - 1]; + msc.init(_hInst, _hSelf); + if (msc.doDialog() != -1 && prevmsc != msc) { //shortcut was altered + shortcuts[row - 1] = msc; + _babygrid.setText(row, 1, msc._name); + _babygrid.setText(row, 2, msc.toString().c_str()); - HMENU hMenu = ::GetSubMenu(::GetMenu(_hParent), MENUINDEX_MACRO); - ::ModifyMenu(hMenu, cmdID, MF_BYCOMMAND, cmdID, theMacros[i].toMenuItemString().c_str()); - - ::SendMessage(_hParent, NPPM_INTERNAL_MACROLIST_MODIFIED, 0, 0); + //Notify current Accelerator class to update everything + nppParam->getAccelerator()->updateShortcuts(); + //::SendMessage(_hParent, NPPM_INTERNAL_MACROLIST_MODIFIED, 0, 0); } - else if (st == TYPE_USERCMD) - { - vector & theUserCmds = nppParam->getUserCommandList(); - const int i = cmdID - ID_USER_CMD; - theUserCmds[i].copyShortcut(shortcut); + break; } + case STATE_USER: { + //Get UserCommand corresponding to row + vector & shortcuts = nppParam->getUserCommandList(); + UserCommand ucmd = shortcuts[row - 1], prevucmd = shortcuts[row - 1]; + ucmd.init(_hInst, _hSelf); + prevucmd = ucmd; + if (ucmd.doDialog() != -1 && prevucmd != ucmd) { //shortcut was altered + shortcuts[row - 1] = ucmd; + _babygrid.setText(row, 1, ucmd._name); + _babygrid.setText(row, 2, ucmd.toString().c_str()); - HMENU hMenu = ::GetSubMenu(::GetMenu(_hParent), MENUINDEX_RUN); - ::ModifyMenu(hMenu, cmdID, MF_BYCOMMAND, cmdID, theUserCmds[i].toMenuItemString().c_str()); - - ::SendMessage(_hParent, NPPM_INTERNAL_USERCMDLIST_MODIFIED, 0, 0); + //Notify current Accelerator class to update everything + nppParam->getAccelerator()->updateShortcuts(); + //::SendMessage(_hParent, NPPM_INTERNAL_USERCMDLIST_MODIFIED, 0, 0); } - - else if (st == TYPE_PLUGINCMD) - { - vector & thePluginCmds = (NppParameters::getInstance())->getPluginCommandList(); - int i = -1; - for (size_t j = 0 ; j < thePluginCmds.size() ; j++) - { - if (cmdID == thePluginCmds[j].getID()) - { - i = j; - break; - } - } + break; } + case STATE_PLUGIN: { + //Get PluginCmdShortcut corresponding to row + vector & shortcuts = nppParam->getPluginCommandList(); + PluginCmdShortcut pcsc = shortcuts[row - 1], prevpcsc = shortcuts[row - 1]; + pcsc.init(_hInst, _hSelf); + prevpcsc = pcsc; + if (pcsc.doDialog() != -1 && prevpcsc != pcsc) { //shortcut was altered + nppParam->addPluginModifiedIndex(row-1); + shortcuts[row - 1] = pcsc; + _babygrid.setText(row, 2, pcsc.toString().c_str()); - thePluginCmds[i].copyShortcut(shortcut); - - HMENU hMenu = ::GetMenu(_hParent); - ::ModifyMenu(hMenu, cmdID, MF_BYCOMMAND, cmdID, thePluginCmds[i].toMenuItemString().c_str()); - - vector & theModifyedPluginCmds = (NppParameters::getInstance())->getPluginCustomizedCmds(); - - int k = -1; - for (size_t j = 0 ; j < theModifyedPluginCmds.size() ; j++) - { - if (cmdID == theModifyedPluginCmds[j].getID()) - { - k = j; - break; - } - } - if (k != -1) - theModifyedPluginCmds[k].copyShortcut(thePluginCmds[i]); - else - theModifyedPluginCmds.push_back(thePluginCmds[i]); - - ::SendMessage(_hParent, NPPM_INTERNAL_PLUGINCMDLIST_MODIFIED, 0, 0); + //Notify current Accelerator class to update everything + nppParam->getAccelerator()->updateShortcuts(); + //::SendMessage(_hParent, NPPM_INTERNAL_PLUGINCMDLIST_MODIFIED, 0, 0); } - _babygrid.setText(row, 1, shortcut._name); - } - } - else // Scintilla Key shortcut - { - vector & scintillaShortcuts = nppParam->getScintillaKeyList(); - const int index = row - _pAccel->_nbAccelItems - 1; - ScintillaKeyMap scintillaSc = scintillaShortcuts[index]; - scintillaSc.init(_hInst, _hSelf); - scintillaSc.setNameReadOnly(false); + break; } + case STATE_SCINTILLA: { + //Get ScintillaKeyMap corresponding to row + vector & shortcuts = nppParam->getScintillaKeyList(); + ScintillaKeyMap skm = shortcuts[row - 1], prevskm = shortcuts[row - 1]; + skm.init(_hInst, _hSelf); + if (skm.doDialog() != -1 && prevskm != skm) { //shortcut was altered + nppParam->addScintillaModifiedIndex(row-1); + shortcuts[row - 1] = skm; + _babygrid.setText(row, 2, skm.toString().c_str()); - if (scintillaSc.doDialog() != -1) - { - // Add this modification into the list to save it later - bool found = false; - vector & userDefScintillaKeys = nppParam->getScintillaModifiedKeys(); - for (size_t i = 0 ; i < userDefScintillaKeys.size() ; i++) - { - if (scintillaSc.getID() == userDefScintillaKeys[i].getID()) - { - userDefScintillaKeys[i].copyShortcut(scintillaSc); - found = true; - } + //Notify current Accelerator class to update key + //nppParam->getScintillaAccelerator()->updateKeys(); + nppParam->getScintillaAccelerator()->updateKey(prevskm, skm); + + //::SendMessage(_hParent, NPPM_INTERNAL_BINDSCINTILLAKEY, scintillaSc.toKeyDef(), scintillaSc.getScintillaKey()); + //::SendMessage(_hParent, NPPM_INTERNAL_CLEARSCINTILLAKEY, scintillaShortcuts[index].toKeyDef(), 0); + //::SendMessage(_hParent, NPPM_INTERNAL_SCINTILLAKEYMODIFIED, 0, 0); } - if (!found) - userDefScintillaKeys.push_back(scintillaSc); - - // remap the key - ::SendMessage(_hParent, NPPM_INTERNAL_BINDSCINTILLAKEY, scintillaSc.toKeyDef(), scintillaSc.getScintillaKey()); - ::SendMessage(_hParent, NPPM_INTERNAL_CLEARSCINTILLAKEY, scintillaShortcuts[index].toKeyDef(), 0); - - // update the key in the scintilla key list - scintillaShortcuts[index].copyShortcut(scintillaSc); - - // if this shortcut is linked to a menu item, change to shortcut string in menu item - if (int cmdID = scintillaShortcuts[index].getMenuCmdID()) - { - HMENU hMenu = ::GetMenu(_hParent); - ::ModifyMenu(hMenu, cmdID, MF_BYCOMMAND, cmdID, scintillaShortcuts[index].toMenuItemString(cmdID).c_str()); - } - - // Update UI - _babygrid.setText(row, 2, scintillaSc.toString().c_str()); - - ::SendMessage(_hParent, NPPM_INTERNAL_SCINTILLAKEYMODIFIED, 0, 0); - } + break; } } return TRUE; } case IDM_BABYGRID_DELETE : { NppParameters *nppParam = NppParameters::getInstance(); - if (::MessageBox(_hSelf, "Are you sure to delete this shortcut?", "Are you sure?", MB_OKCANCEL) == IDOK) + if (::MessageBox(_hSelf, "Are you sure you want to delete this shortcut?", "Are you sure?", MB_OKCANCEL) == IDOK) { const int row = _babygrid.getSelectedRow(); - DWORD cmdID = _pAccel->_pAccelArray[row-1].cmd; + int shortcutIndex = row-1; + DWORD cmdID;// = _pAccel->_pAccelArray[row-1].cmd; // Menu data - int erasePos; size_t posBase; size_t nbElem; HMENU hMenu; - if ((cmdID >= ID_MACRO) && (cmdID < ID_MACRO_LIMIT)) - { - vector & theMacros = nppParam->getMacroList(); - vector::iterator it = theMacros.begin(); - erasePos = cmdID - ID_MACRO; - theMacros.erase(it + erasePos); - _pAccel->uptdateShortcuts(); - _babygrid.clear(); - fillOutBabyGrid(); + switch(_currentState) { + case STATE_MENU: + case STATE_PLUGIN: + case STATE_SCINTILLA: { + return FALSE; //this is bad + break; } + case STATE_MACRO: { + vector & theMacros = nppParam->getMacroList(); + vector::iterator it = theMacros.begin(); + cmdID = theMacros[shortcutIndex].getID(); + theMacros.erase(it + shortcutIndex); + fillOutBabyGrid(); + + // preparing to remove from menu + posBase = 6; + nbElem = theMacros.size(); + hMenu = ::GetSubMenu(::GetMenu(_hParent), MENUINDEX_MACRO); + for (size_t i = shortcutIndex ; i < nbElem ; i++) //lower the IDs of the remaining items so there are no gaps + { + MacroShortcut ms = theMacros[i]; + ms.setID(ms.getID() - 1); //shift all IDs + theMacros[i] = ms; + } + //::SendMessage(_hParent, NPPM_INTERNAL_MACROLIST_MODIFIED, 0, 0); + break; } + case STATE_USER: { + vector & theUserCmds = nppParam->getUserCommandList(); + vector::iterator it = theUserCmds.begin(); + cmdID = theUserCmds[shortcutIndex].getID(); + theUserCmds.erase(it + shortcutIndex); + fillOutBabyGrid(); - // preparing to remove from menu - posBase = 3; - nbElem = theMacros.size(); - hMenu = ::GetSubMenu(::GetMenu(_hParent), MENUINDEX_MACRO); - - ::SendMessage(_hParent, NPPM_INTERNAL_MACROLIST_MODIFIED, 0, 0); - } - else if ((cmdID >= ID_USER_CMD) && (cmdID < ID_USER_CMD_LIMIT)) - { - vector & theUserCmds = nppParam->getUserCommandList(); - vector::iterator it = theUserCmds.begin(); - erasePos = cmdID - ID_USER_CMD; - theUserCmds.erase(it + erasePos); - _pAccel->uptdateShortcuts(); - _babygrid.clear(); - fillOutBabyGrid(); - - // preparing to remove from menu - posBase = 0; - nbElem = theUserCmds.size(); - hMenu = ::GetSubMenu(::GetMenu(_hParent), MENUINDEX_RUN); - - ::SendMessage(_hParent, NPPM_INTERNAL_USERCMDLIST_MODIFIED, 0, 0); - } - else // should never happen - { - return FALSE; + // preparing to remove from menu + posBase = 2; + nbElem = theUserCmds.size(); + hMenu = ::GetSubMenu(::GetMenu(_hParent), MENUINDEX_RUN); + for (size_t i = shortcutIndex ; i < nbElem ; i++) //lower the IDs of the remaining items so there are no gaps + { + UserCommand uc = theUserCmds[i]; + uc.setID(uc.getID() - 1); //shift all IDs + theUserCmds[i] = uc; + } + + //::SendMessage(_hParent, NPPM_INTERNAL_USERCMDLIST_MODIFIED, 0, 0); + break; } } // remove from menu - ::RemoveMenu(hMenu, cmdID++, MF_BYCOMMAND); - - for (size_t i = erasePos ; i < nbElem ; i++) - { - char cmdName[64]; - ::GetMenuString(hMenu, cmdID, cmdName, sizeof(cmdName), MF_BYCOMMAND); - ::ModifyMenu(hMenu, cmdID, MF_BYCOMMAND, cmdID-1, cmdName); - cmdID++; + ::RemoveMenu(hMenu, cmdID, MF_BYCOMMAND); + cmdID++; + if (nbElem == 0) { + ::RemoveMenu(hMenu, posBase-1, MF_BYPOSITION); //remove separator + } else { + for (size_t i = shortcutIndex ; i < nbElem ; i++) //lower the IDs of the remaining menu items so there are no gaps + { + char cmdName[64]; + ::GetMenuString(hMenu, cmdID, cmdName, sizeof(cmdName), MF_BYCOMMAND); + ::ModifyMenu(hMenu, cmdID, MF_BYCOMMAND, cmdID-1, cmdName); //update commandID + } } - if (nbElem == 0) - ::RemoveMenu(hMenu, posBase + 1, MF_BYPOSITION); + nppParam->getAccelerator()->updateShortcuts(); } return TRUE; } - default : - if (LOWORD(wParam) == IDD_BABYGRID_ID1) + case IDD_BABYGRID_ID1: { + if(HIWORD(wParam) == BGN_CELLDBCLICKED) //a cell was clicked in the properties grid { - if(HIWORD(wParam) == BGN_CELLDBCLICKED) //a cell was clicked in the properties grid - { - return ::SendMessage(_hSelf, WM_COMMAND, IDM_BABYGRID_MODIFY, LOWORD(lParam)); - } - else if(HIWORD(wParam) == BGN_CELLRCLICKED) //a cell was clicked in the properties grid - { - int row = LOWORD(lParam); - DWORD cmdID = _pAccel->_pAccelArray[row-1].cmd; - - POINT p; - ::GetCursorPos(&p); - if (!_rightClickMenu.isCreated()) - { - vector itemUnitArray; - itemUnitArray.push_back(MenuItemUnit(IDM_BABYGRID_MODIFY, "Modify")); - itemUnitArray.push_back(MenuItemUnit(IDM_BABYGRID_DELETE, "Delete")); - _rightClickMenu.create(_hSelf, itemUnitArray); - } - bool b = (!((cmdID >= ID_MACRO) && (cmdID < ID_MACRO_LIMIT))) && (!((cmdID >= ID_USER_CMD) && (cmdID < ID_USER_CMD_LIMIT))); - _rightClickMenu.enableItem(IDM_BABYGRID_DELETE, !b); - _rightClickMenu.display(p); - return TRUE; - } + return ::SendMessage(_hSelf, WM_COMMAND, IDM_BABYGRID_MODIFY, LOWORD(lParam)); } + else if(HIWORD(wParam) == BGN_CELLRCLICKED) //a cell was clicked in the properties grid + { + POINT p; + ::GetCursorPos(&p); + if (!_rightClickMenu.isCreated()) + { + vector itemUnitArray; + itemUnitArray.push_back(MenuItemUnit(IDM_BABYGRID_MODIFY, "Modify")); + itemUnitArray.push_back(MenuItemUnit(IDM_BABYGRID_DELETE, "Delete")); + _rightClickMenu.create(_hSelf, itemUnitArray); + } + switch(_currentState) { + case STATE_MACRO: + case STATE_USER: { + _rightClickMenu.enableItem(IDM_BABYGRID_DELETE, true); + break; } + case STATE_MENU: + case STATE_PLUGIN: + case STATE_SCINTILLA: { + _rightClickMenu.enableItem(IDM_BABYGRID_DELETE, false); + break; } + } + + _rightClickMenu.display(p); + return TRUE; + } + } } } default: diff --git a/PowerEditor/src/WinControls/Grid/ShortcutMapper.h b/PowerEditor/src/WinControls/Grid/ShortcutMapper.h index b9298c1a0..9c371b979 100644 --- a/PowerEditor/src/WinControls/Grid/ShortcutMapper.h +++ b/PowerEditor/src/WinControls/Grid/ShortcutMapper.h @@ -25,9 +25,17 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "shortcut.h" #include "ContextMenu.h" +enum GridState {STATE_MENU, STATE_MACRO, STATE_USER, STATE_PLUGIN, STATE_SCINTILLA}; + class ShortcutMapper : public StaticDialog { public: - ShortcutMapper() : StaticDialog() {}; + ShortcutMapper() : _currentState(STATE_MENU), StaticDialog() { + strncpy(tabNames[0], "Main menu", maxTabName); + strncpy(tabNames[1], "Macros", maxTabName); + strncpy(tabNames[2], "Run commands", maxTabName); + strncpy(tabNames[3], "Plugin commands", maxTabName); + strncpy(tabNames[4], "Scintilla commands", maxTabName); + }; ~ShortcutMapper() {}; //void init(HINSTANCE hInst, HWND parent) {}; void destroy() {}; @@ -44,17 +52,27 @@ public: }; void getClientRect(RECT & rc) const { Window::getClientRect(rc); + rc.top += 40; rc.bottom -= 20; + rc.left += 5; }; + void translateTab(int index, const char * newname); + protected : BOOL CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam); private: + static const int maxTabName = 64; BabyGridWrapper _babygrid; - Accelerator *_pAccel; ContextMenu _rightClickMenu; + GridState _currentState; + HWND _hTabCtrl; + + char tabNames[5][maxTabName]; + + void initTabs(); void initBabyGrid(); void fillOutBabyGrid(); }; diff --git a/PowerEditor/src/WinControls/Grid/ShortcutMapper.rc b/PowerEditor/src/WinControls/Grid/ShortcutMapper.rc index 2606d27dd..f8d4b1c46 100644 --- a/PowerEditor/src/WinControls/Grid/ShortcutMapper.rc +++ b/PowerEditor/src/WinControls/Grid/ShortcutMapper.rc @@ -33,4 +33,6 @@ CAPTION "Shortcut mapper" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Close",IDOK,172,319,47,14 + CONTROL "",IDC_BABYGRID_TABBAR,"SysTabControl32",TCS_BUTTONS,6,6,372, + 12 END diff --git a/PowerEditor/src/WinControls/Grid/ShortcutMapper_rc.h b/PowerEditor/src/WinControls/Grid/ShortcutMapper_rc.h index 6db79f132..405d095de 100644 --- a/PowerEditor/src/WinControls/Grid/ShortcutMapper_rc.h +++ b/PowerEditor/src/WinControls/Grid/ShortcutMapper_rc.h @@ -21,3 +21,4 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #define IDD_BABYGRID_ID1 (IDD_SHORTCUTMAPPER_DLG + 1) #define IDM_BABYGRID_MODIFY (IDD_SHORTCUTMAPPER_DLG + 2) #define IDM_BABYGRID_DELETE (IDD_SHORTCUTMAPPER_DLG + 3) +#define IDC_BABYGRID_TABBAR (IDD_SHORTCUTMAPPER_DLG + 4) diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp index f31d86799..65bf5e95b 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp @@ -688,12 +688,16 @@ BOOL CALLBACK DefaultNewDocDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM if ((LangType)i != L_USER) { int cmdID = pNppParam->langTypeToCommandID((LangType)i); - if ((cmdID != -1) && (getNameStrFromCmd(cmdID, str) == TYPE_CMD)) + if ((cmdID != -1)) { - _langList.push_back(LangID_Name((LangType)i, str)); - ::SendDlgItemMessage(_hSelf, IDC_COMBO_DEFAULTLANG, CB_ADDSTRING, 0, (LPARAM)str.c_str()); - if (ndds._lang == i) - index = _langList.size() - 1; + getNameStrFromCmd(cmdID, str); + if (str.length() > 0) + { + _langList.push_back(LangID_Name((LangType)i, str)); + ::SendDlgItemMessage(_hSelf, IDC_COMBO_DEFAULTLANG, CB_ADDSTRING, 0, (LPARAM)str.c_str()); + if (ndds._lang == i) + index = _langList.size() - 1; + } } } } @@ -764,11 +768,14 @@ BOOL CALLBACK LangMenuDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lPara if ((LangType)i != L_USER) { int cmdID = pNppParam->langTypeToCommandID((LangType)i); - if (getNameStrFromCmd(cmdID, str) == TYPE_CMD) + if ((cmdID != -1)) { - _langList.push_back(LangMenuItem((LangType)i, cmdID, str)); - ::SendDlgItemMessage(_hSelf, IDC_LIST_ENABLEDLANG, LB_ADDSTRING, 0, (LPARAM)str.c_str()); - //printStr(str.c_str()); + getNameStrFromCmd(cmdID, str); + if (str.length() > 0) + { + _langList.push_back(LangMenuItem((LangType)i, cmdID, str)); + ::SendDlgItemMessage(_hSelf, IDC_LIST_ENABLEDLANG, LB_ADDSTRING, 0, (LPARAM)str.c_str()); + } } } } @@ -1420,4 +1427,4 @@ void BackupDlg::updateBackupGUI() ::EnableWindow(::GetDlgItem(_hSelf, IDD_BACKUPDIR_STATIC), isEnableLocalCheck); ::EnableWindow(::GetDlgItem(_hSelf, IDC_BACKUPDIR_EDIT), isEnableLocalCheck); ::EnableWindow(::GetDlgItem(_hSelf, IDD_BACKUPDIR_BROWSE_BUTTON), isEnableLocalCheck); -} \ No newline at end of file +} diff --git a/PowerEditor/src/WinControls/StaticDialog/RunDlg/RunDlg.cpp b/PowerEditor/src/WinControls/StaticDialog/RunDlg/RunDlg.cpp index 1acd1a762..ab941295d 100644 --- a/PowerEditor/src/WinControls/StaticDialog/RunDlg/RunDlg.cpp +++ b/PowerEditor/src/WinControls/StaticDialog/RunDlg/RunDlg.cpp @@ -29,12 +29,7 @@ void Command::extractArgs(char *cmd2Exec, char *args, const char *cmdEntier) int i = 0; bool quoted = false; for ( ; i < int(strlen(cmdEntier)) ; i++) - {/* - if (cmdEntier[i] != ' ') - cmd2Exec[i] = cmdEntier[i]; - else - break; -*/ + { if ((cmdEntier[i] == ' ') && (!quoted)) break; if (cmdEntier[i]=='"') @@ -202,28 +197,26 @@ BOOL CALLBACK RunDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) { std::vector & theUserCmds = (NppParameters::getInstance())->getUserCommandList(); + int nbCmd = theUserCmds.size(); + + int cmdID = ID_USER_CMD + nbCmd; char cmd[MAX_PATH]; ::GetDlgItemText(_hSelf, IDC_COMBO_RUN_PATH, cmd, MAX_PATH); - UserCommand uc(cmd); + UserCommand uc(Shortcut(), cmd, cmdID); uc.init(_hInst, _hSelf); + uc._canModifyName = true; if (uc.doDialog() != -1) { - theUserCmds.push_back(uc); - - std::vector & userCommands = (NppParameters::getInstance())->getUserCommandList(); HMENU hRunMenu = ::GetSubMenu(::GetMenu(_hParent), MENUINDEX_RUN); - int const posBase = 0; - int nbCmd = userCommands.size(); - if (nbCmd == 1) - ::InsertMenu(hRunMenu, posBase + 1, MF_BYPOSITION, (unsigned int)-1, 0); - //char menuString[64]; - //sprintf(menuString, "%s%s%s", uc._name, "\t", uc.toString().c_str()); - ::InsertMenu(hRunMenu, posBase + 1 + nbCmd, MF_BYPOSITION, ID_USER_CMD + nbCmd - 1, uc.toMenuItemString().c_str()); - - Accelerator *pAccel = (NppParameters::getInstance())->getAccelerator(); - pAccel->uptdateShortcuts(); - ::SendMessage(_hParent, NPPM_INTERNAL_USERCMDLIST_MODIFIED, 0, 0); + 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()); + (NppParameters::getInstance())->getAccelerator()->updateShortcuts(); } return TRUE; } diff --git a/PowerEditor/src/WinControls/shortcut/shortcut.cpp b/PowerEditor/src/WinControls/shortcut/shortcut.cpp index d3150a396..4d654b87d 100644 --- a/PowerEditor/src/WinControls/shortcut/shortcut.cpp +++ b/PowerEditor/src/WinControls/shortcut/shortcut.cpp @@ -21,9 +21,119 @@ #include "resource.h" #include "Notepad_plus.h" -//const int NB_VKEY = 77; +#include "keys.h" const int KEY_STR_LEN = 16; +struct KeyIDNAME { + const char * name; + unsigned char id; +}; + +KeyIDNAME namedKeyArray[] = { +{"None", VK_NULL}, + +{"Backspace", VK_BACK}, +{"Tab", VK_TAB}, +{"Enter", VK_RETURN}, +{"Esc", VK_ESCAPE}, +{"Spacebar", VK_SPACE}, + +{"Page up", VK_PRIOR}, +{"Page down", VK_NEXT}, +{"End", VK_END}, +{"Home", VK_HOME}, +{"Left", VK_LEFT}, +{"Up", VK_UP}, +{"Right", VK_RIGHT}, +{"Down", VK_DOWN}, + +{"INS", VK_INSERT}, +{"DEL", VK_DELETE}, + +{"0", VK_0}, +{"1", VK_1}, +{"2", VK_2}, +{"3", VK_3}, +{"4", VK_4}, +{"5", VK_5}, +{"6", VK_6}, +{"7", VK_7}, +{"8", VK_8}, +{"9", VK_9}, +{"A", VK_A}, +{"B", VK_B}, +{"C", VK_C}, +{"D", VK_D}, +{"E", VK_E}, +{"F", VK_F}, +{"G", VK_G}, +{"H", VK_H}, +{"I", VK_I}, +{"J", VK_J}, +{"K", VK_K}, +{"L", VK_L}, +{"M", VK_M}, +{"N", VK_N}, +{"O", VK_O}, +{"P", VK_P}, +{"Q", VK_Q}, +{"R", VK_R}, +{"S", VK_S}, +{"T", VK_T}, +{"U", VK_U}, +{"V", VK_V}, +{"W", VK_W}, +{"X", VK_X}, +{"Y", VK_Y}, +{"Z", VK_Z}, + +{"Numpad 0", VK_NUMPAD0}, +{"Numpad 1", VK_NUMPAD1}, +{"Numpad 2", VK_NUMPAD2}, +{"Numpad 3", VK_NUMPAD3}, +{"Numpad 4", VK_NUMPAD4}, +{"Numpad 5", VK_NUMPAD5}, +{"Numpad 6", VK_NUMPAD6}, +{"Numpad 7", VK_NUMPAD7}, +{"Numpad 8", VK_NUMPAD8}, +{"Numpad 9", VK_NUMPAD9}, +{"Num *", VK_MULTIPLY}, +{"Num +", VK_ADD}, +//{"Num Enter", VK_SEPARATOR}, //this one doesnt seem to work +{"Num -", VK_SUBTRACT}, +{"Num .", VK_DECIMAL}, +{"Num /", VK_DIVIDE}, +{"F1", VK_F1}, +{"F2", VK_F2}, +{"F3", VK_F3}, +{"F4", VK_F4}, +{"F5", VK_F5}, +{"F6", VK_F6}, +{"F7", VK_F7}, +{"F8", VK_F8}, +{"F9", VK_F9}, +{"F10", VK_F10}, +{"F11", VK_F11}, +{"F12", VK_F12}, + +{"~", VK_OEM_3}, +{"-", VK_OEM_MINUS}, +{"=", VK_OEM_PLUS}, +{"[", VK_OEM_4}, +{"]", VK_OEM_6}, +{";", VK_OEM_1}, +{"'", VK_OEM_7}, +{"\\", VK_OEM_5}, +{",", VK_OEM_COMMA}, +{".", VK_OEM_PERIOD}, +{"/", VK_OEM_2}, + +{"<>", VK_OEM_102}, +}; + +#define nrKeys sizeof(namedKeyArray)/sizeof(KeyIDNAME) + +/* char vKeyArray[][KEY_STR_LEN] = \ {"", "BACKSPACE", "TAB", "ENTER", "PAUSE", "CAPS LOCK", "ESC", "SPACEBAR", "PAGE UP", "PAGE DOWN",\ "END", "HOME", "LEFT ARROW", "UP ARROW", "RIGHT ARROW", "DOWN ARROW", "INS", "DEL",\ @@ -44,12 +154,21 @@ unsigned char vkeyValue[] = {\ 0x57, 0x58, 0x59, 0x5A, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65,\ 0x66, 0x67, 0x68, 0x69, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,\ 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B}; +*/ string Shortcut::toString() const { - string sc = _isCtrl?"Ctrl+":""; - sc += _isAlt?"Alt+":""; - sc += _isShift?"Shift+":""; + string sc = ""; + if (!isEnabled()) + return sc; + + if (_isCtrl) + sc += "Ctrl+"; + if (_isAlt) + sc += "Alt+"; + if (_isShift) + sc += "Shift+"; + string key; getKeyStrFromVal(_key, key); sc += key; @@ -60,36 +179,32 @@ void getKeyStrFromVal(unsigned char keyVal, string & str) { str = ""; bool found = false; - int i = 0; - for (; i < sizeof(vkeyValue) ; i++) - { - if (keyVal == vkeyValue[i]) - { + int i; + for (i = 0; i < nrKeys; i++) { + if (keyVal == namedKeyArray[i].id) { found = true; break; } } if (found) - str = vKeyArray[i]; + str = namedKeyArray[i].name; + else + str = "Unlisted"; } -ShortcutType getNameStrFromCmd(DWORD cmd, string & str) +void getNameStrFromCmd(DWORD cmd, string & str) { - ShortcutType st; - if ((cmd >= ID_MACRO) && (cmd < ID_MACRO_LIMIT)) { vector & theMacros = (NppParameters::getInstance())->getMacroList(); int i = cmd - ID_MACRO; str = theMacros[i]._name; - st = TYPE_MACRO; } else if ((cmd >= ID_USER_CMD) && (cmd < ID_USER_CMD_LIMIT)) { vector & userCommands = (NppParameters::getInstance())->getUserCommandList(); int i = cmd - ID_USER_CMD; str = userCommands[i]._name; - st = TYPE_USERCMD; } else if ((cmd >= ID_PLUGINS_CMD) && (cmd < ID_PLUGINS_CMD_LIMIT)) { @@ -104,36 +219,23 @@ ShortcutType getNameStrFromCmd(DWORD cmd, string & str) } } str = pluginCmds[i]._name; - //printStr(str.c_str()); - st = TYPE_PLUGINCMD; } - /*else if ((cmd >= IDCMD) && (cmd < IDCMD_LIMIT)) - { - - vector & cmds = (NppParameters::getInstance())->getNoMenuCmdNames(); - - size_t idcmdIndex = cmd - IDCMD; - if (idcmdIndex < cmds.size()) - str = cmds[idcmdIndex]; - - st = TYPE_CMD; - }*/ else { HWND hNotepad_plus = ::FindWindow(Notepad_plus::getClassName(), NULL); char cmdName[64]; - char filteredCmdName[64]; int nbChar = ::GetMenuString(::GetMenu(hNotepad_plus), cmd, cmdName, sizeof(cmdName), MF_BYCOMMAND); if (!nbChar) - return TYPE_INVALID; + return; bool fin = false; int j = 0; - for (size_t i = 0 ; i < strlen(cmdName) ; i++) + size_t len = strlen(cmdName); + for (size_t i = 0 ; i < len; i++) { switch(cmdName[i]) { case '\t': - filteredCmdName[j] = '\0'; + cmdName[j] = '\0'; fin = true; break; @@ -141,16 +243,15 @@ ShortcutType getNameStrFromCmd(DWORD cmd, string & str) break; default : - filteredCmdName[j++] = cmdName[i]; + cmdName[j++] = cmdName[i]; } if (fin) break; } - filteredCmdName[j] = '\0'; - str = filteredCmdName; - st = TYPE_CMD; + cmdName[j] = '\0'; + str = cmdName; } - return st; + return; } BOOL CALLBACK Shortcut::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam) @@ -163,22 +264,24 @@ BOOL CALLBACK Shortcut::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam) ::SetDlgItemText(_hSelf, IDC_NAME_EDIT, _name); if (!_canModifyName) ::SendDlgItemMessage(_hSelf, IDC_NAME_EDIT, EM_SETREADONLY, TRUE, 0); + int textlen = (int)::SendDlgItemMessage(_hSelf, IDC_NAME_EDIT, WM_GETTEXTLENGTH, 0, 0); ::SendDlgItemMessage(_hSelf, IDC_CTRL_CHECK, BM_SETCHECK, _isCtrl?BST_CHECKED:BST_UNCHECKED, 0); ::SendDlgItemMessage(_hSelf, IDC_ALT_CHECK, BM_SETCHECK, _isAlt?BST_CHECKED:BST_UNCHECKED, 0); ::SendDlgItemMessage(_hSelf, IDC_SHIFT_CHECK, BM_SETCHECK, _isShift?BST_CHECKED:BST_UNCHECKED, 0); - ::EnableWindow(::GetDlgItem(_hSelf, IDOK), isValid()); + ::EnableWindow(::GetDlgItem(_hSelf, IDOK), isValid() && (textlen > 0 || !_canModifyName)); int iFound = -1; - for (size_t i = 0 ; i < sizeof(vkeyValue) ; i++) + for (size_t i = 0 ; i < nrKeys ; i++) { - ::SendDlgItemMessage(_hSelf, IDC_KEY_COMBO, CB_ADDSTRING, 0, (LPARAM)vKeyArray[i]); + ::SendDlgItemMessage(_hSelf, IDC_KEY_COMBO, CB_ADDSTRING, 0, (LPARAM)namedKeyArray[i].name); - if (_key == vkeyValue[i]) + if (_key == namedKeyArray[i].id) iFound = i; } if (iFound != -1) ::SendDlgItemMessage(_hSelf, IDC_KEY_COMBO, CB_SETCURSEL, iFound, 0); + ::ShowWindow(::GetDlgItem(_hSelf, IDC_WARNING_STATIC), isEnabled()?SW_HIDE:SW_SHOW); goToCenter(); return TRUE; @@ -186,16 +289,17 @@ BOOL CALLBACK Shortcut::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam) case WM_COMMAND : { + int textlen = (int)::SendDlgItemMessage(_hSelf, IDC_NAME_EDIT, WM_GETTEXTLENGTH, 0, 0); switch (wParam) { case IDC_CTRL_CHECK : _isCtrl = BST_CHECKED == ::SendDlgItemMessage(_hSelf, wParam, BM_GETCHECK, 0, 0); - ::EnableWindow(::GetDlgItem(_hSelf, IDOK), isValid()); + ::EnableWindow(::GetDlgItem(_hSelf, IDOK), isValid() && (textlen > 0 || !_canModifyName)); return TRUE; case IDC_ALT_CHECK : _isAlt = BST_CHECKED == ::SendDlgItemMessage(_hSelf, wParam, BM_GETCHECK, 0, 0); - ::EnableWindow(::GetDlgItem(_hSelf, IDOK), isValid()); + ::EnableWindow(::GetDlgItem(_hSelf, IDOK), isValid() && (textlen > 0 || !_canModifyName)); return TRUE; case IDC_SHIFT_CHECK : @@ -203,6 +307,11 @@ BOOL CALLBACK Shortcut::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam) return TRUE; case IDOK : + if (!isEnabled()) { + _isCtrl = _isAlt = _isShift = false; + } + if (_canModifyName) + ::SendDlgItemMessage(_hSelf, IDC_NAME_EDIT, WM_GETTEXT, nameLenMax, (LPARAM)_name); ::EndDialog(_hSelf, 0); return TRUE; @@ -215,7 +324,7 @@ BOOL CALLBACK Shortcut::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam) { if (LOWORD(wParam) == IDC_NAME_EDIT) { - ::SendDlgItemMessage(_hSelf, LOWORD(wParam), WM_GETTEXT, nameLenMax, (LPARAM)_name); + ::EnableWindow(::GetDlgItem(_hSelf, IDOK), isValid() && (textlen > 0 || !_canModifyName)); return TRUE; } } @@ -224,8 +333,9 @@ BOOL CALLBACK Shortcut::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam) if (LOWORD(wParam) == IDC_KEY_COMBO) { int i = ::SendDlgItemMessage(_hSelf, LOWORD(wParam), CB_GETCURSEL, 0, 0); - _key = vkeyValue[i]; - ::EnableWindow(::GetDlgItem(_hSelf, IDOK), isValid()); + _key = namedKeyArray[i].id; + ::EnableWindow(::GetDlgItem(_hSelf, IDOK), isValid() && (textlen > 0 || !_canModifyName)); + ::ShowWindow(::GetDlgItem(_hSelf, IDC_WARNING_STATIC), isEnabled()?SW_HIDE:SW_SHOW); return TRUE; } } @@ -240,7 +350,7 @@ BOOL CALLBACK Shortcut::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam) } // return true if one of CommandShortcuts is deleted. Otherwise false. -bool Accelerator::uptdateShortcuts(HWND nppHandle) +bool Accelerator::updateShortcuts(/*HWND nppHandle*/) { bool isCmdScModified = false; NppParameters *pNppParam = NppParameters::getInstance(); @@ -250,95 +360,91 @@ bool Accelerator::uptdateShortcuts(HWND nppHandle) vector & userCommands = pNppParam->getUserCommandList(); vector & pluginCommands = pNppParam->getPluginCommandList(); - vector & scintillaScs = pNppParam->getScintillaKeyList(); - vector & scintillaModifScs = pNppParam->getScintillaModifiedKeys(); - + size_t nbMenu = shortcuts.size(); size_t nbMacro = macros.size(); size_t nbUserCmd = userCommands.size(); size_t nbPluginCmd = pluginCommands.size(); - size_t totalShorcut = copyAccelArray(nbMacro, nbUserCmd, nbPluginCmd); + if (_pAccelArray) + delete [] _pAccelArray; - int m = 0; - size_t i = totalShorcut - nbMacro - nbUserCmd - nbPluginCmd; - for (vector::iterator ms = macros.begin() ; i < (totalShorcut - nbUserCmd - nbPluginCmd) ; i++, ms++) - { - _pAccelArray[i].cmd = ID_MACRO + m++; - _pAccelArray[i].fVirt = FVIRTKEY | (ms->_isCtrl?FCONTROL:0) | (ms->_isAlt?FALT:0) | (ms->_isShift?FSHIFT:0); - _pAccelArray[i].key = ms->_key; - } - - m = 0; - for (vector::iterator uc = userCommands.begin() ; i < (totalShorcut - nbPluginCmd); i++, uc++) - { - _pAccelArray[i].cmd = ID_USER_CMD + m++; - _pAccelArray[i].fVirt = FVIRTKEY | (uc->_isCtrl?FCONTROL:0) | (uc->_isAlt?FALT:0) | (uc->_isShift?FSHIFT:0); - _pAccelArray[i].key = uc->_key; - } - - for (vector::iterator pc = pluginCommands.begin() ; i < totalShorcut; i++, pc++) - { - _pAccelArray[i].cmd = (unsigned short)pc->getID(); - _pAccelArray[i].fVirt = FVIRTKEY | (pc->_isCtrl?FCONTROL:0) | (pc->_isAlt?FALT:0) | (pc->_isShift?FSHIFT:0); - _pAccelArray[i].key = pc->_key; - } - - // search all the command shortcuts modified by user from xml - for (vector::iterator csc = shortcuts.begin() ; csc != shortcuts.end() ; ) - { - bool found = false; - int nbCmdShortcut = totalShorcut - nbMacro - nbUserCmd - nbPluginCmd; - for (int j = 0 ; j < nbCmdShortcut ; j++) - { - if (_pAccelArray[j].cmd == csc->getID()) - { - _pAccelArray[j].fVirt = FVIRTKEY | (csc->_isCtrl?FCONTROL:0)\ - | (csc->_isAlt?FALT:0) | (csc->_isShift?FSHIFT:0); - _pAccelArray[j].key = csc->_key; - found = true; - break; - } - } - if (!found) - { - csc = shortcuts.erase(csc); - isCmdScModified = true; - } - else - csc++; - } - - - if (nppHandle) - { - for (vector::iterator skmm = scintillaModifScs.begin() ; skmm != scintillaModifScs.end() ; skmm++) - { - for (vector::iterator skm = scintillaScs.begin() ; skm != scintillaScs.end() ; skm++) - { - if (skmm->getScintillaKey() == skm->getScintillaKey()) - { - // remap the key - ::SendMessage(nppHandle, NPPM_INTERNAL_BINDSCINTILLAKEY, skmm->toKeyDef(), skmm->getScintillaKey()); - ::SendMessage(nppHandle, NPPM_INTERNAL_CLEARSCINTILLAKEY, skm->toKeyDef(), 0); - - // update the global ScintillaKeyList - skm->copyShortcut(*skmm); - - // if this shortcut is linked to a menu item, change to shortcut string in menu item - if (int cmdID = skm->getMenuCmdID()) - { - HMENU hMenu = ::GetMenu(nppHandle); - ::ModifyMenu(hMenu, cmdID, MF_BYCOMMAND, cmdID, skm->toMenuItemString(cmdID).c_str()); - } - break; - } - } + _pAccelArray = new ACCEL[nbMenu+nbMacro+nbUserCmd+nbPluginCmd]; + int offset = 0; + size_t i = 0; + //no validation performed, it might be that invalid shortcuts are being used by default. Allows user to 'hack', might be a good thing + for(i = 0; i < nbMenu; i++) { + if (shortcuts[i].isEnabled()) {// && shortcuts[i].isValid()) { + _pAccelArray[offset].cmd = (WORD)(shortcuts[i].getID()); + _pAccelArray[offset].fVirt = FVIRTKEY | (shortcuts[i]._isCtrl?FCONTROL:0) | (shortcuts[i]._isAlt?FALT:0) | (shortcuts[i]._isShift?FSHIFT:0); + _pAccelArray[offset].key = shortcuts[i]._key; + offset++; } } - reNew(); + + for(i = 0; i < nbMacro; i++) { + if (macros[i].isEnabled()) {// && macros[i].isValid()) { + _pAccelArray[offset].cmd = (WORD)(macros[i].getID()); + _pAccelArray[offset].fVirt = FVIRTKEY | (macros[i]._isCtrl?FCONTROL:0) | (macros[i]._isAlt?FALT:0) | (macros[i]._isShift?FSHIFT:0); + _pAccelArray[offset].key = macros[i]._key; + offset++; + } + } + + for(i = 0; i < nbUserCmd; i++) { + if (userCommands[i].isEnabled()) {// && userCommands[i].isValid()) { + _pAccelArray[offset].cmd = (WORD)(userCommands[i].getID()); + _pAccelArray[offset].fVirt = FVIRTKEY | (userCommands[i]._isCtrl?FCONTROL:0) | (userCommands[i]._isAlt?FALT:0) | (userCommands[i]._isShift?FSHIFT:0); + _pAccelArray[offset].key = userCommands[i]._key; + offset++; + } + } + + for(i = 0; i < nbPluginCmd; i++) { + if (pluginCommands[i].isEnabled()) {// && pluginCommands[i].isValid()) { + _pAccelArray[offset].cmd = (WORD)(pluginCommands[i].getID()); + _pAccelArray[offset].fVirt = FVIRTKEY | (pluginCommands[i]._isCtrl?FCONTROL:0) | (pluginCommands[i]._isAlt?FALT:0) | (pluginCommands[i]._isShift?FSHIFT:0); + _pAccelArray[offset].key = pluginCommands[i]._key; + offset++; + } + } + + _nbAccelItems = offset; + + updateFullMenu(); + reNew(); //update the table return isCmdScModified; } +void Accelerator::updateFullMenu() { + NppParameters * pNppParam = NppParameters::getInstance(); + vector commands = pNppParam->getUserShortcuts(); + for(size_t i = 0; i < commands.size(); i++) { + updateMenuItemByCommand(commands[i]); + } + + vector mcommands = pNppParam->getMacroList(); + for(size_t i = 0; i < mcommands.size(); i++) { + updateMenuItemByCommand(mcommands[i]); + } + + vector ucommands = pNppParam->getUserCommandList(); + for(size_t i = 0; i < ucommands.size(); i++) { + updateMenuItemByCommand(ucommands[i]); + } + + vector pcommands = pNppParam->getPluginCommandList(); + for(size_t i = 0; i < pcommands.size(); i++) { + updateMenuItemByCommand(pcommands[i]); + } + + ::DrawMenuBar(_hMenuParent); +} + +void Accelerator::updateMenuItemByCommand(CommandShortcut csc) { + int cmdID = (int)csc.getID(); + ::ModifyMenu(_hAccelMenu, cmdID, MF_BYCOMMAND, cmdID, csc.toMenuItemString().c_str()); +} + recordedMacroStep::recordedMacroStep(int iMessage, long wParam, long lParam) : message(iMessage), wParameter(wParam), lParameter(lParam), MacroType(mtUseLParameter) { @@ -397,3 +503,65 @@ void recordedMacroStep::PlayBack(Window* pNotepad, ScintillaEditView *pEditView) } } } + +void ScintillaAccelerator::init(vector * vScintillas, HMENU hMenu, HWND menuParent) { + _hAccelMenu = hMenu; + _hMenuParent = menuParent; + size_t nr = vScintillas->size(); + for(size_t i = 0; i < nr; i++) { + _vScintillas.push_back(vScintillas->at(i)); + } + _nrScintillas = (int)nr; +} + +void ScintillaAccelerator::updateKeys() { + NppParameters *pNppParam = NppParameters::getInstance(); + vector & map = pNppParam->getScintillaKeyList(); + size_t mapSize = map.size(); + + for(int i = 0; i < _nrScintillas; i++) { + ::SendMessage(_vScintillas[i], SCI_CLEARALLCMDKEYS, 0, 0); + for(size_t j = mapSize - 1; j >= 0; j--) { //reverse order, top of the list has highest priority + ScintillaKeyMap skm = map[j]; + if (skm.isEnabled()) { //no validating, scintilla accepts more keys + ::SendMessage(_vScintillas[i], SCI_ASSIGNCMDKEY, skm.toKeyDef(), skm.getScintillaKeyID()); + } + if (skm.getMenuCmdID() != 0) { + updateMenuItemByID(skm, skm.getMenuCmdID()); + } + if (j == 0) //j is unsigned, so default method doesnt work + break; + } + } +} + +void ScintillaAccelerator::updateKey(ScintillaKeyMap skmOld, ScintillaKeyMap skmNew) { + updateKeys(); //do a full update, double mappings can make this work badly + return; + for(int i = 0; i < _nrScintillas; i++) { + ::SendMessage(_vScintillas[i], SCI_CLEARCMDKEY, skmOld.toKeyDef(), 0); + ::SendMessage(_vScintillas[i], SCI_ASSIGNCMDKEY, skmNew.toKeyDef(), skmNew.getScintillaKeyID()); + } +} + +void ScintillaAccelerator::updateMenuItemByID(ScintillaKeyMap skm, int id) { + NppParameters *pNppParam = NppParameters::getInstance(); + char cmdName[64]; + ::GetMenuString(_hAccelMenu, id, cmdName, sizeof(cmdName), MF_BYCOMMAND); + int i = 0; + while(cmdName[i] != 0) { + if (cmdName[i] == '\t') { + cmdName[i] = 0; + break; + } + i++; + } + string menuItem = cmdName; + if (skm.isEnabled()) { + menuItem += "\t"; + //menuItem += "Sc:"; //sc: scintilla shortcut + menuItem += skm.toString(); + } + ::ModifyMenu(_hAccelMenu, id, MF_BYCOMMAND, id, menuItem.c_str()); + ::DrawMenuBar(_hMenuParent); +} diff --git a/PowerEditor/src/WinControls/shortcut/shortcut.h b/PowerEditor/src/WinControls/shortcut/shortcut.h index 9a5968c05..cbb2b4151 100644 --- a/PowerEditor/src/WinControls/shortcut/shortcut.h +++ b/PowerEditor/src/WinControls/shortcut/shortcut.h @@ -29,26 +29,26 @@ using namespace std; const size_t nameLenMax = 64; -enum ShortcutType {TYPE_CMD, TYPE_MACRO, TYPE_USERCMD, TYPE_PLUGINCMD, TYPE_INVALID}; +class NppParameters; void getKeyStrFromVal(unsigned char keyVal, string & str); -ShortcutType getNameStrFromCmd(DWORD cmd, string & str); +void getNameStrFromCmd(DWORD cmd, string & str); static int keyTranslate(int keyIn) { switch (keyIn) { case VK_DOWN: return SCK_DOWN; - case VK_UP: return SCK_UP; + case VK_UP: return SCK_UP; case VK_LEFT: return SCK_LEFT; case VK_RIGHT: return SCK_RIGHT; case VK_HOME: return SCK_HOME; case VK_END: return SCK_END; case VK_PRIOR: return SCK_PRIOR; case VK_NEXT: return SCK_NEXT; - case VK_DELETE: return SCK_DELETE; + case VK_DELETE: return SCK_DELETE; case VK_INSERT: return SCK_INSERT; - case VK_ESCAPE: return SCK_ESCAPE; + case VK_ESCAPE: return SCK_ESCAPE; case VK_BACK: return SCK_BACK; case VK_TAB: return SCK_TAB; - case VK_RETURN: return SCK_RETURN; + case VK_RETURN: return SCK_RETURN; case VK_ADD: return SCK_ADD; case VK_SUBTRACT: return SCK_SUBTRACT; case VK_DIVIDE: return SCK_DIVIDE; @@ -60,7 +60,9 @@ static int keyTranslate(int keyIn) { default: return keyIn; } }; -struct Shortcut : public StaticDialog { + +class Shortcut : public StaticDialog { +public: char _name[nameLenMax]; bool _isCtrl; bool _isAlt; @@ -68,19 +70,21 @@ struct Shortcut : public StaticDialog { unsigned char _key; bool _canModifyName; - Shortcut():_isCtrl(false), _isAlt(false), _isShift(false), _key(0), _canModifyName(true) {_name[0] = '\0';}; + Shortcut():_isCtrl(false), _isAlt(false), _isShift(false), _key(0), _canModifyName(false) {_name[0] = '\0';}; Shortcut(const Shortcut & shortcut) { this->_isCtrl = shortcut._isCtrl; this->_isAlt = shortcut._isAlt; this->_isShift = shortcut._isShift; this->_key = shortcut._key; strcpy(this->_name, shortcut._name); + this->_canModifyName = shortcut._canModifyName; }; Shortcut(const char *name, bool isCtrl, bool isAlt, bool isShift, unsigned char key) :\ - _isCtrl(isCtrl), _isAlt(isAlt), _isShift(isShift), _key(key){ + _isCtrl(isCtrl), _isAlt(isAlt), _isShift(isShift), _key(key) { _name[0] = '\0'; if (name) strcpy(_name, name); + this->_canModifyName = false; }; friend inline const bool operator==(const Shortcut & a, const Shortcut & b) { @@ -107,25 +111,29 @@ struct Shortcut : public StaticDialog { return ::DialogBoxParam(_hInst, MAKEINTRESOURCE(IDD_SHORTCUT_DLG), _hParent, (DLGPROC)dlgProc, (LPARAM)this); }; - bool isValid() const { + bool isValid() const { //valid should only be used in cases where the shortcut isEnabled(). if (_key == 0) - return false; - // the following keys are always valid (NUMPAD & F1~F12 + ESC + HOME + END) - if (((_key >= 0x60) && (_key <= 0x69)) || ((_key >= 0x70) && (_key <= 0x7B)) || (_key == 0x1B) || (_key == 0x24) || (_key == 0x23)) - return true; - // the remain keys need at least Ctrl or Alt - if ((_isCtrl) || (_isAlt)) - return true; - return false; + return true; //disabled key always valid, just disabled + + //These keys need a modifier, else invalid + if ( ((_key >= 'A') && (_key <= 'Z')) || ((_key >= '0') && (_key <= '9')) || _key == VK_SPACE || _key == VK_CAPITAL || _key == VK_BACK || _key == VK_RETURN) { + return ((_isCtrl) || (_isAlt)); + } + // the remaining keys are always valid + return true; }; - void setNameReadOnly(bool canBeModified = false) {_canModifyName = canBeModified;}; - string toString() const; - string toMenuItemString(int cmdID = 0) { + bool isEnabled() const { //true if key != 0, false if key == 0, in which case no accelerator should be made + return (_key != 0); + }; + + string toString() const; //the hotkey part + string toMenuItemString(int cmdID = 0) { //string suitable for menu, uses menu to retrieve name if command is specified string str = _name; - if (cmdID) - getNameStrFromCmd(cmdID, str); - str += "\t"; - str += toString(); + if(isEnabled()) + { + str += "\t"; + str += toString(); + } return str; }; protected : @@ -135,33 +143,24 @@ protected : class CommandShortcut : public Shortcut { public: - CommandShortcut() : _id(0){}; - CommandShortcut(const char *name, unsigned long id, bool isCtrl, bool isAlt, bool isShift, unsigned char key) :\ - Shortcut(name, isCtrl, isAlt, isShift, key), _id(id) {}; - CommandShortcut(long id, Shortcut sc) : Shortcut(sc), _id(id) {}; + CommandShortcut(Shortcut sc, long id) : Shortcut(sc), _id(id) {}; unsigned long getID() const {return _id;}; + void setID(unsigned long id) { _id = id;}; protected : unsigned long _id; }; -class ScintillaKeyMap : public CommandShortcut { +class ScintillaKeyMap : public Shortcut { public: - ScintillaKeyMap():_scintillaKeyID(0), _menuCmdID(0){}; - ScintillaKeyMap(unsigned long id): _scintillaKeyID(0), _menuCmdID(0){ _id = id;}; - ScintillaKeyMap(const char *name, unsigned long id, unsigned long scintillaKeyID,\ - bool isCtrl, bool isAlt, bool isShift, unsigned char key, int cmdID = 0) :\ - CommandShortcut(name, id, isCtrl, isAlt, isShift, key), _scintillaKeyID(scintillaKeyID), _menuCmdID(cmdID){}; + ScintillaKeyMap(Shortcut sc, unsigned long scintillaKeyID, unsigned long id): Shortcut(sc), _menuCmdID(id), _scintillaKeyID(scintillaKeyID) {}; unsigned long getScintillaKeyID() const {return _scintillaKeyID;}; + int getMenuCmdID() const {return _menuCmdID;}; int toKeyDef() const { int keymod = (_isCtrl?SCMOD_CTRL:0) | (_isAlt?SCMOD_ALT:0) | (_isShift?SCMOD_SHIFT:0); return keyTranslate((int)_key) + (keymod << 16); }; - unsigned long getScintillaKey() const {return _scintillaKeyID;}; - int getMenuCmdID() const {return _menuCmdID;}; - void setScintKey(int key) {_scintillaKeyID = key;}; - void setMenuID(int id) {_menuCmdID = id;}; private: unsigned long _scintillaKeyID; @@ -197,36 +196,30 @@ struct recordedMacroStep { typedef vector Macro; -class MacroShortcut : public Shortcut { +class MacroShortcut : public CommandShortcut { friend class NppParameters; public: - MacroShortcut(Shortcut sc) : Shortcut(sc) {}; - MacroShortcut(Macro macro) : _macro(macro) {}; - MacroShortcut(Shortcut sc, Macro macro) : Shortcut(sc), _macro(macro) {}; + MacroShortcut(Shortcut sc, Macro macro, int id) : CommandShortcut(sc, id), _macro(macro) {_canModifyName = true;}; Macro & getMacro() {return _macro;}; private: Macro _macro; }; -class UserCommand : public Shortcut { +class UserCommand : public CommandShortcut { friend class NppParameters; public: - UserCommand(Shortcut sc) : Shortcut(sc) {}; - UserCommand(char *cmd) : _cmd(cmd) {}; - UserCommand(Shortcut sc, char *cmd) : Shortcut(sc), _cmd(cmd) {}; + UserCommand(Shortcut sc, const char *cmd, int id) : CommandShortcut(sc, id), _cmd(cmd) {_canModifyName = true;}; const char* getCmd() const {return _cmd.c_str();}; private: string _cmd; }; -class PluginCmdShortcut : public Shortcut { +class PluginCmdShortcut : public CommandShortcut { friend class NppParameters; public: - PluginCmdShortcut(Shortcut sc) : Shortcut(sc), _id(0), _internalID(-1) {_moduleName[0] = '\0';}; - PluginCmdShortcut(Shortcut sc, int cmdID) : Shortcut(sc), _id(cmdID), _internalID(-1) {_moduleName[0] = '\0';}; - PluginCmdShortcut(Shortcut sc, int cmdID, const char *moduleName, unsigned short internalID) :\ - Shortcut(sc), _id(cmdID), _internalID(internalID) { + PluginCmdShortcut(Shortcut sc, int id, const char *moduleName, unsigned short internalID) :\ + CommandShortcut(sc, id), _id(id), _internalID(internalID) { strcpy(_moduleName, moduleName); }; bool isValid() const { @@ -246,30 +239,29 @@ protected : int _internalID; }; -class Accelerator { +class Accelerator { //Handles accelerator keys for Notepad++ menu, including custom commands friend class ShortcutMapper; public: - Accelerator():_hAccTable(NULL), _didCopy(false), _pAccelArray(NULL), _nbAccelItems(0){ - }; + Accelerator():_hAccelMenu(NULL), _hMenuParent(NULL), _hAccTable(NULL), _didCopy(false), _pAccelArray(NULL), _nbAccelItems(0){}; ~Accelerator(){ if (_didCopy) ::DestroyAcceleratorTable(_hAccTable); + if (_pAccelArray) + delete [] _pAccelArray; }; - void init(HACCEL hAccel) { + void init(HACCEL hAccel, HMENU hMenu, HWND menuParent) { _hAccTable = hAccel; + _hAccelMenu = hMenu; + _hMenuParent = menuParent; _nbOriginalAccelItem = ::CopyAcceleratorTable(_hAccTable, NULL, 0); }; HACCEL getAccTable() const {return _hAccTable;}; - bool uptdateShortcuts(HWND nppHandle = NULL); - - void coloneAccelTable() { - copyAccelArray(); - reNew(); - }; - - + bool updateShortcuts(/*HWND nppHandle = NULL*/); + //bool updateCommand(CommandShortcut & csc); private: + HMENU _hAccelMenu; + HWND _hMenuParent; HACCEL _hAccTable; bool _didCopy; @@ -277,19 +269,6 @@ private: int _nbOriginalAccelItem; int _nbAccelItems; - - size_t copyAccelArray(int nbMacro2add = 0, int nbUserCmd2add = 0, int nbPluginCmd2add = 0) { - int newSize = _nbOriginalAccelItem + nbMacro2add + nbUserCmd2add + nbPluginCmd2add; - _nbAccelItems = newSize; - - if (_pAccelArray) - delete [] _pAccelArray; - _pAccelArray = new ACCEL[_nbAccelItems]; - - ::CopyAcceleratorTable(_hAccTable, _pAccelArray, _nbOriginalAccelItem); - return newSize; - }; - void reNew() { if (!_didCopy) _didCopy = true; @@ -298,6 +277,24 @@ private: _hAccTable = ::CreateAcceleratorTable(_pAccelArray, _nbAccelItems); }; + void updateFullMenu(); + void updateMenuItemByCommand(CommandShortcut csc); +}; + +class ScintillaAccelerator { //Handles accelerator keys for scintilla +public: + ScintillaAccelerator() : _nrScintillas(0) {}; + void init(vector * vScintillas, HMENU hMenu, HWND menuParent); + void updateKeys(); + void updateKey(ScintillaKeyMap skmOld, ScintillaKeyMap skm); + +private: + HMENU _hAccelMenu; + HWND _hMenuParent; + vector _vScintillas; + int _nrScintillas; + + void updateMenuItemByID(ScintillaKeyMap skm, int id); }; #endif //SHORTCUTS_H diff --git a/PowerEditor/src/WinControls/shortcut/shortcut.rc b/PowerEditor/src/WinControls/shortcut/shortcut.rc index e43c4e136..fee9ff108 100644 --- a/PowerEditor/src/WinControls/shortcut/shortcut.rc +++ b/PowerEditor/src/WinControls/shortcut/shortcut.rc @@ -45,4 +45,6 @@ BEGIN LTEXT "+",IDC_STATIC,96,42,8,8 EDITTEXT IDC_NAME_EDIT,56,9,93,14,ES_AUTOHSCROLL LTEXT "Name :",IDC_NAME_STATIC,15,12,34,8,0,WS_EX_RIGHT + LTEXT "This will disable the accelerator!",IDC_WARNING_STATIC, + 6,90,170,8 END diff --git a/PowerEditor/src/WinControls/shortcut/shortcutRc.h b/PowerEditor/src/WinControls/shortcut/shortcutRc.h index b787766d7..869b904a8 100644 --- a/PowerEditor/src/WinControls/shortcut/shortcutRc.h +++ b/PowerEditor/src/WinControls/shortcut/shortcutRc.h @@ -27,5 +27,5 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #define IDC_KEY_COMBO (IDD_SHORTCUT_DLG + 4) #define IDC_NAME_EDIT (IDD_SHORTCUT_DLG + 5) #define IDC_NAME_STATIC (IDD_SHORTCUT_DLG + 6) - +#define IDC_WARNING_STATIC (IDD_SHORTCUT_DLG + 7) #endif //IDD_SHORTCUT_DLG diff --git a/PowerEditor/src/resource.h b/PowerEditor/src/resource.h index 69f28b12e..36f4d69d9 100644 --- a/PowerEditor/src/resource.h +++ b/PowerEditor/src/resource.h @@ -18,9 +18,9 @@ #ifndef RESOURCE_H #define RESOURCE_H -#define NOTEPAD_PLUS_VERSION "Notepad++ v4.7.5" -#define VERSION_VALUE "4.75\0" // should be X.Y : ie. if VERSION_DIGITALVALUE == 4, 7, 1, 0 , then X = 4, Y = 71 -#define VERSION_DIGITALVALUE 4, 7, 5, 0 +#define NOTEPAD_PLUS_VERSION "Notepad++ v4.8" +#define VERSION_VALUE "4.8\0" // should be X.Y : ie. if VERSION_DIGITALVALUE == 4, 7, 1, 0 , then X = 4, Y = 71 +#define VERSION_DIGITALVALUE 4, 8, 0, 0 #ifndef IDC_STATIC #define IDC_STATIC -1 @@ -175,10 +175,10 @@ #define IDC_PREV_DOC (IDCMD+3) #define IDC_NEXT_DOC (IDCMD+4) #define IDC_EDIT_TOGGLEMACRORECORDING (IDCMD+5) - #define IDC_KEY_HOME (IDCMD+6) - #define IDC_KEY_END (IDCMD+7) - #define IDC_KEY_SELECT_2_HOME (IDCMD+8) - #define IDC_KEY_SELECT_2_END (IDCMD+9) + //#define IDC_KEY_HOME (IDCMD+6) + //#define IDC_KEY_END (IDCMD+7) + //#define IDC_KEY_SELECT_2_HOME (IDCMD+8) + //#define IDC_KEY_SELECT_2_END (IDCMD+9) #define IDCMD_LIMIT (IDCMD+20) diff --git a/PowerEditor/visual.net/notepadPlus.vcproj b/PowerEditor/visual.net/notepadPlus.vcproj index b8ff20c7b..d07b2e0cd 100644 --- a/PowerEditor/visual.net/notepadPlus.vcproj +++ b/PowerEditor/visual.net/notepadPlus.vcproj @@ -580,10 +580,6 @@ RelativePath="..\src\resource.h" > - -