- fix: add mutex lock to prevent editor crash in rare conditions

This commit is contained in:
royqh1979@gmail.com 2021-10-17 21:09:50 +08:00
parent d015235404
commit fee2115093
9 changed files with 140 additions and 101 deletions

View File

@ -1,5 +1,6 @@
Version 0.6.8
- enhancement: add link to cppreference in the help menu
- fix: add mutex lock to prevent editor crash in rare conditions
Version 0.6.7
- fix: messages send to the gdb process's standard error are not received

View File

@ -121,7 +121,7 @@ PSearchResultTreeItem CppRefacter::findOccurenceInFile(
editor.lines()->setContents(buffer);
} else {
QByteArray encoding;
editor.lines()->LoadFromFile(filename,ENCODING_AUTO_DETECT,encoding);
editor.lines()->loadFromFile(filename,ENCODING_AUTO_DETECT,encoding);
}
editor.setHighlighter(HighlighterManager().getCppHighlighter());
int posY = 0;
@ -182,7 +182,7 @@ void CppRefacter::renameSymbolInFile(const QString &filename, const PStatement &
editor.lines()->setContents(buffer);
} else {
QByteArray encoding;
editor.lines()->LoadFromFile(filename,ENCODING_AUTO_DETECT,encoding);
editor.lines()->loadFromFile(filename,ENCODING_AUTO_DETECT,encoding);
}
QStringList newContents;
editor.setHighlighter(HighlighterManager().getCppHighlighter());
@ -235,7 +235,7 @@ void CppRefacter::renameSymbolInFile(const QString &filename, const PStatement &
} else {
QByteArray realEncoding;
QFile file(filename);
editor.lines()->SaveToFile(file,ENCODING_AUTO_DETECT, realEncoding);
editor.lines()->saveToFile(file,ENCODING_AUTO_DETECT, realEncoding);
}
}

View File

