📄 notepad_plus.h.svn-base
字号:
// a handle list of all the Notepad++ dialogs
vector<HWND> _hModelessDlgs;
LastRecentFileList _lastRecentFileList;
vector<iconLocator> _customIconVect;
WindowsMenu _windowsMenu;
// For FullScreen feature
bool _isfullScreen;
RECT _rcWorkArea;
WINDOWPLACEMENT _winPlace;
void fullScreenToggle();
// For restore real window size
//RECT _normalWindowRect;
// Keystroke macro recording and playback
Macro _macro;
bool _recordingMacro;
RunMacroDlg _runMacroDlg;
// For hotspot
bool _linkTriggered;
bool _isDocModifing;
bool _isHotspotDblClicked;
//Synchronized Scolling
struct SyncInfo {
int _line;
int _column;
bool _isSynScollV;
bool _isSynScollH;
SyncInfo():_line(0), _column(0), _isSynScollV(false), _isSynScollH(false){};
bool doSync() const {return (_isSynScollV || _isSynScollH); };
} _syncInfo;
bool _isUDDocked;
trayIconControler *_pTrayIco;
int _zoomOriginalValue;
Accelerator _accelerator;
bool _isCmdScModified;
bool _isMacrosScModified;
bool _isUserCmdScModified;
bool _isScintillaKeyModified;
bool _isPluginCmdScModified;
PluginsManager _pluginsManager;
bool _isRTL;
winVer _winVersion;
class ScintillaCtrls {
public :
//ScintillaCtrls();
void init(HINSTANCE hInst, HWND hNpp) {
_hInst = hInst;
_hParent = hNpp;
};
HWND createSintilla(HWND hParent) {
//if (hParent)
_hParent = hParent;
ScintillaEditView *scint = new ScintillaEditView;
scint->init(_hInst, _hParent);
_scintVector.push_back(scint);
return scint->getHSelf();
};
bool destroyScintilla(HWND handle2Destroy) {
for (size_t i = 0 ; i < _scintVector.size() ; i++)
{
if (_scintVector[i]->getHSelf() == handle2Destroy)
{
_scintVector[i]->destroy();
delete _scintVector[i];
vector<ScintillaEditView *>::iterator it2delete = _scintVector.begin()+ i;
_scintVector.erase(it2delete);
return true;
}
}
return false;
};
void destroy() {
for (size_t i = 0 ; i < _scintVector.size() ; i++)
{
delete _scintVector[i];
}
};
private:
vector<ScintillaEditView *> _scintVector;
HINSTANCE _hInst;
HWND _hParent;
} _scintillaCtrls4Plugins;
static LRESULT CALLBACK Notepad_plus_Proc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam);
LRESULT runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam);
BOOL notify(SCNotification *notification);
void specialCmd(int id, int param);
void command(int id);
void fileNew(){
setTitleWith(_pDocTab->newDoc(NULL));
updateStatusBar();
dynamicCheckMenuAndTB();
checkDocState();
setLangStatus(_pEditView->getCurrentDocType());
setWorkingDir(NULL);
};
void fileOpen();
bool fileReload() {
const char * fn = _pEditView->getCurrentTitle();
if (Buffer::isUntitled(fn)) return false;
if (::MessageBox(_hSelf, "Do you want to reload the current file?", "Reload", MB_YESNO | MB_ICONQUESTION | MB_APPLMODAL) == IDYES)
reload(fn);
return true;
};
bool fileClose();
bool fileCloseAll();
bool fileCloseAllButCurrent();
void hideCurrentView();
int doSaveOrNot(const char *fn) {
char phrase[512] = "Save file \"";
strcat(strcat(phrase, fn), "\" ?");
return ::MessageBox(_hSelf, phrase, "Save", MB_YESNOCANCEL | MB_ICONQUESTION | MB_APPLMODAL);
};
int doReloadOrNot(const char *fn) {
char phrase[512] = "The file \"";
strcat(strcat(phrase, fn), "\" is modified by another program. Reload this file?");
return ::MessageBox(_hSelf, phrase, "Reload", MB_YESNO | MB_ICONQUESTION | MB_APPLMODAL);
};
int doCloseOrNot(const char *fn) {
char phrase[512] = "The file \"";
strcat(strcat(phrase, fn), "\" doesn't exist anymore. Keep this file in editor ?");
return ::MessageBox(_hSelf, phrase, "Keep non existing file", MB_YESNO | MB_ICONQUESTION | MB_APPLMODAL);
};
bool fileSave();
bool fileSaveAll();
bool fileSaveAs();
void filePrint(bool showDialog);
bool doSave(const char *filename, UniMode mode);
void enableMenu(int cmdID, bool doEnable) const {
int flag = doEnable?MF_ENABLED | MF_BYCOMMAND:MF_DISABLED | MF_GRAYED | MF_BYCOMMAND;
::EnableMenuItem(::GetMenu(_hSelf), cmdID, flag);
}
void enableCommand(int cmdID, bool doEnable, int which) const;
void checkClipboard();
void checkDocState();
void checkUndoState();
void checkMacroState();
void checkSyncState();
void dropFiles(HDROP hdrop);
void checkModifiedDocument();
void reload(const char *fileName);
void docGotoAnotherEditView(bool mode);
void dockUserDlg();
void undockUserDlg();
void getToolBarClientRect(RECT &rc) const;
void getMainClientRect(RECT & rc) const;
void getStatusBarClientRect(RECT & rc) const;
int switchEditViewTo(int gid);
void dynamicCheckMenuAndTB() const;
void enableConvertMenuItems(formatType f) const {
enableCommand(IDM_FORMAT_TODOS, (f != WIN_FORMAT), MENU);
enableCommand(IDM_FORMAT_TOUNIX, (f != UNIX_FORMAT), MENU);
enableCommand(IDM_FORMAT_TOMAC, (f != MAC_FORMAT), MENU);
};
void checkUnicodeMenuItems(UniMode um) const;
int getCurrentView() const {
return (_pEditView == &_mainEditView)?MAIN_VIEW:SUB_VIEW;
};
int getNonCurrentView() const {
return (_pEditView == &_mainEditView)?SUB_VIEW:MAIN_VIEW;
};
DocTabView * getNonCurrentDocTab() {
return (_pDocTab == &_mainDocTab)?&_subDocTab:&_mainDocTab;
};
ScintillaEditView * getCurrentEditView() {
return (_pEditView == &_mainEditView)?&_mainEditView:&_subEditView;
};
ScintillaEditView * getNonCurrentEditView() {
return (_pEditView == &_mainEditView)?&_subEditView:&_mainEditView;
};
void synchronise();
string getLangDesc(LangType langType, bool shortDesc = false);
void setLangStatus(LangType langType){
_statusBar.setText(getLangDesc(langType).c_str(), STATUSBAR_DOC_TYPE);
};
void setDisplayFormat(formatType f) {
std::string str;
switch (f)
{
case MAC_FORMAT :
str = "MAC";
break;
case UNIX_FORMAT :
str = "UNIX";
break;
default :
str = "Dos\\Windows";
}
_statusBar.setText(str.c_str(), STATUSBAR_EOF_FORMAT);
};
void setUniModeText(UniMode um)
{
char *uniModeText;
switch (um)
{
case uniUTF8:
uniModeText = "UTF-8"; break;
case uni16BE:
uniModeText = "UCS-2 Big Endian"; break;
case uni16LE:
uniModeText = "UCS-2 little Endian"; break;
case uniCookie:
uniModeText = "ANSI as UTF-8"; break;
default :
uniModeText = "ANSI";
}
_statusBar.setText(uniModeText, STATUSBAR_UNICODE_TYPE);
};
void checkLangsMenu(int id) const ;
void setLanguage(int id, LangType langType) {
_pEditView->setCurrentDocType(langType);
setLangStatus(langType);
checkLangsMenu(id);
};
int getToolBarState() const {
HMENU hMenu = ::GetMenu(_hSelf);
if (::GetMenuState(hMenu, IDM_VIEW_TOOLBAR_HIDE, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_TOOLBAR_HIDE;
if (::GetMenuState(hMenu, IDM_VIEW_TOOLBAR_REDUCE, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_TOOLBAR_REDUCE;
if (::GetMenuState(hMenu, IDM_VIEW_TOOLBAR_ENLARGE, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_TOOLBAR_ENLARGE;
if (::GetMenuState(hMenu, IDM_VIEW_TOOLBAR_STANDARD, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_TOOLBAR_STANDARD;
return -1;
};
int getFolderMarginStyle() const {
HMENU hMenu = ::GetMenu(_hSelf);
if (::GetMenuState(hMenu, IDM_VIEW_FOLDERMAGIN_SIMPLE, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_FOLDERMAGIN_SIMPLE;
if (::GetMenuState(hMenu, IDM_VIEW_FOLDERMAGIN_ARROW, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_FOLDERMAGIN_ARROW;
if (::GetMenuState(hMenu, IDM_VIEW_FOLDERMAGIN_CIRCLE, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_FOLDERMAGIN_CIRCLE;
if (::GetMenuState(hMenu, IDM_VIEW_FOLDERMAGIN_BOX, MF_BYCOMMAND) == MF_CHECKED)
return IDM_VIEW_FOLDERMAGIN_BOX;
return 0;
};
void checkToolBarMenu(int id2Check) const {
::CheckMenuRadioItem(::GetMenu(_hSelf), IDM_VIEW_TOOLBAR_HIDE, IDM_VIEW_TOOLBAR_STANDARD, id2Check, MF_BYCOMMAND);
};
void checkFolderMarginStyleMenu(int id2Check) const {
::CheckMenuRadioItem(::GetMenu(_hSelf), IDM_VIEW_FOLDERMAGIN_SIMPLE, IDM_VIEW_FOLDERMAGIN_BOX, id2Check, MF_BYCOMMAND);
};
int getFolderMaginStyleIDFrom(folderStyle fStyle) const {
switch (fStyle)
{
case FOLDER_STYLE_SIMPLE : return IDM_VIEW_FOLDERMAGIN_SIMPLE;
case FOLDER_STYLE_ARROW : return IDM_VIEW_FOLDERMAGIN_ARROW;
case FOLDER_STYLE_CIRCLE : return IDM_VIEW_FOLDERMAGIN_CIRCLE;
case FOLDER_STYLE_BOX : return IDM_VIEW_FOLDERMAGIN_BOX;
default : return FOLDER_TYPE;
}
//return
};
void checkMenuItem(int itemID, bool willBeChecked) const {
::CheckMenuItem(::GetMenu(_hSelf), itemID, MF_BYCOMMAND | (willBeChecked?MF_CHECKED:MF_UNCHECKED));
};
void charAdded(char chAdded);
void MaintainIndentation(char ch);
void addHotSpot(bool docIsModifing = false);
//void styleHotSpotForWholeDoc();
//void styleHotSpotModifyMode();
void bookmarkAdd(int lineno) const {
if (lineno == -1)
lineno = _pEditView->getCurrentLineNumber();
if (!bookmarkPresent(lineno))
_pEditView->execute(SCI_MARKERADD, lineno, MARK_SYMBOLE);
};
void bookmarkDelete(int lineno) const {
if (lineno == -1)
lineno = _pEditView->getCurrentLineNumber();
if ( bookmarkPresent(lineno))
_pEditView->execute(SCI_MARKERDELETE, lineno, MARK_SYMBOLE);
};
bool bookmarkPresent(int lineno) const {
if (lineno == -1)
lineno = _pEditView->getCurrentLineNumber();
LRESULT state = _pEditView->execute(SCI_MARKERGET, lineno);
return ((state & (1 << MARK_SYMBOLE)) != 0);
};
void bookmarkToggle(int lineno) const {
if (lineno == -1)
lineno = _pEditView->getCurrentLineNumber();
if (bookmarkPresent(lineno))
bookmarkDelete(lineno);
else
bookmarkAdd(lineno);
};
void bookmarkNext(bool forwardScan);
void bookmarkClearAll() const {
_pEditView->execute(SCI_MARKERDELETEALL, MARK_SYMBOLE);
};
void findMatchingBracePos(int & braceAtCaret, int & braceOpposite);
void braceMatch();
void activateNextDoc(bool direction);
void activateDoc(int pos);
void updateStatusBar();
void showAutoComp();
void autoCompFromCurrentFile();
void getApiFileName(LangType langType, std::string &fn);
void changeStyleCtrlsLang(HWND hDlg, int *idArray, const char **translatedText);
bool replaceAllFiles();
bool findInOpenedFiles();
bool findInFiles(bool isRecursive);
bool matchInList(const char *fileName, const vector<string> & patterns);
void getMatchedFileNames(const char *dir, const vector<string> & patterns, vector<string> & 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;
if (!dir || !PathIsDirectory(dir))
{
return;
}
else
::SetCurrentDirectory(dir);
}
bool str2Cliboard(const char *str2cpy);
void mkPosIncFindDlg() {
if (!_incrementFindDlg.isCreated())
return;
if (!_incrementFindDlg.isVisible())
return;
_incrementFindDlg.goToLowerLeft();
};
bool getIntegralDockingData(tTbData & dockData, int & iCont, bool & isVisible);
};
#endif //NOTEPAD_PLUS_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -