[NEW_FEATURE] Add plugin Black list.

git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@547 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
Don Ho 2009-10-02 18:47:27 +00:00
parent 2478059b5d
commit b45df0db24
3 changed files with 90 additions and 7 deletions

View File

@ -232,12 +232,21 @@ bool PluginsManager::loadPlugins(const TCHAR *dir)
plugins1stFullPath += foundData.cFileName; plugins1stFullPath += foundData.cFileName;
dllNames.push_back(plugins1stFullPath); dllNames.push_back(plugins1stFullPath);
NppParameters * nppParams = NppParameters::getInstance();
while (::FindNextFile(hFindFile, &foundData)) while (::FindNextFile(hFindFile, &foundData))
{ {
generic_string fullPath = (dir && dir[0])?dir:nppPath; bool isInBlackList = nppParams->isInBlackList(foundData.cFileName);
fullPath += TEXT("\\plugins\\"); if (!isInBlackList)
fullPath += foundData.cFileName; {
dllNames.push_back(fullPath); generic_string fullPath = (dir && dir[0])?dir:nppPath;
fullPath += TEXT("\\plugins\\");
fullPath += foundData.cFileName;
dllNames.push_back(fullPath);
}
PluginList & pl = nppParams->getPluginList();
pl.add(foundData.cFileName, isInBlackList);
} }
::FindClose(hFindFile); ::FindClose(hFindFile);

View File

@ -515,7 +515,7 @@ int FileDialog::_dialogFileBoxId = (NppParameters::getInstance())->getWinVersion
NppParameters::NppParameters() : _pXmlDoc(NULL),_pXmlUserDoc(NULL), _pXmlUserStylerDoc(NULL),\ NppParameters::NppParameters() : _pXmlDoc(NULL),_pXmlUserDoc(NULL), _pXmlUserStylerDoc(NULL),\
_pXmlUserLangDoc(NULL), /*_pXmlNativeLangDoc(NULL), */_pXmlNativeLangDocA(NULL),\ _pXmlUserLangDoc(NULL), /*_pXmlNativeLangDoc(NULL), */_pXmlNativeLangDocA(NULL),\
_nbLang(0), _nbFile(0), _nbMaxFile(10), _pXmlToolIconsDoc(NULL),\ _nbLang(0), _nbFile(0), _nbMaxFile(10), _pXmlToolIconsDoc(NULL),\
_pXmlShortcutDoc(NULL), _pXmlContextMenuDoc(NULL), _pXmlSessionDoc(NULL),\ _pXmlShortcutDoc(NULL), _pXmlContextMenuDoc(NULL), _pXmlSessionDoc(NULL), _pXmlBlacklistDoc(NULL),\
_nbUserLang(0), _nbExternalLang(0), _hUser32(NULL), _hUXTheme(NULL),\ _nbUserLang(0), _nbExternalLang(0), _hUser32(NULL), _hUXTheme(NULL),\
_transparentFuncAddr(NULL), _enableThemeDialogTextureFuncAddr(NULL),\ _transparentFuncAddr(NULL), _enableThemeDialogTextureFuncAddr(NULL),\
_isTaskListRBUTTONUP_Active(false), _fileSaveDlgFilterIndex(-1), _asNotepadStyle(false), _isFindReplacing(false) _isTaskListRBUTTONUP_Active(false), _fileSaveDlgFilterIndex(-1), _asNotepadStyle(false), _isFindReplacing(false)
@ -950,6 +950,22 @@ bool NppParameters::load()
_pXmlSessionDoc = NULL; _pXmlSessionDoc = NULL;
} }
//------------------------------//
// blacklist.xml : for per user //
//------------------------------//
_blacklistPath = _userPath;
PathAppend(_blacklistPath, TEXT("blacklist.xml"));
if (PathFileExists(_blacklistPath.c_str()))
{
_pXmlBlacklistDoc = new TiXmlDocument(_blacklistPath);
loadOkay = _pXmlBlacklistDoc->LoadFile();
if (loadOkay)
{
getBlackListFromXmlTree();
}
}
return isAllLaoded; return isAllLaoded;
} }
@ -989,6 +1005,9 @@ void NppParameters::destroyInstance()
if (_pXmlSessionDoc) if (_pXmlSessionDoc)
delete _pXmlSessionDoc; delete _pXmlSessionDoc;
if (_pXmlBlacklistDoc)
delete _pXmlBlacklistDoc;
delete _pSelf; delete _pSelf;
} }
@ -1152,6 +1171,18 @@ bool NppParameters::getScintKeysFromXmlTree()
return true; return true;
} }
bool NppParameters::getBlackListFromXmlTree()
{
if (!_pXmlBlacklistDoc)
return false;
TiXmlNode *root = _pXmlBlacklistDoc->FirstChild(TEXT("NotepadPlus"));
if (!root)
return false;
return feedBlacklist(root);
}
void NppParameters::initMenuKeys() void NppParameters::initMenuKeys()
{ {
int nrCommands = sizeof(winKeyDefs)/sizeof(WinMenuKeyDefinition); int nrCommands = sizeof(winKeyDefs)/sizeof(WinMenuKeyDefinition);
@ -1819,6 +1850,24 @@ void NppParameters::feedScintKeys(TiXmlNode *node)
} }
} }
bool NppParameters::feedBlacklist(TiXmlNode *node)
{
TiXmlNode *blackListRoot = node->FirstChildElement(TEXT("PluginBlackList"));
if (!blackListRoot) return false;
for (TiXmlNode *childNode = blackListRoot->FirstChildElement(TEXT("Plugin"));
childNode ;
childNode = childNode->NextSibling(TEXT("Plugin")) )
{
const TCHAR *name = (childNode->ToElement())->Attribute(TEXT("name"));
if (name)
{
_blacklist.push_back(name);
}
}
return true;
}
bool NppParameters::getShortcuts(TiXmlNode *node, Shortcut & sc) bool NppParameters::getShortcuts(TiXmlNode *node, Shortcut & sc)
{ {
if (!node) return false; if (!node) return false;

View File

@ -1063,8 +1063,16 @@ private :
generic_string _stylesXmlPath; generic_string _stylesXmlPath;
}; };
const int NB_LANG = 80; class PluginList {
public :
void add(generic_string fn, bool isInBL){
_list.push_back(pair<generic_string, bool>(fn, isInBL));
};
private :
vector<pair<generic_string, bool>>_list;
};
const int NB_LANG = 80;
const bool DUP = true; const bool DUP = true;
const bool FREE = false; const bool FREE = false;
@ -1393,6 +1401,17 @@ public:
return _themeSwitcher; return _themeSwitcher;
}; };
vector<generic_string> & getBlackList() {return _blacklist;};
bool isInBlackList(TCHAR *fn) {
for (size_t i = 0 ; i < _blacklist.size() ; i++)
if (_blacklist[i] == fn)
return true;
return false;
};
PluginList & getPluginList() {return _pluginList;};
private: private:
NppParameters(); NppParameters();
~NppParameters(); ~NppParameters();
@ -1400,7 +1419,8 @@ private:
static NppParameters *_pSelf; static NppParameters *_pSelf;
TiXmlDocument *_pXmlDoc, *_pXmlUserDoc, *_pXmlUserStylerDoc, *_pXmlUserLangDoc,\ TiXmlDocument *_pXmlDoc, *_pXmlUserDoc, *_pXmlUserStylerDoc, *_pXmlUserLangDoc,\
*_pXmlToolIconsDoc, *_pXmlShortcutDoc, *_pXmlContextMenuDoc, *_pXmlSessionDoc; *_pXmlToolIconsDoc, *_pXmlShortcutDoc, *_pXmlContextMenuDoc, *_pXmlSessionDoc,\
*_pXmlBlacklistDoc;
TiXmlDocumentA *_pXmlNativeLangDocA; TiXmlDocumentA *_pXmlNativeLangDocA;
@ -1432,6 +1452,8 @@ private:
StyleArray _widgetStyleArray; StyleArray _widgetStyleArray;
vector<generic_string> _fontlist; vector<generic_string> _fontlist;
vector<generic_string> _blacklist;
PluginList _pluginList;
HMODULE _hUser32; HMODULE _hUser32;
HMODULE _hUXTheme; HMODULE _hUXTheme;
@ -1461,6 +1483,7 @@ private:
generic_string _shortcutsPath; generic_string _shortcutsPath;
generic_string _contextMenuPath; generic_string _contextMenuPath;
generic_string _sessionPath; generic_string _sessionPath;
generic_string _blacklistPath;
generic_string _nppPath; generic_string _nppPath;
generic_string _userPath; generic_string _userPath;
generic_string _stylerPath; generic_string _stylerPath;
@ -1502,6 +1525,7 @@ private:
bool getPluginCmdsFromXmlTree(); bool getPluginCmdsFromXmlTree();
bool getScintKeysFromXmlTree(); bool getScintKeysFromXmlTree();
bool getSessionFromXmlTree(TiXmlDocument *pSessionDoc = NULL, Session *session = NULL); bool getSessionFromXmlTree(TiXmlDocument *pSessionDoc = NULL, Session *session = NULL);
bool getBlackListFromXmlTree();
void feedGUIParameters(TiXmlNode *node); void feedGUIParameters(TiXmlNode *node);
void feedKeyWordsParameters(TiXmlNode *node); void feedKeyWordsParameters(TiXmlNode *node);
@ -1524,6 +1548,7 @@ private:
void feedUserCmds(TiXmlNode *node); void feedUserCmds(TiXmlNode *node);
void feedPluginCustomizedCmds(TiXmlNode *node); void feedPluginCustomizedCmds(TiXmlNode *node);
void feedScintKeys(TiXmlNode *node); void feedScintKeys(TiXmlNode *node);
bool feedBlacklist(TiXmlNode *node);
void getActions(TiXmlNode *node, Macro & macro); void getActions(TiXmlNode *node, Macro & macro);
bool getShortcuts(TiXmlNode *node, Shortcut & sc); bool getShortcuts(TiXmlNode *node, Shortcut & sc);