diff --git a/apps/opencs/view/doc/view.cpp b/apps/opencs/view/doc/view.cpp index 0c336376b8..3d5ebc84bc 100644 --- a/apps/opencs/view/doc/view.cpp +++ b/apps/opencs/view/doc/view.cpp @@ -165,6 +165,11 @@ void CSVDoc::View::updateDocumentState() for (int i=0; operations[i]!=-1; ++i) if (!(state & operations[i])) mOperations->quitOperation (operations[i]); + + QList subViews = findChildren(); + + for (QList::iterator iter (subViews.begin()); iter!=subViews.end(); ++iter) + (*iter)->setEditLock (state && CSMDoc::Document::State_Locked); } void CSVDoc::View::updateProgress (int current, int max, int type, int threads) diff --git a/apps/opencs/view/world/globals.cpp b/apps/opencs/view/world/globals.cpp index a8b6497db0..68c9012aa9 100644 --- a/apps/opencs/view/world/globals.cpp +++ b/apps/opencs/view/world/globals.cpp @@ -6,7 +6,10 @@ CSVWorld::Globals::Globals (const CSMWorld::UniversalId& id, CSMWorld::Data& data, QUndoStack& undoStack) : SubView (id) { - QTableView *table = new Table (id, data, undoStack); + setWidget (mTable = new Table (id, data, undoStack)); +} - setWidget (table); +void CSVWorld::Globals::setEditLock (bool locked) +{ + mTable->setEditLock (locked); } \ No newline at end of file diff --git a/apps/opencs/view/world/globals.hpp b/apps/opencs/view/world/globals.hpp index c4a9fd402f..33cbce47f6 100644 --- a/apps/opencs/view/world/globals.hpp +++ b/apps/opencs/view/world/globals.hpp @@ -7,11 +7,17 @@ class QUndoStack; namespace CSVWorld { + class Table; + class Globals : public SubView { + Table *mTable; + public: Globals (const CSMWorld::UniversalId& id, CSMWorld::Data& data, QUndoStack& undoStack); + + virtual void setEditLock (bool locked); }; } diff --git a/apps/opencs/view/world/subview.hpp b/apps/opencs/view/world/subview.hpp index fd7a516315..543a9b2a1e 100644 --- a/apps/opencs/view/world/subview.hpp +++ b/apps/opencs/view/world/subview.hpp @@ -29,6 +29,8 @@ namespace CSVWorld SubView (const CSMWorld::UniversalId& id); CSMWorld::UniversalId getUniversalId() const; + + virtual void setEditLock (bool locked) = 0; }; struct SubViewFactoryBase diff --git a/apps/opencs/view/world/table.cpp b/apps/opencs/view/world/table.cpp index 2c9aa431fc..590f7ea982 100644 --- a/apps/opencs/view/world/table.cpp +++ b/apps/opencs/view/world/table.cpp @@ -39,12 +39,15 @@ namespace CSVWorld class CommandDelegate : public QStyledItemDelegate { QUndoStack& mUndoStack; + bool mEditLock; public: CommandDelegate (QUndoStack& undoStack, QObject *parent); void setModelData (QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const; + + void setEditLock (bool locked); }; } @@ -80,15 +83,24 @@ QVariant CSVWorld::NastyTableModelHack::getData() const } CSVWorld::CommandDelegate::CommandDelegate (QUndoStack& undoStack, QObject *parent) -: QStyledItemDelegate (parent), mUndoStack (undoStack) +: QStyledItemDelegate (parent), mUndoStack (undoStack), mEditLock (false) {} void CSVWorld::CommandDelegate::setModelData (QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const { - NastyTableModelHack hack (*model); - QStyledItemDelegate::setModelData (editor, &hack, index); - mUndoStack.push (new CSMWorld::ModifyCommand (*model, index, hack.getData())); + if (!mEditLock) + { + NastyTableModelHack hack (*model); + QStyledItemDelegate::setModelData (editor, &hack, index); + mUndoStack.push (new CSMWorld::ModifyCommand (*model, index, hack.getData())); + } + ///< \todo provide some kind of feedback to the user, indicating that editing is currently not possible. +} + +void CSVWorld::CommandDelegate::setEditLock (bool locked) +{ + mEditLock = locked; } @@ -101,6 +113,7 @@ CSVWorld::Table::Table (const CSMWorld::UniversalId& id, CSMWorld::Data& data, Q for (int i=0; i::iterator iter (mDelegates.begin()); iter!=mDelegates.end(); ++iter) + (*iter)->setEditLock (locked); } \ No newline at end of file diff --git a/apps/opencs/view/world/table.hpp b/apps/opencs/view/world/table.hpp index dbb3c34431..ae203f5161 100644 --- a/apps/opencs/view/world/table.hpp +++ b/apps/opencs/view/world/table.hpp @@ -1,6 +1,8 @@ #ifndef CSV_WORLD_TABLE_H #define CSV_WORLD_TABLE_H +#include + #include class QUndoStack; @@ -13,12 +15,18 @@ namespace CSMWorld namespace CSVWorld { + class CommandDelegate; + ///< Table widget class Table : public QTableView { + std::vector mDelegates; + public: Table (const CSMWorld::UniversalId& id, CSMWorld::Data& data, QUndoStack& undoStack); + + void setEditLock (bool locked); }; }