⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scintillaeditview.h

📁 Notepad++ 源代码,功能强大的编辑软件
💻 H
📖 第 1 页 / 共 2 页
字号:
//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 + -