From 884a0b7f424776800cd6815de8f7b5d358b62cbd Mon Sep 17 00:00:00 2001 From: anikhalder <halder.anik04@gmail.com> Date: Wed, 28 Mar 2018 17:58:58 +0200 Subject: [PATCH] Move RealSpaceWidget from Test View to Sample View --- .../Views/RealSpaceWidgets/RealSpacePanel.cpp | 2 +- .../RealSpaceViewerDialog.cpp | 51 +++++++++++++++++++ .../RealSpaceWidgets/RealSpaceViewerDialog.h | 37 ++++++++++++++ .../RealSpaceWidgets/RealSpaceWidget.cpp | 8 ++- .../Views/RealSpaceWidgets/RealSpaceWidget.h | 6 ++- .../Views/SampleDesigner/SampleToolBar.cpp | 33 ++++++++++-- .../Views/SampleDesigner/SampleToolBar.h | 15 +++++- GUI/coregui/Views/SampleView.cpp | 2 +- 8 files changed, 142 insertions(+), 12 deletions(-) create mode 100644 GUI/coregui/Views/RealSpaceWidgets/RealSpaceViewerDialog.cpp create mode 100644 GUI/coregui/Views/RealSpaceWidgets/RealSpaceViewerDialog.h diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpacePanel.cpp b/GUI/coregui/Views/RealSpaceWidgets/RealSpacePanel.cpp index 6041a8b3c24..bc95324a0bb 100644 --- a/GUI/coregui/Views/RealSpaceWidgets/RealSpacePanel.cpp +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpacePanel.cpp @@ -54,7 +54,7 @@ void RealSpacePanel::setModel(SampleModel* model) m_treeView->expandAll(); - connect(m_model, &SampleModel::rowsInserted, [=](){m_treeView->expandAll();}); + connect(m_model, &SampleModel::rowsInserted, this, [=](){m_treeView->expandAll();}); connect(m_treeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &RealSpacePanel::onSelectionChanged, Qt::UniqueConnection); diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceViewerDialog.cpp b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceViewerDialog.cpp new file mode 100644 index 00000000000..1c0d750904e --- /dev/null +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceViewerDialog.cpp @@ -0,0 +1,51 @@ + +#include "RealSpaceViewerDialog.h" +#include "RealSpaceWidget.h" + +#include "StyleUtils.h" +#include <QAction> +#include <QPushButton> +#include <QSettings> +#include <QVBoxLayout> + +#include <QApplication> + +namespace +{ +const QSize minimum_dialog_size(600, 400); +const QSize default_dialog_size(950, 600); +} + +RealSpaceViewerDialog::RealSpaceViewerDialog(SampleModel *sampleModel, QTreeView *treeView, + QWidget *parent) + : QDialog(parent) + , m_sampleModel(sampleModel) + , m_treeView(treeView) +{ + setWindowTitle("Real Space Viewer"); + setMinimumSize(minimum_dialog_size); + resize(default_dialog_size); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + QVBoxLayout *layout = new QVBoxLayout; + layout->setMargin(0); + layout->setSpacing(0); + //layout->setContentsMargins(0, 0, 0, 0); + + #ifdef BORNAGAIN_OPENGL + RealSpaceWidget* widget = new RealSpaceWidget(m_sampleModel, m_treeView); + widget->setModel(m_sampleModel, m_treeView); + layout->addWidget(widget); + #endif + + setLayout(layout); + StyleUtils::setResizable(this); +} + +void RealSpaceViewerDialog::closeEvent(QCloseEvent *event) +{ + Q_UNUSED(event); + emit dialogClosed(); +} + + diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceViewerDialog.h b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceViewerDialog.h new file mode 100644 index 00000000000..748b668681d --- /dev/null +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceViewerDialog.h @@ -0,0 +1,37 @@ +#ifndef REALSPACEVIEWERDIALOG_H +#define REALSPACEVIEWERDIALOG_H + +#include "WinDllMacros.h" +#include <QDialog> +#include <memory> +#include <SampleModel.h> +#include <QTreeView> + +#include <QCloseEvent> + +class MaterialModel; +class MaterialEditor; +class ExternalProperty; +class QBoxLayout; + +//! Dialog to hold RealSpaceViewer. + +class BA_CORE_API_ RealSpaceViewerDialog : public QDialog +{ + Q_OBJECT + +public: + RealSpaceViewerDialog(SampleModel* sampleModel, QTreeView* treeView, QWidget *parent = nullptr); + + void closeEvent(QCloseEvent* event); + +signals: + void dialogClosed(); + +private: + SampleModel *m_sampleModel; + QTreeView *m_treeView; +}; + + +#endif // REALSPACEVIEWERDIALOG_H diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.cpp b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.cpp index e4606a45ab8..b52aeb41545 100644 --- a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.cpp +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.cpp @@ -21,13 +21,16 @@ #include <QLabel> #include <QDebug> -RealSpaceWidget::RealSpaceWidget(QWidget* parent) +RealSpaceWidget::RealSpaceWidget(SampleModel *sampleModel, QTreeView *treeView, QWidget* parent) : QWidget(parent) , m_actions(new RealSpaceActions) , m_toolBar(new RealSpaceToolBar) , m_canvas(new RealSpaceCanvas) , m_panel(new RealSpacePanel) { + Q_UNUSED(sampleModel); + Q_UNUSED(treeView); + QHBoxLayout* hlayout = new QHBoxLayout; hlayout->setMargin(0); hlayout->setSpacing(0); @@ -61,8 +64,9 @@ RealSpaceWidget::RealSpaceWidget(QWidget* parent) } -void RealSpaceWidget::setModel(SampleModel* model) +void RealSpaceWidget::setModel(SampleModel* model, QTreeView *treeView) { + Q_UNUSED(treeView); m_panel->setModel(model); m_canvas->setModel(model); } diff --git a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.h b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.h index 1e5ecf9cf21..477e7885f02 100644 --- a/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.h +++ b/GUI/coregui/Views/RealSpaceWidgets/RealSpaceWidget.h @@ -18,6 +18,8 @@ #include "WinDllMacros.h" #include <QWidget> +#include <QTreeView> + class RealSpaceToolBar; class RealSpaceCanvas; class RealSpaceActions; @@ -31,9 +33,9 @@ class BA_CORE_API_ RealSpaceWidget : public QWidget Q_OBJECT public: - RealSpaceWidget(QWidget* parent = 0); + RealSpaceWidget(SampleModel* sampleModel, QTreeView* treeView, QWidget* parent = nullptr); - void setModel(SampleModel* model); + void setModel(SampleModel* model, QTreeView* treeView); private: RealSpaceActions* m_actions; diff --git a/GUI/coregui/Views/SampleDesigner/SampleToolBar.cpp b/GUI/coregui/Views/SampleDesigner/SampleToolBar.cpp index 6e8bfc69da3..b9c014dc595 100644 --- a/GUI/coregui/Views/SampleDesigner/SampleToolBar.cpp +++ b/GUI/coregui/Views/SampleDesigner/SampleToolBar.cpp @@ -24,9 +24,15 @@ #include <QPushButton> #include <QToolButton> +#include <RealSpaceViewerDialog.h> + //! main tool bar on top of SampleView window -SampleToolBar::SampleToolBar(QWidget *parent) +SampleToolBar::SampleToolBar(SampleModel *sampleModel, QTreeView *treeView, + QWidget *parent) : StyledToolBar(parent) + , m_sampleModel(sampleModel) + , m_treeView(treeView) + , m_dialog(nullptr) { // Select & Pan QToolButton *selectionPointerButton = new QToolButton; @@ -121,7 +127,8 @@ SampleToolBar::SampleToolBar(QWidget *parent) //m_RealSpaceViewerButton->setIcon(QIcon(":/SampleDesigner/images/toolbar_materialeditor.png")); m_RealSpaceViewerButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); m_RealSpaceViewerButton->setToolTip("Open real space 3D viewer."); - //connect(m_RealSpaceViewerButton, SIGNAL(clicked()), this, SLOT(onRealSpaceViewerCall())); + m_RealSpaceViewerButton->setCheckable(true); + connect(m_RealSpaceViewerButton, SIGNAL(clicked()), this, SLOT(onRealSpaceViewerCall())); addWidget(m_RealSpaceViewerButton); // Additional actions @@ -136,7 +143,6 @@ SampleToolBar::SampleToolBar(QWidget *parent) addAction(m_zoomInAction); } - void SampleToolBar::onViewSelectionMode(int mode) { if(mode == DesignerView::RUBBER_SELECTION || mode == DesignerView::HAND_DRAG) @@ -156,5 +162,24 @@ void SampleToolBar::onMaterialEditorCall() void SampleToolBar::onRealSpaceViewerCall() { - // to be implemented + // on first click, the RSV button is checked and the dialog window is created + if(m_RealSpaceViewerButton->isChecked()) + { + m_dialog = new RealSpaceViewerDialog(m_sampleModel, m_treeView, this); + //m_dialog->setWindowFlags(Qt::Window); // to have minimize, maximize and close buttons + m_dialog->show(); + + // on closing of dialog window, uncheck the RSV button + connect(m_dialog, &RealSpaceViewerDialog::dialogClosed, + this, &SampleToolBar::onDialogClosed); + } + // on subsequent clicks (uncheck or check) of RSV button, it is always set as checked + // so as to keep only one instance of the dialog window alive + else + m_RealSpaceViewerButton->setChecked(true); +} + +void SampleToolBar::onDialogClosed() +{ + m_RealSpaceViewerButton->setChecked(false); } diff --git a/GUI/coregui/Views/SampleDesigner/SampleToolBar.h b/GUI/coregui/Views/SampleDesigner/SampleToolBar.h index effa927a8b3..29017512ab4 100644 --- a/GUI/coregui/Views/SampleDesigner/SampleToolBar.h +++ b/GUI/coregui/Views/SampleDesigner/SampleToolBar.h @@ -17,6 +17,10 @@ #include "StyledToolBar.h" +#include "SampleModel.h" +#include <QTreeView> +#include "RealSpaceViewerDialog.h" + class QAction; class QToolButton; class QToolBar; @@ -31,7 +35,8 @@ class BA_CORE_API_ SampleToolBar : public StyledToolBar Q_OBJECT public: - explicit SampleToolBar(QWidget *parent = 0); + explicit SampleToolBar(SampleModel* sampleModel, QTreeView* treeView, + QWidget *parent = 0); signals: void deleteItems(); @@ -46,7 +51,9 @@ public slots: void onViewSelectionMode(int); void onScaleComboChanged(const QString &); void onMaterialEditorCall(); + void onRealSpaceViewerCall(); + void onDialogClosed(); private: QButtonGroup *m_pointerModeGroup; @@ -55,9 +62,13 @@ private: QToolButton *m_alignItemsButton; QComboBox *m_scaleCombo; QToolButton *m_materialEditorButton; - QToolButton *m_RealSpaceViewerButton; QAction *m_zoomInAction; QAction *m_zoomOutAction; + + QToolButton *m_RealSpaceViewerButton; + SampleModel *m_sampleModel; + QTreeView *m_treeView; + RealSpaceViewerDialog *m_dialog; }; #endif // SAMPLETOOLBAR_H diff --git a/GUI/coregui/Views/SampleView.cpp b/GUI/coregui/Views/SampleView.cpp index cd4efb0edc4..96b5661aee4 100644 --- a/GUI/coregui/Views/SampleView.cpp +++ b/GUI/coregui/Views/SampleView.cpp @@ -261,7 +261,7 @@ void SampleView::connectSignals() connect(this, SIGNAL(resetLayout()), this, SLOT(resetToDefaultLayout())); // toolBar should be initialized after MaterialBrowser - m_toolBar = new SampleToolBar(this); + m_toolBar = new SampleToolBar(getSampleModel(), getTreeView(), this); connect(m_toolBar, SIGNAL(deleteItems()), m_sampleDesigner->getView(), SLOT(deleteSelectedItems())); connect(m_toolBar, SIGNAL(selectionMode(int)), m_sampleDesigner->getView(), SLOT(onSelectionMode(int))); -- GitLab