Skip to content
Snippets Groups Projects
Commit ec473004 authored by Mikhail Svechnikov's avatar Mikhail Svechnikov Committed by Wuttke, Joachim
Browse files

implement duplicateLayoutItem()

parent 943b2a37
No related branches found
No related tags found
No related merge requests found
...@@ -28,10 +28,10 @@ ...@@ -28,10 +28,10 @@
#include <QAction> #include <QAction>
#include <QPushButton> #include <QPushButton>
ParticleLayoutForm::ParticleLayoutForm(LayerForm* parent, ParticleLayoutItem* layoutItem, ParticleLayoutForm::ParticleLayoutForm(LayerForm* form, ParticleLayoutItem* layout,
SampleEditorController* ec) SampleEditorController* ec)
: QGroupBox(parent) : QGroupBox(form)
, m_layoutItem(layoutItem) , m_layoutItem(layout)
, m_ec(ec) , m_ec(ec)
{ {
FormLayouter layouter(this, ec); FormLayouter layouter(this, ec);
...@@ -40,50 +40,47 @@ ParticleLayoutForm::ParticleLayoutForm(LayerForm* parent, ParticleLayoutItem* la ...@@ -40,50 +40,47 @@ ParticleLayoutForm::ParticleLayoutForm(LayerForm* parent, ParticleLayoutItem* la
m_totalDensitySpinBox = m_totalDensitySpinBox =
layouter.widgetAt<DoubleSpinBox*>(rowOfTotalDensity, QFormLayout::FieldRole); layouter.widgetAt<DoubleSpinBox*>(rowOfTotalDensity, QFormLayout::FieldRole);
ASSERT(m_totalDensitySpinBox); ASSERT(m_totalDensitySpinBox);
layouter.addRow(new InterferenceForm(this, layoutItem, ec)); layouter.addRow(new InterferenceForm(this, layout, ec));
for (auto* particle : m_layoutItem->itemsWithParticles()) for (auto* particle : m_layoutItem->itemsWithParticles())
layouter.addRow( layouter.addRow(
LayerEditorUtil::createWidgetForItemWithParticles(this, particle, true, ec)); LayerEditorUtil::createWidgetForItemWithParticles(this, particle, true, ec));
auto* btn = LayerEditorUtil::createAddParticleButton( auto* btn = LayerEditorUtil::createAddParticleButton(
this, this, [=](FormFactorItemCatalog::Type type) { ec->addParticleLayoutItem(layout, type); },
[=](FormFactorItemCatalog::Type type) { ec->addParticleLayoutItem(layoutItem, type); }, [=](ItemWithParticlesCatalog::Type type) { ec->addParticleLayoutItem(layout, type); });
[=](ItemWithParticlesCatalog::Type type) { ec->addParticleLayoutItem(layoutItem, type); });
m_structureEditingWidgets << btn; m_structureEditingWidgets << btn;
layouter.addStructureEditingRow(btn); layouter.addStructureEditingRow(btn);
m_collapser = GroupBoxCollapser::installIntoGroupBox(this); m_collapser = GroupBoxCollapser::installIntoGroupBox(this);
m_collapser->setExpanded(layoutItem->isExpandLayout()); m_collapser->setExpanded(layout->isExpandLayout());
connect(m_collapser, &GroupBoxCollapser::toggled, this, connect(m_collapser, &GroupBoxCollapser::toggled, this,
[layoutItem](bool b) { layoutItem->setExpandLayout(b); }); [layout](bool b) { layout->setExpandLayout(b); });
// top right corner actions // top right corner actions
// show in real space // show in real space
{ {
auto* showInRealspaceAction = ActionFactory::createShowInRealspaceAction( auto* showInRealspaceAction = ActionFactory::createShowInRealspaceAction(
this, "particle layout", [ec, layoutItem] { ec->requestViewInRealspace(layoutItem); }); this, "particle layout", [ec, layout] { ec->requestViewInRealspace(layout); });
m_collapser->addAction(showInRealspaceAction); m_collapser->addAction(showInRealspaceAction);
} }
// duplicate // duplicate
{ {
m_duplicateAction = ActionFactory::createDuplicateAction( m_duplicateAction = ActionFactory::createDuplicateAction(
this, "particle layout", [ec, parent] { ec->duplicateLayoutItem(parent); }); this, "particle layout", [ec, layout, form] { ec->duplicateLayoutItem(form, layout); });
m_collapser->addAction(m_duplicateAction); m_collapser->addAction(m_duplicateAction);
} }
// remove // remove
{ {
m_removeAction = m_removeAction = ActionFactory::createRemoveAction(
ActionFactory::createRemoveAction(this, "particle layout", [ec, layoutItem, parent] { this, "particle layout", [ec, layout, form] { ec->removeLayoutItem(form, layout); });
ec->removeLayoutItem(parent, layoutItem);
});
m_collapser->addAction(m_removeAction); m_collapser->addAction(m_removeAction);
} }
m_layout = layouter.layout(); m_layout = layouter.layout();
updateDensityEnabling(); updateDensityEnabling();
updateTitle(parent->layerItem()); updateTitle(form->layerItem());
} }
void ParticleLayoutForm::enableStructureEditing(bool b) void ParticleLayoutForm::enableStructureEditing(bool b)
......
...@@ -31,8 +31,7 @@ class SampleEditorController; ...@@ -31,8 +31,7 @@ class SampleEditorController;
class ParticleLayoutForm : public QGroupBox { class ParticleLayoutForm : public QGroupBox {
Q_OBJECT Q_OBJECT
public: public:
ParticleLayoutForm(LayerForm* parent, ParticleLayoutItem* layoutItem, ParticleLayoutForm(LayerForm* form, ParticleLayoutItem* layoutItem, SampleEditorController* ec);
SampleEditorController* ec);
void enableStructureEditing(bool b); void enableStructureEditing(bool b);
ParticleLayoutItem* layoutItem() const; ParticleLayoutItem* layoutItem() const;
......
...@@ -156,10 +156,9 @@ void SampleEditorController::removeLayerItemFromUndo(int atIndex) ...@@ -156,10 +156,9 @@ void SampleEditorController::removeLayerItemFromUndo(int atIndex)
emit modified(); emit modified();
} }
void SampleEditorController::addLayoutItem(LayerForm* layerForm) void SampleEditorController::onLayoutAdded(LayerForm* layerForm, ParticleLayoutItem* layout)
{ {
auto* newLayoutItem = layerForm->layerItem()->addLayoutItem(); layerForm->onLayoutAdded(layout);
layerForm->onLayoutAdded(newLayoutItem);
m_sampleForm->updateUnits(); m_sampleForm->updateUnits();
for (auto* layoutForms : layerForm->findChildren<ParticleLayoutForm*>()) for (auto* layoutForms : layerForm->findChildren<ParticleLayoutForm*>())
...@@ -168,9 +167,17 @@ void SampleEditorController::addLayoutItem(LayerForm* layerForm) ...@@ -168,9 +167,17 @@ void SampleEditorController::addLayoutItem(LayerForm* layerForm)
emit modified(); emit modified();
} }
void SampleEditorController::duplicateLayoutItem(LayerForm* layerForm) void SampleEditorController::addLayoutItem(LayerForm* layerForm)
{
auto* newLayoutItem = layerForm->layerItem()->addLayoutItem();
onLayoutAdded(layerForm, newLayoutItem);
}
void SampleEditorController::duplicateLayoutItem(LayerForm* layerForm, ParticleLayoutItem* layout)
{ {
std::cout << "duplicateLayoutItem\n"; auto* newLayoutItem = layerForm->layerItem()->addLayoutItem();
GUI::Util::copyContents(layout, newLayoutItem);
onLayoutAdded(layerForm, newLayoutItem);
} }
void SampleEditorController::removeLayoutItem(LayerForm* layerItemWidget, void SampleEditorController::removeLayoutItem(LayerForm* layerItemWidget,
......
...@@ -79,8 +79,9 @@ public: ...@@ -79,8 +79,9 @@ public:
void removeLayerItem(LayerItem* layerItem); void removeLayerItem(LayerItem* layerItem);
void removeLayerItemFromUndo(int atIndex); void removeLayerItemFromUndo(int atIndex);
void onLayoutAdded(LayerForm* layerForm, ParticleLayoutItem* layout);
void addLayoutItem(LayerForm* layerForm); void addLayoutItem(LayerForm* layerForm);
void duplicateLayoutItem(LayerForm* layerForm); void duplicateLayoutItem(LayerForm* layerForm, ParticleLayoutItem* layout);
void removeLayoutItem(LayerForm* layerItem, ParticleLayoutItem* layout); void removeLayoutItem(LayerForm* layerItem, ParticleLayoutItem* layout);
void addParticleLayoutItem(ParticleLayoutItem* layout, ItemWithParticlesCatalog::Type type); void addParticleLayoutItem(ParticleLayoutItem* layout, ItemWithParticlesCatalog::Type type);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment