- enhancement: check syntax/parse symbols when modifed and cursor's line changed.

This commit is contained in:
royqh1979 2021-11-04 00:38:40 +08:00
parent 53085e36a3
commit 731a10a1d6
7 changed files with 23 additions and 15 deletions

View File

@ -16,6 +16,7 @@ Version 0.7.8
- enhancement: can set editor's default background / foreground color. They must be setted to make the custom color schemes correctly.
- enhancement: can set the color for the current line's number in the gutter
- all predefined color schemes updated.
- enhancement: check syntax/parse symbols when modifed and cursor's line changed.
Version 0.7.7
- enhancement: Problem Set

View File

@ -159,7 +159,7 @@
"Breakpoint" : {
},
"Error" : {
"foreground" : "#ff2f32"
"foreground" : "#ff5053"
},
"Active Breakpoint" : {
"foreground" : "#FFFFCE",

View File

@ -78,6 +78,7 @@ Editor::Editor(QWidget *parent, const QString& filename,
mCurrentHighlightedWord(),
mSaving(false)
{
mCurrentLineModified = false;
mUseCppSyntax = pSettings->editor().defaultFileCpp();
if (mFilename.isEmpty()) {
mFilename = tr("untitled")+QString("%1").arg(getNewFileNumber());
@ -1355,25 +1356,29 @@ Editor::PSyntaxIssue Editor::getSyntaxIssueAtPosition(const BufferCoord &pos)
return PSyntaxIssue();
}
void Editor::onModificationChanged(bool) {
updateCaption();
}
void Editor::onStatusChanged(SynStatusChanges changes)
{
if (!changes.testFlag(SynStatusChange::scReadOnly)
if ((!changes.testFlag(SynStatusChange::scReadOnly)
&& !changes.testFlag(SynStatusChange::scInsertMode)
&& (lines()->count()!=mLineCount)
&& (lines()->count()!=0) && ((mLineCount>0) || (lines()->count()>1))) {
&& (lines()->count()!=0) && ((mLineCount>0) || (lines()->count()>1)))
||
(mCurrentLineModified
&& !changes.testFlag(SynStatusChange::scReadOnly)
&& changes.testFlag(SynStatusChange::scCaretY))) {
mCurrentLineModified = false;
reparse();
if (pSettings->editor().syntaxCheckWhenLineChanged())
checkSyntaxInBack();
reparseTodo();
}
mLineCount = lines()->count();
if (changes.testFlag(scModified)) {
if (changes.testFlag(scModifyChanged)) {
updateCaption();
}
if (changes.testFlag(scModified)) {
mCurrentLineModified = true;
}
if (changes.testFlag(SynStatusChange::scCaretX)
|| changes.testFlag(SynStatusChange::scCaretY)) {

View File

@ -173,7 +173,6 @@ public:
void tab() override;
private slots:
void onModificationChanged(bool status) ;
void onStatusChanged(SynStatusChanges changes);
void onGutterClicked(Qt::MouseButton button, int x, int y, int line);
void onTipEvalValueReady(const QString& value);
@ -263,7 +262,7 @@ private:
QString mCurrentHighlightedWord;
bool mSaving;
bool mCurrentLineModified;
int mXOffsetSince;
int mTabStopBegin;
int mTabStopEnd;

View File

@ -5977,14 +5977,16 @@ bool SynEdit::modified() const
void SynEdit::setModified(bool Value)
{
if (Value)
if (Value) {
mLastModifyTime = QDateTime::currentDateTime();
emit statusChanged(SynStatusChange::scModified);
}
if (Value != mModified) {
mModified = Value;
if (mOptions.testFlag(SynEditorOption::eoGroupUndo) && (!Value) && mUndoList->CanUndo())
mUndoList->AddGroupBreak();
mUndoList->setInitialState(!Value);
emit statusChanged(SynStatusChange::scModified);
emit statusChanged(SynStatusChange::scModifyChanged);
}
}

View File

@ -40,10 +40,11 @@ enum SynStatusChange {
scLeftChar = 0x0008,
scTopLine = 0x0010,
scInsertMode = 0x0020,
scModified = 0x0040,
scModifyChanged = 0x0040,
scSelection = 0x0080,
scReadOnly = 0x0100,
scOpenFile = 0x0200
scOpenFile = 0x0200,
scModified = 0x0400
};
Q_DECLARE_FLAGS(SynStatusChanges, SynStatusChange)

View File

@ -857,5 +857,5 @@ QByteArray getHTTPBody(const QByteArray& content) {
bool haveGoodContrast(const QColor& c1, const QColor &c2) {
int lightness1 = qGray(c1.rgb());
int lightness2 = qGray(c2.rgb());
return std::abs(lightness1 - lightness2)>=100;
return std::abs(lightness1 - lightness2)>=120;
}