diff --git a/apps/opencs/view/world/table.cpp b/apps/opencs/view/world/table.cpp index 1595b6926..31f7d22ed 100644 --- a/apps/opencs/view/world/table.cpp +++ b/apps/opencs/view/world/table.cpp @@ -107,8 +107,7 @@ void CSVWorld::CommandDelegate::setEditLock (bool locked) mEditLock = locked; } - - void CSVWorld::Table::contextMenuEvent (QContextMenuEvent *event) +void CSVWorld::Table::contextMenuEvent (QContextMenuEvent *event) { QModelIndexList selectedRows = selectionModel()->selectedRows(); @@ -117,15 +116,55 @@ void CSVWorld::CommandDelegate::setEditLock (bool locked) if (mCreateAction) menu.addAction (mCreateAction); - if (selectedRows.size()>0) + if (listRevertableSelectedIds().size()>0) menu.addAction (mRevertAction); - if (selectedRows.size()>0) + if (listDeletableSelectedIds().size()>0) menu.addAction (mDeleteAction); menu.exec (event->globalPos()); } +std::vector CSVWorld::Table::listRevertableSelectedIds() const +{ + QModelIndexList selectedRows = selectionModel()->selectedRows(); + + std::vector revertableIds; + + for (QModelIndexList::const_iterator iter (selectedRows.begin()); iter!=selectedRows.end(); ++iter) + { + std::string id = mProxyModel->data (*iter).toString().toStdString(); + + CSMWorld::RecordBase::State state = + static_cast (mModel->data (mModel->getModelIndex (id, 1)).toInt()); + + if (state!=CSMWorld::RecordBase::State_BaseOnly) + revertableIds.push_back (id); + } + + return revertableIds; +} + +std::vector CSVWorld::Table::listDeletableSelectedIds() const +{ + QModelIndexList selectedRows = selectionModel()->selectedRows(); + + std::vector deletableIds; + + for (QModelIndexList::const_iterator iter (selectedRows.begin()); iter!=selectedRows.end(); ++iter) + { + std::string id = mProxyModel->data (*iter).toString().toStdString(); + + CSMWorld::RecordBase::State state = + static_cast (mModel->data (mModel->getModelIndex (id, 1)).toInt()); + + if (state!=CSMWorld::RecordBase::State_Deleted) + deletableIds.push_back (id); + } + + return deletableIds; +} + CSVWorld::Table::Table (const CSMWorld::UniversalId& id, CSMWorld::Data& data, QUndoStack& undoStack, bool createAndDelete) : mUndoStack (undoStack), mCreateAction (0) @@ -189,20 +228,7 @@ void CSVWorld::Table::createRecord() void CSVWorld::Table::revertRecord() { - QModelIndexList selectedRows = selectionModel()->selectedRows(); - - std::vector revertableIds; - - for (QModelIndexList::const_iterator iter (selectedRows.begin()); iter!=selectedRows.end(); ++iter) - { - std::string id = mProxyModel->data (*iter).toString().toStdString(); - - CSMWorld::RecordBase::State state = - static_cast (mModel->data (mModel->getModelIndex (id, 1)).toInt()); - - if (state!=CSMWorld::RecordBase::State_BaseOnly) - revertableIds.push_back (id); - } + std::vector revertableIds = listRevertableSelectedIds(); if (revertableIds.size()>0) { @@ -219,30 +245,17 @@ void CSVWorld::Table::revertRecord() void CSVWorld::Table::deleteRecord() { - QModelIndexList selectedRows = selectionModel()->selectedRows(); + std::vector deletableIds = listDeletableSelectedIds(); - std::vector revertableIds; - - for (QModelIndexList::const_iterator iter (selectedRows.begin()); iter!=selectedRows.end(); ++iter) + if (deletableIds.size()>0) { - std::string id = mProxyModel->data (*iter).toString().toStdString(); - - CSMWorld::RecordBase::State state = - static_cast (mModel->data (mModel->getModelIndex (id, 1)).toInt()); - - if (state!=CSMWorld::RecordBase::State_Deleted) - revertableIds.push_back (id); - } - - if (revertableIds.size()>0) - { - if (revertableIds.size()>1) + if (deletableIds.size()>1) mUndoStack.beginMacro (tr ("Delete multiple records")); - for (std::vector::const_iterator iter (revertableIds.begin()); iter!=revertableIds.end(); ++iter) + for (std::vector::const_iterator iter (deletableIds.begin()); iter!=deletableIds.end(); ++iter) mUndoStack.push (new CSMWorld::DeleteCommand (*mModel, *iter)); - if (revertableIds.size()>1) + if (deletableIds.size()>1) mUndoStack.endMacro(); } } \ No newline at end of file diff --git a/apps/opencs/view/world/table.hpp b/apps/opencs/view/world/table.hpp index 555dc8e1f..264d2bc5c 100644 --- a/apps/opencs/view/world/table.hpp +++ b/apps/opencs/view/world/table.hpp @@ -2,6 +2,7 @@ #define CSV_WORLD_TABLE_H #include +#include #include @@ -37,6 +38,10 @@ namespace CSVWorld void contextMenuEvent (QContextMenuEvent *event); + std::vector listRevertableSelectedIds() const; + + std::vector listDeletableSelectedIds() const; + public: Table (const CSMWorld::UniversalId& id, CSMWorld::Data& data, QUndoStack& undoStack, bool createAndDelete);