📄 scintillaeditview.h
字号:
//this file is part of notepad++//Copyright (C)2003 Don HO ( donho@altern.org )////This program is free software; you can redistribute it and/or//modify it under the terms of the GNU General Public License//as published by the Free Software Foundation; either//version 2 of the License, or (at your option) any later version.////This program is distributed in the hope that it will be useful,//but WITHOUT ANY WARRANTY; without even the implied warranty of//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the//GNU General Public License for more details.////You should have received a copy of the GNU General Public License//along with this program; if not, write to the Free Software//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.#ifndef SCINTILLA_EDIT_VIEW_H#define SCINTILLA_EDIT_VIEW_H#include <vector>#include "Window.h"#include "Scintilla.h"#include "ScintillaRef.h"#include "SciLexer.h"#include "Buffer.h"#include "colors.h"#include "SysMsg.h"#include "UserDefineDialog.h"#include "resource.h"class NppParameters;#define NB_WORD_LIST 4#define WORD_LIST_LEN 256typedef int (* SCINTILLA_FUNC) (void*, int, int, int);typedef void * SCINTILLA_PTR;typedef std::vector<Buffer> buf_vec_t;#define WM_DOCK_USERDEFINE_DLG (SCINTILLA_USER + 1)#define WM_UNDOCK_USERDEFINE_DLG (SCINTILLA_USER + 2)#define WM_CLOSE_USERDEFINE_DLG (SCINTILLA_USER + 3)#define WM_REMOVE_USERLANG (SCINTILLA_USER + 4)#define WM_RENAME_USERLANG (SCINTILLA_USER + 5)#define WM_REPLACEALL_INOPENEDDOC (SCINTILLA_USER + 6)#define WM_FINDALL_INOPENEDDOC (SCINTILLA_USER + 7)#define WM_DOOPEN (SCINTILLA_USER + 8)#define WM_FINDINFILES (SCINTILLA_USER + 9)#define LINEDRAW_FONT "LINEDRAW.TTF"const int NB_FOLDER_STATE = 7;// Codepageconst int CP_CHINESE_TRADITIONAL = 950;const int CP_CHINESE_SIMPLIFIED = 936;const int CP_JAPANESE = 932;const int CP_KOREAN = 949;const int CP_GREEK = 1253;//wordList#define LIST_NONE 0#define LIST_0 1#define LIST_1 2#define LIST_2 4#define LIST_3 8#define LIST_4 16#define LIST_5 32#define LIST_6 64const bool dirUp = true;const bool dirDown = false;const bool fold_uncollapse = true;const bool fold_collapse = false;const bool UPPERCASE = true;const bool LOWERCASE = false;class ScintillaEditView : public Window{ friend class Notepad_plus;public: ScintillaEditView() : Window(), _pScintillaFunc(NULL),_pScintillaPtr(NULL), _currentIndex(0), _folderStyle(FOLDER_STYLE_BOX) { ++_refCount; }; virtual ~ScintillaEditView() { --_refCount; if ((!_refCount)&&(_hLib)) { ::FreeLibrary(_hLib); } }; virtual void destroy() { removeAllUnusedDocs(); ::DestroyWindow(_hSelf); _hSelf = NULL; }; virtual void init(HINSTANCE hInst, HWND hPere); LRESULT execute(UINT Msg, WPARAM wParam=0, LPARAM lParam=0) const { return _pScintillaFunc(_pScintillaPtr, static_cast<int>(Msg), static_cast<int>(wParam), static_cast<int>(lParam)); }; void defineDocType(LangType typeDoc); void setCurrentDocType(LangType typeDoc) { if ((_buffers[_currentIndex]._lang == typeDoc) && (typeDoc != L_USER)) return; if (typeDoc == L_USER) _buffers[_currentIndex]._userLangExt[0] = '\0'; _buffers[_currentIndex]._lang = typeDoc; defineDocType(typeDoc); }; void setCurrentDocUserType(const char *userLangName) { strcpy(_buffers[_currentIndex]._userLangExt, userLangName); _buffers[_currentIndex]._lang = L_USER; defineDocType(L_USER); }; char * attatchDefaultDoc(int nb); int findDocIndexByName(const char *fn) const; char * activateDocAt(int index); char * createNewDoc(const char *fn); char * createNewDoc(int nbNew); int getCurrentDocIndex() const {return _currentIndex;}; const char * getCurrentTitle() const {return _buffers[_currentIndex]._fullPathName;}; int setCurrentTitle(const char *fn) { _buffers[_currentIndex].setFileName(fn); defineDocType(_buffers[_currentIndex]._lang); return _currentIndex; }; int closeCurrentDoc(int & i2Activate); void closeDocAt(int i2Close); void removeAllUnusedDocs(); void getText(char *dest, int start, int end); void getText(char *dest, int len) const { execute(SCI_GETTEXT, len, reinterpret_cast<LPARAM>(dest)); }; void setCurrentDocState(bool isDirty) { _buffers[_currentIndex]._isDirty = isDirty; }; bool isCurrentDocDirty() const { return _buffers[_currentIndex]._isDirty; }; void setCurrentDocReadOnly(bool isReadOnly) { _buffers[_currentIndex]._isReadOnly = isReadOnly; }; bool isCurrentBufReadOnly() { return _buffers[_currentIndex]._isReadOnly; }; bool isAllDocsClean() const { for (int i = 0 ; i < static_cast<int>(_buffers.size()) ; i++) if (_buffers[i]._isDirty) return false; return true; }; size_t getNbDoc() const { return _buffers.size(); }; void saveCurrentPos(); void restoreCurrentPos(const Position & prevPos); Buffer & getBufferAt(size_t index) { if (index >= _buffers.size()) throw int(index); return _buffers[index]; }; void updateCurrentBufTimeStamp() { _buffers[_currentIndex].updatTimeStamp(); }; int getCurrentDocLen() const { return int(execute(SCI_GETLENGTH)); }; CharacterRange getSelection() const { CharacterRange crange; crange.cpMin = long(execute(SCI_GETSELECTIONSTART)); crange.cpMax = long(execute(SCI_GETSELECTIONEND)); return crange; }; LangType getCurrentDocType() const { return _buffers[_currentIndex]._lang; }; void doUserDefineDlg(bool willBeShown = true, bool isRTL = false) { _userDefineDlg.doDialog(willBeShown, isRTL); }; static UserDefineDialog * getUserDefineDlg() {return &_userDefineDlg;}; void setCaretColorWidth(int color, int width = 1) const { execute(SCI_SETCARETFORE, color); execute(SCI_SETCARETWIDTH, width); }; // if we use this method, it must be via the // gotoAnotherView or cloneToAnotherEditView // So the ref counter of document should increase int addBuffer(Buffer & buffer) { _buffers.push_back(buffer); execute(SCI_ADDREFDOCUMENT, 0, buffer._doc); return (int(_buffers.size()) - 1); }; Buffer & getCurrentBuffer() { return getBufferAt(_currentIndex); }; void beSwitched() { _userDefineDlg.setScintilla(this); }; //Marge memeber and method static const int _SC_MARGE_LINENUMBER; static const int _SC_MARGE_SYBOLE; static const int _SC_MARGE_FOLDER; static const int _MARGE_LINENUMBER_NB_CHIFFRE; void showMargin(int witchMarge, bool willBeShowed = true) { if (witchMarge == _SC_MARGE_LINENUMBER) setLineNumberWidth(willBeShowed); else execute(SCI_SETMARGINWIDTHN, witchMarge, willBeShowed?14:0); }; bool hasMarginShowed(int witchMarge) { return (execute(SCI_GETMARGINWIDTHN, witchMarge, 0) != 0); }; void marginClick(int position, int modifiers); void setMakerStyle(folderStyle style) { if (_folderStyle == style) return; _folderStyle = style; for (int i = 0 ; i < NB_FOLDER_STATE ; i++) defineMarker(_markersArray[FOLDER_TYPE][i], _markersArray[style][i], white, grey); }; folderStyle getFolderStyle() {return _folderStyle;}; void showWSAndTab(bool willBeShowed = true) { execute(SCI_SETVIEWWS, willBeShowed?SCWS_VISIBLEALWAYS:SCWS_INVISIBLE); }; void showEOL(bool willBeShowed = true) { execute(SCI_SETVIEWEOL, willBeShowed); }; void showInvisibleChars(bool willBeShowed = true) { showWSAndTab(willBeShowed); showEOL(willBeShowed); }; bool isInvisibleCharsShown(bool willBeShowed = true) { return (execute(SCI_GETVIEWWS) != 0); }; void showIndentGuideLine(bool willBeShowed = true) { execute(SCI_SETINDENTATIONGUIDES, (WPARAM)willBeShowed); }; bool isShownIndentGuide() { return (execute(SCI_GETINDENTATIONGUIDES) != 0); }; void wrap(bool willBeWrapped = true) { execute(SCI_SETWRAPMODE, (WPARAM)willBeWrapped); }; bool isWrap() { return (execute(SCI_GETWRAPMODE) == SC_WRAP_WORD); }; void sortBuffer(int destIndex, int scrIndex) { // Do nothing if there's no change of the position if (scrIndex == destIndex) return; Buffer buf2Insert = _buffers.at(scrIndex); _buffers.erase(_buffers.begin() + scrIndex); _buffers.insert(_buffers.begin() + destIndex, buf2Insert); }; int getSelectedTextCount() { CharacterRange range = getSelection(); return (range.cpMax - range.cpMin); }; char * getSelectedText(char * txt, int size) { CharacterRange range = getSelection(); if (size <= (range.cpMax - range.cpMin)) return NULL; getText(txt, range.cpMin, range.cpMax); return txt; };
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -