| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906 | 
							- #include "scintillaeditview.h"
 
- #include "common.h"
 
- #include "rgba_icons.h"
 
- #include "ccnotepad.h"
 
- #include "styleset.h"
 
- #include "qtlangset.h"
 
- #include <Scintilla.h>
 
- #include <SciLexer.h>
 
- #include <QImage>
 
- #include <Qsci/qscilexerpython.h>
 
- #include <Qsci/qscilexeravs.h>
 
- #include <Qsci/qscilexerbash.h>
 
- #include <Qsci/qscilexerbatch.h>
 
- #include <Qsci/qscilexercmake.h>
 
- #include <Qsci/qscilexercoffeescript.h>
 
- #include <Qsci/qscilexercpp.h>
 
- #include <Qsci/qscilexercsharp.h>
 
- #include <Qsci/qscilexercss.h>
 
- #include <Qsci/qscilexercustom.h>
 
- #include <Qsci/qscilexerd.h>
 
- #include <Qsci/qscilexerdiff.h>
 
- #include <Qsci/qscilexeredifact.h>
 
- #include <Qsci/qscilexerfortran.h>
 
- #include <Qsci/qscilexerfortran77.h>
 
- #include <Qsci/qscilexerhtml.h>
 
- #include <Qsci/qscilexeridl.h>
 
- #include <Qsci/qscilexerjava.h>
 
- #include <Qsci/qscilexerjavascript.h>
 
- #include <Qsci/qscilexerjson.h>
 
- #include <Qsci/qscilexerlua.h>
 
- #include <Qsci/qscilexermakefile.h>
 
- #include <Qsci/qscilexermarkdown.h>
 
- #include <Qsci/qscilexermatlab.h>
 
- #include <Qsci/qscilexeroctave.h>
 
- #include <Qsci/qscilexerpascal.h>
 
- #include <Qsci/qscilexerperl.h>
 
- #include <Qsci/qscilexerpo.h>
 
- #include <Qsci/qscilexerpostscript.h>
 
- #include <Qsci/qscilexerpov.h>
 
- #include <Qsci/qscilexerproperties.h>
 
- #include <Qsci/qscilexerpython.h>
 
- #include <Qsci/qscilexerruby.h>
 
- #include <Qsci/qscilexerspice.h>
 
- #include <Qsci/qscilexersql.h>
 
- #include <Qsci/qscilexertcl.h>
 
- #include <Qsci/qscilexertex.h>
 
- #include <Qsci/qscilexerverilog.h>
 
- #include <Qsci/qscilexervhdl.h>
 
- #include <Qsci/qscilexerxml.h>
 
- #include <Qsci/qscilexeryaml.h>
 
- #include <Qsci/qscilexergo.h>
 
- #include <Qsci/qscilexertext.h>
 
- #include <Qsci/qscilexernsis.h>
 
- #include <QScrollBar>
 
- #include <QDebug>
 
- #include <stdexcept>
 
- #include "findwin.h"
 
- // initialize the static variable
 
- #define DEFAULT_FONT_NAME "Courier New" //"Microsoft YaHei"  
 
- int ScintillaEditView::s_tabLens = 4;
 
- //默认不使用tab,使用space替换
 
- bool ScintillaEditView::s_noUseTab = true;
 
- int ScintillaEditView::s_bigTextSize = 100;
 
- const int ScintillaEditView::_SC_MARGE_LINENUMBER = 0;
 
- const int ScintillaEditView::_SC_MARGE_SYBOLE = 1;
 
- const int ScintillaEditView::_SC_MARGE_FOLDER = 2;
 
- const int MAX_PRE_NEXT_TIMES = 30;
 
- //const int ScintillaEditView::_markersArray[][NB_FOLDER_STATE] = {
 
- //  {SC_MARKNUM_FOLDEROPEN, SC_MARKNUM_FOLDER, SC_MARKNUM_FOLDERSUB, SC_MARKNUM_FOLDERTAIL, SC_MARKNUM_FOLDEREND,        SC_MARKNUM_FOLDEROPENMID,     SC_MARKNUM_FOLDERMIDTAIL},
 
- //  {SC_MARK_MINUS,         SC_MARK_PLUS,      SC_MARK_EMPTY,        SC_MARK_EMPTY,         SC_MARK_EMPTY,               SC_MARK_EMPTY,                SC_MARK_EMPTY},
 
- //  {SC_MARK_ARROWDOWN,     SC_MARK_ARROW,     SC_MARK_EMPTY,        SC_MARK_EMPTY,         SC_MARK_EMPTY,               SC_MARK_EMPTY,                SC_MARK_EMPTY},
 
- //  {SC_MARK_CIRCLEMINUS,   SC_MARK_CIRCLEPLUS,SC_MARK_VLINE,        SC_MARK_LCORNERCURVE,  SC_MARK_CIRCLEPLUSCONNECTED, SC_MARK_CIRCLEMINUSCONNECTED, SC_MARK_TCORNERCURVE},
 
- //  {SC_MARK_BOXMINUS,      SC_MARK_BOXPLUS,   SC_MARK_VLINE,        SC_MARK_LCORNER,       SC_MARK_BOXPLUSCONNECTED,    SC_MARK_BOXMINUSCONNECTED,    SC_MARK_TCORNER}
 
- //};
 
- #ifdef Q_OS_WIN
 
- LanguageName ScintillaEditView::langNames[L_EXTERNAL + 1] = {
 
- {QString("normal"),		QString("Normal QString"),		QString("Normal text file"),								L_TXT,			SCLEX_NULL},
 
- {QString("php"),			QString("PHP"),				QString("PHP Hypertext Preprocessor file"),				L_PHP,			SCLEX_HTML},
 
- {QString("c"),				QString("C"),					QString("C source file"),									L_C,			SCLEX_CPP},
 
- {QString("cpp"),			QString("C++"),				QString("C++ source file"),								L_CPP,			SCLEX_CPP},
 
- {QString("cs"),			QString("C#"),					QString("C# source file"),									L_CS,			SCLEX_CPP},
 
- {QString("objc"),			QString("Objective-C"),		QString("Objective-C source file"),						L_OBJC,			SCLEX_CPP},
 
- {QString("java"),			QString("Java"),				QString("Java source file"),								L_JAVA,			SCLEX_CPP},
 
- {QString("rc"),			QString("RC"),					QString("Windows Resource file"),							L_RC,			SCLEX_CPP},
 
- {QString("html"),			QString("HTML"),				QString("Hyper Text Markup Language file"),				L_HTML,			SCLEX_HTML},
 
- {QString("xml"),			QString("XML"),				QString("eXtensible Markup Language file"),				L_XML,			SCLEX_XML},
 
- {QString("makefile"),		QString("Makefile"),			QString("Makefile"),										L_MAKEFILE,		SCLEX_MAKEFILE},
 
- {QString("pascal"),		QString("Pascal"),				QString("Pascal source file"),								L_PASCAL,		SCLEX_PASCAL},
 
- {QString("batch"),			QString("Batch"),				QString("Batch file"),										L_BATCH,		SCLEX_BATCH},
 
- {QString("ini"),			QString("ini"),				QString("MS ini file"),									L_INI,			SCLEX_PROPERTIES},
 
- {QString("nfo"),			QString("NFO"),				QString("MSDOS Style/ASCII Art"),							L_ASCII,		SCLEX_NULL},
 
- {QString("udf"),			QString("udf"),				QString("User Defined language file"),						L_USER,			SCLEX_USER},
 
- {QString("asp"),			QString("ASP"),				QString("Active Server Pages script file"),				L_ASP,			SCLEX_HTML},
 
- {QString("sql"),			QString("SQL"),				QString("Structured Query Language file"),					L_SQL,			SCLEX_SQL},
 
- {QString("vb"),			QString("Visual Basic"),		QString("Visual Basic file"),								L_VB,			SCLEX_VB},
 
- {QString("javascript"),	QString("JavaScript"),			QString("JavaScript file"),								L_JS,			L_JAVASCRIPT},
 
- {QString("css"),			QString("CSS"),				QString("Cascade Style Sheets File"),						L_CSS,			SCLEX_CSS},
 
- {QString("perl"),			QString("Perl"),				QString("Perl source file"),								L_PERL,			SCLEX_PERL},
 
- {QString("python"),		QString("Python"),				QString("Python file"),									L_PYTHON,		SCLEX_PYTHON},
 
- {QString("lua"),			QString("Lua"),				QString("Lua source File"),								L_LUA,			SCLEX_LUA},
 
- {QString("tex"),			QString("TeX"),				QString("TeX file"),										L_TEX,			SCLEX_TEX},
 
- {QString("fortran"),		QString("Fortran free form"),	QString("Fortran free form source file"),					L_FORTRAN,		SCLEX_FORTRAN},
 
- {QString("bash"),			QString("Shell"),				QString("Unix script file"),								L_BASH,			SCLEX_BASH},
 
- {QString("actionscript"),	QString("ActionScript"),		QString("Flash ActionScript file"),						L_FLASH,		SCLEX_CPP},
 
- {QString("nsis"),			QString("NSIS"),				QString("Nullsoft Scriptable Install System script file"),	L_NSIS,			SCLEX_NSIS},
 
- {QString("tcl"),			QString("TCL"),				QString("Tool Command Language file"),						L_TCL,			SCLEX_TCL},
 
- {QString("lisp"),			QString("Lisp"),				QString("List Processing language file"),					L_LISP,			SCLEX_LISP},
 
- {QString("scheme"),		QString("Scheme"),				QString("Scheme file"),									L_SCHEME,		SCLEX_LISP},
 
- {QString("asm"),			QString("Assembly"),			QString("Assembly language source file"),					L_ASM,			SCLEX_ASM},
 
- {QString("diff"),			QString("Diff"),				QString("Diff file"),										L_DIFF,			SCLEX_DIFF},
 
- {QString("props"),			QString("Properties file"),	QString("Properties file"),								L_PROPS,		SCLEX_PROPERTIES},
 
- {QString("postscript"),	QString("PostScript"),			QString("PostScript file"),								L_PS,			SCLEX_PS},
 
- {QString("ruby"),			QString("Ruby"),				QString("Ruby file"),										L_RUBY,			SCLEX_RUBY},
 
- {QString("smalltalk"),		QString("Smalltalk"),			QString("Smalltalk file"),									L_SMALLTALK,	SCLEX_SMALLTALK},
 
- {QString("vhdl"),			QString("VHDL"),				QString("VHSIC Hardware Description Language file"),		L_VHDL,			SCLEX_VHDL},
 
- {QString("kix"),			QString("KiXtart"),			QString("KiXtart file"),									L_KIX,			SCLEX_KIX},
 
- {QString("autoit"),		QString("AutoIt"),				QString("AutoIt"),											L_AU3,			SCLEX_AU3},
 
- {QString("caml"),			QString("CAML"),				QString("Categorical Abstract Machine Language"),			L_CAML,			SCLEX_CAML},
 
- {QString("ada"),			QString("Ada"),				QString("Ada file"),										L_ADA,			SCLEX_ADA},
 
- {QString("verilog"),		QString("Verilog"),			QString("Verilog file"),									L_VERILOG,		SCLEX_VERILOG},
 
- {QString("matlab"),		QString("MATLAB"),				QString("MATrix LABoratory"),								L_MATLAB,		SCLEX_MATLAB},
 
- {QString("haskell"),		QString("Haskell"),			QString("Haskell"),										L_HASKELL,		SCLEX_HASKELL},
 
- {QString("inno"),			QString("Inno Setup"),			QString("Inno Setup script"),								L_INNO,			SCLEX_INNOSETUP},
 
- {QString("searchResult"),	QString("Internal Search"),	QString("Internal Search"),								L_SEARCHRESULT,	SCLEX_SEARCHRESULT},
 
- {QString("cmake"),			QString("CMake"),				QString("CMake file"),										L_CMAKE,		SCLEX_CMAKE},
 
- {QString("yaml"),			QString("YAML"),				QString("YAML Ain't Markup Language"),						L_YAML,			SCLEX_YAML},
 
- {QString("cobol"),			QString("COBOL"),				QString("COmmon Business Oriented Language"),				L_COBOL,		SCLEX_COBOL},
 
- {QString("gui4cli"),		QString("Gui4Cli"),			QString("Gui4Cli file"),									L_GUI4CLI,		SCLEX_GUI4CLI},
 
- {QString("d"),				QString("D"),					QString("D programming language"),							L_D,			SCLEX_D},
 
- {QString("powershell"),	QString("PowerShell"),			QString("Windows PowerShell"),								L_POWERSHELL,	SCLEX_POWERSHELL},
 
- {QString("r"),				QString("R"),					QString("R programming language"),							L_R,			SCLEX_R},
 
- {QString("jsp"),			QString("JSP"),				QString("JavaServer Pages script file"),					L_JSP,			SCLEX_HTML},
 
- {QString("coffeescript"),	QString("CoffeeScript"),		QString("CoffeeScript file"),								L_COFFEESCRIPT,	SCLEX_COFFEESCRIPT},
 
- {QString("json"),			QString("json"),				QString("JSON file"),										L_JSON,			SCLEX_JSON },
 
- {QString("javascript.js"), QString("JavaScript"),			QString("JavaScript file"),								L_JAVASCRIPT,	SCLEX_CPP },
 
- {QString("fortran77"),		QString("Fortran fixed form"),	QString("Fortran fixed form source file"),					L_FORTRAN_77,	SCLEX_F77},
 
- {QString("baanc"),			QString("BaanC"),				QString("BaanC File"),										L_BAANC,		SCLEX_BAAN },
 
- {QString("srec"),			QString("S-Record"),			QString("Motorola S-Record binary data"),					L_SREC,			SCLEX_SREC},
 
- {QString("ihex"),			QString("Intel HEX"),			QString("Intel HEX binary data"),							L_IHEX,			SCLEX_IHEX},
 
- {QString("tehex"),			QString("Tektronix extended HEX"),	QString("Tektronix extended HEX binary data"),			L_TEHEX,		SCLEX_TEHEX},
 
- {QString("swift"),			QString("Swift"),              QString("Swift file"),										L_SWIFT,		SCLEX_CPP},
 
- {QString("asn1"),			QString("ASN.1"),				QString("Abstract Syntax Notation One file"),				L_ASN1,			SCLEX_ASN1},
 
- {QString("avs"),			QString("AviSynth"),			QString("AviSynth scripts files"),							L_AVS,			SCLEX_AVS},
 
- {QString("blitzbasic"),	QString("BlitzBasic"),			QString("BlitzBasic file"),								L_BLITZBASIC,	SCLEX_BLITZBASIC},
 
- {QString("purebasic"),		QString("PureBasic"),			QString("PureBasic file"),									L_PUREBASIC,	SCLEX_PUREBASIC},
 
- {QString("freebasic"),		QString("FreeBasic"),			QString("FreeBasic file"),									L_FREEBASIC,	SCLEX_FREEBASIC},
 
- {QString("csound"),		QString("Csound"),				QString("Csound file"),									L_CSOUND,		SCLEX_CSOUND},
 
- {QString("erlang"),		QString("Erlang"),				QString("Erlang file"),									L_ERLANG,		SCLEX_ERLANG},
 
- {QString("escript"),		QString("ESCRIPT"),			QString("ESCRIPT file"),									L_ESCRIPT,		SCLEX_ESCRIPT},
 
- {QString("forth"),			QString("Forth"),				QString("Forth file"),										L_FORTH,		SCLEX_FORTH},
 
- {QString("latex"),			QString("LaTeX"),				QString("LaTeX file"),										L_LATEX,		SCLEX_LATEX},
 
- {QString("mmixal"),		QString("MMIXAL"),				QString("MMIXAL file"),									L_MMIXAL,		SCLEX_MMIXAL},
 
- {QString("nim"),			QString("Nim"),				QString("Nim file"),										L_NIM,			SCLEX_NIMROD},
 
- {QString("nncrontab"),		QString("Nncrontab"),			QString("extended crontab file"),							L_NNCRONTAB,	SCLEX_NNCRONTAB},
 
- {QString("oscript"),		QString("OScript"),			QString("OScript source file"),							L_OSCRIPT,		SCLEX_OSCRIPT},
 
- {QString("rebol"),			QString("REBOL"),				QString("REBOL file"),										L_REBOL,		SCLEX_REBOL},
 
- {QString("registry"),		QString("registry"),			QString("registry file"),									L_REGISTRY,		SCLEX_REGISTRY},
 
- {QString("rust"),			QString("Rust"),				QString("Rust file"),										L_RUST,			SCLEX_RUST},
 
- {QString("spice"),			QString("Spice"),				QString("spice file"),										L_SPICE,		SCLEX_SPICE},
 
- {QString("txt2tags"),		QString("txt2tags"),			QString("txt2tags file"),									L_TXT2TAGS,		SCLEX_TXT2TAGS},
 
- {QString("visualprolog"),	QString("Visual Prolog"),		QString("Visual Prolog file"),								L_VISUALPROLOG,	SCLEX_VISUALPROLOG},
 
- {QString("typescript"),	QString("TypeScript"),			QString("TypeScript file"),								L_TYPESCRIPT,	SCLEX_CPP},
 
- {QString("edifact"),	QString("Edifact"),			QString("Edifact file"),								L_EDIFACT,	SCLEX_EDIFACT},
 
- {QString("markdown"),	QString("Markdown"),			QString("Markdown file"),								L_MARKDOWN,	SCLEX_MARKDOWN},
 
- {QString("octave"),	QString("Octave"),			QString("Octave file"),								L_OCTAVE,	SCLEX_OCTAVE},
 
- {QString("po"),	QString("PO"),			QString("PO file"),								L_PO,	SCLEX_PO},
 
- {QString("pov"),	QString("POV"),			QString("POV file"),								L_POV,	SCLEX_POV},
 
- {QString("avs"),	QString("AVS"),			QString("AVS file"),								L_AVS,	SCLEX_AVS},
 
- {QString("idl"),	QString("IDL"),			QString("IDL file"),								L_IDL,	SCLEX_IDL},
 
- {QString("go"),	QString("GO"),			QString("GO file"),								L_GO,	SCLEX_GO},
 
- {QString("txt"),	QString("TEXT"),			QString("TXT file"),								L_TXT,	SCLEX_TXT},
 
- {QString("ext"),			QString("External"),			QString("External"),					L_EXTERNAL,		SCLEX_NULL}
 
- };
 
- #endif
 
- ScintillaEditView::ScintillaEditView(QWidget *parent)
 
- 	: QsciScintilla(parent), m_NoteWin(nullptr), m_preFirstLineNum(0), m_curPos(0)
 
- {
 
- 	init();
 
- }
 
- ScintillaEditView::~ScintillaEditView()
 
- {
 
- 	releaseAllMark();
 
- }
 
- //void ScintillaEditView::resetDefaultFontStyle()
 
- //{
 
- //	QFont font(DEFAULT_FONT_NAME, 11/*QsciLexer::s_defaultFontSize*/, QFont::Normal);
 
- //	setFont(font);
 
- //	setMarginsFont(font);
 
- //	setMarginsForegroundColor(QColor(0x80, 0x80, 0x80));
 
- //}
 
- void ScintillaEditView::setNoteWidget(QWidget * win)
 
- {
 
- 	m_NoteWin = win;
 
- }
 
- void ScintillaEditView::updateLineNumbersMargin(bool forcedToHide) {
 
- 	if (forcedToHide)
 
- 	{
 
- 		execute(SCI_SETMARGINWIDTHN, _SC_MARGE_LINENUMBER, (sptr_t)0);
 
- 	}
 
- 	else 
 
- 	{
 
- 		updateLineNumberWidth(0);
 
- 	}
 
- }
 
- //根据现有滚动条来决定是否更新屏幕线宽长度。每滚动2000个单位必须调整line宽
 
- void ScintillaEditView::autoAdjustLineWidth(int xScrollValue)
 
- {
 
- 	if (std::abs(xScrollValue - m_preFirstLineNum) > 400)
 
- 	{
 
- 		m_preFirstLineNum = xScrollValue;
 
- 		updateLineNumberWidth(1);
 
- 	}
 
- }
 
- void ScintillaEditView::updateLineNumberWidth(int lineNumberMarginDynamicWidth)
 
- {
 
- 	auto linesVisible = execute(SCI_LINESONSCREEN);
 
- 	if (linesVisible)
 
- 	{
 
- 		int nbDigits = 0;
 
- 		if(lineNumberMarginDynamicWidth != 0)
 
- 		{
 
- 			auto firstVisibleLineVis = execute(SCI_GETFIRSTVISIBLELINE);
 
- 			auto lastVisibleLineVis = linesVisible + firstVisibleLineVis + 1;
 
- 			auto lastVisibleLineDoc = execute(SCI_DOCLINEFROMVISIBLE, (long)lastVisibleLineVis);
 
- 			nbDigits = nbDigitsFromNbLines(lastVisibleLineDoc);
 
- 			nbDigits = nbDigits < 4 ? 4 : nbDigits;
 
- 		}
 
- 		else
 
- 		{
 
- 		auto nbLines = execute(SCI_GETLINECOUNT);
 
- 		nbDigits = nbDigitsFromNbLines(nbLines);
 
- 			nbDigits = nbDigits < 5 ? 5 : nbDigits;
 
- 		}
 
- 		
 
- 		auto pixelWidth = 6 + nbDigits * execute(SCI_TEXTWIDTH, STYLE_LINENUMBER, reinterpret_cast<sptr_t>("8"));
 
- 		execute(SCI_SETMARGINWIDTHN, _SC_MARGE_LINENUMBER, pixelWidth);
 
- 	}
 
- 	
 
- }
 
- void ScintillaEditView::showMargin(int whichMarge, bool willBeShowed)
 
- {
 
- 	if (whichMarge == _SC_MARGE_LINENUMBER)
 
- 	{
 
- 		bool forcedToHide = !willBeShowed;
 
- 		updateLineNumbersMargin(forcedToHide);
 
- 	}
 
- 	else
 
- 	{
 
- 	//后面再来解决像素的问题
 
- 		//DPIManager& dpiManager = NppParameters::getInstance()._dpiManager;
 
- 		int width = 3;
 
- 		if (whichMarge == _SC_MARGE_SYBOLE)
 
- 			width = 8;
 
- 		else if (whichMarge == _SC_MARGE_FOLDER)
 
- 			width = 14;
 
- 		execute(SCI_SETMARGINWIDTHN, whichMarge, willBeShowed ? width : 0);
 
- 	}
 
- }
 
- sptr_t ScintillaEditView::execute(quint32 Msg, uptr_t wParam, sptr_t lParam) const {
 
- 	try {
 
- 		return (m_pScintillaFunc) ? m_pScintillaFunc(m_pScintillaPtr, Msg, wParam, lParam) : -1;
 
- 	}
 
- 	catch (...)
 
- 	{
 
- 		return -1;
 
- 	}
 
- };
 
- //status : true 表示存在, false 表示不存在
 
- QsciLexer* ScintillaEditView::createLexer(int lexerId)
 
- {
 
- 	QsciLexer* ret = nullptr;
 
- 	switch (lexerId)
 
- 	{
 
- 	case L_PHP:
 
- 		ret = new QsciLexerHTML();
 
- 		ret->setLexerTag("php");
 
- 		break;
 
- 	case L_HTML:
 
- 		ret = new QsciLexerHTML();
 
- 		ret->setLexerTag("html");
 
- 		break;
 
- 	case L_ASP:
 
- 		ret = new QsciLexerHTML();
 
- 		ret->setLexerTag("asp");
 
- 		break;
 
- 	case L_JSP:
 
- 		ret = new QsciLexerHTML();
 
- 		ret->setLexerTag("jsp");
 
- 		break;
 
- 	case L_C:
 
- 		ret = new QsciLexerCPP();
 
- 		ret->setLexerTag("c");
 
- 		break;
 
- 	case L_RC:
 
- 		ret = new QsciLexerCPP();
 
- 		ret->setLexerTag("rc");
 
- 		break;
 
- 	case L_CPP:
 
- 		ret = new QsciLexerCPP();
 
- 		break;
 
- 	case L_OBJC:
 
- 		ret = new QsciLexerCPP();
 
- 		ret->setLexerTag("objc");
 
- 		break;
 
- 	case L_CS:
 
- 		ret = new QsciLexerCSharp();
 
- 		ret->setLexerTag("csharp");
 
- 		break;
 
- 	case L_JAVA:
 
- 		ret = new QsciLexerJava();
 
- 		ret->setLexerTag("java");
 
- 		break;
 
- 	case L_XML:
 
- 		ret = new QsciLexerXML();
 
- 		break;
 
- 	case L_MAKEFILE:
 
- 		ret = new QsciLexerMakefile();
 
- 		break;
 
- 	case L_PASCAL:
 
- 		ret = new QsciLexerPascal();
 
- 		break;
 
- 	case L_BATCH:
 
- 		ret = new QsciLexerBatch();
 
- 		break;
 
- 	case L_INI:
 
- 		ret = new QsciLexerProperties();
 
- 		ret->setLexerTag("ini");
 
- 		break;
 
- 	case L_ASCII:
 
- 		break;
 
- 	case L_USER:
 
- 		break;
 
- 	case L_SQL:
 
- 		ret = new QsciLexerSQL();
 
- 		break;
 
- 	case L_VB:
 
- 		break;
 
- 	case L_CSS:
 
- 		ret = new QsciLexerCSS();
 
- 		break;
 
- 	case L_PERL:
 
- 		ret = new QsciLexerPerl();
 
- 		break;
 
- 	case L_PYTHON:
 
- 		ret = new QsciLexerPython();
 
- 		break;
 
- 	case L_LUA:
 
- 		ret = new QsciLexerLua();
 
- 		break;
 
- 	case L_TEX:
 
- 		break;
 
- 	case L_FORTRAN:
 
- 		ret = new QsciLexerFortran();
 
- 		break;
 
- 	case L_BASH:
 
- 		ret = new QsciLexerBash();
 
- 		break;
 
- 	case L_FLASH:
 
- 		ret = new QsciLexerCPP();
 
- 		ret->setLexerTag("flash");
 
- 		break;
 
- 	case L_NSIS:
 
- 		ret = new QsciLexerNsis();
 
- 		break;
 
- 	case L_TCL:
 
- 		ret = new QsciLexerTCL();
 
- 		break;
 
- 	case L_LISP:
 
- 		break;
 
- 	case L_SCHEME:
 
- 		break;
 
- 	case L_ASM:
 
- 		break;
 
- 	case L_DIFF:
 
- 		ret = new QsciLexerDiff();
 
- 		break;
 
- 	case L_PROPS:
 
- 		ret = new QsciLexerProperties();
 
- 		break;
 
- 	case L_PS:
 
- 		break;
 
- 	case L_RUBY:
 
- 		ret = new QsciLexerRuby();
 
- 		break;
 
- 	case L_SMALLTALK:
 
- 		break;
 
- 	case L_VHDL:
 
- 		ret = new QsciLexerVHDL();
 
- 		break;
 
- 	case L_KIX:
 
- 		break;
 
- 	case L_AU3:
 
- 		break;
 
- 	case L_CAML:
 
- 		break;
 
- 	case L_ADA:
 
- 		break;
 
- 	case L_VERILOG:
 
- 		ret = new QsciLexerVerilog();
 
- 		break;
 
- 	case L_MATLAB:
 
- 		ret = new QsciLexerMatlab();
 
- 		break;
 
- 	case L_HASKELL:
 
- 		break;
 
- 	case L_INNO:
 
- 		break;
 
- 	case L_SEARCHRESULT:
 
- 		break;
 
- 	case L_CMAKE:
 
- 		ret = new QsciLexerCMake();
 
- 		break;
 
- 	case L_YAML:
 
- 		ret = new QsciLexerYAML();
 
- 		break;
 
- 	case L_COBOL:
 
- 		break;
 
- 	case L_GUI4CLI:
 
- 		break;
 
- 	case L_D:
 
- 		break;
 
- 	case L_POWERSHELL:
 
- 		break;
 
- 	case L_COFFEESCRIPT:
 
- 		ret = new QsciLexerCoffeeScript();
 
- 		break;
 
- 	case L_JSON:
 
- 		ret = new QsciLexerJSON();
 
- 		break;
 
- 	case L_JAVASCRIPT:
 
- 		ret = new QsciLexerJavaScript();
 
- 		ret->setLexerTag("javascript");
 
- 		break;
 
- 	case L_FORTRAN_77:
 
- 		ret = new QsciLexerFortran77();
 
- 		break;
 
- 	case L_BAANC:
 
- 		break;
 
- 	case L_SREC:
 
- 		break;
 
- 	case L_IHEX:
 
- 		break;
 
- 	case L_TEHEX:
 
- 		break;
 
- 	case L_SWIFT:
 
- 		break;
 
- 	case L_ASN1:
 
- 		break;
 
- 	case L_AVS:
 
- 		ret = new QsciLexerAVS();
 
- 		break;
 
- 	case L_BLITZBASIC:
 
- 		break;
 
- 	case L_PUREBASIC:
 
- 		break;
 
- 	case L_FREEBASIC:
 
- 		break;
 
- 	case L_CSOUND:
 
- 		break;
 
- 	case L_ERLANG:
 
- 		break;
 
- 	case L_ESCRIPT:
 
- 		break;
 
- 	case L_FORTH:
 
- 		break;
 
- 	case L_LATEX:
 
- 		break;
 
- 	case L_MMIXAL:
 
- 		break;
 
- 	case L_NIM:
 
- 		break;
 
- 	case L_NNCRONTAB:
 
- 		break;
 
- 	case L_OSCRIPT:
 
- 		break;
 
- 	case L_REBOL:
 
- 		break;
 
- 	case L_REGISTRY:
 
- 		break;
 
- 	case L_RUST:
 
- 		break;
 
- 	case L_SPICE:
 
- 		ret = new QsciLexerSpice();
 
- 		break;
 
- 	case L_TXT2TAGS:
 
- 		break;
 
- 	case L_VISUALPROLOG:
 
- 		break;
 
- 	case L_TYPESCRIPT:
 
- 		ret = new QsciLexerCPP();
 
- 		ret->setLexerTag("typescript");
 
- 		break;
 
- 	case L_EXTERNAL:
 
- 		break;
 
- 	case L_IDL:
 
- 		ret = new QsciLexerIDL();
 
- 		ret->setLexerTag("idl");
 
- 		break;
 
- 	case L_GO:
 
- 		ret = new QsciLexerGO();
 
- 		ret->setLexerTag("go");
 
- 		break;
 
- 	case L_TXT:
 
- 		ret = new QsciLexerText();
 
- 		ret->setLexerTag("txt");
 
- 		break;
 
- 	default:
 
- 		break;
 
- 	}
 
- 	if (ret != nullptr)
 
- 	{
 
- 		ret->setLexerId(lexerId);
 
- 		QtLangSet::readLangSettings(ret, ret->lexerTag());
 
- 	}
 
- 	return ret;
 
- }
 
- void ScintillaEditView::appendMarkRecord(FindRecords * r)
 
- {
 
- 	m_curMarkList.append(r);
 
- }
 
- void ScintillaEditView::releaseAllMark()
 
- {
 
- 	for (int i = 0; i < m_curMarkList.size(); ++i)
 
- 	{
 
- 		delete m_curMarkList.at(i);
 
- 	}
 
- 	m_curMarkList.clear();
 
- }
 
- QList<FindRecords *>& ScintillaEditView::getCurMarkRecord()
 
- {
 
- 	return m_curMarkList;
 
- }
 
- //调整颜色
 
- void ScintillaEditView::adjuctSkinStyle()
 
- {
 
- 	setFoldMarginColors(StyleSet::foldfgColor, StyleSet::foldbgColor);
 
- 	setMarginsBackgroundColor(StyleSet::marginsBackgroundColor);
 
- }
 
- void ScintillaEditView::setIndentGuide(bool willBeShowed)
 
- {
 
- 	QsciLexer* pLexer = this->lexer(); 
 
- 	if (nullptr == pLexer || (pLexer->lexerId() == L_TXT))
 
- 	{
 
- 		return;
 
- 	}
 
- 	const int docIndentMode = (pLexer->lexerId() == L_PYTHON) ? SC_IV_LOOKFORWARD : SC_IV_LOOKBOTH;
 
- 	execute(SCI_SETINDENTATIONGUIDES, willBeShowed ? docIndentMode : SC_IV_NONE);
 
- 	QsciScintilla::setIndentGuide(willBeShowed);
 
- }
 
- #if 0
 
- void ScintillaEditView::setLexer(QsciLexer * lexer)
 
- {
 
- 	//加个保护,只有文本模式下,才能加lexer
 
- 	if (lexer != nullptr)
 
- 	{
 
- 		OpenAttr openType = (OpenAttr)this->property(Open_Attr).toInt();
 
- 		if (Text != openType)
 
- 		{
 
- 			return;
 
- 		}
 
- 	}
 
- 	QsciScintilla::setLexer(lexer);
 
- }
 
- #endif
 
- void ScintillaEditView::init()
 
- {
 
- 	m_pScintillaFunc = (SCINTILLA_FUNC)this->SendScintillaPtrResult(SCI_GETDIRECTFUNCTION);
 
- 	m_pScintillaPtr = (SCINTILLA_PTR)this->SendScintillaPtrResult(SCI_GETDIRECTPOINTER);
 
- 	if (!m_pScintillaFunc)
 
- 	{
 
- 		throw std::runtime_error("ScintillaEditView::init : SCI_GETDIRECTFUNCTION message failed");
 
- 	}
 
- 	if (!m_pScintillaPtr)
 
- 	{
 
- 		throw std::runtime_error("ScintillaEditView::init : SCI_GETDIRECTPOINTER message failed");
 
- 	}
 
- 	//开启行号marge
 
- 	//markerDefine(SC_MARGIN_NUMBER,_SC_MARGE_LINENUMBER);
 
- 	setMarginLineNumbers(_SC_MARGE_LINENUMBER, true);
 
- 	
 
- 	//execute(SCI_SETMARGINMASKN, _SC_MARGE_FOLDER, SC_MARGIN_SYMBOL);
 
- 	//execute(SCI_SETMARGINMASKN, _SC_MARGE_FOLDER, SC_MASK_FOLDERS);
 
- 	QColor foldfgColor(StyleSet::foldfgColor);
 
- 	QColor foldbgColor(StyleSet::foldbgColor);//默认0xff,0xff,0xff
 
- 	//QColor activeFoldFgColor(0xFF, 0, 0);
 
- 	//通过fold发现,尽量使用qscint的功能,因为他做了大量封装和简化
 
- 	setFolding(BoxedTreeFoldStyle, _SC_MARGE_FOLDER);
 
- 	setFoldMarginColors(foldfgColor, foldbgColor);
 
- 	//当前fold高亮。QT下面有bug暂时不开启
 
- 	//execute(SCI_MARKERENABLEHIGHLIGHT, true);
 
- 	setMarginsBackgroundColor(StyleSet::marginsBackgroundColor); //0xea, 0xf7, 0xff //默认0xf0f0f0
 
- 	//execute(SCI_MARKERSETBACK, _SC_MARGE_FOLDER, 0x808080);
 
- 	//execute(SCI_MARKERSETBACKSELECTED, _SC_MARGE_FOLDER, 0xff0000);
 
- 	showMargin(_SC_MARGE_LINENUMBER, true);
 
- 	//行号、符号、折叠。中间符号留一个很小的间隔
 
- 	showMargin(_SC_MARGE_SYBOLE, true);
 
- 	
 
- 	//showMargin(_SC_MARGE_FOLDER, true);
 
- 	//设置选中背景色
 
- 	//setSelectionBackgroundColor(QColor(117, 217, 117));
 
- 	
 
- 	//开始括号匹配,比如html的<>,开启前后这类字段的匹配
 
- 	setBraceMatching(SloppyBraceMatch);
 
- 	setMatchedBraceForegroundColor(QColor(191, 141, 255));
 
- 	//setMatchedBraceBackgroundColor(QColor(191, 141, 255));
 
- 	//自动补全效果不好,不开启20211017
 
- 	//setAutoCompletionSource(QsciScintilla::AcsAPIs);   //设置源,自动补全所有地方出现的
 
- 	//setAutoCompletionCaseSensitivity(true);   //设置自动补全大小写敏感
 
- 	//setAutoCompletionThreshold(1);    //设置每输入一个字符就会出现自动补全的提示
 
- 	//设置字体
 
- 	QFont font(DEFAULT_FONT_NAME, 11/*QsciLexer::s_defaultFontSize*/, QFont::Normal);
 
- 	setFont(font);
 
- 	setMarginsFont(font);
 
- 	//execute(SCI_SETMARGINMASKN, _SC_MARGE_SYBOLE, (1 << MARK_BOOKMARK) | (1 << MARK_HIDELINESBEGIN) | (1 << MARK_HIDELINESEND) | (1 << MARK_HIDELINESUNDERLINE));
 
- 	setMarginsForegroundColor(QColor(0x80, 0x80, 0x80)); //默认0x80, 0x80, 0x80
 
- 	execute(SCI_SETTABWIDTH, 4);
 
- 	//setPaper(QColor(0xfc, 0xfc, 0xfc));//这个无效
 
- 	//使用空格替换tab
 
- 	execute(SCI_SETUSETABS, !ScintillaEditView::s_noUseTab);
 
- 	//这个无比要设置false,否则双击后高亮单词,拷贝时会拷贝多个选择。
 
- 	execute(SCI_SETMULTIPLESELECTION, false);
 
- 	//execute(SCI_SETADDITIONALSELALPHA, 100);
 
- 	execute(SCI_SETMULTIPASTE, 1);
 
- 	execute(SCI_SETADDITIONALCARETSVISIBLE, false);
 
- 	//execute(SCI_SETADDITIONALSELFORE, 0);
 
- 	//execute(SCI_SETADDITIONALSELBACK, 0x98ff98);
 
- 	execute(SCI_SETSELFORE, true, 0x0);
 
- 	//execute(SCI_SETSELBACK, true, 0x9ACC9A);
 
- 	execute(SCI_SETSELBACK, true, 0x9bff9b); //0x00ffff原来的黄色
 
- 	//设置查找到Mark的风格。定义其前景颜色和形状
 
- 	execute(SCI_INDICSETSTYLE, SCE_UNIVERSAL_FOUND_STYLE, INDIC_ROUNDBOX);
 
- 	execute(SCI_INDICSETALPHA, SCE_UNIVERSAL_FOUND_STYLE, 130);
 
- 	execute(SCI_INDICSETUNDER, SCE_UNIVERSAL_FOUND_STYLE, false);
 
- 	execute(SCI_INDICSETFORE, SCE_UNIVERSAL_FOUND_STYLE, 0x00ffff);
 
- 	//下面这两个是HTML文件的tag高亮的表示。
 
- 	execute(SCI_INDICSETSTYLE, SCE_UNIVERSAL_TAGMATCH, INDIC_STRAIGHTBOX);
 
- 	execute(SCI_INDICSETALPHA, SCE_UNIVERSAL_TAGMATCH, 100);
 
- 	execute(SCI_INDICSETUNDER, SCE_UNIVERSAL_TAGMATCH, false);
 
- 	execute(SCI_INDICSETFORE, SCE_UNIVERSAL_TAGMATCH, 0xff0080);
 
- 	execute(SCI_INDICSETSTYLE, SCE_UNIVERSAL_TAGATTR, INDIC_STRAIGHTBOX);
 
- 	execute(SCI_INDICSETALPHA, SCE_UNIVERSAL_TAGATTR, 100);
 
- 	execute(SCI_INDICSETUNDER, SCE_UNIVERSAL_TAGATTR, false);
 
- 	execute(SCI_INDICSETFORE, SCE_UNIVERSAL_TAGATTR, 0x00ffff);
 
- 	setCaretLineVisible(true);
 
- 	setCaretLineBackgroundColor(QColor(0xe8e8ff));
 
- 	//记住position变化。不能使用cursorPositionChanged,因为他的列考虑uft8字符,中文一个也算1个,每次列不一定相等。
 
- 	//要使用自定义的cursorPosChange,跟踪的是SCI_GETCURRENTPOS 的值
 
- 	connect(this,&QsciScintilla::cursorPosChange,this,&ScintillaEditView::slot_linePosChanged, Qt::QueuedConnection);
 
- 	execute(SCI_SETSCROLLWIDTH, 1);
 
- 	//20220226发现高亮全选如果范围过大,会导致卡死。借鉴notepad的只高亮可视化区域。但是滚动时也必须生效
 
- 	connect(this->verticalScrollBar(), &QScrollBar::valueChanged, this, &ScintillaEditView::slot_scrollXValueChange);
 
- 	connect(this, &ScintillaEditView::delayWork, this,&ScintillaEditView::slot_delayWork, Qt::QueuedConnection);
 
- }
 
- //X方向滚动条值变化后的槽函数。一旦滚动则会出发这里,发送消息给中介,让中介去同步另外一方
 
- void ScintillaEditView::slot_scrollXValueChange(int value)
 
- {
 
- 	slot_delayWork();
 
- 	autoAdjustLineWidth(value);
 
- }
 
- void ScintillaEditView::slot_linePosChanged(int /*line*/, int pos)
 
- {
 
- 	//避免循环触发的slot_positionChanged
 
- 	if (m_curPos == pos)
 
- 	{
 
- 		return;
 
- 	}
 
- 	m_prePosRecord.append(pos);
 
- 	if (m_prePosRecord.size() >= MAX_PRE_NEXT_TIMES)
 
- 	{
 
- 		m_prePosRecord.takeFirst();
 
- 	}
 
- }
 
- //回退一个位置
 
- bool ScintillaEditView::gotoPrePos()
 
- {
 
- 	if (m_prePosRecord.size() > 1)
 
- 	{
 
- 		int v = m_prePosRecord.takeLast();
 
- 		m_nextPosRecord.push_front(v);
 
- 		if (m_nextPosRecord.size() >= MAX_PRE_NEXT_TIMES)
 
- 		{
 
- 			m_nextPosRecord.takeLast();
 
- 		}
 
- 		int pos = m_prePosRecord.last();
 
- 		//下面这个函数比较坑,里面要循环Index次,每次返回的index值是不一样的。只能使用SCI_GOTOPOS可自定义的信号
 
- 		//setCursorPosition(pos.line, pos.index);
 
- 		//会循环触发slot_positionChanged
 
- 		this->execute(SCI_GOTOPOS, pos);
 
- 		m_curPos = pos;
 
- 		return true;
 
- 	}
 
- 	return false;
 
- }
 
- bool ScintillaEditView::gotoNextPos()
 
- {
 
- 	if (m_nextPosRecord.size() > 0)
 
- 	{
 
- 		int pos =  m_nextPosRecord.takeFirst();
 
- 		m_prePosRecord.append(pos);
 
- 		this->execute(SCI_GOTOPOS, pos);
 
- 		m_curPos = pos;
 
- 		return true;
 
- 	}
 
- 	return false;
 
- }
 
- const int MAXLINEHIGHLIGHT = 400;
 
- void ScintillaEditView::slot_delayWork()
 
- {
 
- 	if (!hasSelectedText())
 
- 	{
 
- 		return;
 
- 	}
 
- 	QString word = selectedText();
 
- 	if (!word.isEmpty())
 
- 	{
 
- 		QVector<int>resultPos;
 
- 		resultPos.reserve(50);
 
- 		int firstLine = execute(SCI_GETFIRSTVISIBLELINE);
 
- 		int nbLineOnScreen = execute(SCI_LINESONSCREEN);
 
- 		int nbLines = std::min(nbLineOnScreen, MAXLINEHIGHLIGHT) + 1;
 
- 		int lastLine = firstLine + nbLines;
 
- 		long startPos = execute(SCI_POSITIONFROMLINE, firstLine);
 
- 		long endPos = execute(SCI_POSITIONFROMLINE, lastLine);
 
- 		if (endPos == -1)
 
- 		{	
 
- 			endPos = execute(SCI_GETLENGTH);
 
- 		}
 
- 		int curpos = execute(SCI_GETCURRENTPOS);
 
- 		int mainSelect = 1;
 
- 		//struct Sci_TextToFind findOptions;
 
- 		////20220226发现高亮全选如果范围过大,会导致卡死。借鉴notepad的只高亮可视化区域。但是滚动时也必须生效
 
- 		////findOptions.chrg.cpMin = 0;
 
- 		////findOptions.chrg.cpMax = execute(SCI_GETLENGTH);
 
- 		//
 
- 		//findOptions.chrg.cpMin = startPos;
 
- 		//findOptions.chrg.cpMax = endPos;
 
- 		//findOptions.lpstrText = wordStr.c_str();
 
- 		//20220422 升级高版本scint后,发现Sci_TextToFind要崩溃,替换为SCI_SEARCHINTARGET
 
- 		//int pos = execute(SCI_FINDTEXT, SCFIND_MATCHCASE | SCFIND_WHOLEWORD, reinterpret_cast<sptr_t>(&findOptions));
 
- 		//std::string wordStr = word.toStdString();
 
- 		QByteArray wordStr = word.toUtf8();
 
- 		SendScintilla(SCI_SETTARGETSTART, startPos);
 
- 		SendScintilla(SCI_SETTARGETEND, endPos);
 
- 		SendScintilla(SCI_SETSEARCHFLAGS, SCFIND_MATCHCASE|SCFIND_WHOLEWORD);
 
- 		long lens = wordStr.length();
 
- 		long pos = SendScintilla(SCI_SEARCHINTARGET, lens, wordStr.data()/*,wordStr.c_str()*/);
 
- 		while ((pos != -1)&&(pos < endPos))
 
- 		{
 
- 			resultPos.append(pos);
 
- 			if (pos <= curpos)
 
- 			{
 
- 				mainSelect = resultPos.size();
 
- 			}
 
- 			SendScintilla(SCI_SETTARGETSTART, pos + lens);
 
- 			SendScintilla(SCI_SETTARGETEND, endPos);
 
- 			pos = SendScintilla(SCI_SEARCHINTARGET, wordStr.length(), wordStr.data()/*,wordStr.c_str()*/);
 
- 			//findOptions.chrg.cpMin = findOptions.chrgText.cpMax;
 
- 			//pos = execute(SCI_FINDTEXT, SCFIND_MATCHCASE | SCFIND_WHOLEWORD, reinterpret_cast<sptr_t>(&findOptions));
 
- 		}
 
- 		for (int i = 0, size = resultPos.size(); i < size; ++i)
 
- 		{
 
- 			//execute(SCI_ADDSELECTION, resultPos.at(i), resultPos.at(i) + word.size());
 
- 			execute(SCI_ADDSELECTION, resultPos.at(i) + lens, resultPos.at(i) );
 
- 		}
 
- 		if (!resultPos.isEmpty())
 
- 		{
 
- 			execute(SCI_SETMAINSELECTION, mainSelect - 1);
 
- 		}
 
- 	}
 
- }
 
- void ScintillaEditView::dragEnterEvent(QDragEnterEvent* event)
 
- {
 
- 	//if (event->mimeData()->hasFormat("text/uri-list")) //只能打开文本文件
 
- 	//{
 
- 	//	event->accept(); //可以在这个窗口部件上拖放对象
 
- 	//}
 
- 	//else
 
- 	//{
 
- 	//	event->ignore();
 
- 	//}
 
- 	event->accept();
 
- 	}
 
- void ScintillaEditView::dropEvent(QDropEvent* e)
 
- {
 
- 	QList<QUrl> urls = e->mimeData()->urls();
 
- 	if (urls.isEmpty())
 
- 		return;
 
- 	CCNotePad* pv = dynamic_cast<CCNotePad*>(m_NoteWin);
 
- 	if (pv != nullptr)
 
- 		pv->receiveEditDrop(e);
 
- 	//qDebug() << ui.leftSrc->geometry() << ui.rightSrc->geometry() << QCursor::pos() << this->mapFromGlobal(QCursor::pos());
 
- }
 
- void ScintillaEditView::mouseDoubleClickEvent(QMouseEvent * e)
 
- {
 
- 	QsciScintilla::mouseDoubleClickEvent(e);
 
- 	if (hasSelectedText())
 
- 	{
 
- 		emit delayWork();
 
- 	}
 
- }
 
 
  |