Merge branch 'master' of github.com:royqh1979/RedPanda-CPP

This commit is contained in:
royqh1979@gmail.com 2021-09-20 20:30:48 +08:00
commit 3e4f6b6548
11 changed files with 380 additions and 247 deletions

View File

@ -2,4 +2,5 @@ Version 0.2
- enhancement: paint color editor use system palette's disabled group color
- fix: add watch not work when there's no editor openned;
- enhancement: rainbow parenthesis
- enhancement: run executable with parameters
- enhancement: run executable with parameters
- add: widget for function tips

View File

@ -99,6 +99,7 @@ SOURCES += \
widgets/consolewidget.cpp \
widgets/custommakefileinfodialog.cpp \
widgets/filepropertiesdialog.cpp \
widgets/functiontipwidget.cpp \
widgets/headercompletionpopup.cpp \
widgets/issuestable.cpp \
widgets/newprojectdialog.cpp \
@ -196,6 +197,7 @@ HEADERS += \
widgets/consolewidget.h \
widgets/custommakefileinfodialog.h \
widgets/filepropertiesdialog.h \
widgets/functiontipwidget.h \
widgets/headercompletionpopup.h \
widgets/issuestable.h \
widgets/newprojectdialog.h \

View File

@ -377,7 +377,7 @@ void Editor::undoSymbolCompletion(int pos)
return;
if (!pSettings->editor().removeSymbolPairs())
return;
if (!GetHighlighterAttriAtRowCol(caretXY(), Token, tokenFinished, tokenType, Attr))
if (!getHighlighterAttriAtRowCol(caretXY(), Token, tokenFinished, tokenType, Attr))
return;
if ((tokenType == SynHighlighterTokenType::Comment) && (!tokenFinished))
return ;
@ -412,7 +412,7 @@ void Editor::undoSymbolCompletion(int pos)
(pSettings->editor().completeBrace() && (DeletedChar == '{') && (NextChar == '}')) ||
(pSettings->editor().completeSingleQuote() && (DeletedChar == '\'') && (NextChar == '\'')) ||
(pSettings->editor().completeDoubleQuote() && (DeletedChar == '\"') && (NextChar == '\"'))) {
CommandProcessor(SynEditorCommand::ecDeleteChar);
commandProcessor(SynEditorCommand::ecDeleteChar);
}
}
@ -730,7 +730,7 @@ bool Editor::event(QEvent *event)
int line ;
if (reason == TipType::Error) {
pError = getSyntaxIssueAtPosition(p);
} else if (PointToLine(helpEvent->pos(),line)) {
} else if (pointToLine(helpEvent->pos(),line)) {
//it's on gutter
//see if its error;
PSyntaxIssueList issues = getSyntaxIssuesAtLine(line);
@ -750,7 +750,7 @@ bool Editor::event(QEvent *event)
s = lines()->getString(p.Line - 1);
isIncludeLine = mParser->isIncludeLine(s);
if (!isIncludeLine)
s = WordAtRowCol(p);
s = wordAtRowCol(p);
break;
case TipType::Identifier:
if (pMainWindow->debugger()->executing())
@ -866,7 +866,7 @@ void Editor::mouseReleaseEvent(QMouseEvent *event)
&& (event->button() == Qt::LeftButton)) {
BufferCoord p;
if (PointToCharLine(event->pos(),p)) {
if (pointToCharLine(event->pos(),p)) {
QString s = lines()->getString(p.Line - 1);
if (mParser->isIncludeLine(s)) {
QString filename = mParser->getHeaderFileName(mFilename,s);
@ -988,7 +988,7 @@ void Editor::addSyntaxIssues(int line, int startChar, int endChar, CompileIssueT
start = 1;
token = lines()->getString(line-1);
} else if (endChar < 1) {
if (!GetHighlighterAttriAtRowColEx(p,token,tokenType,tokenKind,start,attr))
if (!getHighlighterAttriAtRowColEx(p,token,tokenType,tokenKind,start,attr))
return;
} else {
start = startChar;
@ -1123,8 +1123,8 @@ void Editor::onStatusChanged(SynStatusChanges changes)
BufferCoord wordBegin,wordEnd,bb,be;
bb = blockBegin();
be = blockEnd();
wordBegin = WordStartEx(bb);
wordEnd = WordEndEx(be);
wordBegin = wordStartEx(bb);
wordEnd = wordEndEx(be);
if (wordBegin.Line == bb.Line
&& wordBegin.Char == bb.Char
&& wordEnd.Line == be.Line
@ -1277,7 +1277,7 @@ bool Editor::handleSymbolCompletion(QChar key)
QString Token;
bool tokenFinished;
SynHighlighterTokenType tokenType;
if (GetHighlighterAttriAtRowCol(HighlightPos, Token, tokenFinished, tokenType,Attr)) {
if (getHighlighterAttriAtRowCol(HighlightPos, Token, tokenFinished, tokenType,Attr)) {
if ((tokenType == SynHighlighterTokenType::Comment) && (!tokenFinished))
return false;
if ((tokenType == SynHighlighterTokenType::String) && (!tokenFinished)
@ -1362,9 +1362,9 @@ bool Editor::handleParentheseCompletion()
QuoteStatus status = getQuoteStatus();
if (status == QuoteStatus::RawString || status == QuoteStatus::NotQuote) {
beginUpdate();
CommandProcessor(SynEditorCommand::ecChar,'(');
commandProcessor(SynEditorCommand::ecChar,'(');
BufferCoord oldCaret = caretXY();
CommandProcessor(SynEditorCommand::ecChar,')');
commandProcessor(SynEditorCommand::ecChar,')');
setCaretXY(oldCaret);
endUpdate();
return true;
@ -1400,9 +1400,9 @@ bool Editor::handleBracketCompletion()
// QuoteStatus status = getQuoteStatus();
// if (status == QuoteStatus::RawString || status == QuoteStatus::NotQuote) {
beginUpdate();
CommandProcessor(SynEditorCommand::ecChar,'[');
commandProcessor(SynEditorCommand::ecChar,'[');
BufferCoord oldCaret = caretXY();
CommandProcessor(SynEditorCommand::ecChar,']');
commandProcessor(SynEditorCommand::ecChar,']');
setCaretXY(oldCaret);
endUpdate();
return true;
@ -1425,10 +1425,10 @@ bool Editor::handleMultilineCommentCompletion()
{
if (((caretX() > 1) && (caretX()-1 < lineText().length())) && (lineText()[caretX() - 1] == '/')) {
beginUpdate();
CommandProcessor(SynEditorCommand::ecChar,'*');
commandProcessor(SynEditorCommand::ecChar,'*');
BufferCoord oldCaret = caretXY();
CommandProcessor(SynEditorCommand::ecChar,'*');
CommandProcessor(SynEditorCommand::ecChar,'/');
commandProcessor(SynEditorCommand::ecChar,'*');
commandProcessor(SynEditorCommand::ecChar,'/');
setCaretXY(oldCaret);
endUpdate();
return true;
@ -1445,9 +1445,9 @@ bool Editor::handleBraceCompletion()
i--;
}
beginUpdate();
CommandProcessor(SynEditorCommand::ecChar,'{');
commandProcessor(SynEditorCommand::ecChar,'{');
BufferCoord oldCaret = caretXY();
CommandProcessor(SynEditorCommand::ecChar,'}');
commandProcessor(SynEditorCommand::ecChar,'}');
if (
( (s.startsWith("struct")
|| s.startsWith("class")
@ -1458,7 +1458,7 @@ bool Editor::handleBraceCompletion()
|| s.startsWith("enum") )
&& !s.contains(';')
) || s.endsWith('=')) {
CommandProcessor(SynEditorCommand::ecChar,';');
commandProcessor(SynEditorCommand::ecChar,';');
}
setCaretXY(oldCaret);
endUpdate();
@ -1473,7 +1473,7 @@ bool Editor::handleBraceSkip()
if (pos.Line != 0) {
bool oldInsertMode = insertMode();
setInsertMode(false); //set mode to overwrite
CommandProcessor(SynEditorCommand::ecChar,'}');
commandProcessor(SynEditorCommand::ecChar,'}');
setInsertMode(oldInsertMode);
// setCaretXY( BufferCoord{caretX() + 1, caretY()}); // skip over
return true;
@ -1495,9 +1495,9 @@ bool Editor::handleSingleQuoteCompletion()
if (ch == 0 || highlighter()->isWordBreakChar(ch) || highlighter()->isSpaceChar(ch)) {
// insert ''
beginUpdate();
CommandProcessor(SynEditorCommand::ecChar,'\'');
commandProcessor(SynEditorCommand::ecChar,'\'');
BufferCoord oldCaret = caretXY();
CommandProcessor(SynEditorCommand::ecChar,'\'');
commandProcessor(SynEditorCommand::ecChar,'\'');
setCaretXY(oldCaret);
endUpdate();
return true;
@ -1521,9 +1521,9 @@ bool Editor::handleDoubleQuoteCompletion()
if ((ch == 0) || highlighter()->isWordBreakChar(ch) || highlighter()->isSpaceChar(ch)) {
// insert ""
beginUpdate();
CommandProcessor(SynEditorCommand::ecChar,'"');
commandProcessor(SynEditorCommand::ecChar,'"');
BufferCoord oldCaret = caretXY();
CommandProcessor(SynEditorCommand::ecChar,'"');
commandProcessor(SynEditorCommand::ecChar,'"');
setCaretXY(oldCaret);
endUpdate();
return true;
@ -1541,9 +1541,9 @@ bool Editor::handleGlobalIncludeCompletion()
if (!s.startsWith("include")) //it's not #include
return false;
beginUpdate();
CommandProcessor(SynEditorCommand::ecChar,'<');
commandProcessor(SynEditorCommand::ecChar,'<');
BufferCoord oldCaret = caretXY();
CommandProcessor(SynEditorCommand::ecChar,'>');
commandProcessor(SynEditorCommand::ecChar,'>');
setCaretXY(oldCaret);
endUpdate();
return true;
@ -1753,7 +1753,7 @@ void Editor::showCompletion(bool autoComplete)
bool tokenFinished;
SynHighlighterTokenType tokenType;
BufferCoord pBeginPos, pEndPos;
if (GetHighlighterAttriAtRowCol(
if (getHighlighterAttriAtRowCol(
BufferCoord{caretX() - 1,
caretY()}, s, tokenFinished,tokenType, attr)) {
if (tokenType == SynHighlighterTokenType::PreprocessDirective) {//Preprocessor
@ -1777,7 +1777,7 @@ void Editor::showCompletion(bool autoComplete)
}
// Position it at the top of the next line
QPoint p = RowColumnToPixels(displayXY());
QPoint p = rowColumnToPixels(displayXY());
p+=QPoint(0,textHeight()+2);
mCompletionPopup->move(mapToGlobal(p));
@ -1830,7 +1830,7 @@ void Editor::showHeaderCompletion(bool autoComplete)
return;
// Position it at the top of the next line
QPoint p = RowColumnToPixels(displayXY());
QPoint p = rowColumnToPixels(displayXY());
p.setY(p.y() + textHeight() + 2);
mHeaderCompletionPopup->move(mapToGlobal(p));
@ -1931,8 +1931,8 @@ void Editor::completionInsert(bool appendFunc)
QString funcAddOn = "";
// delete the part of the word that's already been typed ...
BufferCoord p = WordEnd();
setBlockBegin(WordStart());
BufferCoord p = wordEnd();
setBlockBegin(wordStart());
setBlockEnd(p);
// if we are inserting a function,
@ -2125,7 +2125,7 @@ bool Editor::onHeaderCompletionKeyPressed(QKeyEvent *event)
Editor::TipType Editor::getTipType(QPoint point, BufferCoord& pos)
{
// Only allow in the text area...
if (PointToCharLine(point, pos)) {
if (pointToCharLine(point, pos)) {
if (!pMainWindow->debugger()->executing()
&& getSyntaxIssueAtPosition(pos)) {
return TipType::Error;
@ -2135,12 +2135,12 @@ Editor::TipType Editor::getTipType(QPoint point, BufferCoord& pos)
QString s;
// Only allow hand tips in highlighted areas
if (GetHighlighterAttriAtRowCol(pos,s,attr)) {
if (getHighlighterAttriAtRowCol(pos,s,attr)) {
// Only allow Identifiers, Preprocessor directives, and selection
if (attr) {
if (selAvail()) {
// do not allow when dragging selection
if (IsPointInSelection(pos))
if (isPointInSelection(pos))
return TipType::Selection;
} else if (attr->name() == SYNS_AttrIdentifier)
return TipType::Identifier;

View File

@ -1735,7 +1735,7 @@ void MainWindow::onEditorContextMenu(const QPoint &pos)
QMenu menu(this);
BufferCoord p;
mEditorContextMenuPos = pos;
if (editor->GetPositionOfMouse(p)) {
if (editor->getPositionOfMouse(p)) {
//mouse on editing area
menu.addAction(ui->actionCompile_Run);
menu.addAction(ui->actionDebug);
@ -1769,7 +1769,7 @@ void MainWindow::onEditorContextMenu(const QPoint &pos)
} else {
//mouse on gutter
int line;
if (!editor->GetLineOfMouse(line))
if (!editor->getLineOfMouse(line))
line=-1;
menu.addAction(ui->actionToggle_Breakpoint);
menu.addAction(ui->actionBreakpoint_property);
@ -2657,7 +2657,7 @@ void MainWindow::on_actionAdd_Watch_triggered()
if (e->selAvail()) {
s = e->selText();
} else {
s = e->WordAtCursor();
s = e->wordAtCursor();
}
}
bool isOk;
@ -2757,7 +2757,7 @@ void MainWindow::on_actionFind_triggered()
if (mSearchDialog==nullptr) {
mSearchDialog = new SearchDialog(this);
}
QString s = e->WordAtCursor();
QString s = e->wordAtCursor();
mSearchDialog->find(s);
}
@ -2768,7 +2768,7 @@ void MainWindow::on_actionFind_in_files_triggered()
}
Editor *e = mEditorList->getEditor();
if (e) {
QString s = e->WordAtCursor();
QString s = e->wordAtCursor();
mSearchDialog->findInFiles(s);
} else {
mSearchDialog->findInFiles("");
@ -2783,7 +2783,7 @@ void MainWindow::on_actionReplace_triggered()
if (mSearchDialog==nullptr) {
mSearchDialog = new SearchDialog(this);
}
QString s = e->WordAtCursor();
QString s = e->wordAtCursor();
mSearchDialog->replace(s,s);
}
@ -2977,7 +2977,7 @@ void MainWindow::on_actionToggle_Breakpoint_triggered()
{
Editor * editor = mEditorList->getEditor();
int line;
if (editor && editor->PointToLine(mEditorContextMenuPos,line))
if (editor && editor->pointToLine(mEditorContextMenuPos,line))
editor->toggleBreakpoint(line);
}
@ -3001,7 +3001,7 @@ void MainWindow::on_actionBreakpoint_property_triggered()
{
Editor * editor = mEditorList->getEditor();
int line;
if (editor && editor->PointToLine(mEditorContextMenuPos,line)) {
if (editor && editor->pointToLine(mEditorContextMenuPos,line)) {
if (editor->hasBreakpoint(line))
editor->modifyBreakpointProperty(line);
}
@ -3013,7 +3013,7 @@ void MainWindow::on_actionGoto_Declaration_triggered()
{
Editor * editor = mEditorList->getEditor();
BufferCoord pos;
if (editor && editor->PointToCharLine(mEditorContextMenuPos,pos)) {
if (editor && editor->pointToCharLine(mEditorContextMenuPos,pos)) {
editor->gotoDeclaration(pos);
}
}
@ -3023,7 +3023,7 @@ void MainWindow::on_actionGoto_Definition_triggered()
{
Editor * editor = mEditorList->getEditor();
BufferCoord pos;
if (editor && editor->PointToCharLine(mEditorContextMenuPos,pos)) {
if (editor && editor->pointToCharLine(mEditorContextMenuPos,pos)) {
editor->gotoDefinition(pos);
}
}
@ -3033,7 +3033,7 @@ void MainWindow::on_actionFind_references_triggered()
{
Editor * editor = mEditorList->getEditor();
BufferCoord pos;
if (editor && editor->PointToCharLine(mEditorContextMenuPos,pos)) {
if (editor && editor->pointToCharLine(mEditorContextMenuPos,pos)) {
CppRefacter refactor;
refactor.findOccurence(editor,pos);
ui->tabMessages->setCurrentWidget(ui->tabSearch);

View File

@ -326,14 +326,14 @@ int SynEdit::maxScrollWidth() const
return std::max(mLines->lengthOfLongestLine()-mCharsInWindow+1, 1);
}
bool SynEdit::GetHighlighterAttriAtRowCol(const BufferCoord &XY, QString &Token, PSynHighlighterAttribute &Attri)
bool SynEdit::getHighlighterAttriAtRowCol(const BufferCoord &XY, QString &Token, PSynHighlighterAttribute &Attri)
{
SynHighlighterTokenType TmpType;
int TmpKind, TmpStart;
return GetHighlighterAttriAtRowColEx(XY, Token, TmpType, TmpKind,TmpStart, Attri);
return getHighlighterAttriAtRowColEx(XY, Token, TmpType, TmpKind,TmpStart, Attri);
}
bool SynEdit::GetHighlighterAttriAtRowCol(const BufferCoord &XY, QString &Token, bool &tokenFinished, SynHighlighterTokenType &TokenType, PSynHighlighterAttribute &Attri)
bool SynEdit::getHighlighterAttriAtRowCol(const BufferCoord &XY, QString &Token, bool &tokenFinished, SynHighlighterTokenType &TokenType, PSynHighlighterAttribute &Attri)
{
int PosX, PosY, endPos, Start;
QString Line;
@ -374,7 +374,7 @@ bool SynEdit::GetHighlighterAttriAtRowCol(const BufferCoord &XY, QString &Token,
return false;
}
bool SynEdit::GetHighlighterAttriAtRowColEx(const BufferCoord &XY, QString &Token, SynHighlighterTokenType &TokenType, SynTokenKind &TokenKind, int &Start, PSynHighlighterAttribute &Attri)
bool SynEdit::getHighlighterAttriAtRowColEx(const BufferCoord &XY, QString &Token, SynHighlighterTokenType &TokenType, SynTokenKind &TokenKind, int &Start, PSynHighlighterAttribute &Attri)
{
int PosX, PosY, endPos;
QString Line;
@ -468,7 +468,7 @@ BufferCoord SynEdit::getMatchingBracketEx(BufferCoord APoint)
p.Char = PosX;
p.Line = PosY;
if ((Test == BracketInc) || (Test == BracketDec)) {
if (GetHighlighterAttriAtRowCol(p, vDummy, attr))
if (getHighlighterAttriAtRowCol(p, vDummy, attr))
isCommentOrStringOrChar =
(attr == mHighlighter->stringAttribute()) ||
(attr == mHighlighter->commentAttribute()) ||
@ -503,7 +503,7 @@ BufferCoord SynEdit::getMatchingBracketEx(BufferCoord APoint)
p.Char = PosX;
p.Line = PosY;
if ((Test == BracketInc) || (Test == BracketDec)) {
if (GetHighlighterAttriAtRowCol(p, vDummy, attr))
if (getHighlighterAttriAtRowCol(p, vDummy, attr))
isCommentOrStringOrChar =
(attr == mHighlighter->stringAttribute()) ||
(attr == mHighlighter->commentAttribute()) ||
@ -537,21 +537,21 @@ BufferCoord SynEdit::getMatchingBracketEx(BufferCoord APoint)
return BufferCoord{0,0};
}
bool SynEdit::GetPositionOfMouse(BufferCoord &aPos)
bool SynEdit::getPositionOfMouse(BufferCoord &aPos)
{
QPoint point = QCursor::pos();
point = mapFromGlobal(point);
return PointToCharLine(point,aPos);
return pointToCharLine(point,aPos);
}
bool SynEdit::GetLineOfMouse(int &line)
bool SynEdit::getLineOfMouse(int &line)
{
QPoint point = QCursor::pos();
point = mapFromGlobal(point);
return PointToLine(point,line);
return pointToLine(point,line);
}
bool SynEdit::PointToCharLine(const QPoint &point, BufferCoord &coord)
bool SynEdit::pointToCharLine(const QPoint &point, BufferCoord &coord)
{
// Make sure it fits within the SynEdit bounds (and on the gutter)
if ((point.x() < gutterWidth() + clientLeft())
@ -565,7 +565,7 @@ bool SynEdit::PointToCharLine(const QPoint &point, BufferCoord &coord)
return true;
}
bool SynEdit::PointToLine(const QPoint &point, int &line)
bool SynEdit::pointToLine(const QPoint &point, int &line)
{
// Make sure it fits within the SynEdit bounds
if ((point.x() < clientLeft())
@ -661,7 +661,7 @@ DisplayCoord SynEdit::pixelsToRowColumn(int aX, int aY) const
};
}
QPoint SynEdit::RowColumnToPixels(const DisplayCoord &coord) const
QPoint SynEdit::rowColumnToPixels(const DisplayCoord &coord) const
{
QPoint result;
result.setX((coord.Column - 1) * mCharWidth + textOffset());
@ -705,6 +705,84 @@ BufferCoord SynEdit::displayToBufferPos(const DisplayCoord &p) const
return Result;
}
NormalizedBufferCoord SynEdit::moveBufferPos(const BufferCoord &p, int delta) const
{
return normalizeBufferPos(p.Char+delta,p.Line);
}
NormalizedBufferCoord SynEdit::moveBufferPos(const NormalizedBufferCoord &p, int delta) const
{
return normalizeBufferPos(p.Char+delta,p.Line);
}
NormalizedBufferCoord SynEdit::normalizeBufferPos(const BufferCoord &p) const
{
return normalizeBufferPos(p.Char,p.Line);
}
NormalizedBufferCoord SynEdit::normalizeBufferPos(int aChar, int aLine) const
{
if (mLines->count()==0) {
return NormalizedBufferCoord{0,0};
}
int line = aLine-1;
int lineCount = mLines->count();
if (line>=lineCount) {
return NormalizedBufferCoord{
mLines->getString(lineCount-1).length()+1
,lineCount};
}
if (line<0) {
return NormalizedBufferCoord{0,0};
}
if (aChar<1) {
while (true) {
line--;
if (line < 0) {
return NormalizedBufferCoord{0,0};
}
QString s =mLines->getString(line);
int len = s.length();
aChar+=len+1;
if (aChar>=1) {
return NormalizedBufferCoord{aChar,line+1};
}
}
}
while (true) {
QString s =mLines->getString(line);
int len = s.length();
if (aChar<=len+1 ) {
return NormalizedBufferCoord{aChar,line+1};
}
if (line == lineCount-1) {
return NormalizedBufferCoord{1,lineCount+1};
}
aChar -= len+1;
line++;
}
}
QChar SynEdit::charAtNormalizedBufferPos(const NormalizedBufferCoord &p) const
{
if (p.Line < 1) {
return QChar('\0');
}
if (p.Line > mLines->count()) {
return QChar('\0');
}
if (p.Char == 0) {
return QChar('\n');
}
QString s = mLines->getString(p.Line-1);
if (p.Char > p.Line+1) {
return QChar('\n');
}
return s[p.Char-1];
}
int SynEdit::leftSpaces(const QString &line) const
{
int result = 0;
@ -971,12 +1049,12 @@ bool SynEdit::selAvail() const
((mBlockBegin.Line != mBlockEnd.Line) && (mActiveSelectionMode != SynSelectionMode::smColumn));
}
QString SynEdit::WordAtCursor()
QString SynEdit::wordAtCursor()
{
return WordAtRowCol(caretXY());
return wordAtRowCol(caretXY());
}
QString SynEdit::WordAtRowCol(const BufferCoord &XY)
QString SynEdit::wordAtRowCol(const BufferCoord &XY)
{
if ((XY.Line >= 1) && (XY.Line <= mLines->count())) {
QString line = mLines->getString(XY.Line - 1);
@ -1056,7 +1134,7 @@ void SynEdit::clearUndo()
mRedoList->Clear();
}
BufferCoord SynEdit::GetPreviousLeftBracket(int x, int y)
BufferCoord SynEdit::getPreviousLeftBracket(int x, int y)
{
QChar Test;
QString vDummy;
@ -1088,7 +1166,7 @@ BufferCoord SynEdit::GetPreviousLeftBracket(int x, int y)
p.Char = PosX;
p.Line = PosY;
if (Test=='{' || Test == '}') {
if (GetHighlighterAttriAtRowCol(p, vDummy, attr)) {
if (getHighlighterAttriAtRowCol(p, vDummy, attr)) {
isCommentOrStringOrChar =
(attr == mHighlighter->stringAttribute()) ||
(attr == mHighlighter->commentAttribute()) ||
@ -1143,7 +1221,7 @@ void SynEdit::hideCaret()
}
}
bool SynEdit::IsPointInSelection(const BufferCoord &Value) const
bool SynEdit::isPointInSelection(const BufferCoord &Value) const
{
BufferCoord ptBegin = blockBegin();
BufferCoord ptEnd = blockEnd();
@ -1165,12 +1243,12 @@ bool SynEdit::IsPointInSelection(const BufferCoord &Value) const
return false;
}
BufferCoord SynEdit::NextWordPos()
BufferCoord SynEdit::nextWordPos()
{
return NextWordPosEx(caretXY());
return nextWordPosEx(caretXY());
}
BufferCoord SynEdit::NextWordPosEx(const BufferCoord &XY)
BufferCoord SynEdit::nextWordPosEx(const BufferCoord &XY)
{
int CX = XY.Char;
int CY = XY.Line;
@ -1211,12 +1289,12 @@ BufferCoord SynEdit::NextWordPosEx(const BufferCoord &XY)
return BufferCoord{CX,CY};
}
BufferCoord SynEdit::WordStart()
BufferCoord SynEdit::wordStart()
{
return WordStartEx(caretXY());
return wordStartEx(caretXY());
}
BufferCoord SynEdit::WordStartEx(const BufferCoord &XY)
BufferCoord SynEdit::wordStartEx(const BufferCoord &XY)
{
int CX = XY.Char;
int CY = XY.Line;
@ -1232,12 +1310,12 @@ BufferCoord SynEdit::WordStartEx(const BufferCoord &XY)
return BufferCoord{CX,CY};
}
BufferCoord SynEdit::WordEnd()
BufferCoord SynEdit::wordEnd()
{
return WordEndEx(caretXY());
return wordEndEx(caretXY());
}
BufferCoord SynEdit::WordEndEx(const BufferCoord &XY)
BufferCoord SynEdit::wordEndEx(const BufferCoord &XY)
{
int CX = XY.Char;
int CY = XY.Line;
@ -1254,12 +1332,12 @@ BufferCoord SynEdit::WordEndEx(const BufferCoord &XY)
return BufferCoord{CX,CY};
}
BufferCoord SynEdit::PrevWordPos()
BufferCoord SynEdit::prevWordPos()
{
return PrevWordPosEx(caretXY());
return prevWordPosEx(caretXY());
}
BufferCoord SynEdit::PrevWordPosEx(const BufferCoord &XY)
BufferCoord SynEdit::prevWordPosEx(const BufferCoord &XY)
{
int CX = XY.Char;
int CY = XY.Line;
@ -1295,12 +1373,12 @@ BufferCoord SynEdit::PrevWordPosEx(const BufferCoord &XY)
return BufferCoord{CX,CY};
}
void SynEdit::SetSelWord()
void SynEdit::setSelWord()
{
SetWordBlock(caretXY());
setWordBlock(caretXY());
}
void SynEdit::SetWordBlock(BufferCoord Value)
void SynEdit::setWordBlock(BufferCoord Value)
{
// if (mOptions.testFlag(eoScrollPastEol))
// Value.Char =
@ -1314,8 +1392,8 @@ void SynEdit::SetWordBlock(BufferCoord Value)
return;
}
BufferCoord v_WordStart = WordStartEx(Value);
BufferCoord v_WordEnd = WordEndEx(Value);
BufferCoord v_WordStart = wordStartEx(Value);
BufferCoord v_WordEnd = wordEndEx(Value);
if ((v_WordStart.Line == v_WordEnd.Line) && (v_WordStart.Char < v_WordEnd.Char))
setCaretAndSelection(v_WordEnd, v_WordStart, v_WordEnd);
}
@ -1488,7 +1566,7 @@ void SynEdit::doDeleteLastChar()
});
// try
if (selAvail()) {
SetSelectedTextEmpty();
setSelectedTextEmpty();
return;
}
QString Temp = lineText();
@ -1575,7 +1653,7 @@ void SynEdit::doDeleteLastChar()
helper = Temp.mid(newCaretX - 1, mCaretX - newCaretX);
Temp.remove(newCaretX-1,mCaretX - newCaretX);
// }
ProperSetLine(mCaretY - 1, Temp);
properSetLine(mCaretY - 1, Temp);
setCaretX(newCaretX);
updateLastCaretX();
mStateFlags.setFlag(SynStateFlag::sfCaretChanged);
@ -1588,7 +1666,7 @@ void SynEdit::doDeleteLastChar()
// vTabTrim := CharIndex2CaretPos(CaretX, TabWidth, Temp);
helper = Temp[mCaretX-1];
Temp.remove(mCaretX-1,1);
ProperSetLine(mCaretY - 1, Temp);
properSetLine(mCaretY - 1, Temp);
}
}
if ((Caret.Char != mCaretX) || (Caret.Line != mCaretY)) {
@ -1604,7 +1682,7 @@ void SynEdit::doDeleteCurrentChar()
if (!mReadOnly) {
doOnPaintTransient(SynTransientType::ttBefore);
if (selAvail())
SetSelectedTextEmpty();
setSelectedTextEmpty();
else {
// Call UpdateLastCaretX. Even though the caret doesn't move, the
// current caret position should "stick" whenever text is modified.
@ -1617,11 +1695,11 @@ void SynEdit::doDeleteCurrentChar()
Caret.Char = mCaretX + 1;
Caret.Line = mCaretY;
Temp.remove(mCaretX-1, 1);
ProperSetLine(mCaretY - 1, Temp);
properSetLine(mCaretY - 1, Temp);
} else {
// join line with the line after
if (mCaretY < mLines->count()) {
ProperSetLine(mCaretY - 1, Temp + mLines->getString(mCaretY));
properSetLine(mCaretY - 1, Temp + mLines->getString(mCaretY));
Caret.Char = 1;
Caret.Line = mCaretY + 1;
helper = lineBreak();
@ -1646,32 +1724,32 @@ void SynEdit::doDeleteWord()
if (mReadOnly)
return;
BufferCoord start = WordStart();
BufferCoord end = WordEnd();
DeleteFromTo(start,end);
BufferCoord start = wordStart();
BufferCoord end = wordEnd();
deleteFromTo(start,end);
}
void SynEdit::doDeleteToEOL()
{
if (mReadOnly)
return;
DeleteFromTo(caretXY(),BufferCoord{lineText().length()+1,mCaretY});
deleteFromTo(caretXY(),BufferCoord{lineText().length()+1,mCaretY});
}
void SynEdit::doDeleteLastWord()
{
if (mReadOnly)
return;
BufferCoord start = PrevWordPos();
BufferCoord end = WordEndEx(start);
DeleteFromTo(start,end);
BufferCoord start = prevWordPos();
BufferCoord end = wordEndEx(start);
deleteFromTo(start,end);
}
void SynEdit::doDeleteFromBOL()
{
if (mReadOnly)
return;
DeleteFromTo(BufferCoord{1,mCaretY},caretXY());
deleteFromTo(BufferCoord{1,mCaretY},caretXY());
}
void SynEdit::doDeleteLine()
@ -1833,7 +1911,7 @@ void SynEdit::insertLine(bool moveCaret)
helper = selText();
BufferCoord iUndoBegin = mBlockBegin;
BufferCoord iUndoEnd = mBlockEnd;
SetSelTextPrimitive("");
setSelTextPrimitive("");
mUndoList->AddChange(SynChangeReason::crDelete, iUndoBegin, iUndoEnd, helper,
mActiveSelectionMode);
}
@ -1863,11 +1941,11 @@ void SynEdit::insertLine(bool moveCaret)
int indentSpacesOfLeftLineText = leftSpaces(leftLineText);
int indentSpaces = indentSpacesOfLeftLineText;
bool notInComment=true;
ProperSetLine(mCaretY-1,leftLineText);
properSetLine(mCaretY-1,leftLineText);
if (mOptions.testFlag(eoAutoIndent)) {
rightLineText=TrimLeft(rightLineText);
}
if (GetHighlighterAttriAtRowCol(BufferCoord{leftLineText.length(), mCaretY},
if (getHighlighterAttriAtRowCol(BufferCoord{leftLineText.length(), mCaretY},
leftLineText, Attr)) {
notInComment = (Attr != mHighlighter->commentAttribute());
}
@ -1917,7 +1995,7 @@ void SynEdit::insertLine(bool moveCaret)
QString Temp4=GetLeftSpacing(SpaceCount2,true);
if (SpaceCount2 > 0) {
}
if (mOptions.testFlag(eoAddIndent) && GetHighlighterAttriAtRowCol(BufferCoord{Temp.length(), mCaretY},
if (mOptions.testFlag(eoAddIndent) && getHighlighterAttriAtRowCol(BufferCoord{Temp.length(), mCaretY},
Temp, Attr)) { // only add indent to source files
if (Attr != mHighlighter->commentAttribute()) { // and outside of comments
Temp = Temp.trimmed();
@ -1962,7 +2040,7 @@ void SynEdit::insertLine(bool moveCaret)
void SynEdit::doTabKey()
{
// Provide Visual Studio like block indenting
if (mOptions.testFlag(eoTabIndent) && CanDoBlockIndent()) {
if (mOptions.testFlag(eoTabIndent) && canDoBlockIndent()) {
doBlockIndent();
return;
}
@ -1978,7 +2056,7 @@ void SynEdit::doTabKey()
mBlockEnd,
selText(),
mActiveSelectionMode);
SetSelTextPrimitive("");
setSelTextPrimitive("");
}
BufferCoord StartOfBlock = caretXY();
QString Spaces;
@ -1993,7 +2071,7 @@ void SynEdit::doTabKey()
NewCaretX = mCaretX + 1;
}
SetSelTextPrimitive(Spaces);
setSelTextPrimitive(Spaces);
// Undo is already handled in SetSelText when SelectionMode is Column
if (mActiveSelectionMode != SynSelectionMode::smColumn) {
mUndoList->AddChange(SynChangeReason::crInsert, StartOfBlock,
@ -2010,7 +2088,7 @@ void SynEdit::doTabKey()
void SynEdit::doShiftTabKey()
{
// Provide Visual Studio like block indenting
if (mOptions.testFlag(eoTabIndent) && CanDoBlockIndent()) {
if (mOptions.testFlag(eoTabIndent) && canDoBlockIndent()) {
doBlockUnindent();
return;
}
@ -2050,7 +2128,7 @@ void SynEdit::doShiftTabKey()
setBlockEnd(caretXY());
QString OldSelText = selText();
SetSelTextPrimitive("");
setSelTextPrimitive("");
mUndoList->AddChange(
SynChangeReason::crSilentDelete, BufferCoord{NewX, mCaretY},
@ -2060,7 +2138,7 @@ void SynEdit::doShiftTabKey()
}
bool SynEdit::CanDoBlockIndent()
bool SynEdit::canDoBlockIndent()
{
BufferCoord BB;
BufferCoord BE;
@ -2304,7 +2382,7 @@ void SynEdit::doAddChar(QChar AChar)
QString temp = mLines->getString(oldCaretY-1).mid(0,oldCaretX-1);
// and the first nonblank char is this new }
if (temp.trimmed().isEmpty()) {
BufferCoord MatchBracketPos = GetPreviousLeftBracket(oldCaretX, oldCaretY);
BufferCoord MatchBracketPos = getPreviousLeftBracket(oldCaretX, oldCaretY);
if (MatchBracketPos.Line > 0) {
int i = 0;
QString matchline = mLines->getString(MatchBracketPos.Line-1);
@ -2418,7 +2496,7 @@ void SynEdit::doPasteFromClipboard()
BufferCoord vEndOfBlock = blockEnd();
mBlockBegin = vStartOfBlock;
mBlockEnd = vEndOfBlock;
SetSelTextPrimitive(clipboard->text());
setSelTextPrimitive(clipboard->text());
if (mActiveSelectionMode != SynSelectionMode::smColumn) {
mUndoList->AddChange(
SynChangeReason::crPaste,
@ -2583,7 +2661,7 @@ void SynEdit::insertBlock(const BufferCoord &BB, const BufferCoord &BE, const QS
{
setCaretAndSelection(BB, BB, BE);
setActiveSelectionMode(SynSelectionMode::smColumn);
SetSelTextPrimitiveEx(SynSelectionMode::smColumn, ChangeStr, AddToUndoList);
setSelTextPrimitiveEx(SynSelectionMode::smColumn, ChangeStr, AddToUndoList);
setStatusChanged(SynStatusChange::scSelection);
}
@ -2655,7 +2733,7 @@ void SynEdit::updateCaret()
{
mStateFlags.setFlag(SynStateFlag::sfCaretChanged,false);
DisplayCoord coord = displayXY();
QPoint caretPos = RowColumnToPixels(coord);
QPoint caretPos = rowColumnToPixels(coord);
int caretWidth=mCharWidth;
//qDebug()<<"caret"<<mCaretX<<mCaretY;
if (mCaretY <= mLines->count() && mCaretX <= mLines->getString(mCaretY-1).length()) {
@ -3282,7 +3360,7 @@ void SynEdit::onSizeOrFontChanged(bool bFont)
void SynEdit::onChanged()
{
emit Changed();
emit changed();
}
void SynEdit::onScrolled(int)
@ -3610,7 +3688,7 @@ void SynEdit::doUndoItem()
Item->changeStartPos(),
Item->changeEndPos());
QString TmpStr = selText();
SetSelTextPrimitiveEx(
setSelTextPrimitiveEx(
Item->changeSelMode(),
Item->changeStr(),
false);
@ -3648,7 +3726,7 @@ void SynEdit::doUndoItem()
mLines->add("");
}
setCaretXY(TmpPos);
SetSelTextPrimitiveEx(
setSelTextPrimitiveEx(
Item->changeSelMode(),
Item->changeStr(),
false);
@ -3683,7 +3761,7 @@ void SynEdit::doUndoItem()
QString TmpStr = mLines->getString(mCaretY - 1);
if ( (mCaretX > TmpStr.length() + 1) && (leftSpaces(Item->changeStr()) == 0))
TmpStr = TmpStr + QString(mCaretX - 1 - TmpStr.length(), ' ');
ProperSetLine(mCaretY - 1, TmpStr + Item->changeStr());
properSetLine(mCaretY - 1, TmpStr + Item->changeStr());
mLines->deleteAt(mCaretY);
doLinesDeleted(mCaretY, 1);
}
@ -3852,7 +3930,7 @@ void SynEdit::doRedoItem()
Item->changeStartPos(),
Item->changeStartPos(),
Item->changeStartPos());
SetSelTextPrimitiveEx(Item->changeSelMode(), Item->changeStr(), false);
setSelTextPrimitiveEx(Item->changeSelMode(), Item->changeStr(), false);
internalSetCaretXY(Item->changeEndPos());
mUndoList->AddChange(Item->changeReason(),
Item->changeStartPos(),
@ -3870,7 +3948,7 @@ void SynEdit::doRedoItem()
setCaretAndSelection(Item->changeStartPos(), Item->changeStartPos(),
Item->changeEndPos());
QString TempString = selText();
SetSelTextPrimitiveEx(Item->changeSelMode(),
setSelTextPrimitiveEx(Item->changeSelMode(),
Item->changeStr(),false);
mUndoList->AddChange(Item->changeReason(), Item->changeStartPos(),
Item->changeEndPos(), TempString, Item->changeSelMode());
@ -3882,7 +3960,7 @@ void SynEdit::doRedoItem()
setCaretAndSelection(Item->changeStartPos(), Item->changeStartPos(),
Item->changeEndPos());
QString TempString = selText();
SetSelTextPrimitiveEx(Item->changeSelMode(), Item->changeStr(),false);
setSelTextPrimitiveEx(Item->changeSelMode(), Item->changeStr(),false);
mUndoList->AddChange(Item->changeReason(), Item->changeStartPos(),
Item->changeEndPos(),TempString,
Item->changeSelMode());
@ -3892,7 +3970,7 @@ void SynEdit::doRedoItem()
case SynChangeReason::crLineBreak: {
BufferCoord CaretPt = Item->changeStartPos();
setCaretAndSelection(CaretPt, CaretPt, CaretPt);
CommandProcessor(SynEditorCommand::ecLineBreak);
commandProcessor(SynEditorCommand::ecLineBreak);
break;
}
case SynChangeReason::crIndent:
@ -4071,7 +4149,7 @@ SynEditCodeFolding &SynEdit::codeFolding()
return mCodeFolding;
}
QString SynEdit::lineText()
QString SynEdit::lineText() const
{
if (mCaretY >= 1 && mCaretY <= mLines->count())
return mLines->getString(mCaretY - 1);
@ -4118,7 +4196,7 @@ bool SynEdit::empty()
return mLines->empty();
}
void SynEdit::CommandProcessor(SynEditorCommand Command, QChar AChar, void *pData)
void SynEdit::commandProcessor(SynEditorCommand Command, QChar AChar, void *pData)
{
// first the program event handler gets a chance to process the command
onProcessCommand(Command, AChar, pData);
@ -4127,7 +4205,7 @@ void SynEdit::CommandProcessor(SynEditorCommand Command, QChar AChar, void *pDat
onCommandProcessed(Command, AChar, pData);
}
void SynEdit::MoveCaretHorz(int DX, bool isSelection)
void SynEdit::moveCaretHorz(int DX, bool isSelection)
{
BufferCoord ptO = caretXY();
BufferCoord ptDst = ptO;
@ -4151,10 +4229,10 @@ void SynEdit::MoveCaretHorz(int DX, bool isSelection)
ptDst.Char = std::min(ptDst.Char, nLineLen + 1);
}
// set caret and block begin / end
MoveCaretAndSelection(mBlockBegin, ptDst, isSelection);
moveCaretAndSelection(mBlockBegin, ptDst, isSelection);
}
void SynEdit::MoveCaretVert(int DY, bool isSelection)
void SynEdit::moveCaretVert(int DY, bool isSelection)
{
DisplayCoord ptO = displayXY();
DisplayCoord ptDst = ptO;
@ -4178,7 +4256,7 @@ void SynEdit::MoveCaretVert(int DY, bool isSelection)
// set caret and block begin / end
incPaintLock();
MoveCaretAndSelection(mBlockBegin, vDstLineChar, isSelection);
moveCaretAndSelection(mBlockBegin, vDstLineChar, isSelection);
decPaintLock();
// Set fMBCSStepAside and restore fLastCaretX after moving caret, since
@ -4188,7 +4266,7 @@ void SynEdit::MoveCaretVert(int DY, bool isSelection)
mLastCaretColumn = SaveLastCaretX;
}
void SynEdit::MoveCaretAndSelection(const BufferCoord &ptBefore, const BufferCoord &ptAfter, bool isSelection)
void SynEdit::moveCaretAndSelection(const BufferCoord &ptBefore, const BufferCoord &ptAfter, bool isSelection)
{
if (mOptions.testFlag(SynEditorOption::eoGroupUndo) && mUndoList->CanUndo())
mUndoList->AddGroupBreak();
@ -4204,7 +4282,7 @@ void SynEdit::MoveCaretAndSelection(const BufferCoord &ptBefore, const BufferCoo
decPaintLock();
}
void SynEdit::MoveCaretToLineStart(bool isSelection)
void SynEdit::moveCaretToLineStart(bool isSelection)
{
int newX;
// home key enhancement
@ -4225,10 +4303,10 @@ void SynEdit::MoveCaretToLineStart(bool isSelection)
newX = 1;
} else
newX = 1;
MoveCaretAndSelection(caretXY(), BufferCoord{newX, mCaretY}, isSelection);
moveCaretAndSelection(caretXY(), BufferCoord{newX, mCaretY}, isSelection);
}
void SynEdit::MoveCaretToLineEnd(bool isSelection)
void SynEdit::moveCaretToLineEnd(bool isSelection)
{
int vNewX;
if (mOptions.testFlag(SynEditorOption::eoEnhanceEndKey)) {
@ -4246,15 +4324,15 @@ void SynEdit::MoveCaretToLineEnd(bool isSelection)
} else
vNewX = lineText().length() + 1;
MoveCaretAndSelection(caretXY(), BufferCoord{vNewX, mCaretY}, isSelection);
moveCaretAndSelection(caretXY(), BufferCoord{vNewX, mCaretY}, isSelection);
}
void SynEdit::SetSelectedTextEmpty()
void SynEdit::setSelectedTextEmpty()
{
BufferCoord vUndoBegin = mBlockBegin;
BufferCoord vUndoEnd = mBlockEnd;
QString vSelText = selText();
SetSelTextPrimitive("");
setSelTextPrimitive("");
if ((vUndoBegin.Line < vUndoEnd.Line) || (
(vUndoBegin.Line == vUndoEnd.Line) && (vUndoBegin.Char < vUndoEnd.Char))) {
mUndoList->AddChange(SynChangeReason::crDelete, vUndoBegin, vUndoEnd, vSelText,
@ -4265,12 +4343,12 @@ void SynEdit::SetSelectedTextEmpty()
}
}
void SynEdit::SetSelTextPrimitive(const QString &aValue)
void SynEdit::setSelTextPrimitive(const QString &aValue)
{
SetSelTextPrimitiveEx(mActiveSelectionMode, aValue, true);
setSelTextPrimitiveEx(mActiveSelectionMode, aValue, true);
}
void SynEdit::SetSelTextPrimitiveEx(SynSelectionMode PasteMode, const QString &Value, bool AddToUndoList)
void SynEdit::setSelTextPrimitiveEx(SynSelectionMode PasteMode, const QString &Value, bool AddToUndoList)
{
incPaintLock();
mLines->beginUpdate();
@ -4281,11 +4359,11 @@ void SynEdit::SetSelTextPrimitiveEx(SynSelectionMode PasteMode, const QString &V
BufferCoord BB = blockBegin();
BufferCoord BE = blockEnd();
if (selAvail()) {
DeleteSelection(BB,BE);
deleteSelection(BB,BE);
internalSetCaretXY(BB);
}
if (!Value.isEmpty()) {
InsertText(Value,PasteMode,AddToUndoList);
insertText(Value,PasteMode,AddToUndoList);
}
if (mCaretY < 1)
internalSetCaretY(1);
@ -4307,7 +4385,7 @@ void SynEdit::setSelText(const QString &Value)
BufferCoord EndOfBlock = blockEnd();
mBlockBegin = StartOfBlock;
mBlockEnd = EndOfBlock;
SetSelTextPrimitive(Value);
setSelTextPrimitive(Value);
if (!Value.isEmpty() && (mActiveSelectionMode !=SynSelectionMode::smColumn))
mUndoList->AddChange(
SynChangeReason::crInsert,
@ -4511,7 +4589,7 @@ void SynEdit::doLinesInserted(int firstLine, int count)
// end;
}
void SynEdit::ProperSetLine(int ALine, const QString &ALineText)
void SynEdit::properSetLine(int ALine, const QString &ALineText)
{
if (mOptions.testFlag(eoTrimTrailingSpaces))
mLines->putString(ALine,TrimRight(ALineText));
@ -4519,7 +4597,7 @@ void SynEdit::ProperSetLine(int ALine, const QString &ALineText)
mLines->putString(ALine,ALineText);
}
void SynEdit::DeleteSelection(const BufferCoord &BB, const BufferCoord &BE)
void SynEdit::deleteSelection(const BufferCoord &BB, const BufferCoord &BE)
{
bool UpdateMarks = false;
int MarkOffset = 0;
@ -4533,7 +4611,7 @@ void SynEdit::DeleteSelection(const BufferCoord &BB, const BufferCoord &BE)
+ mLines->getString(BE.Line - 1).mid(BE.Char-1);
// Delete all lines in the selection range.
mLines->deleteLines(BB.Line, BE.Line - BB.Line);
ProperSetLine(BB.Line-1,TempString);
properSetLine(BB.Line-1,TempString);
UpdateMarks = true;
internalSetCaretXY(BB);
}
@ -4552,7 +4630,7 @@ void SynEdit::DeleteSelection(const BufferCoord &BB, const BufferCoord &BE)
int r = columnToChar(i,ColTo-1);
QString s = mLines->getString(i);
s.remove(l-1,r-l);
ProperSetLine(i,s);
properSetLine(i,s);
}
// Lines never get deleted completely, so keep caret at end.
internalSetCaretXY(BB);
@ -4578,7 +4656,7 @@ void SynEdit::DeleteSelection(const BufferCoord &BB, const BufferCoord &BE)
doLinesDeleted(BB.Line, BE.Line - BB.Line + MarkOffset);
}
void SynEdit::InsertText(const QString &Value, SynSelectionMode PasteMode,bool AddToUndoList)
void SynEdit::insertText(const QString &Value, SynSelectionMode PasteMode,bool AddToUndoList)
{
if (Value.isEmpty())
return;
@ -4588,13 +4666,13 @@ void SynEdit::InsertText(const QString &Value, SynSelectionMode PasteMode,bool A
int InsertedLines = 0;
switch(PasteMode){
case SynSelectionMode::smNormal:
InsertedLines = InsertTextByNormalMode(Value);
InsertedLines = insertTextByNormalMode(Value);
break;
case SynSelectionMode::smColumn:
InsertedLines = InsertTextByColumnMode(Value,AddToUndoList);
InsertedLines = insertTextByColumnMode(Value,AddToUndoList);
break;
case SynSelectionMode::smLine:
InsertedLines = InsertTextByLineMode(Value);
InsertedLines = insertTextByLineMode(Value);
break;
}
// We delete selected based on the current selection mode, but paste
@ -4608,7 +4686,7 @@ void SynEdit::InsertText(const QString &Value, SynSelectionMode PasteMode,bool A
ensureCursorPosVisible();
}
int SynEdit::InsertTextByNormalMode(const QString &Value)
int SynEdit::insertTextByNormalMode(const QString &Value)
{
QString sLeftSide;
QString sRightSide;
@ -4636,11 +4714,11 @@ int SynEdit::InsertTextByNormalMode(const QString &Value)
P = GetEOL(Value,Start);
if (P<Value.length()) {
Str = sLeftSide + Value.mid(0, P - Start);
ProperSetLine(mCaretY - 1, Str);
properSetLine(mCaretY - 1, Str);
mLines->InsertLines(mCaretY, CountLines(Value,P));
} else {
Str = sLeftSide + Value + sRightSide;
ProperSetLine(mCaretY - 1, Str);
properSetLine(mCaretY - 1, Str);
}
// step2: insert remaining lines of Value
while (P < Value.length()) {
@ -4663,7 +4741,7 @@ int SynEdit::InsertTextByNormalMode(const QString &Value)
Str += sRightSide;
}
Str = GetLeftSpacing(SpaceCount, true)+Str;
ProperSetLine(mCaretY - 1, Str);
properSetLine(mCaretY - 1, Str);
Result++;
}
bChangeScroll = !mOptions.testFlag(eoScrollPastEol);
@ -4679,7 +4757,7 @@ int SynEdit::InsertTextByNormalMode(const QString &Value)
return Result;
}
int SynEdit::InsertTextByColumnMode(const QString &Value, bool AddToUndoList)
int SynEdit::insertTextByColumnMode(const QString &Value, bool AddToUndoList)
{
QString Str;
QString TempString;
@ -4719,7 +4797,7 @@ int SynEdit::InsertTextByColumnMode(const QString &Value, bool AddToUndoList)
TempString.insert(insertPos-1,Str);
}
}
ProperSetLine(mCaretY - 1, TempString);
properSetLine(mCaretY - 1, TempString);
// Add undo change here from PasteFromClipboard
if (AddToUndoList) {
mUndoList->AddChange(SynChangeReason::crPaste, BufferCoord{mCaretX, mCaretY},
@ -4740,7 +4818,7 @@ int SynEdit::InsertTextByColumnMode(const QString &Value, bool AddToUndoList)
return Result;
}
int SynEdit::InsertTextByLineMode(const QString &Value)
int SynEdit::insertTextByLineMode(const QString &Value)
{
int Start;
int P;
@ -4760,7 +4838,7 @@ int SynEdit::InsertTextByLineMode(const QString &Value)
mLines->Insert(mCaretY - 1, "");
Result++;
}
ProperSetLine(mCaretY - 1, Str);
properSetLine(mCaretY - 1, Str);
mCaretY++;
mStatusChanges.setFlag(SynStatusChange::scCaretY);
if (P<Value.length() && Value[P]=='\r')
@ -4772,7 +4850,7 @@ int SynEdit::InsertTextByLineMode(const QString &Value)
return Result;
}
void SynEdit::DeleteFromTo(const BufferCoord &start, const BufferCoord &end)
void SynEdit::deleteFromTo(const BufferCoord &start, const BufferCoord &end)
{
if (mReadOnly)
return;
@ -4782,7 +4860,7 @@ void SynEdit::DeleteFromTo(const BufferCoord &start, const BufferCoord &end)
setBlockEnd(end);
setActiveSelectionMode(SynSelectionMode::smNormal);
QString helper = selText();
SetSelTextPrimitive("");
setSelTextPrimitive("");
mUndoList->AddChange(SynChangeReason::crSilentDeleteAfterCursor, start, end,
helper, SynSelectionMode::smNormal);
internalSetCaretXY(start);
@ -4841,36 +4919,36 @@ void SynEdit::ExecuteCommand(SynEditorCommand Command, QChar AChar, void *pData)
//horizontal caret movement or selection
case SynEditorCommand::ecLeft:
case SynEditorCommand::ecSelLeft:
MoveCaretHorz(-1, Command == SynEditorCommand::ecSelLeft);
moveCaretHorz(-1, Command == SynEditorCommand::ecSelLeft);
break;
case SynEditorCommand::ecRight:
case SynEditorCommand::ecSelRight:
MoveCaretHorz(1, Command == SynEditorCommand::ecSelRight);
moveCaretHorz(1, Command == SynEditorCommand::ecSelRight);
break;
case SynEditorCommand::ecPageLeft:
case SynEditorCommand::ecSelPageLeft:
MoveCaretHorz(-mCharsInWindow, Command == SynEditorCommand::ecSelPageLeft);
moveCaretHorz(-mCharsInWindow, Command == SynEditorCommand::ecSelPageLeft);
break;
case SynEditorCommand::ecPageRight:
case SynEditorCommand::ecSelPageRight:
MoveCaretHorz(mCharsInWindow, Command == SynEditorCommand::ecSelPageRight);
moveCaretHorz(mCharsInWindow, Command == SynEditorCommand::ecSelPageRight);
break;
case SynEditorCommand::ecLineStart:
case SynEditorCommand::ecSelLineStart:
MoveCaretToLineStart(Command == SynEditorCommand::ecSelLineStart);
moveCaretToLineStart(Command == SynEditorCommand::ecSelLineStart);
break;
case SynEditorCommand::ecLineEnd:
case SynEditorCommand::ecSelLineEnd:
MoveCaretToLineEnd(Command == SynEditorCommand::ecSelLineEnd);
moveCaretToLineEnd(Command == SynEditorCommand::ecSelLineEnd);
break;
// vertical caret movement or selection
case SynEditorCommand::ecUp:
case SynEditorCommand::ecSelUp:
MoveCaretVert(-1, Command == SynEditorCommand::ecSelUp);
moveCaretVert(-1, Command == SynEditorCommand::ecSelUp);
break;
case SynEditorCommand::ecDown:
case SynEditorCommand::ecSelDown:
MoveCaretVert(1, Command == SynEditorCommand::ecSelDown);
moveCaretVert(1, Command == SynEditorCommand::ecSelDown);
break;
case SynEditorCommand::ecPageUp:
case SynEditorCommand::ecSelPageUp:
@ -4888,49 +4966,49 @@ void SynEdit::ExecuteCommand(SynEditorCommand Command, QChar AChar, void *pData)
if (Command == SynEditorCommand::ecPageUp || Command == SynEditorCommand::ecSelPageUp) {
counter = -counter;
}
MoveCaretVert(counter, Command == SynEditorCommand::ecSelPageUp || Command == SynEditorCommand::ecSelPageDown);
moveCaretVert(counter, Command == SynEditorCommand::ecSelPageUp || Command == SynEditorCommand::ecSelPageDown);
break;
}
case SynEditorCommand::ecPageTop:
case SynEditorCommand::ecSelPageTop:
MoveCaretVert(mTopLine-mCaretY, Command == SynEditorCommand::ecSelPageTop);
moveCaretVert(mTopLine-mCaretY, Command == SynEditorCommand::ecSelPageTop);
break;
case SynEditorCommand::ecPageBottom:
case SynEditorCommand::ecSelPageBottom:
MoveCaretVert(mTopLine+mLinesInWindow-1-mCaretY, Command == SynEditorCommand::ecSelPageBottom);
moveCaretVert(mTopLine+mLinesInWindow-1-mCaretY, Command == SynEditorCommand::ecSelPageBottom);
break;
case SynEditorCommand::ecEditorTop:
case SynEditorCommand::ecSelEditorTop:
MoveCaretVert(1-mCaretY, Command == SynEditorCommand::ecSelEditorTop);
moveCaretVert(1-mCaretY, Command == SynEditorCommand::ecSelEditorTop);
break;
case SynEditorCommand::ecEditorBottom:
case SynEditorCommand::ecSelEditorBottom:
if (!mLines->empty())
MoveCaretVert(mLines->count()-mCaretY, Command == SynEditorCommand::ecSelEditorBottom);
moveCaretVert(mLines->count()-mCaretY, Command == SynEditorCommand::ecSelEditorBottom);
break;
// goto special line / column position
case SynEditorCommand::ecGotoXY:
case SynEditorCommand::ecSelGotoXY:
if (pData)
MoveCaretAndSelection(caretXY(), *((BufferCoord *)(pData)), Command == SynEditorCommand::ecSelGotoXY);
moveCaretAndSelection(caretXY(), *((BufferCoord *)(pData)), Command == SynEditorCommand::ecSelGotoXY);
break;
// word selection
case SynEditorCommand::ecWordLeft:
case SynEditorCommand::ecSelWordLeft:
{
BufferCoord CaretNew = PrevWordPos();
MoveCaretAndSelection(caretXY(), CaretNew, Command == SynEditorCommand::ecSelWordLeft);
BufferCoord CaretNew = prevWordPos();
moveCaretAndSelection(caretXY(), CaretNew, Command == SynEditorCommand::ecSelWordLeft);
break;
}
case SynEditorCommand::ecWordRight:
case SynEditorCommand::ecSelWordRight:
{
BufferCoord CaretNew = NextWordPos();
MoveCaretAndSelection(caretXY(), CaretNew, Command == SynEditorCommand::ecSelWordRight);
BufferCoord CaretNew = nextWordPos();
moveCaretAndSelection(caretXY(), CaretNew, Command == SynEditorCommand::ecSelWordRight);
break;
}
case SynEditorCommand::ecSelWord:
SetSelWord();
setSelWord();
break;
case SynEditorCommand::ecSelectAll:
doSelectAll();
@ -5282,7 +5360,7 @@ void SynEdit::paintEvent(QPaintEvent *event)
//Get the invalidated rect.
QRect rcClip = event->rect();
DisplayCoord coord = displayXY();
QPoint caretPos = RowColumnToPixels(coord);
QPoint caretPos = rowColumnToPixels(coord);
int caretWidth=mCharWidth;
if (mCaretY <= mLines->count() && mCaretX <= mLines->getString(mCaretY-1).length()) {
caretWidth = charColumns(mLines->getString(mCaretY-1)[mCaretX-1])*mCharWidth;
@ -5393,12 +5471,12 @@ void SynEdit::keyPressEvent(QKeyEvent *event)
{
SynEditorCommand cmd=TranslateKeyCode(event->key(),event->modifiers());
if (cmd!=SynEditorCommand::ecNone) {
CommandProcessor(cmd,QChar(),nullptr);
commandProcessor(cmd,QChar(),nullptr);
event->accept();
} else if (!event->text().isEmpty()) {
QChar c = event->text().at(0);
if (c=='\t' || c.isPrint()) {
CommandProcessor(SynEditorCommand::ecChar,c,nullptr);
commandProcessor(SynEditorCommand::ecChar,c,nullptr);
event->accept();
}
}
@ -5424,7 +5502,7 @@ void SynEdit::mousePressEvent(QMouseEvent *event)
if (button == Qt::RightButton) {
if (mOptions.testFlag(eoRightMouseMovesCursor) &&
( (selAvail() && ! IsPointInSelection(displayToBufferPos(pixelsToRowColumn(X, Y))))
( (selAvail() && ! isPointInSelection(displayToBufferPos(pixelsToRowColumn(X, Y))))
|| ! selAvail())) {
invalidateSelection();
mBlockEnd=mBlockBegin;
@ -5449,7 +5527,7 @@ void SynEdit::mousePressEvent(QMouseEvent *event)
//if mousedown occurred in selected block begin drag operation
mStateFlags.setFlag(SynStateFlag::sfWaitForDragging,false);
if (bWasSel && mOptions.testFlag(eoDragDropEditing) && (X >= mGutterWidth + 2)
&& (mSelectionMode == SynSelectionMode::smNormal) && IsPointInSelection(displayToBufferPos(pixelsToRowColumn(X, Y))) ) {
&& (mSelectionMode == SynSelectionMode::smNormal) && isPointInSelection(displayToBufferPos(pixelsToRowColumn(X, Y))) ) {
bStartDrag = true;
}
if (bStartDrag) {
@ -5540,7 +5618,7 @@ void SynEdit::mouseDoubleClickEvent(QMouseEvent *event)
QPoint ptMouse = event->pos();
if (ptMouse.x() >= mGutterWidth + 2) {
if (!mOptions.testFlag(eoNoSelection))
SetWordBlock(caretXY());
setWordBlock(caretXY());
mStateFlags.setFlag(SynStateFlag::sfDblClicked);
//MouseCapture := FALSE;
}
@ -5550,7 +5628,7 @@ void SynEdit::inputMethodEvent(QInputMethodEvent *event)
{
QString s = event->commitString();
if (!s.isEmpty()) {
CommandProcessor(SynEditorCommand::ecImeStr,QChar(),&s);
commandProcessor(SynEditorCommand::ecImeStr,QChar(),&s);
// for (QChar ch:s) {
// CommandProcessor(SynEditorCommand::ecChar,ch);
// }

View File

@ -162,9 +162,17 @@ public:
void invalidateGutterLines(int FirstLine, int LastLine);
DisplayCoord pixelsToNearestRowColumn(int aX, int aY) const;
DisplayCoord pixelsToRowColumn(int aX, int aY) const;
QPoint RowColumnToPixels(const DisplayCoord& coord) const;
QPoint rowColumnToPixels(const DisplayCoord& coord) const;
DisplayCoord bufferToDisplayPos(const BufferCoord& p) const;
BufferCoord displayToBufferPos(const DisplayCoord& p) const;
NormalizedBufferCoord moveBufferPos(const BufferCoord&p, int delta) const;
NormalizedBufferCoord moveBufferPos(const NormalizedBufferCoord &p, int delta) const;
NormalizedBufferCoord normalizeBufferPos(const BufferCoord& p) const;
NormalizedBufferCoord normalizeBufferPos(int aChar, int aLine) const;
QChar charAtNormalizedBufferPos(const NormalizedBufferCoord& p) const;
int leftSpaces(const QString& line) const;
QString GetLeftSpacing(int charCount,bool wantTabs) const;
int charToColumn(int aLine, int aChar) const;
@ -185,21 +193,21 @@ public:
void lockPainter();
void unlockPainter();
bool selAvail() const;
QString WordAtCursor();
QString WordAtRowCol(const BufferCoord& XY);
QString wordAtCursor();
QString wordAtRowCol(const BufferCoord& XY);
int charColumns(QChar ch) const;
double dpiFactor() const;
bool IsPointInSelection(const BufferCoord& Value) const;
BufferCoord NextWordPos();
BufferCoord NextWordPosEx(const BufferCoord& XY);
BufferCoord WordStart();
BufferCoord WordStartEx(const BufferCoord& XY);
BufferCoord WordEnd();
BufferCoord WordEndEx(const BufferCoord& XY);
BufferCoord PrevWordPos();
BufferCoord PrevWordPosEx(const BufferCoord& XY);
void CommandProcessor(SynEditorCommand Command, QChar AChar = QChar(), void * pData = nullptr);
bool isPointInSelection(const BufferCoord& Value) const;
BufferCoord nextWordPos();
BufferCoord nextWordPosEx(const BufferCoord& XY);
BufferCoord wordStart();
BufferCoord wordStartEx(const BufferCoord& XY);
BufferCoord wordEnd();
BufferCoord wordEndEx(const BufferCoord& XY);
BufferCoord prevWordPos();
BufferCoord prevWordPosEx(const BufferCoord& XY);
void commandProcessor(SynEditorCommand Command, QChar AChar = QChar(), void * pData = nullptr);
//Caret
void showCaret();
void hideCaret();
@ -223,37 +231,37 @@ public:
int maxScrollWidth() const;
int maxScrollHeight() const;
bool GetHighlighterAttriAtRowCol(const BufferCoord& XY, QString& Token,
bool getHighlighterAttriAtRowCol(const BufferCoord& XY, QString& Token,
PSynHighlighterAttribute& Attri);
bool GetHighlighterAttriAtRowCol(const BufferCoord& XY, QString& Token,
bool getHighlighterAttriAtRowCol(const BufferCoord& XY, QString& Token,
bool& tokenFinished, SynHighlighterTokenType& TokenType,
PSynHighlighterAttribute& Attri);
bool GetHighlighterAttriAtRowColEx(const BufferCoord& XY, QString& Token,
bool getHighlighterAttriAtRowColEx(const BufferCoord& XY, QString& Token,
SynHighlighterTokenType& TokenType, SynTokenKind &TokenKind, int &Start,
PSynHighlighterAttribute& Attri);
//Commands
virtual void cutToClipboard() { CommandProcessor(SynEditorCommand::ecCut);}
virtual void copyToClipboard() { CommandProcessor(SynEditorCommand::ecCopy);}
virtual void pasteFromClipboard() { CommandProcessor(SynEditorCommand::ecPaste);}
virtual void undo() { CommandProcessor(SynEditorCommand::ecUndo);}
virtual void redo() { CommandProcessor(SynEditorCommand::ecRedo);}
virtual void zoomIn() { CommandProcessor(SynEditorCommand::ecZoomIn);}
virtual void zoomOut() { CommandProcessor(SynEditorCommand::ecZoomOut);}
virtual void selectAll() { CommandProcessor(SynEditorCommand::ecSelectAll);}
virtual void tab() { CommandProcessor(SynEditorCommand::ecTab);}
virtual void untab() { CommandProcessor(SynEditorCommand::ecShiftTab);}
virtual void toggleComment() { CommandProcessor(SynEditorCommand::ecToggleComment);}
virtual void cutToClipboard() { commandProcessor(SynEditorCommand::ecCut);}
virtual void copyToClipboard() { commandProcessor(SynEditorCommand::ecCopy);}
virtual void pasteFromClipboard() { commandProcessor(SynEditorCommand::ecPaste);}
virtual void undo() { commandProcessor(SynEditorCommand::ecUndo);}
virtual void redo() { commandProcessor(SynEditorCommand::ecRedo);}
virtual void zoomIn() { commandProcessor(SynEditorCommand::ecZoomIn);}
virtual void zoomOut() { commandProcessor(SynEditorCommand::ecZoomOut);}
virtual void selectAll() { commandProcessor(SynEditorCommand::ecSelectAll);}
virtual void tab() { commandProcessor(SynEditorCommand::ecTab);}
virtual void untab() { commandProcessor(SynEditorCommand::ecShiftTab);}
virtual void toggleComment() { commandProcessor(SynEditorCommand::ecToggleComment);}
virtual void beginUpdate();
virtual void endUpdate();
virtual BufferCoord getMatchingBracket();
virtual BufferCoord getMatchingBracketEx(BufferCoord APoint);
bool GetPositionOfMouse(BufferCoord& aPos);
bool GetLineOfMouse(int& line);
bool PointToCharLine(const QPoint& point, BufferCoord& coord);
bool PointToLine(const QPoint& point, int& line);
bool getPositionOfMouse(BufferCoord& aPos);
bool getLineOfMouse(int& line);
bool pointToCharLine(const QPoint& point, BufferCoord& coord);
bool pointToLine(const QPoint& point, int& line);
bool isIdentChar(const QChar& ch);
void setRainbowAttrs(const PSynHighlighterAttribute &attr0,
@ -295,7 +303,7 @@ public:
SynEditCodeFolding & codeFolding();
QString lineText();
QString lineText() const;
void setLineText(const QString s);
PSynEditStringList lines() const;
@ -366,25 +374,25 @@ signals:
void linesDeleted(int FirstLine, int Count);
void linesInserted(int FirstLine, int Count);
void Changed();
void changed();
void ChainUndoAdded();
void ChainRedoAdded();
void ChainLinesChanging();
void ChainLinesChanged();
void ChainListCleared();
// void chainUndoAdded();
// void chainRedoAdded();
// void chainLinesChanging();
// void chainLinesChanged();
// void chainListCleared();
void ChainListDeleted(int Index, int Count);
void ChainListInserted(int Index, int Count);
void ChainListPutted(int Index, int Count);
// void chainListDeleted(int Index, int Count);
// void chainListInserted(int Index, int Count);
// void chainListPutted(int Index, int Count);
void FilesDropped(int X,int Y, const QStringList& AFiles);
// void filesDropped(int X,int Y, const QStringList& AFiles);
void gutterClicked(Qt::MouseButton button, int x, int y, int line);
void ImeInputed(const QString& s);
// void imeInputed(const QString& s);
void contextHelp(const QString& word);
// void contextHelp(const QString& word);
void scrolled(SynScrollBarKind ScrollBar);
// void scrolled(SynScrollBarKind ScrollBar);
void statusChanged(SynStatusChanges changes);
void fontChanged();
@ -466,34 +474,34 @@ private:
* @param DX
* @param SelectionCommand
*/
void MoveCaretHorz(int DX, bool isSelection);
void MoveCaretVert(int DY, bool isSelection);
void MoveCaretAndSelection(const BufferCoord& ptBefore, const BufferCoord& ptAfter,
void moveCaretHorz(int DX, bool isSelection);
void moveCaretVert(int DY, bool isSelection);
void moveCaretAndSelection(const BufferCoord& ptBefore, const BufferCoord& ptAfter,
bool isSelection);
void MoveCaretToLineStart(bool isSelection);
void MoveCaretToLineEnd(bool isSelection);
void SetSelectedTextEmpty();
void SetSelTextPrimitive(const QString& aValue);
void SetSelTextPrimitiveEx(SynSelectionMode PasteMode,
void moveCaretToLineStart(bool isSelection);
void moveCaretToLineEnd(bool isSelection);
void setSelectedTextEmpty();
void setSelTextPrimitive(const QString& aValue);
void setSelTextPrimitiveEx(SynSelectionMode PasteMode,
const QString& Value, bool AddToUndoList);
void doLinesDeleted(int FirstLine, int Count);
void doLinesInserted(int FirstLine, int Count);
void ProperSetLine(int ALine, const QString& ALineText);
void DeleteSelection(const BufferCoord& BB, const BufferCoord& BE);
void InsertText(const QString& Value, SynSelectionMode PasteMode,bool AddToUndoList);
int InsertTextByNormalMode(const QString& Value);
int InsertTextByColumnMode(const QString& Value,bool AddToUndoList);
int InsertTextByLineMode(const QString& Value);
void DeleteFromTo(const BufferCoord& start, const BufferCoord& end);
void SetSelWord();
void SetWordBlock(BufferCoord Value);
void properSetLine(int ALine, const QString& ALineText);
void deleteSelection(const BufferCoord& BB, const BufferCoord& BE);
void insertText(const QString& Value, SynSelectionMode PasteMode,bool AddToUndoList);
int insertTextByNormalMode(const QString& Value);
int insertTextByColumnMode(const QString& Value,bool AddToUndoList);
int insertTextByLineMode(const QString& Value);
void deleteFromTo(const BufferCoord& start, const BufferCoord& end);
void setSelWord();
void setWordBlock(BufferCoord Value);
void processGutterClick(QMouseEvent* event);
void clearUndo();
BufferCoord GetPreviousLeftBracket(int x,int y);
bool CanDoBlockIndent();
BufferCoord getPreviousLeftBracket(int x,int y);
bool canDoBlockIndent();
//Commands
void doDeleteLastChar();

View File

@ -12,6 +12,17 @@ struct BufferCoord {
int Line;
};
/**
* Nomalized buffer posistion:
* (0,0) means at the start of the file ('\0')
* (1,count of lines+1) means at the end of the file ('\0')
* (length of the line+1, line) means at the line break of the line ('\n')
*/
struct NormalizedBufferCoord {
int Char;
int Line;
};
struct DisplayCoord {
int Column;
int Row;

View File

@ -279,7 +279,7 @@ void SynEditCppHighlighter::ansiCppProc()
if ( isSpaceChar(mLine[mRun]) ) {
mRange.spaceState = mRange.state;
mRange.state = RangeState::rsSpace;
break;
return;
}
mRun+=1;
}

View File

@ -41,7 +41,7 @@ void FilePropertiesDialog::calcFile(Editor *editor,
j++;
QString token;
PSynHighlighterAttribute attr;
if (editor->GetHighlighterAttriAtRowCol(BufferCoord{j+1,i+1},
if (editor->getHighlighterAttriAtRowCol(BufferCoord{j+1,i+1},
token,attr)) {
// if it is preprocessor...
if (attr->name() == SYNS_AttrPreprocessor) {

View File

@ -0,0 +1,13 @@
#include "functiontipwidget.h"
#include <QHBoxLayout>
FunctionTipWidget::FunctionTipWidget(QWidget *parent) : QWidget(parent)
{
setWindowFlags(Qt::ToolTip);
mLabel = new QLabel(this);
mLabel->setText("Test");
this->setLayout(new QHBoxLayout());
this->layout()->addWidget(mLabel);
}

View File

@ -0,0 +1,20 @@
#ifndef FUNCTIONTIPWIDGET_H
#define FUNCTIONTIPWIDGET_H
#include <QLabel>
#include <QWidget>
class Editor;
class FunctionTipWidget : public QWidget
{
Q_OBJECT
public:
explicit FunctionTipWidget(QWidget *parent = nullptr);
signals:
private:
QLabel* mLabel;
};
#endif // FUNCTIONTIPWIDGET_H