mirror of
https://github.com/Linloir/SceneEditor.git
synced 2025-12-16 23:18:12 +08:00
[UI][ADD] Model selection list
This commit is contained in:
parent
ffa0ac065a
commit
edeaa7f3c6
@ -1 +1,83 @@
|
||||
#pragma once
|
||||
#include <qfiledialog.h>
|
||||
|
||||
#include "modelselector.h"
|
||||
|
||||
ModelSelector::ModelSelector(QWidget* parent) :
|
||||
QWidget(parent)
|
||||
{
|
||||
// Set maximum width
|
||||
setMaximumWidth(240);
|
||||
|
||||
// Set up the main layout
|
||||
_stretchLayout = new QVBoxLayout(this);
|
||||
_stretchLayout->setContentsMargins(0, 0, 0, 0);
|
||||
_stretchLayout->setSpacing(8);
|
||||
setLayout(_stretchLayout);
|
||||
|
||||
// Create and add the 'add new' button
|
||||
_addNewObjectBtn = new PushButton(nullptr, this);
|
||||
_addNewObjectBtn->setChildWidget(new QLabel("Add New", _addNewObjectBtn));
|
||||
_addNewObjectBtn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||
_addNewObjectBtn->setMargin(32, 24, 32, 24);
|
||||
_addNewObjectBtn->setRadius(10);
|
||||
_addNewObjectBtn->setBackgroundColor(QColor(58, 143, 183, 20));
|
||||
_stretchLayout->addWidget(_addNewObjectBtn);
|
||||
_addNewObjectBtn->show();
|
||||
|
||||
// Create the selection list widget
|
||||
_objectList = new ScrollListWidget(this);
|
||||
_stretchLayout->addWidget(_objectList);
|
||||
_objectList->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
_objectList->show();
|
||||
|
||||
// Connect
|
||||
connect(_addNewObjectBtn, &PushButton::onClick, this, &ModelSelector::addNewObject);
|
||||
}
|
||||
|
||||
ModelSelector::~ModelSelector() {}
|
||||
|
||||
void ModelSelector::addNewObject() {
|
||||
QString path = getNewObjectPath();
|
||||
if (path.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Model* model = loadObject(path);
|
||||
ModelSelectable* newSelectable = new ModelSelectable(model, this);
|
||||
|
||||
_objectSelectables.push_back(newSelectable);
|
||||
_objectList->addWidget(newSelectable);
|
||||
|
||||
connect(newSelectable, &ModelSelectable::onSelected, this, [=]() {
|
||||
emit onObjectSelected(model);
|
||||
});
|
||||
connect(newSelectable, &ModelSelectable::onRemoved, this, [=]() {
|
||||
removeObject(newSelectable);
|
||||
});
|
||||
}
|
||||
|
||||
QString ModelSelector::getNewObjectPath() {
|
||||
QString path = QFileDialog::getOpenFileName(this, "Select Model", "", "Model Files (*.obj)");
|
||||
return path;
|
||||
}
|
||||
|
||||
Model* ModelSelector::loadObject(const QString& path) {
|
||||
Model* model = new Model(path.toStdString());
|
||||
return model;
|
||||
}
|
||||
|
||||
void ModelSelector::removeObject(ModelSelectable* selectable) {
|
||||
// Check if selectable is still in list
|
||||
if (!_objectSelectables.contains(selectable)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Remove the selectable from the list
|
||||
_objectSelectables.removeAll(selectable);
|
||||
|
||||
// Remove the selectable from the list widget
|
||||
_objectList->removeWidget(selectable);
|
||||
|
||||
// Delete the selectable
|
||||
delete selectable;
|
||||
}
|
||||
|
||||
@ -1,12 +1,40 @@
|
||||
#pragma once
|
||||
|
||||
#include <qwidget.h>
|
||||
#include <qboxlayout.h>
|
||||
#include <qlist.h>
|
||||
|
||||
//class ModelSelector : public QWidget
|
||||
//{
|
||||
// Q_OBJECT
|
||||
//
|
||||
//public:
|
||||
// ModelSelector(QWidget* parent = 0);
|
||||
// ~ModelSelector();
|
||||
//};
|
||||
#include "scrolllistwidget.h"
|
||||
#include "pushbutton.h"
|
||||
#include "modelselectable.h"
|
||||
#include "model.h"
|
||||
|
||||
class ModelSelector : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ModelSelector(QWidget* parent = 0);
|
||||
~ModelSelector();
|
||||
|
||||
private:
|
||||
// UI elements
|
||||
QVBoxLayout* _stretchLayout = nullptr;
|
||||
PushButton* _addNewObjectBtn = nullptr;
|
||||
ScrollListWidget* _objectList = nullptr;
|
||||
|
||||
// Object selection storage
|
||||
QList<ModelSelectable*> _objectSelectables;
|
||||
|
||||
private:
|
||||
// Slot functions
|
||||
void addNewObject();
|
||||
|
||||
// Util functions
|
||||
QString getNewObjectPath();
|
||||
Model* loadObject(const QString& path);
|
||||
void removeObject(ModelSelectable* selectable);
|
||||
|
||||
signals:
|
||||
void onObjectSelected(Model* selectedModel);
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user