mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-04-01 18:06:43 +00:00
update syntax highlighting when ID list changes
This commit is contained in:
parent
ba5e2a0330
commit
8d4f4e395f
4 changed files with 49 additions and 2 deletions
|
@ -125,5 +125,9 @@ void CSVWorld::ScriptHighlighter::highlightBlock (const QString& text)
|
||||||
scanner.scan (*this);
|
scanner.scan (*this);
|
||||||
}
|
}
|
||||||
catch (...) {} // ignore syntax errors
|
catch (...) {} // ignore syntax errors
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVWorld::ScriptHighlighter::invalidateIds()
|
||||||
|
{
|
||||||
|
mContext.invalidateIds();
|
||||||
}
|
}
|
|
@ -77,6 +77,8 @@ namespace CSVWorld
|
||||||
ScriptHighlighter (const CSMWorld::Data& data, QTextDocument *parent);
|
ScriptHighlighter (const CSMWorld::Data& data, QTextDocument *parent);
|
||||||
|
|
||||||
virtual void highlightBlock (const QString& text);
|
virtual void highlightBlock (const QString& text);
|
||||||
|
|
||||||
|
void invalidateIds();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,13 @@ CSVWorld::ScriptSubView::ScriptSubView (const CSMWorld::UniversalId& id, CSMDoc:
|
||||||
connect (mModel, SIGNAL (rowsAboutToBeRemoved (const QModelIndex&, int, int)),
|
connect (mModel, SIGNAL (rowsAboutToBeRemoved (const QModelIndex&, int, int)),
|
||||||
this, SLOT (rowsAboutToBeRemoved (const QModelIndex&, int, int)));
|
this, SLOT (rowsAboutToBeRemoved (const QModelIndex&, int, int)));
|
||||||
|
|
||||||
new ScriptHighlighter (document.getData(), mEditor->document());
|
connect (&document.getData(), SIGNAL (idListChanged()), this, SLOT (idListChanged()));
|
||||||
|
|
||||||
|
mHighlighter = new ScriptHighlighter (document.getData(), mEditor->document());
|
||||||
|
|
||||||
|
connect (&mUpdateTimer, SIGNAL (timeout()), this, SLOT (updateHighlighting()));
|
||||||
|
|
||||||
|
mUpdateTimer.setSingleShot (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVWorld::ScriptSubView::setEditLock (bool locked)
|
void CSVWorld::ScriptSubView::setEditLock (bool locked)
|
||||||
|
@ -66,8 +72,19 @@ void CSVWorld::ScriptSubView::setEditLock (bool locked)
|
||||||
mEditor->setReadOnly (locked);
|
mEditor->setReadOnly (locked);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVWorld::ScriptSubView::idListChanged()
|
||||||
|
{
|
||||||
|
mHighlighter->invalidateIds();
|
||||||
|
|
||||||
|
if (!mUpdateTimer.isActive())
|
||||||
|
mUpdateTimer.start (0);
|
||||||
|
}
|
||||||
|
|
||||||
void CSVWorld::ScriptSubView::textChanged()
|
void CSVWorld::ScriptSubView::textChanged()
|
||||||
{
|
{
|
||||||
|
if (mChangeLocked)
|
||||||
|
return;
|
||||||
|
|
||||||
ChangeLock lock (*this);
|
ChangeLock lock (*this);
|
||||||
|
|
||||||
mDocument.getUndoStack().push (new CSMWorld::ModifyCommand (*mModel,
|
mDocument.getUndoStack().push (new CSMWorld::ModifyCommand (*mModel,
|
||||||
|
@ -79,6 +96,8 @@ void CSVWorld::ScriptSubView::dataChanged (const QModelIndex& topLeft, const QMo
|
||||||
if (mChangeLocked)
|
if (mChangeLocked)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
ChangeLock lock (*this);
|
||||||
|
|
||||||
QModelIndex index = mModel->getModelIndex (getUniversalId().getId(), mColumn);
|
QModelIndex index = mModel->getModelIndex (getUniversalId().getId(), mColumn);
|
||||||
|
|
||||||
if (index.row()>=topLeft.row() && index.row()<=bottomRight.row() &&
|
if (index.row()>=topLeft.row() && index.row()<=bottomRight.row() &&
|
||||||
|
@ -96,4 +115,14 @@ void CSVWorld::ScriptSubView::rowsAboutToBeRemoved (const QModelIndex& parent, i
|
||||||
|
|
||||||
if (!parent.isValid() && index.row()>=start && index.row()<=end)
|
if (!parent.isValid() && index.row()>=start && index.row()<=end)
|
||||||
deleteLater();
|
deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVWorld::ScriptSubView::updateHighlighting()
|
||||||
|
{
|
||||||
|
if (mChangeLocked)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ChangeLock lock (*this);
|
||||||
|
|
||||||
|
mHighlighter->rehighlight();
|
||||||
}
|
}
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
#include "../doc/subview.hpp"
|
#include "../doc/subview.hpp"
|
||||||
|
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
class QTextEdit;
|
class QTextEdit;
|
||||||
class QModelIndex;
|
class QModelIndex;
|
||||||
|
|
||||||
|
@ -18,6 +20,8 @@ namespace CSMWorld
|
||||||
|
|
||||||
namespace CSVWorld
|
namespace CSVWorld
|
||||||
{
|
{
|
||||||
|
class ScriptHighlighter;
|
||||||
|
|
||||||
class ScriptSubView : public CSVDoc::SubView
|
class ScriptSubView : public CSVDoc::SubView
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -27,6 +31,8 @@ namespace CSVWorld
|
||||||
CSMWorld::IdTable *mModel;
|
CSMWorld::IdTable *mModel;
|
||||||
int mColumn;
|
int mColumn;
|
||||||
int mChangeLocked;
|
int mChangeLocked;
|
||||||
|
ScriptHighlighter *mHighlighter;
|
||||||
|
QTimer mUpdateTimer;
|
||||||
|
|
||||||
class ChangeLock
|
class ChangeLock
|
||||||
{
|
{
|
||||||
|
@ -49,13 +55,19 @@ namespace CSVWorld
|
||||||
|
|
||||||
virtual void setEditLock (bool locked);
|
virtual void setEditLock (bool locked);
|
||||||
|
|
||||||
private slots:
|
public slots:
|
||||||
|
|
||||||
|
void idListChanged();
|
||||||
|
|
||||||
void textChanged();
|
void textChanged();
|
||||||
|
|
||||||
void dataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight);
|
void dataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight);
|
||||||
|
|
||||||
void rowsAboutToBeRemoved (const QModelIndex& parent, int start, int end);
|
void rowsAboutToBeRemoved (const QModelIndex& parent, int start, int end);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
|
||||||
|
void updateHighlighting();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue