From a55b7493b1bd54e9d1231fa18300e0f882700fe3 Mon Sep 17 00:00:00 2001 From: Treeki Date: Sat, 18 Aug 2012 04:29:13 +0200 Subject: made pane visibility part of the scene graph tree --- lslayoutwindow.cpp | 5 ++++- lspaneeditor.cpp | 12 ++++++------ lspaneeditor.h | 4 ++-- lsscenemodel.cpp | 28 +++++++++++++++++++++++++--- lsscenemodel.h | 6 +++++- 5 files changed, 42 insertions(+), 13 deletions(-) diff --git a/lslayoutwindow.cpp b/lslayoutwindow.cpp index d19e397..718e92d 100644 --- a/lslayoutwindow.cpp +++ b/lslayoutwindow.cpp @@ -85,11 +85,13 @@ LSLayoutWindow::LSLayoutWindow(LYTPackageBase *pkg, const QString &layoutName, Q m_widthBox->setValue(m_layout->width); m_heightBox->setValue(m_layout->height); + LSSceneModel *scnModel = new LSSceneModel(m_layout, true, this); + m_sceneGraph->setSelectionMode(QAbstractItemView::ExtendedSelection); m_sceneGraph->setDragEnabled(true); m_sceneGraph->setAcceptDrops(true); m_sceneGraph->setDropIndicatorShown(true); - m_sceneGraph->setModel(new LSSceneModel(m_layout, this)); + m_sceneGraph->setModel(scnModel); m_sceneGraph->expandAll(); connect(m_sceneGraph->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(selectedPaneChanged(QModelIndex,QModelIndex))); @@ -107,6 +109,7 @@ LSLayoutWindow::LSLayoutWindow(LYTPackageBase *pkg, const QString &layoutName, Q m_renderer->show(); connect(m_paneEditor, SIGNAL(mustRedrawLayout()), m_renderer, SLOT(updateGL())); + connect(scnModel, SIGNAL(paneVisibilityChanged()), m_renderer, SLOT(updateGL())); // clean up here setAttribute(Qt::WA_DeleteOnClose); diff --git a/lspaneeditor.cpp b/lspaneeditor.cpp index 659fd1e..ee7e310 100644 --- a/lspaneeditor.cpp +++ b/lspaneeditor.cpp @@ -106,8 +106,8 @@ void LSPaneEditor::createPaneTab() { m_widescreen = new QCheckBox("Widescreen", this); connect(m_widescreen, SIGNAL(toggled(bool)), SLOT(handleWidescreenChanged(bool))); - m_visible = new QCheckBox("Visible", this); - connect(m_visible, SIGNAL(toggled(bool)), SLOT(handleVisibleChanged(bool))); + //m_visible = new QCheckBox("Visible", this); + //connect(m_visible, SIGNAL(toggled(bool)), SLOT(handleVisibleChanged(bool))); // Column 0 gLayout->addWidget(new QLabel("Width:", geoBox), 0, 0, 1, 1); @@ -123,7 +123,7 @@ void LSPaneEditor::createPaneTab() { // Row 2 gLayout->addWidget(m_widescreen, 2, 0, 1, 2); - gLayout->addWidget(m_visible, 2, 2, 1, 2); + //gLayout->addWidget(m_visible, 2, 2, 1, 2); // Positioning Box @@ -192,7 +192,7 @@ void LSPaneEditor::setPane(LYTPane *pane) { m_vertOrigin->setCurrentIndex((int)pane->vertOrigin); m_widescreen->setChecked(pane->isWidescreen); - m_visible->setChecked(pane->visible); + //m_visible->setChecked(pane->visible); m_transX->setValue(pane->xTrans); @@ -274,12 +274,12 @@ void LSPaneEditor::handleWidescreenChanged(bool value) { } } -void LSPaneEditor::handleVisibleChanged(bool value) { +/*void LSPaneEditor::handleVisibleChanged(bool value) { if (!m_currentlyLoadingPane) { m_pane->visible = value; emit mustRedrawLayout(); } -} +}*/ void LSPaneEditor::handleTransXChanged(double value) { if (!m_currentlyLoadingPane) { diff --git a/lspaneeditor.h b/lspaneeditor.h index 0c4ddc3..22a7a7d 100644 --- a/lspaneeditor.h +++ b/lspaneeditor.h @@ -36,7 +36,7 @@ private: QDoubleSpinBox *m_width, *m_height; QComboBox *m_horzOrigin, *m_vertOrigin; - QCheckBox *m_widescreen, *m_visible; + QCheckBox *m_widescreen; //, *m_visible; QDoubleSpinBox *m_transX, *m_transY, *m_transZ; QDoubleSpinBox *m_rotX, *m_rotY, *m_rotZ; @@ -57,7 +57,7 @@ private slots: void handleHorzOriginChanged(int value); void handleVertOriginChanged(int value); void handleWidescreenChanged(bool value); - void handleVisibleChanged(bool value); + //void handleVisibleChanged(bool value); void handleTransXChanged(double value); void handleTransYChanged(double value); void handleTransZChanged(double value); diff --git a/lsscenemodel.cpp b/lsscenemodel.cpp index acb059c..1e55cdd 100644 --- a/lsscenemodel.cpp +++ b/lsscenemodel.cpp @@ -1,8 +1,8 @@ #include "lsscenemodel.h" #include "lsglobals.h" -LSSceneModel::LSSceneModel(LYTLayout *layout, QObject *parent) : - QAbstractItemModel(parent) +LSSceneModel::LSSceneModel(LYTLayout *layout, bool exposeVisibility, QObject *parent) : + QAbstractItemModel(parent), m_exposesVisibility(exposeVisibility) { m_layout = layout; @@ -72,19 +72,41 @@ QVariant LSSceneModel::data(const QModelIndex &index, int role) const { case Qt::DecorationRole: return m_paneIcons[pane->type()]; } + + if (m_exposesVisibility && role == Qt::CheckStateRole) { + return pane->visible ? Qt::Checked : Qt::Unchecked; + } } return QVariant(); } +bool LSSceneModel::setData(const QModelIndex &index, const QVariant &value, int role) { + if (m_exposesVisibility && role == Qt::CheckStateRole) { + LYTPane *pane = (LYTPane*)index.internalPointer(); + + bool newVisible = value.toBool(); + if (pane->visible != newVisible) { + pane->visible = newVisible; + emit dataChanged(index, index); + emit paneVisibilityChanged(); + } + } + + return false; +} + Qt::ItemFlags LSSceneModel::flags(const QModelIndex &index) const { Qt::ItemFlags flag; flag = Qt::ItemIsEnabled | Qt::ItemIsSelectable | - Qt::ItemIsDropEnabled | Qt::ItemIsEditable; + Qt::ItemIsDropEnabled; if (index.isValid() && index.parent().isValid()) flag |= Qt::ItemIsDragEnabled; + if (m_exposesVisibility) + flag |= Qt::ItemIsUserCheckable; + return flag; } diff --git a/lsscenemodel.h b/lsscenemodel.h index 11ef4a6..e089e46 100644 --- a/lsscenemodel.h +++ b/lsscenemodel.h @@ -8,7 +8,7 @@ class LSSceneModel : public QAbstractItemModel { Q_OBJECT public: - explicit LSSceneModel(LYTLayout *layout, QObject *parent = 0); + explicit LSSceneModel(LYTLayout *layout, bool exposeVisibility, QObject *parent = 0); ~LSSceneModel(); LYTLayout *layout() const { return m_layout; } @@ -18,6 +18,7 @@ public: int rowCount(const QModelIndex &parent) const; int columnCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const; + bool setData(const QModelIndex &index, const QVariant &value, int role); Qt::ItemFlags flags(const QModelIndex &index) const; Qt::DropActions supportedDropActions() const; @@ -32,8 +33,11 @@ private: QPersistentModelIndex *m_movingPaneParent; int m_movingPaneRow, m_movingPaneCount; + + bool m_exposesVisibility; signals: + void paneVisibilityChanged(); public slots: -- cgit v1.2.3