1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-04 03:40:14 +00:00

added missing edit locks for create/revert/delete

This commit is contained in:
Marc Zinnschlag 2012-12-08 18:15:00 +01:00
parent 6c18be39f0
commit 89b4497331
2 changed files with 47 additions and 30 deletions

View File

@ -113,14 +113,19 @@ void CSVWorld::Table::contextMenuEvent (QContextMenuEvent *event)
QMenu menu (this); QMenu menu (this);
if (mCreateAction) /// \todo add menu items for select all and clear selection
menu.addAction (mCreateAction);
if (listRevertableSelectedIds().size()>0) if (!mEditLock)
menu.addAction (mRevertAction); {
if (mCreateAction)
menu.addAction (mCreateAction);
if (listDeletableSelectedIds().size()>0) if (listRevertableSelectedIds().size()>0)
menu.addAction (mDeleteAction); menu.addAction (mRevertAction);
if (listDeletableSelectedIds().size()>0)
menu.addAction (mDeleteAction);
}
menu.exec (event->globalPos()); menu.exec (event->globalPos());
} }
@ -167,7 +172,7 @@ std::vector<std::string> CSVWorld::Table::listDeletableSelectedIds() const
CSVWorld::Table::Table (const CSMWorld::UniversalId& id, CSMWorld::Data& data, QUndoStack& undoStack, CSVWorld::Table::Table (const CSMWorld::UniversalId& id, CSMWorld::Data& data, QUndoStack& undoStack,
bool createAndDelete) bool createAndDelete)
: mUndoStack (undoStack), mCreateAction (0) : mUndoStack (undoStack), mCreateAction (0), mEditLock (false)
{ {
mModel = &dynamic_cast<CSMWorld::IdTable&> (*data.getTableModel (id)); mModel = &dynamic_cast<CSMWorld::IdTable&> (*data.getTableModel (id));
@ -212,50 +217,61 @@ void CSVWorld::Table::setEditLock (bool locked)
{ {
for (std::vector<CommandDelegate *>::iterator iter (mDelegates.begin()); iter!=mDelegates.end(); ++iter) for (std::vector<CommandDelegate *>::iterator iter (mDelegates.begin()); iter!=mDelegates.end(); ++iter)
(*iter)->setEditLock (locked); (*iter)->setEditLock (locked);
mEditLock = locked;
} }
#include <sstream> /// \todo remove #include <sstream> /// \todo remove
void CSVWorld::Table::createRecord() void CSVWorld::Table::createRecord()
{ {
/// \todo ask the user for an ID instead. if (!mEditLock)
static int index = 0; {
/// \todo ask the user for an ID instead.
static int index = 0;
std::ostringstream stream; std::ostringstream stream;
stream << "id" << index++; stream << "id" << index++;
mUndoStack.push (new CSMWorld::CreateCommand (*mProxyModel, stream.str())); mUndoStack.push (new CSMWorld::CreateCommand (*mProxyModel, stream.str()));
}
} }
void CSVWorld::Table::revertRecord() void CSVWorld::Table::revertRecord()
{ {
std::vector<std::string> revertableIds = listRevertableSelectedIds(); if (!mEditLock)
if (revertableIds.size()>0)
{ {
if (revertableIds.size()>1) std::vector<std::string> revertableIds = listRevertableSelectedIds();
mUndoStack.beginMacro (tr ("Revert multiple records"));
for (std::vector<std::string>::const_iterator iter (revertableIds.begin()); iter!=revertableIds.end(); ++iter) if (revertableIds.size()>0)
mUndoStack.push (new CSMWorld::RevertCommand (*mModel, *iter)); {
if (revertableIds.size()>1)
mUndoStack.beginMacro (tr ("Revert multiple records"));
if (revertableIds.size()>1) for (std::vector<std::string>::const_iterator iter (revertableIds.begin()); iter!=revertableIds.end(); ++iter)
mUndoStack.endMacro(); mUndoStack.push (new CSMWorld::RevertCommand (*mModel, *iter));
if (revertableIds.size()>1)
mUndoStack.endMacro();
}
} }
} }
void CSVWorld::Table::deleteRecord() void CSVWorld::Table::deleteRecord()
{ {
std::vector<std::string> deletableIds = listDeletableSelectedIds(); if (!mEditLock)
if (deletableIds.size()>0)
{ {
if (deletableIds.size()>1) std::vector<std::string> deletableIds = listDeletableSelectedIds();
mUndoStack.beginMacro (tr ("Delete multiple records"));
for (std::vector<std::string>::const_iterator iter (deletableIds.begin()); iter!=deletableIds.end(); ++iter) if (deletableIds.size()>0)
mUndoStack.push (new CSMWorld::DeleteCommand (*mModel, *iter)); {
if (deletableIds.size()>1)
mUndoStack.beginMacro (tr ("Delete multiple records"));
if (deletableIds.size()>1) for (std::vector<std::string>::const_iterator iter (deletableIds.begin()); iter!=deletableIds.end(); ++iter)
mUndoStack.endMacro(); mUndoStack.push (new CSMWorld::DeleteCommand (*mModel, *iter));
if (deletableIds.size()>1)
mUndoStack.endMacro();
}
} }
} }

View File

@ -33,6 +33,7 @@ namespace CSVWorld
QAction *mDeleteAction; QAction *mDeleteAction;
CSMWorld::IdTableProxyModel *mProxyModel; CSMWorld::IdTableProxyModel *mProxyModel;
CSMWorld::IdTable *mModel; CSMWorld::IdTable *mModel;
bool mEditLock;
private: private: