Materials: External interface refinements (#21524)

This commit is contained in:
David Carter
2025-05-24 06:25:44 +00:00
committed by GitHub
parent 0ef4ee0367
commit 13b7991705
37 changed files with 1147 additions and 406 deletions

View File

@@ -32,6 +32,7 @@
#include <Mod/Material/App/MaterialLibrary.h>
#include "MaterialsEditor.h"
#include "MaterialSave.h"
#include "ui_MaterialSave.h"
@@ -360,7 +361,7 @@ void MaterialSave::showSelectedTree()
if (ui->comboLibrary->count() > 0) {
auto variant = ui->comboLibrary->currentData();
auto library = variant.value<std::shared_ptr<Materials::MaterialLibrary>>();
QIcon icon(library->getIconPath());
auto icon = MaterialsEditor::getIcon(library);
QIcon folderIcon(QStringLiteral(":/icons/folder.svg"));
_libraryName = library->getName();
_selectedPath = QStringLiteral("/") + _libraryName;

View File

@@ -572,7 +572,7 @@ void MaterialTreeWidget::fillMaterialTree()
lib->setFlags(Qt::ItemIsEnabled);
addExpanded(model, lib, param);
QIcon icon(library->getIconPath());
auto icon = MaterialsEditor::getIcon(library);
QIcon folderIcon(QStringLiteral(":/icons/folder.svg"));
addMaterials(*lib, materialTree, folderIcon, icon, param);
@@ -619,7 +619,7 @@ void MaterialTreeWidget::addRecents(QStandardItem* parent)
for (auto& uuid : _recents) {
try {
auto material = getMaterialManager().getMaterial(uuid);
QIcon icon(material->getLibrary()->getIconPath());
auto icon = MaterialsEditor::getIcon(material->getLibrary());
auto card = new QStandardItem(icon, material->getName());
card->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
card->setData(QVariant(uuid), Qt::UserRole);
@@ -636,7 +636,7 @@ void MaterialTreeWidget::addFavorites(QStandardItem* parent)
for (auto& uuid : _favorites) {
try {
auto material = getMaterialManager().getMaterial(uuid);
QIcon icon(material->getLibrary()->getIconPath());
auto icon = MaterialsEditor::getIcon(material->getLibrary());
auto card = new QStandardItem(icon, material->getName());
card->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
card->setData(QVariant(uuid), Qt::UserRole);

View File

@@ -801,6 +801,33 @@ void MaterialsEditor::createAppearanceTree()
connect(delegate, &MaterialDelegate::propertyChange, this, &MaterialsEditor::propertyChange);
}
QIcon MaterialsEditor::getIcon(const std::shared_ptr<Materials::Library>& library)
{
// Load from the QByteArray if available
QIcon icon;
if (library->hasIcon()) {
QImage image;
if (!image.loadFromData(library->getIcon())) {
Base::Console().log("Unable to load icon image for library '%s'\n",
library->getName().toStdString().c_str());
return QIcon();
}
icon = QIcon(QPixmap::fromImage(image));
}
return icon;
}
QIcon MaterialsEditor::getIcon(const std::shared_ptr<Materials::ModelLibrary>& library)
{
return getIcon(std::static_pointer_cast<Materials::Library>(library));
}
QIcon MaterialsEditor::getIcon(const std::shared_ptr<Materials::MaterialLibrary>& library)
{
return getIcon(std::static_pointer_cast<Materials::Library>(library));
}
void MaterialsEditor::addRecents(QStandardItem* parent)
{
auto tree = ui->treeMaterials;
@@ -808,13 +835,13 @@ void MaterialsEditor::addRecents(QStandardItem* parent)
try {
auto material = getMaterialManager().getMaterial(uuid);
// if (material->getLibrary()->isLocal()) {
QIcon icon = QIcon(material->getLibrary()->getIconPath());
auto card = new QStandardItem(icon, libraryPath(material));
card->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled
| Qt::ItemIsDropEnabled);
card->setData(QVariant(uuid), Qt::UserRole);
QIcon icon = getIcon(material->getLibrary());
auto card = new QStandardItem(icon, libraryPath(material));
card->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled
| Qt::ItemIsDropEnabled);
card->setData(QVariant(uuid), Qt::UserRole);
addExpanded(tree, parent, card);
addExpanded(tree, parent, card);
// }
}
catch (const Materials::MaterialNotFound&) {
@@ -828,7 +855,7 @@ void MaterialsEditor::addFavorites(QStandardItem* parent)
for (auto& uuid : _favorites) {
try {
auto material = getMaterialManager().getMaterial(uuid);
QIcon icon = QIcon(material->getLibrary()->getIconPath());
QIcon icon = getIcon(material->getLibrary());
auto card = new QStandardItem(icon, libraryPath(material));
card->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled
| Qt::ItemIsDropEnabled);
@@ -877,7 +904,7 @@ void MaterialsEditor::fillMaterialTree()
lib->setFlags(Qt::ItemIsEnabled | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled);
addExpanded(tree, model, lib, param);
QIcon icon(library->getIconPath());
QIcon icon = getIcon(library);
QIcon folderIcon(QStringLiteral(":/icons/folder.svg"));
addMaterials(*lib, materialTree, folderIcon, icon, param);

View File

@@ -87,6 +87,10 @@ public:
static QString libraryPath(const std::shared_ptr<Materials::Material>& material);
static QIcon getIcon(const std::shared_ptr<Materials::MaterialLibrary>& library);
static QIcon getIcon(const std::shared_ptr<Materials::ModelLibrary>& library);
static QIcon getIcon(const std::shared_ptr<Materials::Library>& library);
void updateMaterialAppearance();
void updateMaterialProperties();
void updateMaterialGeneral();

View File

@@ -33,6 +33,7 @@
#include <Gui/Command.h>
#include <Gui/WaitCursor.h>
#include "MaterialsEditor.h"
#include "ModelSelect.h"
#include "ui_ModelSelect.h"
@@ -272,7 +273,7 @@ void ModelSelect::addRecents(QStandardItem* parent)
auto model = Materials::ModelManager::getManager().getModel(uuid);
if (Materials::ModelManager::getManager().passFilter(_filter, model->getType())) {
QIcon icon = QIcon(model->getLibrary()->getIconPath());
auto icon = MaterialsEditor::getIcon(model->getLibrary());
auto card = new QStandardItem(icon, model->getName());
card->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled
| Qt::ItemIsDropEnabled);
@@ -294,7 +295,7 @@ void ModelSelect::addFavorites(QStandardItem* parent)
auto model = Materials::ModelManager::getManager().getModel(uuid);
if (Materials::ModelManager::getManager().passFilter(_filter, model->getType())) {
QIcon icon = QIcon(model->getLibrary()->getIconPath());
auto icon = MaterialsEditor::getIcon(model->getLibrary());
auto card = new QStandardItem(icon, model->getName());
card->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled
| Qt::ItemIsDropEnabled);
@@ -350,7 +351,7 @@ void ModelSelect::fillTree()
addExpanded(tree, model, lib);
auto modelTree = Materials::ModelManager::getManager().getModelTree(library, _filter);
addModels(*lib, modelTree, QIcon(library->getIconPath()));
addModels(*lib, modelTree, MaterialsEditor::getIcon(library));
}
}

View File

@@ -153,7 +153,7 @@ void DlgMigrateExternal::migrate()
void DlgMigrateExternal::statusUpdate(const QString& status)
{
Base::Console().Log("%s\n", status.toStdString().c_str());
Base::Console().log("%s\n", status.toStdString().c_str());
ui->textStatus->append(status);
// This is required to update in real time