6#include "ui_extrainputcontrollerform.h"
13#include <Inventor/nodes/SoSeparator.h>
14#include <Inventor/nodes/SoPickStyle.h>
15#include <Inventor/nodes/SoLightModel.h>
16#include <Inventor/nodes/SoMaterial.h>
17#include <Inventor/nodes/SoSwitch.h>
27 SoSeparator *
root =
nullptr;
33 std::map<std::string, SoSeparator *>
fileMap;
34 Ui::ExtraInputControllerForm
ui{};
42 IVP13DSystemSimple(
"ExtraInput",
"Co-display extra input from an external Open Inventor, or VRML, file",
"boudreau@pitt.edu"),
46 m_c->visibilitySwitch = 0;
50 m_c->ui.materialButton=0;
60 QWidget* controller =
new QWidget(0);
61 m_c->ui.setupUi(controller);
62 m_c->ui.materialButton->setMaterial(
m_c->material);
63 connect (
m_c->ui.visibleCheckBox,SIGNAL(toggled(
bool)),
this, SLOT(
toggleVisibility(
bool)));
65 connect (
m_c->ui.newFilePushButton, SIGNAL(clicked()),
this, SLOT(
newFile()));
66 connect (
m_c->ui.deleteFilePushButton, SIGNAL(clicked()),
this, SLOT(
deleteFile()));
76 m_c->visibilitySwitch =
new SoSwitch();
77 m_c->visibilitySwitch->ref();
80 m_c->lightModel =
new SoLightModel();
81 m_c->lightModel->ref();
83 m_c->root->addChild(
m_c->lightModel);
85 m_c->material =
new SoMaterial();
87 m_c->ui.materialButton->setMaterial(
m_c->material);
88 m_c->root->addChild(
m_c->material);
90 m_c->pickStyle =
new SoPickStyle();
91 m_c->pickStyle->ref();
92 m_c->pickStyle->style = SoPickStyleElement::UNPICKABLE;
93 m_c->root->addChild(
m_c->pickStyle);
95 m_c->root->addChild(
m_c->visibilitySwitch);
101 if (
m_c->visibilitySwitch)
102 m_c->visibilitySwitch->unref();
104 m_c->lightModel->unref();
106 m_c->material->unref();
108 m_c->pickStyle->unref();
116 m_c->visibilitySwitch->whichChild = flag ? SO_SWITCH_ALL : SO_SWITCH_NONE;
120 m_c->lightModel->model= flag ? SoLightModel::BASE_COLOR : SoLightModel::PHONG;
124 QList<QListWidgetItem *> itemList =
ui.fileListWidget->findItems(fileName,Qt::MatchExactly);
125 if (itemList.isEmpty()) {
129 ui.fileListWidget->addItem(fileName);
130 fileMap[fileName.toStdString()]=inputRoot;
132 This->
message(
"Warning: Could not get scenegraph from file "+fileName);
136 This->
message(
"Warning, file is already in the display list");
142 QString fileName = QFileDialog::getOpenFileName(NULL, tr(
"Open File"),
m_c->lastInputDir,tr(
"3D Formats (*.iv *.wrl)"));
143 if (!fileName.isEmpty())
m_c->inputFile(
this,fileName);
148 if (
m_c->ui.fileListWidget->count()) {
149 int currentRow =
m_c->ui.fileListWidget->currentRow();
150 QListWidgetItem *item=
m_c->ui.fileListWidget->takeItem(currentRow);
151 m_c->visibilitySwitch->removeChild(
m_c->fileMap[item->text().toStdString()]);
152 m_c->fileMap.erase(item->text().toStdString());
163 serialise.save(
m_c->ui.toolBox);
165 QStringList fileListEntries;
166 for (
int i=0;i<
m_c->ui.fileListWidget->count();++i)
167 fileListEntries <<
m_c->ui.fileListWidget->item(i)->text();
168 serialise.save(fileListEntries);
169 serialise.widgetHandled(
m_c->ui.fileListWidget);
171 serialise.save(
m_c->ui.baseLMButton,
m_c->ui.phongLMButton);
172 serialise.save(
m_c->ui.visibleCheckBox);
173 serialise.save(
m_c->ui.materialButton);
176 return serialise.result();
181 if (
state.version()==0) {
182 message(
"Warning: State data in .vp1 file has obsolete format - ignoring!");
185 if (
state.version()!=1) {
186 message(
"Warning: State data in .vp1 file is in wrong format - ignoring!");
193 for (
const QString& fileName :
state.restore<QStringList>())
194 m_c->inputFile(
this,fileName);
195 state.restore(
m_c->ui.baseLMButton,
m_c->ui.phongLMButton);
196 state.restore(
m_c->ui.visibleCheckBox);
197 state.restore(
m_c->ui.materialButton);
IVP13DSystemSimple(const QString &name, const QString &information, const QString &contact_info)
void ensureBuildController()
virtual void restoreFromState(QByteArray)
QWidget * controllerWidget()
void message(const QString &) const
virtual QByteArray saveState()
The Athena Transient Store API.
static SoSeparator * readGraphFromFile(const QString &filename)
static QString defaultFileSelectDirectory()