Skip to content
Snippets Groups Projects
SampleEditorController.h 4.41 KiB
Newer Older
  • Learn to ignore specific revisions
  • //  ************************************************************************************************
    //
    //  BornAgain: simulate and fit reflection and scattering
    //
    
    //! @file      GUI/View/Sample/SampleEditorController.h
    
    //! @brief     Defines class SampleEditorController.
    
    //!
    //! @homepage  http://www.bornagainproject.org
    //! @license   GNU General Public License v3 or higher (see COPYING)
    //! @copyright Forschungszentrum Jülich GmbH 2021
    //! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
    //
    //  ************************************************************************************************
    
    
    #ifndef BORNAGAIN_GUI_VIEW_SAMPLE_SAMPLEEDITORCONTROLLER_H
    #define BORNAGAIN_GUI_VIEW_SAMPLE_SAMPLEEDITORCONTROLLER_H
    
    Wuttke, Joachim's avatar
    Wuttke, Joachim committed
    #include <QObject>
    
    class CompoundItem;
    
    class InterferenceForm;
    
    class InterferenceItem;
    
    class ItemWithMaterial;
    class ItemWithParticles;
    class LayerForm;
    
    class LayerStackForm;
    
    class MesocrystalForm;
    class ParticleLayoutItem;
    
    Wuttke, Joachim's avatar
    Wuttke, Joachim committed
    class SampleForm;
    class SampleItem;
    
    
    //! Class to modify a sample from the layer oriented sample editor.
    //!
    
    Wuttke, Joachim's avatar
    Wuttke, Joachim committed
    //! Use this class to modify the sample model. It takes care of notifications.
    
    //! It operates on one SampleItem.
    
    Wuttke, Joachim's avatar
    Wuttke, Joachim committed
    
    
    class SampleEditorController : public QObject {
        Q_OBJECT
    public:
    
    Wuttke, Joachim's avatar
    Wuttke, Joachim committed
        SampleEditorController(SampleItem* multi);
    
    
        //! Set the current form.
        //!
        //! The form can change e.g. when a different sample gets the current one
        //! in the layer editor. Also nullptr is allowed.
    
        void setSampleForm(SampleForm* view);
    
    
        //! The item on which this controller operates.
    
        SampleItem* sampleItem() const { return m_sample_item; }
    
        //! The materials of the current document
    
        void addLayerItem(LayerStackForm& parentStackForm, const ItemWithLayers* before);
        void addLayerStackItem(LayerStackForm& parentStackForm, const ItemWithLayers* before);
        void duplicateItemWithLayers(const ItemWithLayers* component);
        void removeItemWithLayers(ItemWithLayers* component);
    
        void onStoppedToMoveLayer(QWidget* widgetToMove, QWidget* moveAboveThisWidget);
    
    Mikhail Svechnikov's avatar
    Mikhail Svechnikov committed
        void onParticleLayoutAdded(ParticleLayoutItem* layout, ItemWithParticles* newItem);
    
        void addParticleLayoutItem(ParticleLayoutItem* layout, ParticleCatalog::Type type);
    
        void addParticleLayoutItem(ParticleLayoutItem* layout, FormfactorCatalog::Type type);
    
    Mikhail Svechnikov's avatar
    Mikhail Svechnikov committed
        ParticleLayoutItem* parentLayoutItem(ItemWithParticles* item);
    
    Mikhail Svechnikov's avatar
    Mikhail Svechnikov committed
        void onParticleCompoundAdded(CompoundItem* composition, ItemWithParticles* newItem);
    
        void addCompoundItem(CompoundItem* composition, ParticleCatalog::Type type);
    
        void addCompoundItem(CompoundItem* composition, FormfactorCatalog::Type type);
    
    Mikhail Svechnikov's avatar
    Mikhail Svechnikov committed
        CompoundItem* parentCompoundItem(ItemWithParticles* item);
    
    
        void duplicateItemWithParticles(ItemWithParticles* item);
        void removeParticle(ItemWithParticles* item);
    
    
        void setCoreFormfactor(CoreAndShellForm* widget, FormfactorCatalog::Type type);
        void setShellFormfactor(CoreAndShellForm* widget, FormfactorCatalog::Type type);
    
        void setMesocrystalBasis(MesocrystalForm* widget, ParticleCatalog::Type type);
    
        void setMesocrystalBasis(MesocrystalForm* widget, FormfactorCatalog::Type type);
    
        void selectInterference(InterferenceForm* widget, int newIndex);
    
    
        void selectMaterial(ItemWithMaterial* item, const QString& newMaterialIdentifier);
    
    Wuttke, Joachim's avatar
    Wuttke, Joachim committed
        void setMaterialValue(ItemWithMaterial* item, double value, DoubleProperty& d);
    
        void setDensityRelatedValue(InterferenceItem* interferenceItem);
    
        static void addLayoutItem(LayerForm* layerForm);
        static void duplicateLayoutItem(LayerForm* layerForm, ParticleLayoutItem* layout);
        void removeLayoutItem(LayerForm* layerForm, ParticleLayoutItem* layout);
    
    
        void requestViewInRealspace(Item3D* item);
        void aboutToRemoveItem(Item3D* item);
    
        static void onLayoutAdded(LayerForm* layerForm, ParticleLayoutItem* layout);
    
        void onComponentAdded(ItemWithLayers* component);
        QColor findColor(size_t atIndex);
    
        ItemWithParticles* createAndInitItem(FormfactorCatalog::Type formFactorType) const;
    
        ItemWithParticles* createAndInitItem(ParticleCatalog::Type itemType) const;
    
        SampleItem* m_sample_item;
        SampleForm* m_sample_form;
    
    #endif // BORNAGAIN_GUI_VIEW_SAMPLE_SAMPLEEDITORCONTROLLER_H