void CSVRender::PreviewWidget::ReferenceDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight) { if (mReferenceId.empty()) return; CSMWorld::IdTable& references = dynamic_cast<CSMWorld::IdTable&> ( *mData.getTableModel (CSMWorld::UniversalId::Type_References)); int columnIndex = references.findColumnIndex (CSMWorld::Columns::ColumnId_ReferenceableId); QModelIndex index = references.getModelIndex (mReferenceId, columnIndex); if (index.row()>=topLeft.row() && index.row()<=bottomRight.row()) { /// \todo possible optimisation; check columns and only update if relevant columns have /// changed adjust(); if (index.column()>=topLeft.column() && index.column()<=bottomRight.row()) { mReferenceableId = references.data (index).toString().toUtf8().constData(); emit referenceableIdChanged (mReferenceableId); setModel(); } flagAsModified(); } }
CSVWorld::PreviewSubView::PreviewSubView (const CSMWorld::UniversalId& id, CSMDoc::Document& document) : SubView (id) { QHBoxLayout *layout = new QHBoxLayout; layout->setContentsMargins (QMargins (0, 0, 0, 0)); if (document.getData().getReferenceables().searchId (id.getId())==-1) { std::string referenceableId = document.getData().getReferences().getRecord (id.getId()).get().mRefID; referenceableIdChanged (referenceableId); mScene = new CSVRender::PreviewWidget (document.getData(), referenceableId, id.getId(), this); } else mScene = new CSVRender::PreviewWidget (document.getData(), id.getId(), this); SceneToolbar *toolbar = new SceneToolbar (48+6, this); SceneToolMode *lightingTool = mScene->makeLightingSelector (toolbar); toolbar->addTool (lightingTool); layout->addWidget (toolbar, 0); layout->addWidget (mScene, 1); QWidget *widget = new QWidget; widget->setLayout (layout); setWidget (widget); connect (mScene, SIGNAL (closeRequest()), this, SLOT (closeRequest())); connect (mScene, SIGNAL (referenceableIdChanged (const std::string&)), this, SLOT (referenceableIdChanged (const std::string&))); }