📄 notepad_plus.cpp.internaldockingdlg.svn-base
字号:
::CheckMenuItem(hMenu, IDM_EDIT_SETREADONLY, MF_BYCOMMAND | MF_UNCHECKED);
enableCommand(IDM_EDIT_SETREADONLY, false, MENU);
enableCommand(IDM_EDIT_CLEARREADONLY, true, MENU);
}
else
{
enableCommand(IDM_EDIT_SETREADONLY, true, MENU);
enableCommand(IDM_EDIT_CLEARREADONLY, false, MENU);
bool isUserReadOnly = _pEditView->isCurrentBufUserReadOnly();
HMENU hMenu = ::GetMenu(_hSelf);
::CheckMenuItem(hMenu, IDM_EDIT_SETREADONLY, MF_BYCOMMAND | (isUserReadOnly?MF_CHECKED:MF_UNCHECKED));
}
enableConvertMenuItems((_pEditView->getCurrentBuffer()).getFormat());
checkLangsMenu(-1);
}
void Notepad_plus::checkUndoState()
{
enableCommand(IDM_EDIT_UNDO, _pEditView->execute(SCI_CANUNDO) != 0, MENU | TOOLBAR);
enableCommand(IDM_EDIT_REDO, _pEditView->execute(SCI_CANREDO) != 0, MENU | TOOLBAR);
}
void Notepad_plus::checkMacroState()
{
enableCommand(IDM_EDIT_STARTRECORDINGMACRO, !_recordingMacro, MENU | TOOLBAR);
enableCommand(IDM_EDIT_STOPRECORDINGMACRO, _recordingMacro, MENU | TOOLBAR);
enableCommand(IDM_EDIT_PLAYBACKRECORDEDMACRO, !_macro.empty() && !_recordingMacro, MENU | TOOLBAR);
enableCommand(IDM_EDIT_SAVECURRENTMACRO, !_macro.empty() && !_recordingMacro, MENU | TOOLBAR);
enableCommand(IDM_EDIT_RUNMULTIMACRODLG, (!_macro.empty() && !_recordingMacro) || !((NppParameters::getInstance())->getMacroList()).empty(), MENU | TOOLBAR);
}
void Notepad_plus::checkSyncState()
{
bool canDoSync = _mainDocTab.isVisible() && _subDocTab.isVisible();
if (!canDoSync)
{
_syncInfo._isSynScollV = false;
_syncInfo._isSynScollH = false;
checkMenuItem(IDM_VIEW_SYNSCROLLV, false);
checkMenuItem(IDM_VIEW_SYNSCROLLH, false);
_toolBar.setCheck(IDM_VIEW_SYNSCROLLV, false);
_toolBar.setCheck(IDM_VIEW_SYNSCROLLH, false);
}
enableCommand(IDM_VIEW_SYNSCROLLV, canDoSync, MENU | TOOLBAR);
enableCommand(IDM_VIEW_SYNSCROLLH, canDoSync, MENU | TOOLBAR);
}
void Notepad_plus::synchronise()
{
Buffer & bufSrc = _pEditView->getCurrentBuffer();
const char *fn = bufSrc.getFileName();
int i = getNonCurrentDocTab()->find(fn);
if (i != -1)
{
Buffer & bufDest = getNonCurrentEditView()->getBufferAt(i);
bufDest.synchroniseWith(bufSrc);
getNonCurrentDocTab()->updateTabItem(i);
}
}
void Notepad_plus::checkLangsMenu(int id) const
{
if (id == -1)
{
id = (NppParameters::getInstance())->langTypeToCommandID(_pEditView->getCurrentDocType());
if (id == IDM_LANG_USER)
{
if (_pEditView->getCurrentBuffer().isUserDefineLangExt())
{
const char *userLangName = _pEditView->getCurrentBuffer().getUserDefineLangName();
char menuLangName[16];
for (int i = IDM_LANG_USER + 1 ; i <= IDM_LANG_USER_LIMIT ; i++)
{
if (::GetMenuString(::GetMenu(_hSelf), i, menuLangName, sizeof(menuLangName), MF_BYCOMMAND))
if (!strcmp(userLangName, menuLangName))
{
::CheckMenuRadioItem(::GetMenu(_hSelf), IDM_LANG_C, IDM_LANG_USER_LIMIT, i, MF_BYCOMMAND);
return;
}
}
}
}
}
::CheckMenuRadioItem(::GetMenu(_hSelf), IDM_LANG_C, IDM_LANG_USER_LIMIT, id, MF_BYCOMMAND);
}
void Notepad_plus::setLangStatus(LangType langType)
{
string str2Show;
switch (langType)
{
case L_C:
str2Show = "c source file"; break;
case L_CPP:
str2Show = "c++ source file"; break;
case L_OBJC:
str2Show = "Objective C source file"; break;
case L_JAVA:
str2Show = "Java source file"; break;
case L_CS:
str2Show = "C# source file"; break;
case L_RC :
str2Show = "Windows Resource file"; break;
case L_MAKEFILE:
str2Show = "Makefile"; break;
case L_HTML:
str2Show = "Hyper Text Markup Language file"; break;
case L_XML:
str2Show = "eXtensible Markup Language file"; break;
case L_JS:
str2Show = "Javascript file"; break;
case L_PHP:
str2Show = "PHP Hypertext Preprocessor file"; break;
case L_ASP:
str2Show = "Active Server Pages script file"; break;
case L_CSS:
str2Show = "Cascade Style Sheets File"; break;
case L_LUA:
str2Show = "Lua source File"; break;
case L_NFO:
str2Show = "MSDOS Style"; break;
case L_SQL:
str2Show = "Structure Query Language file"; break;
case L_VB:
str2Show = "Visual Basic file"; break;
case L_BATCH :
str2Show = "Batch file"; break;
case L_PASCAL :
str2Show = "Pascal source file"; break;
case L_PERL :
str2Show = "Perl source file"; break;
case L_PYTHON :
str2Show = "Python file"; break;
case L_TEX :
str2Show = "TeX file"; break;
case L_FORTRAN :
str2Show = "Fortran source file"; break;
case L_BASH :
str2Show = "Unix script file"; break;
case L_FLASH :
str2Show = "Flash Action script file"; break;
case L_NSIS :
str2Show = "Nullsoft Scriptable Install System script file"; break;
case L_TCL :
str2Show = "Tool Command Language file"; break;
case L_LISP :
str2Show = "List Processing language file"; break;
case L_SCHEME :
str2Show = "Sheme file"; break;
case L_ASM :
str2Show = "Assembler file"; break;
case L_DIFF :
str2Show = "Diff file"; break;
case L_PROPS :
str2Show = "Properties file"; break;
case L_PS :
str2Show = "Postscript file"; break;
case L_RUBY :
str2Show = "Ruby file"; break;
case L_SMALLTALK :
str2Show = "Smalltalk file"; break;
case L_VHDL :
str2Show = "VHSIC Hardware Description Language file"; break;
case L_VERILOG :
str2Show = "Verilog file"; break;
case L_KIX :
str2Show = "KiXtart file"; break;
case L_ADA :
str2Show = "Ada file"; break;
case L_CAML :
str2Show = "Categorical Abstract Machine Language"; break;
case L_AU3 :
str2Show = "AutoIt"; break;
case L_MATLAB :
str2Show = "MATrix LABoratory"; break;
case L_HASKELL :
str2Show = "Haskell"; break;
case L_USER:
{
str2Show = "User Define File";
Buffer & currentBuf = _pEditView->getCurrentBuffer();
if (currentBuf.isUserDefineLangExt())
{
str2Show += " - ";
str2Show += currentBuf.getUserDefineLangName();
}
break;
}
default:
str2Show = "Normal text file";
}
_statusBar.setText(str2Show.c_str(), STATUSBAR_DOC_TYPE);
}
void Notepad_plus::getApiFileName(LangType langType, string &fn)
{
switch (langType)
{
case L_C: fn = "c"; break;
case L_CPP: fn = "cpp"; break;
case L_OBJC: fn = "objC"; break;
case L_JAVA: fn = "java"; break;
case L_CS : fn = "cs"; break;
case L_XML: fn = "xml"; break;
case L_JS: fn = "javascript"; break;
case L_PHP: fn = "php"; break;
case L_VB:
case L_ASP: fn = "vb"; break;
case L_CSS: fn = "css"; break;
case L_LUA: fn = "lua"; break;
case L_PERL: fn = "perl"; break;
case L_PASCAL: fn = "pascal"; break;
case L_PYTHON: fn = "python"; break;
case L_TEX : fn = "tex"; break;
case L_FORTRAN : fn = "fortran"; break;
case L_BASH : fn = "bash"; break;
case L_FLASH : fn = "flash"; break;
case L_NSIS : fn = "nsis"; break;
case L_TCL : fn = "tcl"; break;
case L_LISP : fn = "lisp"; break;
case L_SCHEME : fn = "sheme"; break;
case L_ASM :
fn = "asm"; break;
case L_DIFF :
fn = "diff"; break;
/*
case L_PROPS :
fn = "Properties file"; break;
*/
case L_PS :
fn = "postscript"; break;
case L_RUBY :
fn = "ruby"; break;
case L_SMALLTALK :
fn = "smalltalk"; break;
case L_VHDL :
fn = "vhdl"; break;
case L_KIX :
fn = "kix"; break;
case L_AU3 :
fn = "autoit"; break;
case L_CAML :
fn = "caml"; break;
case L_ADA :
fn = "ada"; break;
case L_VERILOG :
fn = "verilog"; break;
case L_MATLAB :
fn = "matlab"; break;
case L_HASKELL :
fn = "haskell"; break;
case L_USER :
{
Buffer & currentBuf = _pEditView->getCurrentBuffer();
if (currentBuf.isUserDefineLangExt())
{
fn = currentBuf.getUserDefineLangName();
}
break;
}
default:
fn = "text";
}
}
BOOL Notepad_plus::notify(SCNotification *notification)
{
switch (notification->nmhdr.code)
{
/*
case SCN_MODIFIED:
if (notification->modificationType & SC_MOD_DELETETEXT)
MessageBox(NULL, "text deleted", "SC_MOD_DELETETEXT", MB_OK);
else if (notification->modificationType & SC_MOD_INSERTTEXT)
MessageBox(NULL, "text inseted", "SC_MOD_INSERTTEXT", MB_OK);
break;
case SCN_DOUBLECLICK :
//MessageBox(NULL, "DBL click", "SCN_DOUBLECLICK", MB_OK);
break;
*/
case SCN_SAVEPOINTREACHED:
_pEditView->setCurrentDocState(false);
_pDocTab->updateCurrentTabItem();
checkDocState();
synchronise();
break;
case SCN_SAVEPOINTLEFT:
_pEditView->setCurrentDocState(true);
_pDocTab->updateCurrentTabItem();
checkDocState();
synchronise();
break;
case SCN_MODIFYATTEMPTRO :
// on fout rien
break;
case SCN_KEY:
break;
case TCN_TABDROPPEDOUTSIDE:
case TCN_TABDROPPED:
{
TabBarPlus *sender = reinterpret_cast<TabBarPlus *>(notification->nmhdr.idFrom);
int destIndex = sender->getTabDraggedIndex();
int scrIndex = sender->getSrcTabIndex();
// if the dragNdrop tab is not the current view tab,
// we have to set it to the current view tab
if (notification->nmhdr.hwndFrom != _pDocTab->getHSelf())
switchEditViewTo((getCurrentView() == MAIN_VIEW)?SUB_VIEW:MAIN_VIEW);
_pEditView->sortBuffer(destIndex, scrIndex);
_pEditView->setCurrentIndex(destIndex);
if (notification->nmhdr.code == TCN_TABDROPPEDOUTSIDE)
{
POINT p = sender->getDraggingPoint();
//It's the coordinate of screen, so we can call
//"WindowFromPoint" function without converting the point
HWND hWin = ::WindowFromPoint(p);
if (hWin == _pEditView->getHSelf()) // In the same view group
{
if (!_tabPopupDropMenu.isCreated())
{
char goToView[64] = "Go to another View";
char cloneToView[64] = "Clone to another View";
const char *pGoToView = goToView;
const char *pCloneToView = cloneToView;
if (_nativeLang)
{
TiXmlNode *tabBarMenu = _nativeLang->FirstChild("Menu");
tabBarMenu = tabBarMenu->FirstChild("TabBar");
if (tabBarMenu)
{
for (TiXmlNode *childNode = tabBarMenu->FirstChildElement("Item");
childNode ;
childNode = childNode->NextSibling("Item") )
{
TiXmlElement *element = childNode->ToElement();
int ordre;
element->Attribute("order", &ordre);
if (ordre == 5)
pGoToView = element->Attribute("name");
else if (ordre == 6)
pCloneToView = element->Attribute("name");
}
}
if (!pGoToView || !pGoToView[0])
pGoToView = goToView;
if (!pCloneToView || !pCloneToView[0])
pCloneToView = cloneToView;
}
vector<MenuItemUnit> itemUnitArray;
itemUnitArray.push_back(MenuItemUnit(IDC_DOC_GOTO_ANOTHER_VIEW, pGoToView));
itemUnitArray.push_back(MenuItemUnit(IDC_DOC_CLONE_TO_ANOTHER_VIEW, pCloneToView));
_tabPopupDropMenu.create(_hSelf, itemUnitArray);
}
_tabPopupDropMenu.display(p);
}
else if ((hWin == getNonCurrentDocTab()->getHSelf()) ||
(hWin == getNonCurrentEditView()->getHSelf())) // In the another view group
{
if (::GetKeyState(VK_LCONTROL) & 0x80000000)
docGotoAnotherEditView(MODE_CLONE);
else
docGotoAnotherEditView(MODE_TRANSFER);
}
//else on fout rien!!! // It's non view group
}
break;
}
case TCN_TABDELETE:
{
if (notification->nmhdr.hwndFrom != _pDocTab->getHSelf())
switchEditViewTo((getCurrentView() == MAIN_VIEW)?SUB_VIEW:MAIN_VIEW);
fileClose();
break;
}
case TCN_SELCHANGE:
{
char fullPath[MAX_PATH];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -