File indexing completed on 2024-05-19 04:07:48

0001 /*
0002     SPDX-FileCopyrightText: 2009, 2010 Stefan Majewsky <majewsky@gmx.net>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "slicerconfwidget.h"
0008 #include "propertywidget.h"
0009 
0010 #include <Pala/Slicer>
0011 #include <Pala/SlicerMode>
0012 #include <Pala/SlicerProperty>
0013 
0014 #include <QFormLayout>
0015 
0016 Palapeli::SlicerConfigWidget::SlicerConfigWidget(const Pala::Slicer* slicer)
0017     : m_layout(new QFormLayout)
0018 {
0019     setLayout(m_layout);
0020     //create property widgets
0021     const QList<const Pala::SlicerProperty*> properties = slicer->propertyList();
0022     for (const Pala::SlicerProperty* property : properties)
0023     {
0024         Palapeli::PropertyWidget* propWidget = Palapeli::createPropertyWidget(property);
0025         Entry entry = { property, propWidget };
0026         m_entries << entry;
0027         m_layout->addRow(property->caption() + QLatin1Char(':'), propWidget);
0028     }
0029 }
0030 
0031 QMap<QByteArray, QVariant> Palapeli::SlicerConfigWidget::arguments() const
0032 {
0033     QMap<QByteArray, QVariant> result;
0034     for (const Entry& entry : m_entries)
0035         result.insert(entry.property->key(), entry.widget->propertyValue());
0036     return result;
0037 }
0038 
0039 void Palapeli::SlicerConfigWidget::setMode(const Pala::SlicerMode* mode)
0040 {
0041     //determine enabled properties
0042     QList<const Pala::SlicerProperty*> enabledProps;
0043     for (const Entry& entry : std::as_const(m_entries))
0044         enabledProps << entry.property;
0045     if (mode)
0046         mode->filterProperties(enabledProps);
0047     //update widget visibility according to enabled/disabled state
0048     for (const Entry& entry : std::as_const(m_entries))
0049     {
0050         const bool isVisible = enabledProps.contains(entry.property);
0051         entry.widget->setVisible(isVisible);
0052         m_layout->labelForField(entry.widget)->setVisible(isVisible);
0053     }
0054 }