@ -163,9 +163,9 @@ Editor::~Editor() {
void Editor::loadFile(const QString& filename) {
if (filename.isEmpty()) {
this->lines()->LoadFromFile(mFilename,mEncodingOption,mFileEncoding);
this->lines()->loadFromFile(mFilename,mEncodingOption,mFileEncoding);
} else {
this->lines()->LoadFromFile(filename,mEncodingOption,mFileEncoding);
this->lines()->loadFromFile(filename,mEncodingOption,mFileEncoding);
}
//this->setModified(false);
updateCaption();
@ -192,7 +192,7 @@ void Editor::loadFile(const QString& filename) {
void Editor::saveFile(const QString &filename) {
QFile file(filename);
this->lines()->SaveToFile(file,mEncodingOption,mFileEncoding);
this->lines()->saveToFile(file,mEncodingOption,mFileEncoding);
pMainWindow->updateForEncodingInfo();
}

View File

@ -2032,6 +2032,8 @@ void MainWindow::openShell(const QString &folder, const QString &shellCommand)
void MainWindow::onAutoSaveTimeout()
{
if (mQuitting)
return;
if (!pSettings->editor().enableAutoSave())
return;
int updateCount = 0;
@ -2050,6 +2052,15 @@ void MainWindow::onAutoSaveTimeout()
}
break;
case astAllProjectFiles:
if (!mProject)
return;
for (int i=0;i<mEditorList->pageCount();i++) {
Editor *e = (*mEditorList)[i];
if (!e->inProject())
return;
doAutoSave(e);
updateCount++;
}
//todo: auto save project files
break;
}

View File

@ -536,13 +536,11 @@ BufferCoord SynEdit::getMatchingBracketEx(BufferCoord APoint)
QStringList SynEdit::contents()
{
//QMutexLocker locker(&mMutex);
return lines()->contents();
}
QString SynEdit::text()
{
//QMutexLocker locker(&mMutex);
return lines()->text();
}
@ -1750,7 +1748,7 @@ void SynEdit::doDuplicateLine()
{
if (!mReadOnly && (mLines->count() > 0)) {
doOnPaintTransient(SynTransientType::ttBefore);
mLines->Insert(mCaretY, lineText());
mLines->insert(mCaretY, lineText());
doLinesInserted(mCaretY + 1, 1);
mUndoList->AddChange(SynChangeReason::crLineBreak,
caretXY(), caretXY(), "", SynSelectionMode::smNormal);
@ -1774,7 +1772,7 @@ void SynEdit::doMoveSelUp()
doLinesDeleted(OrigBlockBegin.Line - 1, 1); // before start, 1 based
// Insert line below selection
mLines->Insert(OrigBlockEnd.Line - 1, s);
mLines->insert(OrigBlockEnd.Line - 1, s);
doLinesInserted(OrigBlockEnd.Line, 1);
// Restore caret and selection
@ -1820,7 +1818,7 @@ void SynEdit::doMoveSelDown()
doLinesDeleted(OrigBlockEnd.Line, 1); // before start, 1 based
// Insert line above selection
mLines->Insert(OrigBlockBegin.Line - 1, s);
mLines->insert(OrigBlockBegin.Line - 1, s);
doLinesInserted(OrigBlockBegin.Line, 1);
// Restore caret and selection
@ -1895,7 +1893,7 @@ void SynEdit::insertLine(bool moveCaret)
if (Len > 0) {
if (Len >= mCaretX) {
if (mCaretX <= 1) {
mLines->Insert(mCaretY - 1, "");
mLines->insert(mCaretY - 1, "");
nLinesInserted++;
mUndoList->AddChange(SynChangeReason::crLineBreak, caretXY(), caretXY(), Temp2,
SynSelectionMode::smNormal);
@ -1925,7 +1923,7 @@ void SynEdit::insertLine(bool moveCaret)
}
}
QString indentSpacesForRightLineText = GetLeftSpacing(indentSpaces,true);
mLines->Insert(mCaretY, indentSpacesForRightLineText+rightLineText);
mLines->insert(mCaretY, indentSpacesForRightLineText+rightLineText);
nLinesInserted++;
//SpaceCount1 = mLines->getString(mCaretY).length(); //???
@ -1936,7 +1934,7 @@ void SynEdit::insertLine(bool moveCaret)
indentSpaces = indentSpacesOfLeftLineText;
indentSpaces += mTabWidth;
indentSpacesForRightLineText = GetLeftSpacing(indentSpaces,true);
mLines->Insert(mCaretY, indentSpacesForRightLineText);
mLines->insert(mCaretY, indentSpacesForRightLineText);
nLinesInserted++;
mUndoList->AddChange(SynChangeReason::crLineBreak, caretXY(), caretXY(), "",
SynSelectionMode::smNormal);
@ -1954,7 +1952,7 @@ void SynEdit::insertLine(bool moveCaret)
SpaceCount2 = leftSpaces(Temp);
} while ((BackCounter != 0) && (Temp == ""));
}
mLines->Insert(mCaretY, "");
mLines->insert(mCaretY, "");
nLinesInserted++;
BufferCoord Caret = caretXY();
if (moveCaret) {
@ -1988,7 +1986,7 @@ void SynEdit::insertLine(bool moveCaret)
BackCounter--;
}
}
mLines->Insert(mCaretY - 1, "");
mLines->insert(mCaretY - 1, "");
nLinesInserted++;
mUndoList->AddChange(SynChangeReason::crLineBreak, caretXY(), caretXY(), "",
SynSelectionMode::smNormal);
@ -4690,7 +4688,7 @@ int SynEdit::insertTextByNormalMode(const QString &Value)
if (P<Value.length()) {
Str = sLeftSide + Value.mid(0, P - Start);
properSetLine(mCaretY - 1, Str);
mLines->InsertLines(mCaretY, CountLines(Value,P));
mLines->insertLines(mCaretY, CountLines(Value,P));
} else {
Str = sLeftSide + Value + sRightSide;
properSetLine(mCaretY - 1, Str);
@ -4810,7 +4808,7 @@ int SynEdit::insertTextByLineMode(const QString &Value)
else
Str = "";
if ((mCaretY == mLines->count()) || mInserting) {
mLines->Insert(mCaretY - 1, "");
mLines->insert(mCaretY - 1, "");
Result++;
}
properSetLine(mCaretY - 1, Str);
@ -4886,7 +4884,6 @@ void SynEdit::onCommandProcessed(SynEditorCommand , QChar , void *)
void SynEdit::ExecuteCommand(SynEditorCommand Command, QChar AChar, void *pData)
{
QMutexLocker locker(&mMutex);
incPaintLock();
auto action=finally([this] {
decPaintLock();
@ -5924,8 +5921,6 @@ void SynEdit::setSelLength(int Value)
void SynEdit::setSelText(const QString &text)
{
QMutexLocker locker(&mMutex);
doSetSelText(text);
}

View File

@ -5,7 +5,6 @@
#include <QCursor>
#include <QDateTime>
#include <QFrame>
#include <QMutex>
#include <QStringList>
#include <QTimer>
#include <QWidget>
@ -678,8 +677,6 @@ private:
QString mInputPreeditString;
QRecursiveMutex mMutex;
friend class SynEditTextPainter;
// QWidget interface

View File

@ -3,6 +3,7 @@
#include <QFile>
#include <QTextCodec>
#include <QTextStream>
#include <QMutexLocker>
#include <stdexcept>
#include "SynEdit.h"
#include "../utils.h"
@ -25,24 +26,27 @@ static void ListIndexOutOfBounds(int index) {
int SynEditStringList::parenthesisLevels(int Index) const
int SynEditStringList::parenthesisLevels(int Index)
{
QMutexLocker locker(&mMutex);
if (Index>=0 && Index < mList.size()) {
return mList[Index]->fRange.parenthesisLevel;
} else
return 0;
}
int SynEditStringList::bracketLevels(int Index) const
int SynEditStringList::bracketLevels(int Index)
{
QMutexLocker locker(&mMutex);
if (Index>=0 && Index < mList.size()) {
return mList[Index]->fRange.bracketLevel;
} else
return 0;
}
int SynEditStringList::braceLevels(int Index) const
int SynEditStringList::braceLevels(int Index)
{
QMutexLocker locker(&mMutex);
if (Index>=0 && Index < mList.size()) {
return mList[Index]->fRange.braceLevel;
} else
@ -62,6 +66,7 @@ int SynEditStringList::braceLevels(int Index) const
int SynEditStringList::lineColumns(int Index)
{
QMutexLocker locker(&mMutex);
if (Index>=0 && Index < mList.size()) {
if (mList[Index]->fColumns == -1) {
return calculateLineColumns(Index);
@ -71,16 +76,18 @@ int SynEditStringList::lineColumns(int Index)
return 0;
}
int SynEditStringList::leftBraces(int Index) const
int SynEditStringList::leftBraces(int Index)
{
QMutexLocker locker(&mMutex);
if (Index>=0 && Index < mList.size()) {
return mList[Index]->fLeftBraces;
} else
return 0;
}
int SynEditStringList::rightBraces(int Index) const
int SynEditStringList::rightBraces(int Index)
{
QMutexLocker locker(&mMutex);
if (Index>=0 && Index < mList.size()) {
return mList[Index]->fRightBraces;
} else
@ -88,6 +95,7 @@ int SynEditStringList::rightBraces(int Index) const
}
int SynEditStringList::lengthOfLongestLine() {
QMutexLocker locker(&mMutex);
if (mIndexOfLongestLine < 0) {
int MaxLen = -1;
mIndexOfLongestLine = -1;
@ -120,8 +128,9 @@ QString SynEditStringList::lineBreak() const
return "\n";
}
const SynRangeState& SynEditStringList::ranges(int Index) const
const SynRangeState& SynEditStringList::ranges(int Index)
{
QMutexLocker locker(&mMutex);
if (Index>=0 && Index < mList.size()) {
return mList[Index]->fRange;
} else {
@ -130,7 +139,7 @@ const SynRangeState& SynEditStringList::ranges(int Index) const
return {0};
}
void SynEditStringList::InsertItem(int Index, const QString &s)
void SynEditStringList::insertItem(int Index, const QString &s)
{
beginUpdate();
PSynEditStringRec line = std::make_shared<SynEditStringRec>();
@ -150,23 +159,21 @@ void SynEditStringList::addItem(const QString &s)
endUpdate();
}
ConvertTabsProcEx SynEditStringList::getConvertTabsProc() const
{
return mConvertTabsProc;
}
bool SynEditStringList::getAppendNewLineAtEOF() const
bool SynEditStringList::getAppendNewLineAtEOF()
{
QMutexLocker locker(&mMutex);
return mAppendNewLineAtEOF;
}
void SynEditStringList::setAppendNewLineAtEOF(bool appendNewLineAtEOF)
{
QMutexLocker locker(&mMutex);
mAppendNewLineAtEOF = appendNewLineAtEOF;
}
void SynEditStringList::setRange(int Index, const SynRangeState& ARange, int ALeftBraces, int ARightBraces)
{
QMutexLocker locker(&mMutex);
if (Index<0 || Index>=mList.count()) {
ListIndexOutOfBounds(Index);
}
@ -177,44 +184,50 @@ void SynEditStringList::setRange(int Index, const SynRangeState& ARange, int ALe
endUpdate();
}
QString SynEditStringList::getString(int Index) const
QString SynEditStringList::getString(int Index)
{
QMutexLocker locker(&mMutex);
if (Index<0 || Index>=mList.count()) {
return QString();
}
return mList[Index]->fString;
}
int SynEditStringList::count() const
int SynEditStringList::count()
{
QMutexLocker locker(&mMutex);
return mList.count();
}
void *SynEditStringList::getObject(int Index) const
void *SynEditStringList::getObject(int Index)
{
QMutexLocker locker(&mMutex);
if (Index<0 || Index>=mList.count()) {
return nullptr;
}
return mList[Index]->fObject;
}
QString SynEditStringList::text() const
QString SynEditStringList::text()
{
QMutexLocker locker(&mMutex);
return getTextStr();
}
void SynEditStringList::setText(const QString &text)
{
PutTextStr(text);
QMutexLocker locker(&mMutex);
putTextStr(text);
}
void SynEditStringList::setContents(const QStringList &text)
{
QMutexLocker locker(&mMutex);
beginUpdate();
auto action = finally([this]{
endUpdate();
});
clear();
internalClear();
if (text.count() > 0) {
mIndexOfLongestLine = -1;
int FirstAdded = mList.count();
@ -226,8 +239,9 @@ void SynEditStringList::setContents(const QStringList &text)
}
}
QStringList SynEditStringList::contents() const
QStringList SynEditStringList::contents()
{
QMutexLocker locker(&mMutex);
QStringList Result;
SynEditStringRecList list = mList;
foreach (const PSynEditStringRec& line, list) {
@ -239,7 +253,7 @@ QStringList SynEditStringList::contents() const
void SynEditStringList::beginUpdate()
{
if (mUpdateCount == 0) {
SetUpdateState(true);
setUpdateState(true);
}
mUpdateCount++;
}
@ -248,16 +262,17 @@ void SynEditStringList::endUpdate()
{
mUpdateCount--;
if (mUpdateCount == 0) {
SetUpdateState(false);
setUpdateState(false);
}
}
int SynEditStringList::add(const QString &s)
{
QMutexLocker locker(&mMutex);
beginUpdate();
int Result = mList.count();
InsertItem(Result, s);
insertItem(Result, s);
emit inserted(Result,1);
endUpdate();
return Result;
@ -265,6 +280,7 @@ int SynEditStringList::add(const QString &s)
void SynEditStringList::addStrings(const QStringList &Strings)
{
QMutexLocker locker(&mMutex);
if (Strings.count() > 0) {
mIndexOfLongestLine = -1;
beginUpdate();
@ -282,6 +298,7 @@ void SynEditStringList::addStrings(const QStringList &Strings)
int SynEditStringList::getTextLength()
{
QMutexLocker locker(&mMutex);
int Result = 0;
foreach (const PSynEditStringRec& line, mList ) {
Result += line->fString.length();
@ -296,18 +313,13 @@ int SynEditStringList::getTextLength()
void SynEditStringList::clear()
{
if (!mList.isEmpty()) {
beginUpdate();
int oldCount = mList.count();
mIndexOfLongestLine = -1;
mList.clear();
emit deleted(0,oldCount);
endUpdate();
}
QMutexLocker locker(&mMutex);
internalClear();
}
void SynEditStringList::deleteLines(int Index, int NumLines)
{
QMutexLocker locker(&mMutex);
if (NumLines<=0)
return;
if ((Index < 0) || (Index >= mList.count())) {
@ -328,8 +340,9 @@ void SynEditStringList::deleteLines(int Index, int NumLines)
emit deleted(Index,NumLines);
}
void SynEditStringList::Exchange(int Index1, int Index2)
void SynEditStringList::exchange(int Index1, int Index2)
{
QMutexLocker locker(&mMutex);
if ((Index1 < 0) || (Index1 >= mList.count())) {
ListIndexOutOfBounds(Index1);
}
@ -346,19 +359,21 @@ void SynEditStringList::Exchange(int Index1, int Index2)
endUpdate();
}
void SynEditStringList::Insert(int Index, const QString &s)
void SynEditStringList::insert(int Index, const QString &s)
{
QMutexLocker locker(&mMutex);
if ((Index < 0) || (Index > mList.count())) {
ListIndexOutOfBounds(Index);
}
beginUpdate();
InsertItem(Index, s);
insertItem(Index, s);
emit inserted(Index,1);
endUpdate();
}
void SynEditStringList::deleteAt(int Index)
{
QMutexLocker locker(&mMutex);
if ((Index < 0) || (Index >= mList.count())) {
ListIndexOutOfBounds(Index);
}
@ -385,6 +400,7 @@ QString SynEditStringList::getTextStr() const
}
void SynEditStringList::putString(int Index, const QString &s) {
QMutexLocker locker(&mMutex);
if (Index == mList.count()) {
add(s);
} else {
@ -402,6 +418,7 @@ void SynEditStringList::putString(int Index, const QString &s) {
void SynEditStringList::putObject(int Index, void *AObject)
{
QMutexLocker locker(&mMutex);
if (Index<0 || Index>=mList.count()) {
ListIndexOutOfBounds(Index);
}
@ -410,7 +427,7 @@ void SynEditStringList::putObject(int Index, void *AObject)
endUpdate();
}
void SynEditStringList::SetUpdateState(bool Updating)
void SynEditStringList::setUpdateState(bool Updating)
{
if (Updating)
emit changing();
@ -426,8 +443,9 @@ int SynEditStringList::calculateLineColumns(int Index)
return line->fColumns;
}
void SynEditStringList::InsertLines(int Index, int NumLines)
void SynEditStringList::insertLines(int Index, int NumLines)
{
QMutexLocker locker(&mMutex);
if (Index<0 || Index>mList.count()) {
ListIndexOutOfBounds(Index);
}
@ -446,8 +464,9 @@ void SynEditStringList::InsertLines(int Index, int NumLines)
emit inserted(Index,NumLines);
}
void SynEditStringList::InsertStrings(int Index, const QStringList &NewStrings)
void SynEditStringList::insertStrings(int Index, const QStringList &NewStrings)
{
QMutexLocker locker(&mMutex);
if (Index<0 || Index>mList.count()) {
ListIndexOutOfBounds(Index);
}
@ -467,19 +486,21 @@ void SynEditStringList::InsertStrings(int Index, const QStringList &NewStrings)
emit inserted(Index,NewStrings.length());
}
void SynEditStringList::InsertText(int Index, const QString &NewText)
void SynEditStringList::insertText(int Index, const QString &NewText)
{
QMutexLocker locker(&mMutex);
if (Index<0 || Index>=mList.count()) {
ListIndexOutOfBounds(Index);
}
if (NewText.isEmpty())
return;
QStringList lines = TextToLines(NewText);
InsertStrings(Index,lines);
insertStrings(Index,lines);
}
void SynEditStringList::LoadFromFile(const QString& filename, const QByteArray& encoding, QByteArray& realEncoding)
void SynEditStringList::loadFromFile(const QString& filename, const QByteArray& encoding, QByteArray& realEncoding)
{
QMutexLocker locker(&mMutex);
QFile file(filename);
if (!file.open(QFile::ReadOnly ))
throw FileError(tr("Can't open file '%1' for read!").arg(file.fileName()));
@ -514,7 +535,7 @@ void SynEditStringList::LoadFromFile(const QString& filename, const QByteArray&
} else if (line.endsWith("\r")) {
mFileEndingType = FileEndingType::Mac;
}
clear();
internalClear();
while (true) {
if (allAscii) {
allAscii = isTextAllAscii(line);
@ -558,7 +579,7 @@ void SynEditStringList::LoadFromFile(const QString& filename, const QByteArray&
textStream.setCodec(realEncoding);
}
QString line;
clear();
internalClear();
while (textStream.readLineInto(&line)) {
addItem(TrimRight(line));
}
@ -567,8 +588,9 @@ void SynEditStringList::LoadFromFile(const QString& filename, const QByteArray&
void SynEditStringList::SaveToFile(QFile &file, const QByteArray& encoding, QByteArray& realEncoding)
void SynEditStringList::saveToFile(QFile &file, const QByteArray& encoding, QByteArray& realEncoding)
{
QMutexLocker locker(&mMutex);
if (!file.open(QFile::WriteOnly | QFile::Truncate))
throw FileError(tr("Can't open file '%1' for save!").arg(file.fileName()));
if (mList.isEmpty())
@ -611,13 +633,13 @@ void SynEditStringList::SaveToFile(QFile &file, const QByteArray& encoding, QByt
}
}
void SynEditStringList::PutTextStr(const QString &text)
void SynEditStringList::putTextStr(const QString &text)
{
beginUpdate();
auto action = finally([this]{
endUpdate();
});
clear();
internalClear();
int pos = 0;
int start;
while (pos < text.length()) {
@ -638,23 +660,39 @@ void SynEditStringList::PutTextStr(const QString &text)
}
}
FileEndingType SynEditStringList::getFileEndingType() const
void SynEditStringList::internalClear()
{
if (!mList.isEmpty()) {
beginUpdate();
int oldCount = mList.count();
mIndexOfLongestLine = -1;
mList.clear();
emit deleted(0,oldCount);
endUpdate();
}
}
FileEndingType SynEditStringList::getFileEndingType()
{
QMutexLocker locker(&mMutex);
return mFileEndingType;
}
void SynEditStringList::setFileEndingType(const FileEndingType &fileEndingType)
{
QMutexLocker locker(&mMutex);
mFileEndingType = fileEndingType;
}
bool SynEditStringList::empty()
{
return count()==0;
QMutexLocker locker(&mMutex);
return mList.count()==0;
}
void SynEditStringList::resetColumns()
{
QMutexLocker locker(&mMutex);
mIndexOfLongestLine = -1;
if (mList.count() > 0 ) {
for (int i=0;i<mList.size();i++) {
@ -665,6 +703,7 @@ void SynEditStringList::resetColumns()
void SynEditStringList::invalidAllLineColumns()
{
QMutexLocker locker(&mMutex);
mIndexOfLongestLine = -1;
for (PSynEditStringRec& line:mList) {
line->fColumns = -1;

View File

@ -3,6 +3,7 @@
#include <QStringList>
#include "highlighter/base.h"
#include <QMutex>
#include <QVector>
#include <memory>
#include "MiscProcs.h"
@ -50,23 +51,23 @@ class SynEditStringList : public QObject
public:
explicit SynEditStringList(SynEdit* pEdit,QObject* parent=nullptr);
int parenthesisLevels(int Index) const;
int bracketLevels(int Index) const;
int braceLevels(int Index) const;
int parenthesisLevels(int Index);
int bracketLevels(int Index);
int braceLevels(int Index);
int lineColumns(int Index);
int leftBraces(int Index) const;
int rightBraces(int Index) const;
int leftBraces(int Index);
int rightBraces(int Index);
int lengthOfLongestLine();
QString lineBreak() const;
const SynRangeState& ranges(int Index) const;
const SynRangeState& ranges(int Index);
void setRange(int Index, const SynRangeState& ARange, int leftBraces, int rightBraces);
QString getString(int Index) const;
int count() const ;
void* getObject(int Index) const;
QString text() const;
QString getString(int Index);
int count();
void* getObject(int Index);
QString text();
void setText(const QString& text);
void setContents(const QStringList& text);
QStringList contents() const;
QStringList contents();
void putString(int Index, const QString& s);
void putObject(int Index, void * AObject);
@ -81,20 +82,18 @@ public:
void clear();
void deleteAt(int Index);
void deleteLines(int Index, int NumLines);
void Exchange(int Index1, int Index2);
void Insert(int Index, const QString& s);
void InsertLines(int Index, int NumLines);
void InsertStrings(int Index, const QStringList& NewStrings);
void InsertText(int Index,const QString& NewText);
void LoadFromFile(const QString& filename, const QByteArray& encoding, QByteArray& realEncoding);
void SaveToFile(QFile& file, const QByteArray& encoding, QByteArray& realEncoding);
void exchange(int Index1, int Index2);
void insert(int Index, const QString& s);
void insertLines(int Index, int NumLines);
void insertStrings(int Index, const QStringList& NewStrings);
void insertText(int Index,const QString& NewText);
void loadFromFile(const QString& filename, const QByteArray& encoding, QByteArray& realEncoding);
void saveToFile(QFile& file, const QByteArray& encoding, QByteArray& realEncoding);
bool getAppendNewLineAtEOF() const;
bool getAppendNewLineAtEOF();
void setAppendNewLineAtEOF(bool appendNewLineAtEOF);
ConvertTabsProcEx getConvertTabsProc() const;
FileEndingType getFileEndingType() const;
FileEndingType getFileEndingType();
void setFileEndingType(const FileEndingType &fileEndingType);
bool empty();
@ -112,10 +111,11 @@ signals:
void putted(int index, int count);
protected:
QString getTextStr() const;
void SetUpdateState(bool Updating);
void InsertItem(int Index, const QString& s);
void setUpdateState(bool Updating);
void insertItem(int Index, const QString& s);
void addItem(const QString& s);
void PutTextStr(const QString& text);
void putTextStr(const QString& text);
void internalClear();
private:
SynEditStringRecList mList;
@ -125,9 +125,9 @@ private:
//int mCapacity;
FileEndingType mFileEndingType;
bool mAppendNewLineAtEOF;
ConvertTabsProcEx mConvertTabsProc;
int mIndexOfLongestLine;
int mUpdateCount;
QRecursiveMutex mMutex;
int calculateLineColumns(int Index);
};

View File

@ -3,10 +3,6 @@
#include <QObject>
class AppTheme {
QPalette
};
class ThemeManager : public QObject
{
Q_OBJECT