diff --git a/GUI/View/SampleDesigner/LayerOrientedSampleEditor.cpp b/GUI/View/SampleDesigner/LayerOrientedSampleEditor.cpp index 0cb348c5e0ae2956d9bb7f8975663bf7483e57b3..485f3bfb6dfd80f31ada4398a8cb28e6baf7f52d 100644 --- a/GUI/View/SampleDesigner/LayerOrientedSampleEditor.cpp +++ b/GUI/View/SampleDesigner/LayerOrientedSampleEditor.cpp @@ -110,9 +110,8 @@ void LayerOrientedSampleEditor::setCurrentSample(MultiLayerItem* multiLayerItem) } if (!m_editControllers.contains(m_currentMultiLayerItem)) - m_editControllers.insert( - m_currentMultiLayerItem, - new SampleEditorController(m_document->materialModel(), m_currentMultiLayerItem)); + m_editControllers.insert(m_currentMultiLayerItem, + new SampleEditorController(m_document, m_currentMultiLayerItem)); auto* ec = m_editControllers[m_currentMultiLayerItem]; connect(ec, &SampleEditorController::requestViewInRealSpace, this, &LayerOrientedSampleEditor::requestViewInRealSpace); diff --git a/GUI/View/SampleDesigner/MaterialInplaceForm.cpp b/GUI/View/SampleDesigner/MaterialInplaceForm.cpp index 5b7635d223371c2c0ba2cb416f3d7e4db59ba687..20d18d4951907f23235c8539004db1d63155dcc3 100644 --- a/GUI/View/SampleDesigner/MaterialInplaceForm.cpp +++ b/GUI/View/SampleDesigner/MaterialInplaceForm.cpp @@ -17,7 +17,6 @@ #include "GUI/Model/Material/MaterialModel.h" #include "GUI/Model/Sample/ItemWithMaterial.h" #include "GUI/Model/Session/ModelPath.h" -#include "GUI/Model/State/SessionData.h" #include "GUI/Model/Types/DoubleDescriptor.h" #include "GUI/Model/Types/VectorDescriptor.h" #include "GUI/View/Edit/DoubleLineEdit.h" @@ -40,7 +39,7 @@ MaterialInplaceForm::MaterialInplaceForm(QWidget* parent, ItemWithMaterial* item m_layout->setContentsMargins(0, 0, 0, 0); createWidgets(); - connect(gSessionData->projectDocument->materialModel(), &MaterialModel::materialChanged, this, + connect(ec->materialModel(), &MaterialModel::materialChanged, this, &MaterialInplaceForm::onMaterialChanged); } @@ -64,7 +63,7 @@ void MaterialInplaceForm::updateValues() void MaterialInplaceForm::selectMaterial() { const QString newMaterialIdentifier = MaterialEditorDialog::chooseMaterial( - baWin, gSessionData->projectDocument, m_item->materialIdentifier()); + baWin, m_ec->projectDocument(), m_item->materialIdentifier()); if (!newMaterialIdentifier.isEmpty() && newMaterialIdentifier != m_item->materialIdentifier()) { GUI::Util::Layout::clearLayout(m_layout, true); diff --git a/GUI/View/SampleDesigner/SampleEditorController.cpp b/GUI/View/SampleDesigner/SampleEditorController.cpp index 6f9cabb02146b474e9a134cbfa16bf66fea24a75..b7a2376ecc31a46f87aa4543060636127a879cfb 100644 --- a/GUI/View/SampleDesigner/SampleEditorController.cpp +++ b/GUI/View/SampleDesigner/SampleEditorController.cpp @@ -14,6 +14,7 @@ #include "GUI/View/SampleDesigner/SampleEditorController.h" #include "GUI/Model/Material/MaterialModel.h" +#include "GUI/Model/Project/ProjectDocument.h" #include "GUI/Model/Sample/InterferenceItems.h" #include "GUI/Model/Sample/LayerItem.h" #include "GUI/Model/Sample/MesoCrystalItem.h" @@ -35,8 +36,8 @@ #include "GUI/View/SampleDesigner/ParticleLayoutForm.h" #include "GUI/View/SampleDesigner/SampleEditorCommands.h" -SampleEditorController::SampleEditorController(MaterialModel* materialModel, MultiLayerItem* multi) - : m_multiLayerItem(multi), m_multiLayerForm(nullptr), m_materialModel(materialModel) +SampleEditorController::SampleEditorController(ProjectDocument* document, MultiLayerItem* multi) + : m_multiLayerItem(multi), m_multiLayerForm(nullptr), m_document(document) { } @@ -96,8 +97,8 @@ void SampleEditorController::addLayer(LayerItem* before) // - create new layer LayerItem* layer = m_multiLayerItem->addLayer(rowInMultiLayer); - layer->setMaterialModel(m_materialModel); - layer->setMaterial(m_materialModel->defaultMaterial()); + layer->setMaterialModel(materialModel()); + layer->setMaterial(materialModel()->defaultMaterial()); layer->setColor(color); ASSERT(m_multiLayerForm); @@ -129,9 +130,9 @@ void SampleEditorController::addParticle(ParticleLayoutItem* layoutItem, const Q SessionItem* newItem = nullptr; if (ItemCatalog::isFormFactorModelType(classname)) { auto* new_particle = layoutItem->model()->insertItem<ParticleItem>(layoutItem); - new_particle->setMaterialModel(m_materialModel); + new_particle->setMaterialModel(materialModel()); new_particle->setFormFactor(classname); - new_particle->setMaterial(m_materialModel->defaultMaterial()); + new_particle->setMaterial(materialModel()->defaultMaterial()); newItem = new_particle; } else newItem = layoutItem->model()->insertNewItem(classname, layoutItem); @@ -155,9 +156,9 @@ void SampleEditorController::addParticle(ParticleCompositionItem* compositionIte SessionItem* newItem = nullptr; if (ItemCatalog::isFormFactorModelType(classname)) { auto* new_particle = compositionItem->model()->insertItem<ParticleItem>(compositionItem); - new_particle->setMaterialModel(m_materialModel); + new_particle->setMaterialModel(materialModel()); new_particle->setFormFactor(classname); - new_particle->setMaterial(m_materialModel->defaultMaterial()); + new_particle->setMaterial(materialModel()->defaultMaterial()); newItem = new_particle; } else newItem = compositionItem->model()->insertNewItem(classname, compositionItem); @@ -293,7 +294,12 @@ QUndoStack* SampleEditorController::undoStack() MaterialModel* SampleEditorController::materialModel() const { - return m_materialModel; + return m_document->materialModel(); +} + +ProjectDocument* SampleEditorController::projectDocument() const +{ + return m_document; } void SampleEditorController::selectMaterial(ItemWithMaterial* item, diff --git a/GUI/View/SampleDesigner/SampleEditorController.h b/GUI/View/SampleDesigner/SampleEditorController.h index 0988bb028797766227e736f05cb864a4e51cbcf0..d8884055c0e092df7e715a20d0ab0c72262d187a 100644 --- a/GUI/View/SampleDesigner/SampleEditorController.h +++ b/GUI/View/SampleDesigner/SampleEditorController.h @@ -37,6 +37,7 @@ class InterferenceItem; class AbstractSelectionContainerForm; class LatticeTypeSelectionForm; class MaterialModel; +class ProjectDocument; //! Class to modify a sample from the layer oriented sample editor. //! @@ -46,7 +47,7 @@ class MaterialModel; class SampleEditorController : public QObject { Q_OBJECT public: - SampleEditorController(MaterialModel* materialModel, MultiLayerItem* multi); + SampleEditorController(ProjectDocument* document, MultiLayerItem* multi); //! Set the current form. //! @@ -66,6 +67,9 @@ public: //! The materials of the current document MaterialModel* materialModel() const; + //! The current document + ProjectDocument* projectDocument() const; + void addLayer(LayerItem* before); void removeLayer(LayerItem* layerItem); void addLayout(LayerForm* layerItem); @@ -109,7 +113,7 @@ private: QUndoStack m_undoStack; MultiLayerItem* m_multiLayerItem; MultiLayerForm* m_multiLayerForm; - MaterialModel* m_materialModel; + ProjectDocument* m_document; }; diff --git a/GUI/View/SampleDesigner/SampleListView.cpp b/GUI/View/SampleDesigner/SampleListView.cpp index 1b322e941459a6cd00caa67ac0358167fe9b57e5..7021d7b8d8b968d15baba0dcad14b452a80592db 100644 --- a/GUI/View/SampleDesigner/SampleListView.cpp +++ b/GUI/View/SampleDesigner/SampleListView.cpp @@ -15,9 +15,9 @@ #include "GUI/View/SampleDesigner/SampleListView.h" #include "GUI/Application/ApplicationSettings.h" #include "GUI/Model/From/GUIExamplesFactory.h" -#include "GUI/Model/Sample/MultiLayerItem.h" #include "GUI/Model/From/SampleListModel.h" -#include "GUI/Model/State/SessionData.h" +#include "GUI/Model/Project/ProjectDocument.h" +#include "GUI/Model/Sample/MultiLayerItem.h" #include "GUI/View/Common/ItemViewOverlayButtons.h" #include "GUI/View/Tool/ItemDelegateForHTML.h" #include <QAction> @@ -63,9 +63,10 @@ protected: } // namespace -SampleListView::SampleListView(QWidget* parent, SampleModel* sampleModel) : QListView(parent) +SampleListView::SampleListView(QWidget* parent, ProjectDocument* document) + : QListView(parent), m_document(document) { - m_model = new SampleListModel(this, sampleModel); + m_model = new SampleListModel(this, document->sampleModel()); setContextMenuPolicy(Qt::CustomContextMenu); setModel(m_model); @@ -143,8 +144,8 @@ void SampleListView::createNewSample() void SampleListView::createSampleFromLibrary(const QString& classname, const QString& title, const QString& description) { - const QModelIndex newIndex = m_model->createSampleFromExamples( - classname, title, description, gSessionData->projectDocument->materialModel()); + const QModelIndex newIndex = m_model->createSampleFromExamples(classname, title, description, + m_document->materialModel()); setCurrentIndex(newIndex); } diff --git a/GUI/View/SampleDesigner/SampleListView.h b/GUI/View/SampleDesigner/SampleListView.h index 1a39f4c031a731624e00ca1c0ced1627ff2f2345..1c5ce889ef1fb0c25431632c387ef10e862c4a8c 100644 --- a/GUI/View/SampleDesigner/SampleListView.h +++ b/GUI/View/SampleDesigner/SampleListView.h @@ -17,15 +17,15 @@ #include <QListView> -class SampleModel; class SampleListModel; class MultiLayerItem; +class ProjectDocument; //! List view to select one sample (left side of layer-oriented sample editor) class SampleListView : public QListView { Q_OBJECT public: - SampleListView(QWidget* parent, SampleModel* sampleModel); + SampleListView(QWidget* parent, ProjectDocument* document); void setCurrentSample(MultiLayerItem* multiLayer); MultiLayerItem* currentSample(); @@ -53,6 +53,7 @@ private: private: SampleListModel* m_model; + ProjectDocument* m_document; QAction* m_newSampleAction; QAction* m_chooseFromLibraryAction; }; diff --git a/GUI/View/SampleDesigner/SampleView.cpp b/GUI/View/SampleDesigner/SampleView.cpp index 8b86b36743956e90ee40a6e76d370f535b3ec39c..6ccb40759cc433f9df350d0ff066051279b9f4bd 100644 --- a/GUI/View/SampleDesigner/SampleView.cpp +++ b/GUI/View/SampleDesigner/SampleView.cpp @@ -47,7 +47,7 @@ SampleView::SampleView(QWidget* parent, ProjectDocument* document) sampleSelectionLayout->setSpacing(0); auto* sampleSelectionToolbar = new StyledToolBar(sampleSelectionPane); - auto* sampleSelectionView = new SampleListView(this, m_document->sampleModel()); + auto* sampleSelectionView = new SampleListView(this, m_document); sampleSelectionToolbar->addAction(sampleSelectionView->newSampleAction()); sampleSelectionToolbar->addAction(sampleSelectionView->chooseFromLibraryAction()); if (auto* btn = dynamic_cast<QToolButton*>(sampleSelectionToolbar->widgetForAction(