mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-01 04:15:33 +00:00
moved change lock from ScriptSubView to ScriptEdit
This commit is contained in:
parent
2f08d44313
commit
d4981c3037
4 changed files with 55 additions and 35 deletions
|
@ -9,10 +9,22 @@
|
||||||
#include "../../model/world/universalid.hpp"
|
#include "../../model/world/universalid.hpp"
|
||||||
#include "../../model/world/tablemimedata.hpp"
|
#include "../../model/world/tablemimedata.hpp"
|
||||||
|
|
||||||
|
CSVWorld::ScriptEdit::ChangeLock::ChangeLock (ScriptEdit& edit) : mEdit (edit)
|
||||||
|
{
|
||||||
|
++mEdit.mChangeLocked;
|
||||||
|
}
|
||||||
|
|
||||||
|
CSVWorld::ScriptEdit::ChangeLock::~ChangeLock()
|
||||||
|
{
|
||||||
|
--mEdit.mChangeLocked;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
CSVWorld::ScriptEdit::ScriptEdit (QWidget* parent, const CSMDoc::Document& document) :
|
CSVWorld::ScriptEdit::ScriptEdit (QWidget* parent, const CSMDoc::Document& document) :
|
||||||
QTextEdit (parent),
|
QTextEdit (parent),
|
||||||
mDocument (document),
|
mDocument (document),
|
||||||
mWhiteListQoutes("^[a-z|_]{1}[a-z|0-9|_]{0,}$", Qt::CaseInsensitive)
|
mWhiteListQoutes("^[a-z|_]{1}[a-z|0-9|_]{0,}$", Qt::CaseInsensitive),
|
||||||
|
mChangeLocked (0)
|
||||||
{
|
{
|
||||||
setAcceptRichText (false);
|
setAcceptRichText (false);
|
||||||
setLineWrapMode (QTextEdit::NoWrap);
|
setLineWrapMode (QTextEdit::NoWrap);
|
||||||
|
@ -50,6 +62,11 @@ CSVWorld::ScriptEdit::ScriptEdit (QWidget* parent, const CSMDoc::Document& docum
|
||||||
<<CSMWorld::UniversalId::Type_Region;
|
<<CSMWorld::UniversalId::Type_Region;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSVWorld::ScriptEdit::isChangeLocked() const
|
||||||
|
{
|
||||||
|
return mChangeLocked!=0;
|
||||||
|
}
|
||||||
|
|
||||||
void CSVWorld::ScriptEdit::dragEnterEvent (QDragEnterEvent* event)
|
void CSVWorld::ScriptEdit::dragEnterEvent (QDragEnterEvent* event)
|
||||||
{
|
{
|
||||||
const CSMWorld::TableMimeData* mime = dynamic_cast<const CSMWorld::TableMimeData*> (event->mimeData());
|
const CSMWorld::TableMimeData* mime = dynamic_cast<const CSMWorld::TableMimeData*> (event->mimeData());
|
||||||
|
|
|
@ -19,9 +19,37 @@ namespace CSVWorld
|
||||||
class ScriptEdit : public QTextEdit
|
class ScriptEdit : public QTextEdit
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
class ChangeLock
|
||||||
|
{
|
||||||
|
ScriptEdit& mEdit;
|
||||||
|
|
||||||
|
ChangeLock (const ChangeLock&);
|
||||||
|
ChangeLock& operator= (const ChangeLock&);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
ChangeLock (ScriptEdit& edit);
|
||||||
|
~ChangeLock();
|
||||||
|
};
|
||||||
|
|
||||||
|
friend class ChangeLock;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int mChangeLocked;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
ScriptEdit (QWidget* parent, const CSMDoc::Document& document);
|
ScriptEdit (QWidget* parent, const CSMDoc::Document& document);
|
||||||
|
|
||||||
|
/// Should changes to the data be ignored (i.e. not cause updated)?
|
||||||
|
///
|
||||||
|
/// \note This mechanism is used to avoid infinite update recursions
|
||||||
|
bool isChangeLocked() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVector<CSMWorld::UniversalId::Type> mAllowedTypes;
|
QVector<CSMWorld::UniversalId::Type> mAllowedTypes;
|
||||||
const CSMDoc::Document& mDocument;
|
const CSMDoc::Document& mDocument;
|
||||||
|
|
|
@ -15,18 +15,8 @@
|
||||||
#include "scripthighlighter.hpp"
|
#include "scripthighlighter.hpp"
|
||||||
#include "scriptedit.hpp"
|
#include "scriptedit.hpp"
|
||||||
|
|
||||||
CSVWorld::ScriptSubView::ChangeLock::ChangeLock (ScriptSubView& view) : mView (view)
|
|
||||||
{
|
|
||||||
++mView.mChangeLocked;
|
|
||||||
}
|
|
||||||
|
|
||||||
CSVWorld::ScriptSubView::ChangeLock::~ChangeLock()
|
|
||||||
{
|
|
||||||
--mView.mChangeLocked;
|
|
||||||
}
|
|
||||||
|
|
||||||
CSVWorld::ScriptSubView::ScriptSubView (const CSMWorld::UniversalId& id, CSMDoc::Document& document)
|
CSVWorld::ScriptSubView::ScriptSubView (const CSMWorld::UniversalId& id, CSMDoc::Document& document)
|
||||||
: SubView (id), mDocument (document), mColumn (-1), mChangeLocked (0)
|
: SubView (id), mDocument (document), mColumn (-1)
|
||||||
{
|
{
|
||||||
setWidget (mEditor = new ScriptEdit (this, mDocument));
|
setWidget (mEditor = new ScriptEdit (this, mDocument));
|
||||||
|
|
||||||
|
@ -78,10 +68,10 @@ void CSVWorld::ScriptSubView::idListChanged()
|
||||||
|
|
||||||
void CSVWorld::ScriptSubView::textChanged()
|
void CSVWorld::ScriptSubView::textChanged()
|
||||||
{
|
{
|
||||||
if (mChangeLocked)
|
if (mEditor->isChangeLocked())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ChangeLock lock (*this);
|
ScriptEdit::ChangeLock lock (*mEditor);
|
||||||
|
|
||||||
mDocument.getUndoStack().push (new CSMWorld::ModifyCommand (*mModel,
|
mDocument.getUndoStack().push (new CSMWorld::ModifyCommand (*mModel,
|
||||||
mModel->getModelIndex (getUniversalId().getId(), mColumn), mEditor->toPlainText()));
|
mModel->getModelIndex (getUniversalId().getId(), mColumn), mEditor->toPlainText()));
|
||||||
|
@ -89,10 +79,10 @@ void CSVWorld::ScriptSubView::textChanged()
|
||||||
|
|
||||||
void CSVWorld::ScriptSubView::dataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight)
|
void CSVWorld::ScriptSubView::dataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight)
|
||||||
{
|
{
|
||||||
if (mChangeLocked)
|
if (mEditor->isChangeLocked())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ChangeLock lock (*this);
|
ScriptEdit::ChangeLock lock (*mEditor);
|
||||||
|
|
||||||
QModelIndex index = mModel->getModelIndex (getUniversalId().getId(), mColumn);
|
QModelIndex index = mModel->getModelIndex (getUniversalId().getId(), mColumn);
|
||||||
|
|
||||||
|
@ -115,10 +105,10 @@ void CSVWorld::ScriptSubView::rowsAboutToBeRemoved (const QModelIndex& parent, i
|
||||||
|
|
||||||
void CSVWorld::ScriptSubView::updateHighlighting()
|
void CSVWorld::ScriptSubView::updateHighlighting()
|
||||||
{
|
{
|
||||||
if (mChangeLocked)
|
if (mEditor->isChangeLocked())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ChangeLock lock (*this);
|
ScriptEdit::ChangeLock lock (*mEditor);
|
||||||
|
|
||||||
mHighlighter->rehighlight();
|
mHighlighter->rehighlight();
|
||||||
}
|
}
|
|
@ -21,34 +21,19 @@ namespace CSMWorld
|
||||||
namespace CSVWorld
|
namespace CSVWorld
|
||||||
{
|
{
|
||||||
class ScriptHighlighter;
|
class ScriptHighlighter;
|
||||||
|
class ScriptEdit;
|
||||||
|
|
||||||
class ScriptSubView : public CSVDoc::SubView
|
class ScriptSubView : public CSVDoc::SubView
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
QTextEdit *mEditor;
|
ScriptEdit *mEditor;
|
||||||
CSMDoc::Document& mDocument;
|
CSMDoc::Document& mDocument;
|
||||||
CSMWorld::IdTable *mModel;
|
CSMWorld::IdTable *mModel;
|
||||||
int mColumn;
|
int mColumn;
|
||||||
int mChangeLocked;
|
|
||||||
ScriptHighlighter *mHighlighter;
|
ScriptHighlighter *mHighlighter;
|
||||||
QTimer mUpdateTimer;
|
QTimer mUpdateTimer;
|
||||||
|
|
||||||
class ChangeLock
|
|
||||||
{
|
|
||||||
ScriptSubView& mView;
|
|
||||||
|
|
||||||
ChangeLock (const ChangeLock&);
|
|
||||||
ChangeLock& operator= (const ChangeLock&);
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
ChangeLock (ScriptSubView& view);
|
|
||||||
~ChangeLock();
|
|
||||||
};
|
|
||||||
|
|
||||||
friend class ChangeLock;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ScriptSubView (const CSMWorld::UniversalId& id, CSMDoc::Document& document);
|
ScriptSubView (const CSMWorld::UniversalId& id, CSMDoc::Document& document);
|
||||||
|
|
Loading…
Reference in a new issue