📄 parameters.cpp.svn-base
字号:
bool NppParameters::getUserDefineLangsFromXmlTree()
{
if (!_pXmlUserLangDoc)
return false;
TiXmlNode *root = _pXmlUserLangDoc->FirstChild("NotepadPlus");
if (!root)
return false;
feedUserLang(root);
return true;
}
bool NppParameters::getShortcutsFromXmlTree()
{
if (!_pXmlShortcutDoc)
return false;
TiXmlNode *root = _pXmlShortcutDoc->FirstChild("NotepadPlus");
if (!root)
return false;
feedShortcut(root);
return true;
}
bool NppParameters::getMacrosFromXmlTree()
{
if (!_pXmlShortcutDoc)
return false;
TiXmlNode *root = _pXmlShortcutDoc->FirstChild("NotepadPlus");
if (!root)
return false;
feedMacros(root);
return true;
}
bool NppParameters::getUserCmdsFromXmlTree()
{
if (!_pXmlShortcutDoc)
return false;
TiXmlNode *root = _pXmlShortcutDoc->FirstChild("NotepadPlus");
if (!root)
return false;
feedUserCmds(root);
return true;
}
bool NppParameters::getPluginCmdsFromXmlTree()
{
if (!_pXmlShortcutDoc)
return false;
TiXmlNode *root = _pXmlShortcutDoc->FirstChild("NotepadPlus");
if (!root)
return false;
feedPluginCustomizedCmds(root);
return true;
}
bool NppParameters::getScintKeysFromXmlTree()
{
if (!_pXmlShortcutDoc)
return false;
TiXmlNode *root = _pXmlShortcutDoc->FirstChild("NotepadPlus");
if (!root)
return false;
feedScintKeys(root);
return true;
}
void NppParameters::initScintillaKeys()
{
// 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));
// 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()
{
if (!_pXmlContextMenuDoc)
return false;
TiXmlNode *root = _pXmlContextMenuDoc->FirstChild("NotepadPlus");
if (!root)
return false;
TiXmlNode *contextMenuRoot = root->FirstChildElement("ScintillaContextMenu");
if (contextMenuRoot)
{
for (TiXmlNode *childNode = contextMenuRoot->FirstChildElement("Item");
childNode ;
childNode = childNode->NextSibling("Item") )
{
int id;
const char *idStr = (childNode->ToElement())->Attribute("id", &id);
if (idStr)
{
_contextMenuItems.push_back(MenuItemUnit(id, ""));
}
}
}
return true;
}
bool NppParameters::loadSession(Session & session, const char *sessionFileName)
{
TiXmlDocument *pXmlSessionDocument = new TiXmlDocument(sessionFileName);
bool loadOkay = pXmlSessionDocument->LoadFile();
if (loadOkay)
loadOkay = getSessionFromXmlTree(pXmlSessionDocument, &session);
delete pXmlSessionDocument;
return loadOkay;
}
bool NppParameters::getSessionFromXmlTree(TiXmlDocument *pSessionDoc, Session *pSession)
{
if ((pSessionDoc) && (!pSession))
return false;
TiXmlDocument **ppSessionDoc = &_pXmlSessionDoc;
Session *ptrSession = &_session;
if (pSessionDoc)
{
ppSessionDoc = &pSessionDoc;
ptrSession = pSession;
}
if (!*ppSessionDoc)
return false;
TiXmlNode *root = (*ppSessionDoc)->FirstChild("NotepadPlus");
if (!root)
return false;
TiXmlNode *sessionRoot = root->FirstChildElement("Session");
if (!sessionRoot)
return false;
TiXmlElement *actIndex = sessionRoot->ToElement();
size_t index;
const char *str = actIndex->Attribute("actifIndex", (int *)&index);
if (str)
{
(*ptrSession)._actifIndex = index;
}
for (TiXmlNode *childNode = sessionRoot->FirstChildElement("File");
childNode ;
childNode = childNode->NextSibling("File") )
{
TiXmlNode *fnNode = childNode->FirstChild();
const char *fileName = fnNode->Value();
Position position;
(childNode->ToElement())->Attribute("firstVisibleLine", &position._firstVisibleLine);
(childNode->ToElement())->Attribute("xOffset", &position._xOffset);
(childNode->ToElement())->Attribute("startPos", &position._startPos);
(childNode->ToElement())->Attribute("endPos", &position._endPos);
sessionFileInfo sfi(fileName, position);
for (TiXmlNode *markNode = fnNode->NextSibling("Mark");
markNode ;
markNode = markNode->NextSibling("Mark") )
{
int lineNumber;
const char *lineNumberStr = (markNode->ToElement())->Attribute("line", &lineNumber);
if (lineNumberStr)
{
sfi.marks.push_back(lineNumber);
//::MessageBox(NULL, "coucou", "", MB_OK);
}
}
if (fileName)
(*ptrSession)._files.push_back(sfi);
}
return true;
}
void NppParameters::feedFileListParameters(TiXmlNode *node)
{
_nbMaxFile = 10;
TiXmlNode *historyRoot = node->FirstChildElement("History");
if (!historyRoot) return;
(historyRoot->ToElement())->Attribute("nbMaxFile", &_nbMaxFile);
if ((_nbMaxFile < 0) || (_nbMaxFile > 30))
return;
for (TiXmlNode *childNode = historyRoot->FirstChildElement("File");
childNode && (_nbFile < NB_MAX_LRF_FILE);
childNode = childNode->NextSibling("File") )
{
_LRFileList[_nbFile] = new string((childNode->FirstChild())->Value());
_nbFile++;
}
}
void NppParameters::feedShortcut(TiXmlNode *node)
{
TiXmlNode *shortcutsRoot = node->FirstChildElement("InternalCommands");
if (!shortcutsRoot) return;
for (TiXmlNode *childNode = shortcutsRoot->FirstChildElement("Shortcut");
childNode ;
childNode = childNode->NextSibling("Shortcut") )
{
int id;
const char *idStr = (childNode->ToElement())->Attribute("id", &id);
if (idStr)
{
Shortcut sc;
if (getShortcuts(childNode, sc) && sc.isValid())
{
_shortcuts.push_back(CommandShortcut(id, sc));
}
}
}
}
void NppParameters::feedMacros(TiXmlNode *node)
{
TiXmlNode *macrosRoot = node->FirstChildElement("Macros");
if (!macrosRoot) return;
for (TiXmlNode *childNode = macrosRoot->FirstChildElement("Macro");
childNode ;
childNode = childNode->NextSibling("Macro") )
{
Shortcut sc;
if (getShortcuts(childNode, sc) && sc.isValid())
{
MacroShortcut ms(sc);
getActions(childNode, ms);
if (ms.isValid())
_macros.push_back(ms);
}
}
}
void NppParameters::getActions(TiXmlNode *node, MacroShortcut & macroShortcut)
{
for (TiXmlNode *childNode = node->FirstChildElement("Action");
childNode ;
childNode = childNode->NextSibling("Action") )
{
int type;
const char *typeStr = (childNode->ToElement())->Attribute("type", &type);
if ((!typeStr) || (type > 2))
continue;
int msg = 0;
const char *msgStr = (childNode->ToElement())->Attribute("message", &msg);
int wParam = 0;
const char *wParamStr = (childNode->ToElement())->Attribute("wParam", &wParam);
int lParam = 0;
const char *lParamStr = (childNode->ToElement())->Attribute("lParam", &lParam);
const char *sParam = (childNode->ToElement())->Attribute("sParam");
if (!sParam)
sParam = "";
recordedMacroStep step(type, msg, wParam, lParam, sParam);
if (step.isValid())
(macroShortcut.getMacro()).push_back(step);
}
}
void NppParameters::feedUserCmds(TiXmlNode *node)
{
TiXmlNode *userCmdsRoot = node->FirstChildElement("UserDefinedCommands");
if (!userCmdsRoot) return;
for (TiXmlNode *childNode = userCmdsRoot->FirstChildElement("Command");
childNode ;
childNode = childNode->NextSibling("Command") )
{
Shortcut sc;
if (getShortcuts(childNode, sc) && sc.isValid())
{
UserCommand uc(sc);
uc._cmd = (childNode->FirstChild())->Value();
if (uc.isValid())
_userCommands.push_back(uc);
}
}
}
void NppParameters::feedPluginCustomizedCmds(TiXmlNode *node)
{
TiXmlNode *pluginCustomizedCmdsRoot = node->FirstChildElement("PluginCommands");
if (!pluginCustomizedCmdsRoot) return;
for (TiXmlNode *childNode = pluginCustomizedCmdsRoot->FirstChildElement("PluginCommand");
childNode ;
childNode = childNode->NextSibling("PluginCommand") )
{
Shortcut sc;
if (getShortcuts(childNode, sc) && sc.isValid())
{
const char *moduleName = (childNode->ToElement())->Attribute("moduleName");
if (!moduleName)
moduleName = "";
int internalID = -1;
const char *internalIDStr = (childNode->ToElement())->Attribute("internalID", &internalID);
PluginCmdShortcut pcs(sc, -1, moduleName, internalID);
if (pcs.isValid())
_pluginCustomizedCmds.push_back(pcs);
}
}
}
void NppParameters::feedScintKeys(TiXmlNode *node)
{
TiXmlNode *scintKeysRoot = node->FirstChildElement("ScintillaKeys");
if (!scintKeysRoot) return;
for (TiXmlNode *childNode = scintKeysRoot->FirstChildElement("ScintKey");
childNode ;
childNode = childNode->NextSibling("ScintKey") )
{
int id;
const char *idStr = (childNode->ToElement())->Attribute("id", &id);
if (idStr)
{
ScintillaKeyMap skmm(id);
if (getScintKey(childNode, skmm) && skmm.isValid())
{
_scintillaModifiedKeys.push_back(skmm);
}
}
}
}
bool NppParameters::getShortcuts(TiXmlNode *node, Shortcut & sc)
{
if (!node) return false;
const char *name = (node->ToElement())->Attribute("name");
if (!name)
name = "";
bool isCtrl = false;
const char *isCtrlStr = (node->ToElement())->Attribute("Ctrl");
if (isCtrlStr)
isCtrl = !strcmp("yes", isCtrlStr);
bool isAlt = false;
const char *isAltStr = (node->ToElement())->Attribute("Alt");
if (isAltStr)
isAlt = !strcmp("yes", isAltStr);
bool isShift = false;
const char *isShiftStr = (node->ToElement())->Attribute("Shift");
if (isShiftStr)
isShift = !strcmp("yes", isShiftStr);
int key;
const char *keyStr = (node->ToElement())->Attribute("Key", &key);
if (!keyStr)
return false;
strcpy(sc._name, name);
sc._isCtrl = isCtrl;
sc._isAlt = isAlt;
sc._isShift = isShift;
sc._key = (unsigned char)key;
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;
void NppParameters::feedUserLang(TiXmlNode *node)
{
for (TiXmlNode *childNode = node->FirstChildElement("UserLang");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -