#include "WModifyTab.h" #include "ui_WModifyTab.h" #include "CWorldEditor.h" #include #include #include WModifyTab::WModifyTab(QWidget *pParent) : QWidget(pParent), ui(new Ui::WModifyTab) { ui->setupUi(this); int PropViewWidth = ui->PropertyView->width(); ui->PropertyView->header()->resizeSection(0, PropViewWidth * 0.3); ui->PropertyView->header()->resizeSection(1, PropViewWidth * 0.3); ui->PropertyView->header()->setSectionResizeMode(1, QHeaderView::Fixed); mpInLinkModel = new CLinkModel(this); mpInLinkModel->SetConnectionType(CLinkModel::eIncoming); mpOutLinkModel = new CLinkModel(this); mpOutLinkModel->SetConnectionType(CLinkModel::eOutgoing); ui->InLinksTableView->setModel(mpInLinkModel); ui->OutLinksTableView->setModel(mpOutLinkModel); ui->InLinksTableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); ui->OutLinksTableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); connect(ui->InLinksTableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(OnLinkTableDoubleClick(QModelIndex))); connect(ui->OutLinksTableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(OnLinkTableDoubleClick(QModelIndex))); ClearUI(); } WModifyTab::~WModifyTab() { delete ui; } void WModifyTab::SetEditor(CWorldEditor *pEditor) { mpWorldEditor = pEditor; ui->PropertyView->SetEditor(mpWorldEditor); connect(mpWorldEditor, SIGNAL(SelectionTransformed()), this, SLOT(OnWorldSelectionTransformed())); } void WModifyTab::GenerateUI(QList& Selection) { if (Selection.size() == 1) { if (mpSelectedNode != Selection.front()) { mpSelectedNode = Selection.front(); // todo: set up editing UI for Light Nodes if (mpSelectedNode->NodeType() == eScriptNode) { ui->ObjectsTabWidget->show(); CScriptNode *pScriptNode = static_cast(mpSelectedNode); CScriptObject *pObj = pScriptNode->Object(); // Set up UI ui->PropertyView->SetInstance(pObj); mpInLinkModel->SetObject(pObj); mpOutLinkModel->SetObject(pObj); ui->LightGroupBox->hide(); } } } else ClearUI(); } void WModifyTab::ClearUI() { ui->ObjectsTabWidget->hide(); ui->PropertyView->SetInstance(nullptr); ui->LightGroupBox->hide(); mpSelectedNode = nullptr; } void WModifyTab::OnWorldSelectionTransformed() { ui->PropertyView->UpdateEditorProperties(QModelIndex()); } // ************ PRIVATE SLOTS ************ void WModifyTab::OnLinkTableDoubleClick(QModelIndex Index) { if (Index.column() == 0) { // The link table will only be visible if the selected node is a script node CScriptNode *pNode = static_cast(mpSelectedNode); SLink Link; if (sender() == ui->InLinksTableView) Link = pNode->Object()->InLink(Index.row()); else if (sender() == ui->OutLinksTableView) Link = pNode->Object()->OutLink(Index.row()); CScriptNode *pLinkedNode = pNode->Scene()->ScriptNodeByID(Link.ObjectID); if (pLinkedNode) { mpWorldEditor->ClearSelection(); mpWorldEditor->SelectNode(pLinkedNode); } ui->InLinksTableView->clearSelection(); ui->OutLinksTableView->clearSelection(); } }