From 8574d2330c36904bc1ff92cc695cb020fd9e47c5 Mon Sep 17 00:00:00 2001 From: Stanislav Date: Mon, 15 Sep 2014 23:15:32 +0600 Subject: [PATCH] Feature #1226: Request UniversalId editing from table column --- apps/opencs/view/world/table.cpp | 45 ++++++++++++++++++++++++++++++++ apps/opencs/view/world/table.hpp | 5 ++++ 2 files changed, 50 insertions(+) diff --git a/apps/opencs/view/world/table.cpp b/apps/opencs/view/world/table.cpp index 57f47033de..5f26c912c3 100644 --- a/apps/opencs/view/world/table.cpp +++ b/apps/opencs/view/world/table.cpp @@ -54,6 +54,42 @@ void CSVWorld::Table::contextMenuEvent (QContextMenuEvent *event) /// \todo add menu items for select all and clear selection + { + // Feature #1226 "Request UniversalId editing from table columns". + + if ( mGotoRefUid ) + { + delete mGotoRefUid; + + mGotoRefUid = 0; + } + + int currRow = rowAt( event->y() ), + currCol = columnAt( event->x() ); + + currRow = mProxyModel->mapToSource(mProxyModel->index( currRow, 0 )).row(); + + CSMWorld::ColumnBase::Display colType = + static_cast( + mModel->headerData( + currCol, + Qt::Horizontal, + CSMWorld::ColumnBase::Role_Display ).toInt()); + + QString cellData = mModel->data(mModel->index( currRow, currCol )).toString(); + CSMWorld::UniversalId::Type colUidType = CSMWorld::TableMimeData::convertEnums( colType ); + + if ( !cellData.isEmpty() + && colUidType != CSMWorld::UniversalId::Type::Type_None ) + { + menu.addAction( mGotoRefAction ); + menu.addSeparator(); + + mGotoRefUid = + new CSMWorld::UniversalId( colUidType, cellData.toUtf8().constData() ); + } + } + if (!mEditLock && !(mModel->getFeatures() & CSMWorld::IdTableBase::Feature_Constant)) { if (selectedRows.size()==1) @@ -218,6 +254,10 @@ CSVWorld::Table::Table (const CSMWorld::UniversalId& id, mMoveDownAction = new QAction (tr ("Move Down"), this); connect (mMoveDownAction, SIGNAL (triggered()), this, SLOT (moveDownRecord())); addAction (mMoveDownAction); + + mGotoRefAction = new QAction( tr("Go to Reference"), this ); + connect( mGotoRefAction, SIGNAL(triggered()), this, SLOT(gotoReference()) ); + addAction( mGotoRefAction ); mViewAction = new QAction (tr ("View"), this); connect (mViewAction, SIGNAL (triggered()), this, SLOT (viewRecord())); @@ -364,6 +404,11 @@ void CSVWorld::Table::moveDownRecord() } } +void CSVWorld::Table::gotoReference() +{ + emit editRequest( *mGotoRefUid, std::string() ); +} + void CSVWorld::Table::viewRecord() { QModelIndexList selectedRows = selectionModel()->selectedRows(); diff --git a/apps/opencs/view/world/table.hpp b/apps/opencs/view/world/table.hpp index 883834b602..6e3e8971e6 100644 --- a/apps/opencs/view/world/table.hpp +++ b/apps/opencs/view/world/table.hpp @@ -45,6 +45,7 @@ namespace CSVWorld QAction *mMoveUpAction; QAction *mMoveDownAction; QAction *mViewAction; + QAction *mGotoRefAction; QAction *mPreviewAction; QAction *mExtendedDeleteAction; QAction *mExtendedRevertAction; @@ -53,6 +54,8 @@ namespace CSVWorld int mRecordStatusDisplay; CSMWorld::CommandDispatcher *mDispatcher; + CSMWorld::UniversalId *mGotoRefUid = 0; + private: void contextMenuEvent (QContextMenuEvent *event); @@ -93,6 +96,8 @@ namespace CSVWorld private slots: + void gotoReference(); + void editRecord(); void cloneRecord();