mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-05-25 08:41:26 +00:00
114 lines
3.5 KiB
C++
114 lines
3.5 KiB
C++
#include "WModifyTab.h"
|
|
#include "ui_WModifyTab.h"
|
|
#include "CWorldEditor.h"
|
|
#include <Core/Scene/CScriptNode.h>
|
|
|
|
#include <QScrollArea>
|
|
#include <QScrollBar>
|
|
|
|
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<CSceneNode*>& 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<CScriptNode*>(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<CScriptNode*>(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();
|
|
}
|
|
}
|