property grid - display subresources in resources
This commit is contained in:
parent
0b71130bdb
commit
cb28c53a0a
3 changed files with 33 additions and 16 deletions
|
@ -130,6 +130,17 @@ class DynamicObjectModel : public QAbstractItemModel
|
|||
return *this;
|
||||
}
|
||||
|
||||
template <typename Functor>
|
||||
void forEach(Functor functor)
|
||||
{
|
||||
for (int i = 0; i < m_node->m_children.size(); ++i)
|
||||
{
|
||||
auto o = (m_parent->*m_getter)(i);
|
||||
Node& node = *m_node->m_children[i];
|
||||
functor(i, o, node);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename Getter>
|
||||
typename IsNotFunctor<Getter, Array>::type property(QString name, Getter getter)
|
||||
{
|
||||
|
|
|
@ -92,9 +92,12 @@ void ResourceModel::fillModelInfo()
|
|||
.property("Bounding radius", &Lumix::Model::getBoundingRadius);
|
||||
auto meshes = object.array("Meshes", model->getMeshCount(), &Lumix::Model::getMeshPtr, [](const Lumix::Mesh* mesh) -> const char* { return mesh->getName(); });
|
||||
meshes.property("Triangles", &Lumix::Mesh::getTriangleCount);
|
||||
meshes.property("Material", [](const Lumix::Mesh* mesh) -> const char* { return mesh->getMaterial()->getPath().c_str(); });
|
||||
/*meshes.property("Material", [](const Lumix::Mesh* mesh) -> const char* { return mesh->getMaterial()->getPath().c_str(); });
|
||||
meshes.back().onClick([this, model](int index, QWidget*, QPoint) {
|
||||
setResource(model->getMesh(index).getMaterial()->getPath());
|
||||
});*/
|
||||
meshes.forEach([this](int, const Lumix::Mesh* mesh, Node& node){
|
||||
fillMaterialInfo(mesh->getMaterial(), node.addChild("material"));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -156,10 +159,11 @@ void ResourceModel::setMaterialShader(Lumix::Material* material, QString value)
|
|||
}
|
||||
|
||||
|
||||
void ResourceModel::fillMaterialInfo()
|
||||
void ResourceModel::fillMaterialInfo(Lumix::Material* material, Node& node)
|
||||
{
|
||||
Lumix::Material* material = static_cast<Lumix::Material*>(m_resource);
|
||||
auto object = this->object("Material", material);
|
||||
auto object = Object<Lumix::Material>(material, &node);
|
||||
node.m_getter = [material]() -> QVariant { return material->getPath().c_str(); };
|
||||
node.m_name = "Material";
|
||||
object.getNode().onClick = [this, material](QWidget*, QPoint) { saveMaterial(material); };
|
||||
object.getNode().onPaint = [](QPainter* painter, const QStyleOptionViewItem& option) {
|
||||
painter->save();
|
||||
|
@ -183,11 +187,6 @@ void ResourceModel::fillMaterialInfo()
|
|||
auto shader_node = object.getNode().m_children.back();
|
||||
object.getNode().m_children.back()->onClick = [shader_node, this](QWidget*, QPoint) { showFileDialog(shader_node, "Shaders (*.shd)"); };
|
||||
|
||||
object
|
||||
.array("Textures", material->getTextureCount(), &Lumix::Material::getTexture, [](Lumix::Texture* texture) -> const char* { return texture->getPath().c_str(); })
|
||||
.property("Width", &Lumix::Texture::getWidth)
|
||||
.property("Height", &Lumix::Texture::getHeight)
|
||||
.property("Bytes per pixel", &Lumix::Texture::getBytesPerPixel);
|
||||
for (int i = 0; i < material->getUniformCount(); ++i)
|
||||
{
|
||||
auto& uniform = material->getUniform(i);
|
||||
|
@ -222,13 +221,19 @@ void ResourceModel::fillMaterialInfo()
|
|||
);
|
||||
}
|
||||
}
|
||||
object
|
||||
.array("Textures", material->getTextureCount(), &Lumix::Material::getTexture, [](Lumix::Texture* texture) -> const char* { return texture->getPath().c_str(); })
|
||||
.forEach([this](int i, Lumix::Texture* texture, Node& node) {
|
||||
fillTextureInfo(texture, node);
|
||||
node.m_name = QString("Texture %1").arg(i);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
void ResourceModel::fillTextureInfo()
|
||||
void ResourceModel::fillTextureInfo(Lumix::Texture* texture, Node& node)
|
||||
{
|
||||
Lumix::Texture* texture = static_cast<Lumix::Texture*>(m_resource);
|
||||
auto obj = object("Texture", texture)
|
||||
node.m_name = "Texture";
|
||||
auto obj = Object<Lumix::Texture>(texture, &node)
|
||||
.property("Width", &Lumix::Texture::getWidth)
|
||||
.property("Height", &Lumix::Texture::getHeight)
|
||||
.property("Bytes per pixel", &Lumix::Texture::getBytesPerPixel);
|
||||
|
@ -262,11 +267,11 @@ void ResourceModel::onResourceLoaded(Lumix::Resource::State, Lumix::Resource::St
|
|||
}
|
||||
else if (dynamic_cast<Lumix::Material*>(m_resource))
|
||||
{
|
||||
fillMaterialInfo();
|
||||
fillMaterialInfo(static_cast<Lumix::Material*>(m_resource), getRoot());
|
||||
}
|
||||
else if (dynamic_cast<Lumix::Texture*>(m_resource))
|
||||
{
|
||||
fillTextureInfo();
|
||||
fillTextureInfo(static_cast<Lumix::Texture*>(m_resource), getRoot());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -9,6 +9,7 @@ namespace Lumix
|
|||
{
|
||||
class Material;
|
||||
class Resource;
|
||||
class Texture;
|
||||
class WorldEditor;
|
||||
}
|
||||
|
||||
|
@ -25,8 +26,8 @@ class ResourceModel : public DynamicObjectModel
|
|||
private:
|
||||
void onResourceLoaded(Lumix::Resource::State, Lumix::Resource::State new_state);
|
||||
void fillModelInfo();
|
||||
void fillMaterialInfo();
|
||||
void fillTextureInfo();
|
||||
void fillMaterialInfo(Lumix::Material* material, Node& node);
|
||||
void fillTextureInfo(Lumix::Texture*, Node& node);
|
||||
void saveMaterial(Lumix::Material* material);
|
||||
void showFileDialog(DynamicObjectModel::Node* node, QString filter);
|
||||
void setMaterialShader(Lumix::Material* material, QString value);
|
||||
|
|
Loading…
Reference in a new issue