use names directly from document to set them in scene inspector

This commit is contained in:
wmayer
2017-01-30 22:29:26 +01:00
parent fc4a1c6081
commit 321ca984c9
5 changed files with 73 additions and 38 deletions

View File

@@ -29,9 +29,12 @@
#include "SceneInspector.h"
#include "ui_SceneInspector.h"
#include "MainWindow.h"
#include "View3DInventor.h"
#include "View3DInventorViewer.h"
#include "ViewProviderDocumentObject.h"
#include "Document.h"
#include "Application.h"
#include <App/Document.h>
using namespace Gui::Dialog;
@@ -97,15 +100,21 @@ void SceneModel::setNode(QModelIndex index, SoNode* node)
for (int i=0; i<group->getNumChildren();i++) {
SoNode* child = group->getChild(i);
setNode(this->index(i, 0, index), child);
// See ViewProviderDocumentObject::updateData
QByteArray name(child->getName());
name = QByteArray::fromPercentEncoding(name);
this->setData(this->index(i, 1, index), QVariant(QString::fromUtf8(name)));
QMap<SoNode*, QString>::iterator it = nodeNames.find(child);
if (it != nodeNames.end()) {
this->setData(this->index(i, 1, index), QVariant(it.value()));
}
}
}
// insert icon
}
void SceneModel::setNodeNames(const QMap<SoNode*, QString>& names)
{
nodeNames = names;
}
// --------------------------------------------------------
/* TRANSLATOR Gui::Dialog::DlgInspector */
@@ -130,6 +139,18 @@ DlgInspector::~DlgInspector()
delete ui;
}
void DlgInspector::setDocument(Gui::Document* doc)
{
setNodeNames(doc);
View3DInventor* view = qobject_cast<View3DInventor*>(doc->getActiveView());
if (view) {
View3DInventorViewer* viewer = view->getViewer();
setNode(viewer->getSceneGraph());
ui->treeView->expandToDepth(3);
}
}
void DlgInspector::setNode(SoNode* node)
{
SceneModel* model = static_cast<SceneModel*>(ui->treeView->model());
@@ -145,6 +166,32 @@ void DlgInspector::setNode(SoNode* node)
#endif
}
void DlgInspector::setNodeNames(Gui::Document* doc)
{
std::vector<Gui::ViewProvider*> vps = doc->getViewProvidersOfType
(Gui::ViewProviderDocumentObject::getClassTypeId());
QMap<SoNode*, QString> nodeNames;
for (std::vector<Gui::ViewProvider*>::iterator it = vps.begin(); it != vps.end(); ++it) {
Gui::ViewProviderDocumentObject* vp = static_cast<Gui::ViewProviderDocumentObject*>(*it);
App::DocumentObject* obj = vp->getObject();
if (obj) {
QString label = QString::fromUtf8(obj->Label.getValue());
nodeNames[vp->getRoot()] = label;
}
std::vector<std::string> modes = vp->getDisplayMaskModes();
for (std::vector<std::string>::iterator jt = modes.begin(); jt != modes.end(); ++jt) {
SoNode* node = vp->getDisplayMaskMode(jt->c_str());
if (node) {
nodeNames[node] = QString::fromStdString(*jt);
}
}
}
SceneModel* model = static_cast<SceneModel*>(ui->treeView->model());
model->setNodeNames(nodeNames);
}
void DlgInspector::changeEvent(QEvent *e)
{
if (e->type() == QEvent::LanguageChange) {
@@ -156,11 +203,16 @@ void DlgInspector::changeEvent(QEvent *e)
void DlgInspector::on_refreshButton_clicked()
{
View3DInventor* child = qobject_cast<View3DInventor*>(getMainWindow()->activeWindow());
if (child) {
View3DInventorViewer* viewer = child->getViewer();
setNode(viewer->getSceneGraph());
ui->treeView->expandToDepth(3);
Gui::Document* doc = Application::Instance->activeDocument();
if (doc) {
setNodeNames(doc);
View3DInventor* view = qobject_cast<View3DInventor*>(doc->getActiveView());
if (view) {
View3DInventorViewer* viewer = view->getViewer();
setNode(viewer->getSceneGraph());
ui->treeView->expandToDepth(3);
}
}
else {
SceneModel* model = static_cast<SceneModel*>(ui->treeView->model());