1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-01-01 03:21:41 +00:00
OpenMW/apps/opencs/view/render/previewwidget.cpp
jvoisin c7a3f43915 Minor header cleanup
This has been done via CLion's "unused include directive",
set to "detect completely unused".
2023-04-30 16:26:03 +02:00

132 lines
4.6 KiB
C++

#include "previewwidget.hpp"
#include <apps/opencs/model/world/columns.hpp>
#include <apps/opencs/model/world/record.hpp>
#include <apps/opencs/model/world/universalid.hpp>
#include <apps/opencs/view/render/object.hpp>
#include <apps/opencs/view/render/scenewidget.hpp>
#include "../../model/world/data.hpp"
#include "../../model/world/idtable.hpp"
class QWidget;
CSVRender::PreviewWidget::PreviewWidget(
CSMWorld::Data& data, const std::string& id, bool referenceable, QWidget* parent)
: SceneWidget(data.getResourceSystem(), parent)
, mData(data)
, mObject(data, mRootNode, id, referenceable)
{
selectNavigationMode("orbit");
QAbstractItemModel* referenceables = mData.getTableModel(CSMWorld::UniversalId::Type_Referenceables);
connect(referenceables, &QAbstractItemModel::dataChanged, this, &PreviewWidget::referenceableDataChanged);
connect(
referenceables, &QAbstractItemModel::rowsAboutToBeRemoved, this, &PreviewWidget::referenceableAboutToBeRemoved);
connect(&mData, &CSMWorld::Data::assetTablesChanged, this, &PreviewWidget::assetTablesChanged);
setExterior(false);
if (!referenceable)
{
QAbstractItemModel* references = mData.getTableModel(CSMWorld::UniversalId::Type_References);
connect(references, &QAbstractItemModel::dataChanged, this, &PreviewWidget::referenceDataChanged);
connect(references, &QAbstractItemModel::rowsAboutToBeRemoved, this, &PreviewWidget::referenceAboutToBeRemoved);
}
}
void CSVRender::PreviewWidget::referenceableDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
if (mObject.referenceableDataChanged(topLeft, bottomRight))
flagAsModified();
if (mObject.getReferenceId().empty())
{
CSMWorld::IdTable& referenceables
= dynamic_cast<CSMWorld::IdTable&>(*mData.getTableModel(CSMWorld::UniversalId::Type_Referenceables));
QModelIndex index = referenceables.getModelIndex(
mObject.getReferenceableId(), referenceables.findColumnIndex(CSMWorld::Columns::ColumnId_Modification));
if (referenceables.data(index).toInt() == CSMWorld::RecordBase::State_Deleted)
emit closeRequest();
}
}
void CSVRender::PreviewWidget::referenceableAboutToBeRemoved(const QModelIndex& parent, int start, int end)
{
if (mObject.referenceableAboutToBeRemoved(parent, start, end))
flagAsModified();
if (mObject.getReferenceableId().empty())
return;
CSMWorld::IdTable& referenceables
= dynamic_cast<CSMWorld::IdTable&>(*mData.getTableModel(CSMWorld::UniversalId::Type_Referenceables));
QModelIndex index = referenceables.getModelIndex(mObject.getReferenceableId(), 0);
if (index.row() >= start && index.row() <= end)
{
if (mObject.getReferenceId().empty())
{
// this is a preview for a referenceble
emit closeRequest();
}
}
}
void CSVRender::PreviewWidget::referenceDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
if (mObject.referenceDataChanged(topLeft, bottomRight))
flagAsModified();
if (mObject.getReferenceId().empty())
return;
CSMWorld::IdTable& references
= dynamic_cast<CSMWorld::IdTable&>(*mData.getTableModel(CSMWorld::UniversalId::Type_References));
// check for deleted state
{
QModelIndex index = references.getModelIndex(
mObject.getReferenceId(), references.findColumnIndex(CSMWorld::Columns::ColumnId_Modification));
if (references.data(index).toInt() == CSMWorld::RecordBase::State_Deleted)
{
emit closeRequest();
return;
}
}
int columnIndex = references.findColumnIndex(CSMWorld::Columns::ColumnId_ReferenceableId);
QModelIndex index = references.getModelIndex(mObject.getReferenceId(), columnIndex);
if (index.row() >= topLeft.row() && index.row() <= bottomRight.row())
if (index.column() >= topLeft.column() && index.column() <= bottomRight.row())
emit referenceableIdChanged(mObject.getReferenceableId());
}
void CSVRender::PreviewWidget::referenceAboutToBeRemoved(const QModelIndex& parent, int start, int end)
{
if (mObject.getReferenceId().empty())
return;
CSMWorld::IdTable& references
= dynamic_cast<CSMWorld::IdTable&>(*mData.getTableModel(CSMWorld::UniversalId::Type_References));
QModelIndex index = references.getModelIndex(mObject.getReferenceId(), 0);
if (index.row() >= start && index.row() <= end)
emit closeRequest();
}
void CSVRender::PreviewWidget::assetTablesChanged()
{
mObject.reloadAssets();
}