Пример #1
0
BOOL APIENTRY DllMain(HANDLE hModule, DWORD  reasonForCall, LPVOID /*lpReserved*/)
 {
    g_hModule = hModule;

    switch (reasonForCall)
    {
    case DLL_PROCESS_ATTACH:
        {
            funcItem[CMD_COMPARE]._pFunc = compare;
            lstrcpy(funcItem[CMD_COMPARE]._itemName, TEXT("Compare"));
            funcItem[CMD_COMPARE]._pShKey = new ShortcutKey;
            funcItem[CMD_COMPARE]._pShKey->_isAlt = true;
            funcItem[CMD_COMPARE]._pShKey->_isCtrl = false;
            funcItem[CMD_COMPARE]._pShKey->_isShift = false;
            funcItem[CMD_COMPARE]._pShKey->_key = 'D';
            funcItem[CMD_COMPARE]._init2Check = false;

            funcItem[CMD_CLEAR_RESULTS]._pFunc = reset;
            lstrcpy(funcItem[CMD_CLEAR_RESULTS]._itemName, TEXT("Clear Results"));
            funcItem[CMD_CLEAR_RESULTS]._pShKey = new ShortcutKey;
            funcItem[CMD_CLEAR_RESULTS]._pShKey->_isAlt = true;
            funcItem[CMD_CLEAR_RESULTS]._pShKey->_isCtrl = true;
            funcItem[CMD_CLEAR_RESULTS]._pShKey->_isShift = false;
            funcItem[CMD_CLEAR_RESULTS]._pShKey->_key = 'D';
            funcItem[CMD_CLEAR_RESULTS]._init2Check = false;

            funcItem[CMD_SEPARATOR_1]._pFunc = NULL;
            lstrcpy(funcItem[CMD_SEPARATOR_1]._itemName, TEXT("-----------"));
            funcItem[CMD_SEPARATOR_1]._pShKey = NULL;

            funcItem[CMD_COMPARE_LAST_SAVE]._pFunc = compareLocal;
            lstrcpy(funcItem[CMD_COMPARE_LAST_SAVE]._itemName, TEXT("Compare to last save"));
            funcItem[CMD_COMPARE_LAST_SAVE]._pShKey = new ShortcutKey;
            funcItem[CMD_COMPARE_LAST_SAVE]._pShKey->_isAlt = true;
            funcItem[CMD_COMPARE_LAST_SAVE]._pShKey->_isCtrl = false;
            funcItem[CMD_COMPARE_LAST_SAVE]._pShKey->_isShift = false;
            funcItem[CMD_COMPARE_LAST_SAVE]._pShKey->_key = 'S';
            funcItem[CMD_COMPARE_LAST_SAVE]._init2Check = false;

            funcItem[CMD_COMAPRE_SVN_BASE]._pFunc = compareBase;
            lstrcpy(funcItem[CMD_COMAPRE_SVN_BASE]._itemName, TEXT("Compare against SVN base"));
            funcItem[CMD_COMAPRE_SVN_BASE]._pShKey = new ShortcutKey;
            funcItem[CMD_COMAPRE_SVN_BASE]._pShKey->_isAlt = true;
            funcItem[CMD_COMAPRE_SVN_BASE]._pShKey->_isCtrl = false;
            funcItem[CMD_COMAPRE_SVN_BASE]._pShKey->_isShift = false;
            funcItem[CMD_COMAPRE_SVN_BASE]._pShKey->_key = 'B';
            funcItem[CMD_COMAPRE_SVN_BASE]._init2Check = false;

            funcItem[CMD_SEPARATOR_2]._pFunc = NULL;
            lstrcpy(funcItem[CMD_SEPARATOR_2]._itemName, TEXT("------------"));
            funcItem[CMD_SEPARATOR_2]._pShKey = NULL;

            funcItem[CMD_ALIGN_MATCHES]._pFunc = alignMatches;
            lstrcpy(funcItem[CMD_ALIGN_MATCHES]._itemName, TEXT("Align Matches"));
            funcItem[CMD_ALIGN_MATCHES]._pShKey = NULL;
            funcItem[CMD_ALIGN_MATCHES]._init2Check = false;

            funcItem[CMD_IGNORE_SPACING]._pFunc = includeSpacing;
            lstrcpy(funcItem[CMD_IGNORE_SPACING]._itemName, TEXT("Ignore Spacing"));
            funcItem[CMD_IGNORE_SPACING]._pShKey = NULL;
            funcItem[CMD_IGNORE_SPACING]._init2Check = false;

            funcItem[CMD_DETECT_MOVES]._pFunc = detectMoves;
            lstrcpy(funcItem[CMD_DETECT_MOVES]._itemName, TEXT("Detect Moves"));
            funcItem[CMD_DETECT_MOVES]._pShKey = NULL;
            funcItem[CMD_DETECT_MOVES]._init2Check = false;

            funcItem[CMD_USE_NAV_BAR]._pFunc = ViewNavigationBar;
            lstrcpy(funcItem[CMD_USE_NAV_BAR]._itemName, TEXT("Navigation bar"));
            funcItem[CMD_USE_NAV_BAR]._pShKey = NULL;
            funcItem[CMD_USE_NAV_BAR]._init2Check = false;

            funcItem[CMD_SEPARATOR_3]._pFunc = NULL;
            lstrcpy(funcItem[CMD_SEPARATOR_3]._itemName, TEXT("-----------"));
            funcItem[CMD_SEPARATOR_3]._pShKey = NULL;

            funcItem[CMD_PREV]._pFunc = Prev;
            lstrcpy(funcItem[CMD_PREV]._itemName, TEXT("Previous"));
            funcItem[CMD_PREV]._pShKey = new ShortcutKey;
            funcItem[CMD_PREV]._pShKey->_isAlt = false;
            funcItem[CMD_PREV]._pShKey->_isCtrl = true;
            funcItem[CMD_PREV]._pShKey->_isShift = false;
            funcItem[CMD_PREV]._pShKey->_key = VK_PRIOR;
            funcItem[CMD_PREV]._init2Check = false;

            funcItem[CMD_NEXT]._pFunc = Next;
            lstrcpy(funcItem[CMD_NEXT]._itemName, TEXT("Next"));
            funcItem[CMD_NEXT]._pShKey = new ShortcutKey;
            funcItem[CMD_NEXT]._pShKey->_isAlt = false;
            funcItem[CMD_NEXT]._pShKey->_isCtrl = true;
            funcItem[CMD_NEXT]._pShKey->_isShift = false;
            funcItem[CMD_NEXT]._pShKey->_key = VK_NEXT;
            funcItem[CMD_NEXT]._init2Check = false;

            funcItem[CMD_FIRST]._pFunc = First;
            lstrcpy(funcItem[CMD_FIRST]._itemName, TEXT("First"));
            funcItem[CMD_FIRST]._pShKey = new ShortcutKey;
            funcItem[CMD_FIRST]._pShKey->_isAlt = false;
            funcItem[CMD_FIRST]._pShKey->_isCtrl = true;
            funcItem[CMD_FIRST]._pShKey->_isShift = true;
            funcItem[CMD_FIRST]._pShKey->_key = VK_PRIOR;
            funcItem[CMD_FIRST]._init2Check = false;

            funcItem[CMD_LAST]._pFunc = Last;
            lstrcpy(funcItem[CMD_LAST]._itemName, TEXT("Last"));
            funcItem[CMD_LAST]._pShKey = new ShortcutKey;
            funcItem[CMD_LAST]._pShKey->_isAlt = false;
            funcItem[CMD_LAST]._pShKey->_isCtrl = true;
            funcItem[CMD_LAST]._pShKey->_isShift = true;
            funcItem[CMD_LAST]._pShKey->_key = VK_NEXT;
            funcItem[CMD_LAST]._init2Check = false;

            funcItem[CMD_SEPARATOR_4]._pFunc = NULL;
            lstrcpy(funcItem[CMD_SEPARATOR_4]._itemName, TEXT("-----------"));
            funcItem[CMD_SEPARATOR_4]._pShKey = NULL;

            funcItem[CMD_OPTION]._pFunc = openOptionDlg;
            lstrcpy(funcItem[CMD_OPTION]._itemName, TEXT("Option"));
            funcItem[CMD_OPTION]._pShKey = NULL;
            funcItem[CMD_OPTION]._init2Check = false;

            funcItem[CMD_ABOUT]._pFunc = openAboutDlg;
            lstrcpy(funcItem[CMD_ABOUT]._itemName, TEXT("About"));
            funcItem[CMD_ABOUT]._pShKey = NULL;
            funcItem[CMD_ABOUT]._init2Check = false;

            for(int i = 0; i < MAXCOMPARE; i++)
            {
                compareDocs[i]=-1;
            }

            TCHAR nppPath[MAX_PATH];
            GetModuleFileName((HMODULE)hModule, nppPath, sizeof(nppPath));

            // remove the module name : get plugins directory path
            PathRemoveFileSpec(nppPath);

            // cd .. : get npp executable path
            PathRemoveFileSpec(nppPath);

            // Make localConf.xml path
            TCHAR localConfPath[MAX_PATH];
            lstrcpy(localConfPath, nppPath);
            PathAppend(localConfPath, localConfFile);

            // Test if localConf.xml exist
            bool isLocal = (PathFileExists(localConfPath) == TRUE);

            if (isLocal) 
            {
                lstrcpy(iniFilePath, nppPath);
                lstrcpy(compareFilePath, nppPath);

                PathAppend(iniFilePath, TEXT("plugins\\config\\Compare.ini"));
            }
            else 
            {
                ITEMIDLIST *pidl;
                SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &pidl);
                SHGetPathFromIDList(pidl, iniFilePath);
                SHGetPathFromIDList(pidl, compareFilePath);

                PathAppend(iniFilePath, TEXT("Notepad++\\Compare.ini"));
            }

            loadSettings();
        }
        break;

    case DLL_PROCESS_DETACH:

        if (tbNext.hToolbarBmp)  ::DeleteObject(tbNext.hToolbarBmp);
        if (tbPrev.hToolbarBmp)  ::DeleteObject(tbPrev.hToolbarBmp);
        if (tbFirst.hToolbarBmp) ::DeleteObject(tbFirst.hToolbarBmp);
        if (tbLast.hToolbarBmp)  ::DeleteObject(tbLast.hToolbarBmp);

        saveSettings();
        OptionDlg.destroy();
        AboutDlg.destroy();
        NavDlg.destroy();

        // Don't forget to deallocate your shortcut here
		delete funcItem[CMD_COMPARE]._pShKey;
		delete funcItem[CMD_CLEAR_RESULTS]._pShKey;
		delete funcItem[CMD_COMPARE_LAST_SAVE]._pShKey;
		delete funcItem[CMD_COMAPRE_SVN_BASE]._pShKey;
		delete funcItem[CMD_PREV]._pShKey;
		delete funcItem[CMD_NEXT]._pShKey;
		delete funcItem[CMD_FIRST]._pShKey;
		delete funcItem[CMD_LAST]._pShKey;

        break;

    case DLL_THREAD_ATTACH:
        break;

    case DLL_THREAD_DETACH:
        break;
    }

    return TRUE;
}