- fix: index of the longest line not correctly updated when insert/delete multiple lines ( which will cause selection errors)

This commit is contained in:
Roy Qu 2022-04-24 09:50:30 +08:00
parent 1a7322f562
commit d9259fb9e4
3 changed files with 14 additions and 8 deletions

View File

@ -10,6 +10,7 @@ Red Panda C++ Version 1.0.5
- enhancement: only show function tips when cursor is after ',' or '('.
- enhancement: when auto complete function names, only append '(' if before identifier or "/'
- update highconstrast icon set
- fix: index of the longest line not correctly updated when insert/delete multiple lines ( which will cause selection errors)
Red Panda C++ Version 1.0.4
- fix: hide function tips, when move or resize the main window

View File

@ -3482,7 +3482,6 @@ void Editor::updateFunctionTip(bool showTip)
if (currentLine>=document()->count())
return;
QChar ch=lastNonSpaceChar(currentLine,currentChar);
qDebug()<<ch;
if (ch!="(" && ch!=",")
return;

View File

@ -348,8 +348,12 @@ void SynDocument::deleteLines(int Index, int NumLines)
auto action = finally([this]{
endUpdate();
});
if (mIndexOfLongestLine>=Index && (mIndexOfLongestLine <Index+NumLines)) {
if (mIndexOfLongestLine>=Index) {
if (mIndexOfLongestLine <Index+NumLines) {
mIndexOfLongestLine = -1;
} else {
mIndexOfLongestLine -= NumLines;
}
}
int LinesAfter = mLines.count() - (Index + NumLines);
if (LinesAfter < 0) {
@ -482,6 +486,7 @@ void SynDocument::insertLines(int Index, int NumLines)
auto action = finally([this]{
endUpdate();
});
mIndexOfLongestLine = -1;
PSynDocumentLine line;
mLines.insert(Index,NumLines,line);
for (int i=Index;i<Index+NumLines;i++) {
@ -503,6 +508,7 @@ void SynDocument::insertStrings(int Index, const QStringList &NewStrings)
auto action = finally([this]{
endUpdate();
});
mIndexOfLongestLine = -1;
PSynDocumentLine line;
mLines.insert(Index,NewStrings.length(),line);
for (int i=0;i<NewStrings.length();i++) {
@ -579,9 +585,13 @@ void SynDocument::loadFromFile(const QString& filename, const QByteArray& encodi
if (!file.open(QFile::ReadOnly ))
throw FileError(tr("Can't open file '%1' for read!").arg(file.fileName()));
beginUpdate();
internalClear();
auto action = finally([this]{
if (mLines.count()>0)
emit inserted(0,mLines.count());
endUpdate();
});
mIndexOfLongestLine = -1;
//test for utf8 / utf 8 bom
if (encoding == ENCODING_AUTO_DETECT) {
if (file.atEnd()) {
@ -636,7 +646,6 @@ void SynDocument::loadFromFile(const QString& filename, const QByteArray& encodi
}
line = file.readLine();
}
emit inserted(0,mLines.count());
if (!needReread) {
if (allAscii)
realEncoding = ENCODING_ASCII;
@ -646,7 +655,6 @@ void SynDocument::loadFromFile(const QString& filename, const QByteArray& encodi
QList<PCharsetInfo> charsets = pCharsetInfoManager->findCharsetByLocale(pCharsetInfoManager->localeName());
if (!charsets.isEmpty()) {
if (tryLoadFileByEncoding(realEncoding,file)) {
emit inserted(0,mLines.count());
return;
}
@ -659,9 +667,8 @@ void SynDocument::loadFromFile(const QString& filename, const QByteArray& encodi
if (encodingName == ENCODING_UTF8)
continue;
if (tryLoadFileByEncoding(encodingName,file)) {
qDebug()<<encodingName;
//qDebug()<<encodingName;
realEncoding = encodingName;
emit inserted(0,mLines.count());
return;
}
}
@ -694,7 +701,6 @@ void SynDocument::loadFromFile(const QString& filename, const QByteArray& encodi
}
addItem(line);
}
emit inserted(0,mLines.count());
}