| 188 | using namespace GammaRay; |
| 189 | |
| 190 | Widget3DView::Widget3DView(QWidget *parent) |
| 191 | : QWidget(parent) |
| 192 | { |
| 193 | auto remoteModel = ObjectBroker::model(QStringLiteral("com.kdab.GammaRay.Widget3DModel")); |
| 194 | // Filter out rows without data and invisible widgets and expose C++ roles |
| 195 | // to QML. |
| 196 | auto clientModel = new Widget3DClientModel(this); |
| 197 | clientModel->setSourceModel(remoteModel); |
| 198 | |
| 199 | // WINDOWS |
| 200 | // Filter out everything except for window-type widgets |
| 201 | auto windowModel = new Widget3DWindowModel(this); |
| 202 | windowModel->setSourceModel(clientModel); |
| 203 | |
| 204 | // WIDGETS |
| 205 | // Filter out widget subtrees that don't belong to currently selected window |
| 206 | // and flatten the tree |
| 207 | auto widgetModel = new Widget3DSubtreeModel(this); |
| 208 | widgetModel->setSourceModel(clientModel); |
| 209 | |
| 210 | mSelectionHelper = new Widget3DSelectionHelper(widgetModel, this); |
| 211 | |
| 212 | auto vbox = new QVBoxLayout(this); |
| 213 | |
| 214 | auto hbox = new QHBoxLayout(); |
| 215 | hbox->addWidget(new QLabel(tr("Window: "))); |
| 216 | |
| 217 | auto *combo = new QComboBox; |
| 218 | combo->setModel(windowModel); |
| 219 | hbox->addWidget(combo, 1); |
| 220 | vbox->addLayout(hbox); |
| 221 | |
| 222 | hbox = new QHBoxLayout(); |
| 223 | vbox->addLayout(hbox); |
| 224 | |
| 225 | #if 0 // widget model debugging |
| 226 | QTreeView *tv = new QTreeView; |
| 227 | tv->setModel(widgetModel); |
| 228 | hbox->addWidget(tv); |
| 229 | #endif |
| 230 | |
| 231 | mRenderWindow = new Widget3DWindow(); |
| 232 | mRenderWindow->installEventFilter(this); |
| 233 | hbox->addWidget(QWidget::createWindowContainer(mRenderWindow, this), 1); |
| 234 | |
| 235 | qmlRegisterType<Widget3DImageTextureImage>("com.kdab.GammaRay", 1, 0, "Widget3DImageTextureImage"); |
| 236 | |
| 237 | auto engine = mRenderWindow->engine(); |
| 238 | engine->rootContext()->setContextProperty(QStringLiteral("_renderWindow"), mRenderWindow); |
| 239 | engine->rootContext()->setContextProperty(QStringLiteral("_widgetModel"), widgetModel); |
| 240 | engine->rootContext()->setContextProperty(QStringLiteral("_selectionHelper"), mSelectionHelper); |
| 241 | mRenderWindow->setSource(QUrl(QStringLiteral("qrc:/gammaray/assets/qml/main.qml"))); |
| 242 | |
| 243 | connect(combo, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), |
| 244 | this, [widgetModel, combo, this]() { |
| 245 | widgetModel->setRootObjectId(combo->currentData(Widget3DModel::IdRole).toString()); |
| 246 | QMetaObject::invokeMethod(mRenderWindow->rootObject(), "resetView"); |
| 247 | }); |
nothing calls this directly
no test coverage detected