qtk/src/designer-plugins/treeview.cpp

84 lines
3.0 KiB
C++
Raw Normal View History

/*##############################################################################
## Author: Shaun Reed ##
## Legal: All Content (c) 2023 Shaun Reed, all rights reserved ##
## About: TreeView plugin for scene hierarchy ##
## ##
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
################################################################################
*/
#include "treeview.h"
#include "qtkwidget.h"
#include "ui_treeview.h"
/*******************************************************************************
* Constructors, Destructors
******************************************************************************/
Qtk::TreeView::TreeView(QWidget * parent) :
2025-03-08 11:47:19 -05:00
QDockWidget(parent), ui(new Ui::TreeView)
{
ui->setupUi(this);
connect(
ui->treeWidget, &QTreeWidget::itemClicked, this, &TreeView::itemSelect);
2025-03-08 11:52:39 -05:00
connect(ui->treeWidget,
&QTreeWidget::itemDoubleClicked,
this,
2025-03-08 11:47:19 -05:00
&TreeView::itemFocus);
}
2025-03-08 11:47:19 -05:00
Qtk::TreeView::~TreeView()
{
delete ui;
}
/*******************************************************************************
* Public Methods
******************************************************************************/
2025-03-08 11:47:19 -05:00
void Qtk::TreeView::updateView(const Qtk::Scene * scene)
{
ui->treeWidget->clear();
ui->treeWidget->setColumnCount(1);
mSceneName = scene->getSceneName();
auto objects = scene->getObjects();
2025-03-08 11:47:19 -05:00
for (const auto & object : objects) {
2025-03-09 11:43:38 -04:00
QStringList list(QStringList(QString(object->getName().c_str())));
ui->treeWidget->insertTopLevelItem(0, new QTreeWidgetItem(list));
}
}
2025-03-08 11:47:19 -05:00
void Qtk::TreeView::itemFocus(QTreeWidgetItem * item, int column)
{
2025-03-09 11:43:38 -04:00
const QString & name = item->text(column);
auto scene = QtkWidget::mWidgetManager.get_widget()->getScene();
auto object = scene->getObject(name);
2023-12-27 19:36:47 +00:00
// If the object is a mesh or model, focus the camera on it.
2025-03-08 11:47:19 -05:00
if (object == Q_NULLPTR) {
qDebug() << "Attempt to get non-existing object with name '" << name
<< "'\n";
2025-03-09 11:43:38 -04:00
return;
}
2025-03-09 11:43:38 -04:00
const Transform3D & objectTransform = object->getTransform();
auto & camera_transform = Qtk::Scene::getCamera().getTransform();
auto focusScale = objectTransform.getScale();
2023-12-27 19:36:47 +00:00
float width = focusScale.x() / 2.0f;
float height = focusScale.y() / 2.0f;
2025-03-09 11:43:38 -04:00
QVector3D pos = objectTransform.getTranslation();
2023-12-27 19:36:47 +00:00
// pos.setX(pos.x() + width);
pos.setY(pos.y() + height);
2025-03-09 11:43:38 -04:00
camera_transform.setTranslation(pos);
camera_transform.translate(0.0f, 0.0f, 3.0f);
2023-12-27 19:36:47 +00:00
// Emit signal from qtk widget for new object focus. Triggers GUI updates.
emit QtkWidget::mWidgetManager.get_widget()->objectFocusChanged(name);
}
void Qtk::TreeView::itemSelect(QTreeWidgetItem * item, int column)
{
// Emit signal from qtk widget for new object focus. Triggers GUI updates.
const QString & name = item->text(column);
emit QtkWidget::mWidgetManager.get_widget()->objectFocusChanged(name);
}