diff --git a/src/backend/cantorWorksheet/CantorWorksheet.cpp b/src/backend/cantorWorksheet/CantorWorksheet.cpp --- a/src/backend/cantorWorksheet/CantorWorksheet.cpp +++ b/src/backend/cantorWorksheet/CantorWorksheet.cpp @@ -46,8 +46,8 @@ #include #include -CantorWorksheet::CantorWorksheet(const QString &name, bool loading) : AbstractPart(name), - m_backendName(name) { +CantorWorksheet::CantorWorksheet(const QString &name, bool loading) + : AbstractPart(name, CantorWorksheetType), m_backendName(name) { if (!loading) init(); diff --git a/src/backend/core/AbstractAspect.h b/src/backend/core/AbstractAspect.h --- a/src/backend/core/AbstractAspect.h +++ b/src/backend/core/AbstractAspect.h @@ -53,13 +53,75 @@ Recursive = 0x02, Compress = 0x04 }; + + enum AspectType { + AbstractAspectType = 0, + + AbstractFilterType = 0x001, + DatapickerCurveType = 0x002, + DatapickerPointType = 0x003, + + // WorksheetElement + AxisType = 0x101, + CartesianPlotLegendType = 0x102, + CustomPointType = 0x103, + HistogramType = 0x104, + PlotAreaType = 0x105, + TextLabelType = 0x106, + WorksheetElementGroupType = 0x107, + // XYCurve + XYCurveType = 0x140, + XYEquationCurveType = 0x141, + // XYAnalysisCurve + XYAnalysisCurveType = 0x1C0, + XYConvolutionCurveType = 0x1C1, + XYCorrelationCurveType = 0x1C2, + XYDataReductionCurveType = 0x1C3, + XYDifferentiationCurveType = 0x1C4, + XYFitCurveType = 0x1C5, + XYFourierFilterCurveType = 0x1C6, + XYFourierTransformCurveType = 0x1C7, + XYInterpolationCurveType = 0x1C8, + XYIntegrationCurveType = 0x1C9, + XYSmoothCurveType = 0x1CA, + + // AbstractPart + CantorWorksheetType = 0x401, + DatapickerType = 0x402, + DatapickerImageType = 0x403, + NoteType = 0x404, + WorkbookType = 0x405, + WorksheetType = 0x406, + + // AbstractPlot + CartesianPlotType = 0x801, + + // AbstractColumn + ColumnType = 0x1001, + SimpleFilterColumnType = 0x1002, + ColumnStringIOType = 0x1003, + + // Folder + FolderType = 0x2000, + ProjectType = 0x2001, + MQTTClientType = 0x2002, + MQTTSubscriptionType = 0x2003, + + // AbstractDataSource + MatrixType = 0x4001, + // Spreadsheet + SpreadsheetType = 0x4040, + MQTTTopicType = 0x4041, + LiveDataSourceType = 0x4042 + }; + Q_DECLARE_FLAGS(ChildIndexFlags, ChildIndexFlag) friend class AspectChildAddCmd; friend class AspectChildRemoveCmd; friend class AbstractAspectPrivate; - explicit AbstractAspect(const QString& name); + AbstractAspect(const QString& name, AspectType type); ~AbstractAspect() override; QString name() const; @@ -76,15 +138,22 @@ virtual QIcon icon() const; virtual QMenu* createContextMenu(); + AspectType type() const { + return m_type; + } + bool inherits(AspectType type) const { + return (m_type & type) == type; + } + //functions related to the handling of the tree-like project structure AbstractAspect* parentAspect() const; void setParentAspect(AbstractAspect*); Folder* folder(); bool isDescendantOf(AbstractAspect* other); void addChild(AbstractAspect*); void addChildFast(AbstractAspect*); virtual void finalizeAdd() {}; - QVector children(const char* className, ChildIndexFlags flags=nullptr); + QVector children(AspectType type, ChildIndexFlags flags=nullptr); void insertChildBefore(AbstractAspect* child, AbstractAspect* before); void insertChildBeforeFast(AbstractAspect* child, AbstractAspect* before); void reparent(AbstractAspect* newParent, int newIndex = -1); @@ -181,6 +250,8 @@ void writeCommentElement(QXmlStreamWriter*) const; bool readCommentElement(XmlStreamReader*); + const AspectType m_type; + private: AbstractAspectPrivate* d; diff --git a/src/backend/core/AbstractAspect.cpp b/src/backend/core/AbstractAspect.cpp --- a/src/backend/core/AbstractAspect.cpp +++ b/src/backend/core/AbstractAspect.cpp @@ -197,9 +197,8 @@ // start of AbstractAspect implementation //////////////////////////////////////////////////////////////////////////////////////////////////// -AbstractAspect::AbstractAspect(const QString &name) - : d(new AbstractAspectPrivate(this, name)) -{ +AbstractAspect::AbstractAspect(const QString &name, AspectType type) + : m_type(type), d(new AbstractAspectPrivate(this, name)) { } AbstractAspect::~AbstractAspect() { @@ -320,11 +319,11 @@ * The returned folder may be the aspect itself if it inherits Folder. */ Folder* AbstractAspect::folder() { - if (inherits("Folder")) return static_cast(this); + if (inherits(FolderType)) return static_cast(this); AbstractAspect* parent_aspect = parentAspect(); - while (parent_aspect && !parent_aspect->inherits("Folder")) + while (parent_aspect && !parent_aspect->inherits(FolderType)) parent_aspect = parent_aspect->parentAspect(); - return static_cast(parent_aspect); + return static_cast(parent_aspect); } /** @@ -490,14 +489,14 @@ endMacro(); } -QVector AbstractAspect::children(const char* className, ChildIndexFlags flags) { +QVector AbstractAspect::children(AbstractAspect::AspectType type, ChildIndexFlags flags) { QVector result; for (auto* child : children()) { if (flags & IncludeHidden || !child->hidden()) { - if ( child->inherits(className) || !(flags & Compress)) { + if (child->inherits(type) || !(flags & Compress)) { result << child; if (flags & Recursive) { - result << child->children(className, flags); + result << child->children(type, flags); } } } @@ -732,22 +731,22 @@ //e.g. axis of a plot was selected. Don't include parent aspects here that do not //need to react on the selection of children: e.g. Folder or XYFitCurve with //the child column for calculated residuals - if (aspect->parentAspect() != nullptr - && !aspect->parentAspect()->inherits("Folder") - && !aspect->parentAspect()->inherits("XYFitCurve") - && !aspect->parentAspect()->inherits("CantorWorksheet")) + if (aspect->parentAspect() + && !aspect->parentAspect()->inherits(FolderType) + && !aspect->parentAspect()->inherits(XYFitCurveType) + && !aspect->parentAspect()->inherits(CantorWorksheetType)) emit aspect->parentAspect()->selected(aspect); } void AbstractAspect::childDeselected(const AbstractAspect* aspect) { //forward the signal to the highest possible level in the parent-child hierarchy //e.g. axis of a plot was selected. Don't include parent aspects here that do not //need to react on the deselection of children: e.g. Folder or XYFitCurve with //the child column for calculated residuals - if (aspect->parentAspect() != nullptr - && !aspect->parentAspect()->inherits("Folder") - && !aspect->parentAspect()->inherits("XYFitCurve") - && !aspect->parentAspect()->inherits("CantorWorksheet")) + if (aspect->parentAspect() + && !aspect->parentAspect()->inherits(FolderType) + && !aspect->parentAspect()->inherits(XYFitCurveType) + && !aspect->parentAspect()->inherits(CantorWorksheetType)) emit aspect->parentAspect()->deselected(aspect); } diff --git a/src/backend/core/AbstractColumn.h b/src/backend/core/AbstractColumn.h --- a/src/backend/core/AbstractColumn.h +++ b/src/backend/core/AbstractColumn.h @@ -134,7 +134,7 @@ double entropy; }; - explicit AbstractColumn(const QString& name); + AbstractColumn(const QString& name, AspectType type); ~AbstractColumn() override; static QStringList dateFormats(); // supported date formats diff --git a/src/backend/core/AbstractColumn.cpp b/src/backend/core/AbstractColumn.cpp --- a/src/backend/core/AbstractColumn.cpp +++ b/src/backend/core/AbstractColumn.cpp @@ -81,8 +81,8 @@ * * \param name the column name (= aspect name) */ -AbstractColumn::AbstractColumn(const QString &name) : AbstractAspect(name), - d( new AbstractColumnPrivate(this) ) { +AbstractColumn::AbstractColumn(const QString &name, AspectType type) + : AbstractAspect(name, type), d( new AbstractColumnPrivate(this) ) { } AbstractColumn::~AbstractColumn() { diff --git a/src/backend/core/AbstractFilter.h b/src/backend/core/AbstractFilter.h --- a/src/backend/core/AbstractFilter.h +++ b/src/backend/core/AbstractFilter.h @@ -38,7 +38,7 @@ Q_OBJECT public: - explicit AbstractFilter(const QString& name) : AbstractAspect(name) {} + explicit AbstractFilter(const QString& name) : AbstractAspect(name, AbstractFilterType) {} ~AbstractFilter() override = default; virtual int inputCount() const = 0; diff --git a/src/backend/core/AbstractPart.h b/src/backend/core/AbstractPart.h --- a/src/backend/core/AbstractPart.h +++ b/src/backend/core/AbstractPart.h @@ -37,7 +37,7 @@ Q_OBJECT public: - explicit AbstractPart(const QString &name); + AbstractPart(const QString &name, AspectType type); ~AbstractPart() override; virtual QWidget* view() const = 0; diff --git a/src/backend/core/AbstractPart.cpp b/src/backend/core/AbstractPart.cpp --- a/src/backend/core/AbstractPart.cpp +++ b/src/backend/core/AbstractPart.cpp @@ -44,7 +44,8 @@ * \class AbstractPart * \brief Base class of Aspects with MDI windows as views (AspectParts). */ -AbstractPart::AbstractPart(const QString& name) : AbstractAspect(name) { +AbstractPart::AbstractPart(const QString& name, AspectType type) + : AbstractAspect(name, type) { } AbstractPart::~AbstractPart() { diff --git a/src/backend/core/AbstractSimpleFilter.h b/src/backend/core/AbstractSimpleFilter.h --- a/src/backend/core/AbstractSimpleFilter.h +++ b/src/backend/core/AbstractSimpleFilter.h @@ -85,7 +85,7 @@ Q_OBJECT public: - SimpleFilterColumn(AbstractSimpleFilter* owner) : AbstractColumn(owner->name()), m_owner(owner) {} + SimpleFilterColumn(AbstractSimpleFilter* owner) : AbstractColumn(owner->name(), SimpleFilterColumnType), m_owner(owner) {} AbstractColumn::ColumnMode columnMode() const override; int rowCount() const override { return m_owner->rowCount(); } diff --git a/src/backend/core/AspectTreeModel.h b/src/backend/core/AspectTreeModel.h --- a/src/backend/core/AspectTreeModel.h +++ b/src/backend/core/AspectTreeModel.h @@ -48,7 +48,7 @@ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; Qt::ItemFlags flags(const QModelIndex &index) const override; - void setSelectableAspects(QList); + void setSelectableAspects(QList); QModelIndex modelIndexOfAspect(const AbstractAspect*, int column=0) const; QModelIndex modelIndexOfAspect(const QString& path, int column=0) const; @@ -81,7 +81,7 @@ bool m_numericColumnsOnly{false}; bool m_nonEmptyNumericColumnsOnly{false}; bool m_showPlotDesignation{false}; - QList m_selectableAspects; + QList m_selectableAspects; QString m_filterString; Qt::CaseSensitivity m_filterCaseSensitivity{Qt::CaseInsensitive}; diff --git a/src/backend/core/AspectTreeModel.cpp b/src/backend/core/AspectTreeModel.cpp --- a/src/backend/core/AspectTreeModel.cpp +++ b/src/backend/core/AspectTreeModel.cpp @@ -86,7 +86,7 @@ /*! \c list contains the class names of the aspects, that can be selected in the corresponding model view. */ -void AspectTreeModel::setSelectableAspects(QList list) { +void AspectTreeModel::setSelectableAspects(QList list) { m_selectableAspects = list; } @@ -273,8 +273,8 @@ auto* aspect = static_cast(index.internalPointer()); if (!m_selectableAspects.isEmpty()) { - foreach (const char* classString, m_selectableAspects) { - if (aspect->inherits(classString)) { + foreach (int type, m_selectableAspects) { + if (aspect->inherits(static_cast(type))) { result = Qt::ItemIsEnabled | Qt::ItemIsSelectable; if (index != this->index(0,0,QModelIndex()) && !m_filterString.isEmpty()) { if (this->containsFilterString(aspect)) @@ -413,7 +413,7 @@ QModelIndex AspectTreeModel::modelIndexOfAspect(const QString& path, int column) const { //determine the aspect out of aspect path AbstractAspect* aspect = nullptr; - auto children = m_root->children("AbstractAspect", AbstractAspect::Recursive); + auto children = m_root->children(AbstractAspect::AbstractAspectType, AbstractAspect::Recursive); for (auto* child: children) { if (child->path() == path) { aspect = child; diff --git a/src/backend/core/Folder.h b/src/backend/core/Folder.h --- a/src/backend/core/Folder.h +++ b/src/backend/core/Folder.h @@ -36,7 +36,7 @@ Q_OBJECT public: - explicit Folder(const QString& name); + explicit Folder(const QString& name, AspectType type = FolderType); QIcon icon() const override; QMenu* createContextMenu() override; diff --git a/src/backend/core/Folder.cpp b/src/backend/core/Folder.cpp --- a/src/backend/core/Folder.cpp +++ b/src/backend/core/Folder.cpp @@ -53,7 +53,8 @@ * \brief Folder in a project */ -Folder::Folder(const QString &name) : AbstractAspect(name) {} +Folder::Folder(const QString &name, AspectType type) : AbstractAspect(name, type) +{} QIcon Folder::icon() const { return QIcon::fromTheme("folder"); diff --git a/src/backend/core/Project.cpp b/src/backend/core/Project.cpp --- a/src/backend/core/Project.cpp +++ b/src/backend/core/Project.cpp @@ -102,7 +102,7 @@ bool changed{false}; }; -Project::Project() : Folder(i18n("Project")), d(new Private()) { +Project::Project() : Folder(i18n("Project"), ProjectType), d(new Private()) { //load default values for name, comment and author from config KConfig config; KConfigGroup group = config.group("Project"); diff --git a/src/backend/core/Workbook.cpp b/src/backend/core/Workbook.cpp --- a/src/backend/core/Workbook.cpp +++ b/src/backend/core/Workbook.cpp @@ -41,7 +41,7 @@ * \brief Top-level container for Spreadsheet and Matrix. * \ingroup backend */ -Workbook::Workbook(const QString& name) : AbstractPart(name) { +Workbook::Workbook(const QString& name) : AbstractPart(name, WorkbookType) { } QIcon Workbook::icon() const { diff --git a/src/backend/core/column/Column.h b/src/backend/core/column/Column.h --- a/src/backend/core/column/Column.h +++ b/src/backend/core/column/Column.h @@ -45,8 +45,8 @@ explicit Column(const QString& name, AbstractColumn::ColumnMode = AbstractColumn::Numeric); // template constructor for all supported data types (AbstractColumn::ColumnMode) must be defined in header template - explicit Column(const QString& name, QVector data, AbstractColumn::ColumnMode mode = AbstractColumn::Numeric) - : AbstractColumn(name), d(new ColumnPrivate(this, mode, new QVector(data))) { + Column(const QString& name, QVector data, AbstractColumn::ColumnMode mode = AbstractColumn::Numeric) + : AbstractColumn(name, ColumnType), d(new ColumnPrivate(this, mode, new QVector(data))) { init(); } void init(); diff --git a/src/backend/core/column/Column.cpp b/src/backend/core/column/Column.cpp --- a/src/backend/core/column/Column.cpp +++ b/src/backend/core/column/Column.cpp @@ -67,8 +67,9 @@ * have a view as they are intended to be displayed inside a spreadsheet. */ -Column::Column(const QString& name, AbstractColumn::ColumnMode mode) - : AbstractColumn(name), d(new ColumnPrivate(this, mode)) { +Column::Column(const QString& name, ColumnMode mode) + : AbstractColumn(name, ColumnType), d(new ColumnPrivate(this, mode)) { + init(); } diff --git a/src/backend/core/column/ColumnStringIO.cpp b/src/backend/core/column/ColumnStringIO.cpp --- a/src/backend/core/column/ColumnStringIO.cpp +++ b/src/backend/core/column/ColumnStringIO.cpp @@ -35,7 +35,8 @@ * \class ColumnStringIO * \brief String-IO interface of Column. */ -ColumnStringIO::ColumnStringIO(Column* owner) : AbstractColumn(""), m_owner(owner) { +ColumnStringIO::ColumnStringIO(Column* owner) + : AbstractColumn(QString(), ColumnStringIOType), m_owner(owner) { } AbstractColumn::ColumnMode ColumnStringIO::columnMode() const { diff --git a/src/backend/datapicker/Datapicker.cpp b/src/backend/datapicker/Datapicker.cpp --- a/src/backend/datapicker/Datapicker.cpp +++ b/src/backend/datapicker/Datapicker.cpp @@ -44,9 +44,9 @@ * \brief Top-level container for DatapickerCurve and DatapickerImage. * \ingroup backend */ -Datapicker::Datapicker(const QString& name, const bool loading) : AbstractPart(name), - m_transform(new Transform()) { - +Datapicker::Datapicker(const QString& name, const bool loading) +: AbstractPart(name, DatapickerType), m_transform(new Transform()) +{ connect(this, &Datapicker::aspectAdded, this, &Datapicker::handleAspectAdded); connect(this, &Datapicker::aspectAboutToBeRemoved, this, &Datapicker::handleAspectAboutToBeRemoved); diff --git a/src/backend/datapicker/DatapickerCurve.cpp b/src/backend/datapicker/DatapickerCurve.cpp --- a/src/backend/datapicker/DatapickerCurve.cpp +++ b/src/backend/datapicker/DatapickerCurve.cpp @@ -47,11 +47,15 @@ * \ingroup backend */ -DatapickerCurve::DatapickerCurve(const QString &name) : AbstractAspect(name), d_ptr(new DatapickerCurvePrivate(this)) { +DatapickerCurve::DatapickerCurve(const QString &name) + : AbstractAspect(name, DatapickerCurveType), d_ptr(new DatapickerCurvePrivate(this)) { + init(); } -DatapickerCurve::DatapickerCurve(const QString &name, DatapickerCurvePrivate *dd) : AbstractAspect(name), d_ptr(dd) { +DatapickerCurve::DatapickerCurve(const QString &name, DatapickerCurvePrivate *dd) + : AbstractAspect(name, DatapickerCurveType), d_ptr(dd) { + init(); } diff --git a/src/backend/datapicker/DatapickerImage.cpp b/src/backend/datapicker/DatapickerImage.cpp --- a/src/backend/datapicker/DatapickerImage.cpp +++ b/src/backend/datapicker/DatapickerImage.cpp @@ -56,7 +56,8 @@ * * * \ingroup datapicker */ -DatapickerImage::DatapickerImage(const QString& name, bool loading) : AbstractPart(name), +DatapickerImage::DatapickerImage(const QString& name, bool loading) : + AbstractPart(name, DatapickerImageType), foregroundBins( new int[ImageEditor::colorAttributeMax(Foreground) + 1]), hueBins( new int[ImageEditor::colorAttributeMax(Hue) + 1]), saturationBins( new int[ImageEditor::colorAttributeMax(Saturation) + 1]), diff --git a/src/backend/datapicker/DatapickerPoint.cpp b/src/backend/datapicker/DatapickerPoint.cpp --- a/src/backend/datapicker/DatapickerPoint.cpp +++ b/src/backend/datapicker/DatapickerPoint.cpp @@ -112,13 +112,15 @@ * of the predefined position flags (\ca HorizontalPosition, \ca VerticalPosition). */ -DatapickerPoint::DatapickerPoint(const QString& name) : AbstractAspect(name), - d_ptr(new DatapickerPointPrivate(this)) { +DatapickerPoint::DatapickerPoint(const QString& name) + : AbstractAspect(name, DatapickerPointType), d_ptr(new DatapickerPointPrivate(this)) { init(); } -DatapickerPoint::DatapickerPoint(const QString& name, DatapickerPointPrivate *dd) : AbstractAspect(name), d_ptr(dd) { +DatapickerPoint::DatapickerPoint(const QString& name, DatapickerPointPrivate *dd) + : AbstractAspect(name, DatapickerPointType), d_ptr(dd) { + init(); } diff --git a/src/backend/datasources/AbstractDataSource.h b/src/backend/datasources/AbstractDataSource.h --- a/src/backend/datasources/AbstractDataSource.h +++ b/src/backend/datasources/AbstractDataSource.h @@ -39,7 +39,7 @@ Q_OBJECT public: - explicit AbstractDataSource(const QString& name); + AbstractDataSource(const QString& name, AspectType type); ~AbstractDataSource() override = default; void clear(); diff --git a/src/backend/datasources/AbstractDataSource.cpp b/src/backend/datasources/AbstractDataSource.cpp --- a/src/backend/datasources/AbstractDataSource.cpp +++ b/src/backend/datasources/AbstractDataSource.cpp @@ -37,7 +37,8 @@ \ingroup datasources */ -AbstractDataSource::AbstractDataSource(const QString& name) : AbstractPart(name) { +AbstractDataSource::AbstractDataSource(const QString& name, AspectType type) + : AbstractPart(name, type) { } void AbstractDataSource::clear() { diff --git a/src/backend/datasources/LiveDataSource.cpp b/src/backend/datasources/LiveDataSource.cpp --- a/src/backend/datasources/LiveDataSource.cpp +++ b/src/backend/datasources/LiveDataSource.cpp @@ -62,7 +62,7 @@ \ingroup datasources */ -LiveDataSource::LiveDataSource(const QString& name, bool loading) : Spreadsheet(name, loading), +LiveDataSource::LiveDataSource(const QString& name, bool loading) : Spreadsheet(name, loading, LiveDataSourceType), m_updateTimer(new QTimer(this)) { initActions(); diff --git a/src/backend/datasources/MQTTClient.cpp b/src/backend/datasources/MQTTClient.cpp --- a/src/backend/datasources/MQTTClient.cpp +++ b/src/backend/datasources/MQTTClient.cpp @@ -63,7 +63,7 @@ \ingroup datasources */ -MQTTClient::MQTTClient(const QString& name) : Folder(name), +MQTTClient::MQTTClient(const QString& name) : Folder(name, MQTTClientType), m_updateTimer(new QTimer(this)), m_client(new QMqttClient(this)), m_willTimer(new QTimer(this)) { diff --git a/src/backend/datasources/MQTTSubscription.cpp b/src/backend/datasources/MQTTSubscription.cpp --- a/src/backend/datasources/MQTTSubscription.cpp +++ b/src/backend/datasources/MQTTSubscription.cpp @@ -41,7 +41,7 @@ \ingroup datasources */ -MQTTSubscription::MQTTSubscription(const QString& name) : Folder(name), +MQTTSubscription::MQTTSubscription(const QString& name) : Folder(name, MQTTSubscriptionType), m_subscriptionName(name) { qDebug() << "New MQTTSubscription: " << name; } diff --git a/src/backend/datasources/MQTTTopic.cpp b/src/backend/datasources/MQTTTopic.cpp --- a/src/backend/datasources/MQTTTopic.cpp +++ b/src/backend/datasources/MQTTTopic.cpp @@ -54,7 +54,8 @@ \ingroup datasources */ -MQTTTopic::MQTTTopic(const QString& name, MQTTSubscription* subscription, bool loading) : Spreadsheet(name, loading), +MQTTTopic::MQTTTopic(const QString& name, MQTTSubscription* subscription, bool loading) : + Spreadsheet(name, loading, MQTTTopicType), m_topicName(name), m_MQTTClient(subscription->mqttClient()), m_filter(new AsciiFilter) { diff --git a/src/backend/datasources/projects/LabPlotProjectParser.cpp b/src/backend/datasources/projects/LabPlotProjectParser.cpp --- a/src/backend/datasources/projects/LabPlotProjectParser.cpp +++ b/src/backend/datasources/projects/LabPlotProjectParser.cpp @@ -37,7 +37,10 @@ */ LabPlotProjectParser::LabPlotProjectParser() : ProjectParser() { - m_topLevelClasses<<"Folder"<<"Workbook"<<"Spreadsheet"<<"Matrix"<<"Worksheet"<<"CantorWorksheet"<<"Datapicker"<<"LiveDataSource"; + m_topLevelClasses << AbstractAspect::FolderType << AbstractAspect::WorkbookType + << AbstractAspect::SpreadsheetType << AbstractAspect::MatrixType + << AbstractAspect::WorksheetType << AbstractAspect::CantorWorksheetType + << AbstractAspect::DatapickerType << AbstractAspect::LiveDataSourceType; } bool LabPlotProjectParser::load(Project* project, bool preview) { diff --git a/src/backend/datasources/projects/OriginProjectParser.cpp b/src/backend/datasources/projects/OriginProjectParser.cpp --- a/src/backend/datasources/projects/OriginProjectParser.cpp +++ b/src/backend/datasources/projects/OriginProjectParser.cpp @@ -60,7 +60,9 @@ */ OriginProjectParser::OriginProjectParser() : ProjectParser() { - m_topLevelClasses << "Folder" << "Workbook" << "Spreadsheet" << "Matrix" << "Worksheet" << "Note"; + m_topLevelClasses << AbstractAspect::FolderType << AbstractAspect::WorkbookType + << AbstractAspect::SpreadsheetType << AbstractAspect::MatrixType + << AbstractAspect::WorksheetType << AbstractAspect::NoteType; } bool OriginProjectParser::isOriginProject(const QString& fileName) { diff --git a/src/backend/datasources/projects/ProjectParser.h b/src/backend/datasources/projects/ProjectParser.h --- a/src/backend/datasources/projects/ProjectParser.h +++ b/src/backend/datasources/projects/ProjectParser.h @@ -48,14 +48,14 @@ QAbstractItemModel* model(); void importTo(Folder*, const QStringList&); - QList topLevelClasses() const ; + QList topLevelClasses() const ; protected: virtual bool load(Project*, bool preview) = 0; QString m_projectFileName; Project* m_project{nullptr}; - QList m_topLevelClasses; + QList m_topLevelClasses; private: void moveFolder(Folder* targetParentFolder, Folder* sourceChildFolderToMove) const; diff --git a/src/backend/datasources/projects/ProjectParser.cpp b/src/backend/datasources/projects/ProjectParser.cpp --- a/src/backend/datasources/projects/ProjectParser.cpp +++ b/src/backend/datasources/projects/ProjectParser.cpp @@ -62,7 +62,7 @@ return m_projectFileName; } -QList ProjectParser::topLevelClasses() const { +QList ProjectParser::topLevelClasses() const { return m_topLevelClasses; } diff --git a/src/backend/matrix/Matrix.cpp b/src/backend/matrix/Matrix.cpp --- a/src/backend/matrix/Matrix.cpp +++ b/src/backend/matrix/Matrix.cpp @@ -59,7 +59,7 @@ \ingroup backend */ Matrix::Matrix(int rows, int cols, const QString& name, const AbstractColumn::ColumnMode mode) - : AbstractDataSource(name), d(new MatrixPrivate(this, mode)) { + : AbstractDataSource(name, MatrixType), d(new MatrixPrivate(this, mode)) { //set initial number of rows and columns appendColumns(cols); @@ -69,7 +69,7 @@ } Matrix::Matrix(const QString& name, bool loading, const AbstractColumn::ColumnMode mode) - : AbstractDataSource(name), d(new MatrixPrivate(this, mode)) { + : AbstractDataSource(name, MatrixType), d(new MatrixPrivate(this, mode)) { if (!loading) init(); diff --git a/src/backend/note/Note.cpp b/src/backend/note/Note.cpp --- a/src/backend/note/Note.cpp +++ b/src/backend/note/Note.cpp @@ -41,7 +41,7 @@ #include #include -Note::Note(const QString& name) : AbstractPart(name) { +Note::Note(const QString& name) : AbstractPart(name, NoteType) { KConfig config; KConfigGroup group = config.group("Notes"); diff --git a/src/backend/spreadsheet/Spreadsheet.h b/src/backend/spreadsheet/Spreadsheet.h --- a/src/backend/spreadsheet/Spreadsheet.h +++ b/src/backend/spreadsheet/Spreadsheet.h @@ -41,7 +41,7 @@ Q_OBJECT public: - explicit Spreadsheet(const QString& name, bool loading = false); + explicit Spreadsheet(const QString& name, bool loading = false, AspectType type = SpreadsheetType); QIcon icon() const override; QMenu* createContextMenu() override; diff --git a/src/backend/spreadsheet/Spreadsheet.cpp b/src/backend/spreadsheet/Spreadsheet.cpp --- a/src/backend/spreadsheet/Spreadsheet.cpp +++ b/src/backend/spreadsheet/Spreadsheet.cpp @@ -64,7 +64,9 @@ \ingroup backend */ -Spreadsheet::Spreadsheet(const QString& name, bool loading) : AbstractDataSource(name) { +Spreadsheet::Spreadsheet(const QString& name, bool loading, AspectType type) + : AbstractDataSource(name, type) { + if (!loading) init(); } diff --git a/src/backend/worksheet/TextLabel.cpp b/src/backend/worksheet/TextLabel.cpp --- a/src/backend/worksheet/TextLabel.cpp +++ b/src/backend/worksheet/TextLabel.cpp @@ -61,13 +61,15 @@ */ -TextLabel::TextLabel(const QString& name, Type type) : WorksheetElement(name), - d_ptr(new TextLabelPrivate(this)), m_type(type) { +TextLabel::TextLabel(const QString& name, Type type) + : WorksheetElement(name, TextLabelType), d_ptr(new TextLabelPrivate(this)), m_type(type) { + init(); } -TextLabel::TextLabel(const QString &name, TextLabelPrivate *dd, Type type) : WorksheetElement(name), - d_ptr(dd), m_type(type) { +TextLabel::TextLabel(const QString &name, TextLabelPrivate *dd, Type type) + : WorksheetElement(name, TextLabelType), d_ptr(dd), m_type(type) { + init(); } diff --git a/src/backend/worksheet/Worksheet.cpp b/src/backend/worksheet/Worksheet.cpp --- a/src/backend/worksheet/Worksheet.cpp +++ b/src/backend/worksheet/Worksheet.cpp @@ -60,7 +60,7 @@ * * * \ingroup worksheet */ -Worksheet::Worksheet(const QString& name, bool loading) : AbstractPart(name), d(new WorksheetPrivate(this)) { +Worksheet::Worksheet(const QString& name, bool loading) : AbstractPart(name, WorksheetType), d(new WorksheetPrivate(this)) { connect(this, &Worksheet::aspectAdded, this, &Worksheet::handleAspectAdded); connect(this, &Worksheet::aspectAboutToBeRemoved, this, &Worksheet::handleAspectAboutToBeRemoved); connect(this, &Worksheet::aspectRemoved, this, &Worksheet::handleAspectRemoved); diff --git a/src/backend/worksheet/WorksheetElement.h b/src/backend/worksheet/WorksheetElement.h --- a/src/backend/worksheet/WorksheetElement.h +++ b/src/backend/worksheet/WorksheetElement.h @@ -42,7 +42,7 @@ Q_OBJECT public: - explicit WorksheetElement(const QString&); + WorksheetElement(const QString&, AspectType); ~WorksheetElement() override; enum WorksheetElementName {NameCartesianPlot = 1}; diff --git a/src/backend/worksheet/WorksheetElement.cpp b/src/backend/worksheet/WorksheetElement.cpp --- a/src/backend/worksheet/WorksheetElement.cpp +++ b/src/backend/worksheet/WorksheetElement.cpp @@ -42,7 +42,9 @@ * \brief Base class for all Worksheet children. * */ -WorksheetElement::WorksheetElement(const QString &name) : AbstractAspect(name) { +WorksheetElement::WorksheetElement(const QString &name, AspectType type) + : AbstractAspect(name, type) { + m_drawingOrderMenu = new QMenu(i18n("Drawing &order")); m_moveBehindMenu = new QMenu(i18n("Move &behind")); m_moveInFrontOfMenu = new QMenu(i18n("Move in &front of")); diff --git a/src/backend/worksheet/WorksheetElementContainer.h b/src/backend/worksheet/WorksheetElementContainer.h --- a/src/backend/worksheet/WorksheetElementContainer.h +++ b/src/backend/worksheet/WorksheetElementContainer.h @@ -38,7 +38,7 @@ Q_OBJECT public: - explicit WorksheetElementContainer(const QString&); + WorksheetElementContainer(const QString&, AbstractAspect::AspectType); ~WorksheetElementContainer() override; QGraphicsItem* graphicsItem() const override; @@ -62,7 +62,7 @@ protected: WorksheetElementContainerPrivate* const d_ptr; - WorksheetElementContainer(const QString&, WorksheetElementContainerPrivate*); + WorksheetElementContainer(const QString&, WorksheetElementContainerPrivate*, AspectType); protected slots: virtual void handleAspectAdded(const AbstractAspect*); diff --git a/src/backend/worksheet/WorksheetElementContainer.cpp b/src/backend/worksheet/WorksheetElementContainer.cpp --- a/src/backend/worksheet/WorksheetElementContainer.cpp +++ b/src/backend/worksheet/WorksheetElementContainer.cpp @@ -48,14 +48,14 @@ * worksheet elements. Such a container can be a plot or group of elements. */ -WorksheetElementContainer::WorksheetElementContainer(const QString& name) - : WorksheetElement(name), d_ptr(new WorksheetElementContainerPrivate(this)) { +WorksheetElementContainer::WorksheetElementContainer(const QString& name, AspectType type) + : WorksheetElement(name, type), d_ptr(new WorksheetElementContainerPrivate(this)) { connect(this, &WorksheetElementContainer::aspectAdded, this, &WorksheetElementContainer::handleAspectAdded); } -WorksheetElementContainer::WorksheetElementContainer(const QString& name, WorksheetElementContainerPrivate* dd) - : WorksheetElement(name), d_ptr(dd) { +WorksheetElementContainer::WorksheetElementContainer(const QString& name, WorksheetElementContainerPrivate* dd, AspectType type) + : WorksheetElement(name, type), d_ptr(dd) { connect(this, &WorksheetElementContainer::aspectAdded, this, &WorksheetElementContainer::handleAspectAdded); } diff --git a/src/backend/worksheet/WorksheetElementGroup.cpp b/src/backend/worksheet/WorksheetElementGroup.cpp --- a/src/backend/worksheet/WorksheetElementGroup.cpp +++ b/src/backend/worksheet/WorksheetElementGroup.cpp @@ -37,12 +37,12 @@ * */ -WorksheetElementGroup::WorksheetElementGroup(const QString &name) - : WorksheetElementContainer(name) { +WorksheetElementGroup::WorksheetElementGroup(const QString &name) + : WorksheetElementContainer(name, WorksheetElementGroupType) { } WorksheetElementGroup::WorksheetElementGroup(const QString &name, WorksheetElementContainerPrivate *dd) - : WorksheetElementContainer(name, dd) { + : WorksheetElementContainer(name, dd, WorksheetElementGroupType) { } WorksheetElementGroup::~WorksheetElementGroup() = default; diff --git a/src/backend/worksheet/plots/AbstractPlot.h b/src/backend/worksheet/plots/AbstractPlot.h --- a/src/backend/worksheet/plots/AbstractPlot.h +++ b/src/backend/worksheet/plots/AbstractPlot.h @@ -42,7 +42,7 @@ Q_OBJECT public: - explicit AbstractPlot(const QString &name); + AbstractPlot(const QString &name, AspectType type); ~AbstractPlot() override= default; void handleResize(double horizontalRatio, double verticalRatio, bool pageResize) override; @@ -56,7 +56,7 @@ typedef AbstractPlotPrivate Private; protected: - AbstractPlot(const QString&, AbstractPlotPrivate*); + AbstractPlot(const QString&, AbstractPlotPrivate*, AspectType); AbstractCoordinateSystem* m_coordinateSystem{nullptr}; PlotArea* m_plotArea{nullptr}; TextLabel* m_title{nullptr}; diff --git a/src/backend/worksheet/plots/AbstractPlot.cpp b/src/backend/worksheet/plots/AbstractPlot.cpp --- a/src/backend/worksheet/plots/AbstractPlot.cpp +++ b/src/backend/worksheet/plots/AbstractPlot.cpp @@ -44,12 +44,15 @@ * */ -AbstractPlot::AbstractPlot(const QString &name) : WorksheetElementContainer(name, new AbstractPlotPrivate(this)) { +AbstractPlot::AbstractPlot(const QString &name, AspectType type) + : WorksheetElementContainer(name, new AbstractPlotPrivate(this), type) { + init(); } -AbstractPlot::AbstractPlot(const QString &name, AbstractPlotPrivate *dd) - : WorksheetElementContainer(name, dd) { +AbstractPlot::AbstractPlot(const QString &name, AbstractPlotPrivate *dd, AspectType type) + : WorksheetElementContainer(name, dd, type) { + init(); } diff --git a/src/backend/worksheet/plots/PlotArea.cpp b/src/backend/worksheet/plots/PlotArea.cpp --- a/src/backend/worksheet/plots/PlotArea.cpp +++ b/src/backend/worksheet/plots/PlotArea.cpp @@ -44,13 +44,15 @@ * \ingroup worksheet */ -PlotArea::PlotArea(const QString &name) : WorksheetElement(name), +PlotArea::PlotArea(const QString &name) : WorksheetElement(name, PlotAreaType), d_ptr(new PlotAreaPrivate(this)) { + init(); } PlotArea::PlotArea(const QString &name, PlotAreaPrivate *dd) - : WorksheetElement(name), d_ptr(dd) { + : WorksheetElement(name, PlotAreaType), d_ptr(dd) { + init(); } diff --git a/src/backend/worksheet/plots/cartesian/Axis.cpp b/src/backend/worksheet/plots/cartesian/Axis.cpp --- a/src/backend/worksheet/plots/cartesian/Axis.cpp +++ b/src/backend/worksheet/plots/cartesian/Axis.cpp @@ -115,13 +115,13 @@ * \ingroup worksheet */ Axis::Axis(const QString& name, AxisOrientation orientation) - : WorksheetElement(name), d_ptr(new AxisPrivate(this)) { + : WorksheetElement(name, AxisType), d_ptr(new AxisPrivate(this)) { d_ptr->orientation = orientation; init(); } Axis::Axis(const QString& name, AxisOrientation orientation, AxisPrivate* dd) - : WorksheetElement(name), d_ptr(dd) { + : WorksheetElement(name, AxisType), d_ptr(dd) { d_ptr->orientation = orientation; init(); } diff --git a/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp b/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp --- a/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp +++ b/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp @@ -81,11 +81,15 @@ * * */ -CartesianPlot::CartesianPlot(const QString &name) : AbstractPlot(name, new CartesianPlotPrivate(this)) { +CartesianPlot::CartesianPlot(const QString &name) + : AbstractPlot(name, new CartesianPlotPrivate(this), CartesianPlotType) { + init(); } -CartesianPlot::CartesianPlot(const QString &name, CartesianPlotPrivate *dd) : AbstractPlot(name, dd) { +CartesianPlot::CartesianPlot(const QString &name, CartesianPlotPrivate *dd) + : AbstractPlot(name, dd, CartesianPlotType) { + init(); } diff --git a/src/backend/worksheet/plots/cartesian/CartesianPlotLegend.cpp b/src/backend/worksheet/plots/cartesian/CartesianPlotLegend.cpp --- a/src/backend/worksheet/plots/cartesian/CartesianPlotLegend.cpp +++ b/src/backend/worksheet/plots/cartesian/CartesianPlotLegend.cpp @@ -51,12 +51,14 @@ #include CartesianPlotLegend::CartesianPlotLegend(CartesianPlot* plot, const QString &name) - : WorksheetElement(name), d_ptr(new CartesianPlotLegendPrivate(this)), m_plot(plot) { + : WorksheetElement(name, CartesianPlotLegendType), d_ptr(new CartesianPlotLegendPrivate(this)), m_plot(plot) { + init(); } CartesianPlotLegend::CartesianPlotLegend(CartesianPlot* plot, const QString &name, CartesianPlotLegendPrivate *dd) - : WorksheetElement(name), d_ptr(dd), m_plot(plot) { + : WorksheetElement(name, CartesianPlotLegendType), d_ptr(dd), m_plot(plot) { + init(); } diff --git a/src/backend/worksheet/plots/cartesian/CustomPoint.cpp b/src/backend/worksheet/plots/cartesian/CustomPoint.cpp --- a/src/backend/worksheet/plots/cartesian/CustomPoint.cpp +++ b/src/backend/worksheet/plots/cartesian/CustomPoint.cpp @@ -50,13 +50,15 @@ * x- and y- coordinates in parent's coordinate system */ -CustomPoint::CustomPoint(const CartesianPlot* plot, const QString& name) : WorksheetElement(name), - d_ptr(new CustomPointPrivate(this, plot)) { +CustomPoint::CustomPoint(const CartesianPlot* plot, const QString& name) + : WorksheetElement(name, CustomPointType), d_ptr(new CustomPointPrivate(this, plot)) { init(); } -CustomPoint::CustomPoint(const QString& name, CustomPointPrivate* dd) : WorksheetElement(name), d_ptr(dd) { +CustomPoint::CustomPoint(const QString& name, CustomPointPrivate* dd) + : WorksheetElement(name, CustomPointType), d_ptr(dd) { + init(); } diff --git a/src/backend/worksheet/plots/cartesian/Histogram.cpp b/src/backend/worksheet/plots/cartesian/Histogram.cpp --- a/src/backend/worksheet/plots/cartesian/Histogram.cpp +++ b/src/backend/worksheet/plots/cartesian/Histogram.cpp @@ -61,13 +61,15 @@ } Histogram::Histogram(const QString &name) - : WorksheetElement(name), d_ptr(new HistogramPrivate(this)) { - init(); + : WorksheetElement(name, AbstractAspect::HistogramType), d_ptr(new HistogramPrivate(this)) { + + init(); } Histogram::Histogram(const QString &name, HistogramPrivate *dd) - : WorksheetElement(name), d_ptr(dd) { - init(); + : WorksheetElement(name, AbstractAspect::HistogramType), d_ptr(dd) { + + init(); } void Histogram::init() { diff --git a/src/backend/worksheet/plots/cartesian/XYAnalysisCurve.h b/src/backend/worksheet/plots/cartesian/XYAnalysisCurve.h --- a/src/backend/worksheet/plots/cartesian/XYAnalysisCurve.h +++ b/src/backend/worksheet/plots/cartesian/XYAnalysisCurve.h @@ -40,7 +40,7 @@ public: enum DataSourceType {DataSourceSpreadsheet, DataSourceCurve}; - explicit XYAnalysisCurve(const QString&); + XYAnalysisCurve(const QString&, AspectType type); ~XYAnalysisCurve() override; virtual void recalculate() = 0; @@ -61,7 +61,7 @@ typedef XYAnalysisCurvePrivate Private; protected: - XYAnalysisCurve(const QString& name, XYAnalysisCurvePrivate* dd); + XYAnalysisCurve(const QString& name, XYAnalysisCurvePrivate* dd, AspectType type); private: Q_DECLARE_PRIVATE(XYAnalysisCurve) diff --git a/src/backend/worksheet/plots/cartesian/XYAnalysisCurve.cpp b/src/backend/worksheet/plots/cartesian/XYAnalysisCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYAnalysisCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYAnalysisCurve.cpp @@ -42,13 +42,15 @@ #include -XYAnalysisCurve::XYAnalysisCurve(const QString& name) - : XYCurve(name, new XYAnalysisCurvePrivate(this)) { +XYAnalysisCurve::XYAnalysisCurve(const QString& name, AspectType type) + : XYCurve(name, new XYAnalysisCurvePrivate(this), type) { + init(); } -XYAnalysisCurve::XYAnalysisCurve(const QString& name, XYAnalysisCurvePrivate* dd) - : XYCurve(name, dd) { +XYAnalysisCurve::XYAnalysisCurve(const QString& name, XYAnalysisCurvePrivate* dd, AspectType type) + : XYCurve(name, dd, type) { + init(); } diff --git a/src/backend/worksheet/plots/cartesian/XYConvolutionCurve.cpp b/src/backend/worksheet/plots/cartesian/XYConvolutionCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYConvolutionCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYConvolutionCurve.cpp @@ -49,11 +49,11 @@ } XYConvolutionCurve::XYConvolutionCurve(const QString& name) - : XYAnalysisCurve(name, new XYConvolutionCurvePrivate(this)) { + : XYAnalysisCurve(name, new XYConvolutionCurvePrivate(this), XYConvolutionCurveType) { } XYConvolutionCurve::XYConvolutionCurve(const QString& name, XYConvolutionCurvePrivate* dd) - : XYAnalysisCurve(name, dd) { + : XYAnalysisCurve(name, dd, XYConvolutionCurveType) { } //no need to delete the d-pointer here - it inherits from QGraphicsItem diff --git a/src/backend/worksheet/plots/cartesian/XYCorrelationCurve.cpp b/src/backend/worksheet/plots/cartesian/XYCorrelationCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYCorrelationCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYCorrelationCurve.cpp @@ -49,11 +49,11 @@ } XYCorrelationCurve::XYCorrelationCurve(const QString& name) - : XYAnalysisCurve(name, new XYCorrelationCurvePrivate(this)) { + : XYAnalysisCurve(name, new XYCorrelationCurvePrivate(this), XYCorrelationCurveType) { } XYCorrelationCurve::XYCorrelationCurve(const QString& name, XYCorrelationCurvePrivate* dd) - : XYAnalysisCurve(name, dd) { + : XYAnalysisCurve(name, dd, XYCorrelationCurveType) { } //no need to delete the d-pointer here - it inherits from QGraphicsItem diff --git a/src/backend/worksheet/plots/cartesian/XYCurve.h b/src/backend/worksheet/plots/cartesian/XYCurve.h --- a/src/backend/worksheet/plots/cartesian/XYCurve.h +++ b/src/backend/worksheet/plots/cartesian/XYCurve.h @@ -55,7 +55,7 @@ enum FillingPosition {NoFilling, FillingAbove, FillingBelow, FillingZeroBaseline, FillingLeft, FillingRight}; enum ErrorBarsType {ErrorBarsSimple, ErrorBarsWithEnds}; - explicit XYCurve(const QString &name); + explicit XYCurve(const QString &name, AspectType type = XYCurveType); ~XYCurve() override; void finalizeAdd() override; @@ -161,7 +161,7 @@ void navigateTo(); protected: - XYCurve(const QString& name, XYCurvePrivate* dd); + XYCurve(const QString& name, XYCurvePrivate* dd, AspectType type); XYCurvePrivate* const d_ptr; private: diff --git a/src/backend/worksheet/plots/cartesian/XYCurve.cpp b/src/backend/worksheet/plots/cartesian/XYCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYCurve.cpp @@ -63,11 +63,15 @@ #include } -XYCurve::XYCurve(const QString &name) : WorksheetElement(name), d_ptr(new XYCurvePrivate(this)) { +XYCurve::XYCurve(const QString &name, AspectType type) + : WorksheetElement(name, type), d_ptr(new XYCurvePrivate(this)) { + init(); } -XYCurve::XYCurve(const QString& name, XYCurvePrivate* dd) : WorksheetElement(name), d_ptr(dd) { +XYCurve::XYCurve(const QString& name, XYCurvePrivate* dd, AspectType type) + : WorksheetElement(name, type), d_ptr(dd) { + init(); } diff --git a/src/backend/worksheet/plots/cartesian/XYDataReductionCurve.cpp b/src/backend/worksheet/plots/cartesian/XYDataReductionCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYDataReductionCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYDataReductionCurve.cpp @@ -47,11 +47,11 @@ #include XYDataReductionCurve::XYDataReductionCurve(const QString& name) - : XYAnalysisCurve(name, new XYDataReductionCurvePrivate(this)) { + : XYAnalysisCurve(name, new XYDataReductionCurvePrivate(this), XYDataReductionCurveType) { } XYDataReductionCurve::XYDataReductionCurve(const QString& name, XYDataReductionCurvePrivate* dd) - : XYAnalysisCurve(name, dd) { + : XYAnalysisCurve(name, dd, XYDataReductionCurveType) { } //no need to delete the d-pointer here - it inherits from QGraphicsItem diff --git a/src/backend/worksheet/plots/cartesian/XYDifferentiationCurve.cpp b/src/backend/worksheet/plots/cartesian/XYDifferentiationCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYDifferentiationCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYDifferentiationCurve.cpp @@ -50,11 +50,11 @@ #include XYDifferentiationCurve::XYDifferentiationCurve(const QString& name) - : XYAnalysisCurve(name, new XYDifferentiationCurvePrivate(this)) { + : XYAnalysisCurve(name, new XYDifferentiationCurvePrivate(this), XYDifferentiationCurveType) { } XYDifferentiationCurve::XYDifferentiationCurve(const QString& name, XYDifferentiationCurvePrivate* dd) - : XYAnalysisCurve(name, dd) { + : XYAnalysisCurve(name, dd, XYDifferentiationCurveType) { } //no need to delete the d-pointer here - it inherits from QGraphicsItem diff --git a/src/backend/worksheet/plots/cartesian/XYEquationCurve.cpp b/src/backend/worksheet/plots/cartesian/XYEquationCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYEquationCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYEquationCurve.cpp @@ -44,12 +44,14 @@ #include XYEquationCurve::XYEquationCurve(const QString& name) - : XYCurve(name, new XYEquationCurvePrivate(this)) { + : XYCurve(name, new XYEquationCurvePrivate(this), XYEquationCurveType) { + init(); } XYEquationCurve::XYEquationCurve(const QString& name, XYEquationCurvePrivate* dd) - : XYCurve(name, dd) { + : XYCurve(name, dd, XYEquationCurveType) { + init(); } diff --git a/src/backend/worksheet/plots/cartesian/XYFitCurve.cpp b/src/backend/worksheet/plots/cartesian/XYFitCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYFitCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYFitCurve.cpp @@ -61,11 +61,11 @@ #include XYFitCurve::XYFitCurve(const QString& name) - : XYAnalysisCurve(name, new XYFitCurvePrivate(this)) { + : XYAnalysisCurve(name, new XYFitCurvePrivate(this), XYFitCurveType) { } XYFitCurve::XYFitCurve(const QString& name, XYFitCurvePrivate* dd) - : XYAnalysisCurve(name, dd) { + : XYAnalysisCurve(name, dd, XYFitCurveType) { } //no need to delete the d-pointer here - it inherits from QGraphicsItem diff --git a/src/backend/worksheet/plots/cartesian/XYFourierFilterCurve.cpp b/src/backend/worksheet/plots/cartesian/XYFourierFilterCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYFourierFilterCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYFourierFilterCurve.cpp @@ -57,11 +57,11 @@ #include // qWarning() XYFourierFilterCurve::XYFourierFilterCurve(const QString& name) - : XYAnalysisCurve(name, new XYFourierFilterCurvePrivate(this)) { + : XYAnalysisCurve(name, new XYFourierFilterCurvePrivate(this), XYFourierFilterCurveType) { } XYFourierFilterCurve::XYFourierFilterCurve(const QString& name, XYFourierFilterCurvePrivate* dd) - : XYAnalysisCurve(name, dd) { + : XYAnalysisCurve(name, dd, XYFourierFilterCurveType) { } //no need to delete the d-pointer here - it inherits from QGraphicsItem diff --git a/src/backend/worksheet/plots/cartesian/XYFourierTransformCurve.cpp b/src/backend/worksheet/plots/cartesian/XYFourierTransformCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYFourierTransformCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYFourierTransformCurve.cpp @@ -53,11 +53,11 @@ #include // qWarning() XYFourierTransformCurve::XYFourierTransformCurve(const QString& name) - : XYAnalysisCurve(name, new XYFourierTransformCurvePrivate(this)) { + : XYAnalysisCurve(name, new XYFourierTransformCurvePrivate(this), XYFourierTransformCurveType) { } XYFourierTransformCurve::XYFourierTransformCurve(const QString& name, XYFourierTransformCurvePrivate* dd) - : XYAnalysisCurve(name, dd) { + : XYAnalysisCurve(name, dd, XYFourierTransformCurveType) { } //no need to delete the d-pointer here - it inherits from QGraphicsItem diff --git a/src/backend/worksheet/plots/cartesian/XYIntegrationCurve.cpp b/src/backend/worksheet/plots/cartesian/XYIntegrationCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYIntegrationCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYIntegrationCurve.cpp @@ -51,11 +51,11 @@ #include XYIntegrationCurve::XYIntegrationCurve(const QString& name) - : XYAnalysisCurve(name, new XYIntegrationCurvePrivate(this)) { + : XYAnalysisCurve(name, new XYIntegrationCurvePrivate(this), XYIntegrationCurveType) { } XYIntegrationCurve::XYIntegrationCurve(const QString& name, XYIntegrationCurvePrivate* dd) - : XYAnalysisCurve(name, dd) { + : XYAnalysisCurve(name, dd, XYIntegrationCurveType) { } //no need to delete the d-pointer here - it inherits from QGraphicsItem diff --git a/src/backend/worksheet/plots/cartesian/XYInterpolationCurve.cpp b/src/backend/worksheet/plots/cartesian/XYInterpolationCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYInterpolationCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYInterpolationCurve.cpp @@ -54,11 +54,11 @@ #include XYInterpolationCurve::XYInterpolationCurve(const QString& name) - : XYAnalysisCurve(name, new XYInterpolationCurvePrivate(this)) { + : XYAnalysisCurve(name, new XYInterpolationCurvePrivate(this), XYInterpolationCurveType) { } XYInterpolationCurve::XYInterpolationCurve(const QString& name, XYInterpolationCurvePrivate* dd) - : XYAnalysisCurve(name, dd) { + : XYAnalysisCurve(name, dd, XYInterpolationCurveType) { } //no need to delete the d-pointer here - it inherits from QGraphicsItem diff --git a/src/backend/worksheet/plots/cartesian/XYSmoothCurve.cpp b/src/backend/worksheet/plots/cartesian/XYSmoothCurve.cpp --- a/src/backend/worksheet/plots/cartesian/XYSmoothCurve.cpp +++ b/src/backend/worksheet/plots/cartesian/XYSmoothCurve.cpp @@ -52,11 +52,11 @@ } XYSmoothCurve::XYSmoothCurve(const QString& name) - : XYAnalysisCurve(name, new XYSmoothCurvePrivate(this)) { + : XYAnalysisCurve(name, new XYSmoothCurvePrivate(this), XYSmoothCurveType) { } XYSmoothCurve::XYSmoothCurve(const QString& name, XYSmoothCurvePrivate* dd) - : XYAnalysisCurve(name, dd) { + : XYAnalysisCurve(name, dd, XYSmoothCurveType) { } //no need to delete the d-pointer here - it inherits from QGraphicsItem diff --git a/src/commonfrontend/ProjectExplorer.cpp b/src/commonfrontend/ProjectExplorer.cpp --- a/src/commonfrontend/ProjectExplorer.cpp +++ b/src/commonfrontend/ProjectExplorer.cpp @@ -369,7 +369,8 @@ //don't do anything for newly added data spreadsheets of data picker curves - if (aspect->inherits("Spreadsheet") && aspect->parentAspect()->inherits("DatapickerCurve")) + if (aspect->inherits(AbstractAspect::SpreadsheetType) && + aspect->parentAspect()->inherits(AbstractAspect::DatapickerCurveType)) return; const AspectTreeModel* tree_model = qobject_cast(m_treeView->model()); @@ -379,7 +380,7 @@ m_treeView->setExpanded(index, true); // newly added columns are only expanded but not selected, return here - if ( aspect->inherits("Column") ) { + if (aspect->inherits(AbstractAspect::ColumnType)) { m_treeView->setExpanded(tree_model->modelIndexOfAspect(aspect->parentAspect()), true); return; } @@ -650,8 +651,7 @@ expanded.push_back(-1); int row = 0; - QVector aspects = const_cast(m_project)->children("AbstractAspect", AbstractAspect::Recursive); - for (const auto* aspect : aspects) { + for (const auto* aspect : m_project->children(AbstractAspect::AbstractAspectType, AbstractAspect::Recursive)) { const QModelIndex& index = model->modelIndexOfAspect(aspect); const auto* part = dynamic_cast(aspect); @@ -711,7 +711,7 @@ */ bool ProjectExplorer::load(XmlStreamReader* reader) { const AspectTreeModel* model = qobject_cast(m_treeView->model()); - const QVector aspects = const_cast(m_project)->children("AbstractAspect", AbstractAspect::Recursive); + const auto aspects = m_project->children(AbstractAspect::AbstractAspectType, AbstractAspect::Recursive); bool expandedItem = false; bool selectedItem = false; diff --git a/src/commonfrontend/widgets/TreeViewComboBox.h b/src/commonfrontend/widgets/TreeViewComboBox.h --- a/src/commonfrontend/widgets/TreeViewComboBox.h +++ b/src/commonfrontend/widgets/TreeViewComboBox.h @@ -46,7 +46,7 @@ void setCurrentModelIndex(const QModelIndex&); QModelIndex currentModelIndex() const; - void setTopLevelClasses(const QList &); + void setTopLevelClasses(const QList &); void setHiddenAspects(const QList&); void showPopup() override; @@ -57,7 +57,7 @@ QGroupBox* m_groupBox; QLineEdit* m_lineEdit; - QList m_topLevelClasses; + QList m_topLevelClasses; QList m_selectableClasses; QList m_hiddenAspects; diff --git a/src/commonfrontend/widgets/TreeViewComboBox.cpp b/src/commonfrontend/widgets/TreeViewComboBox.cpp --- a/src/commonfrontend/widgets/TreeViewComboBox.cpp +++ b/src/commonfrontend/widgets/TreeViewComboBox.cpp @@ -82,7 +82,7 @@ connect(m_lineEdit, &QLineEdit::textChanged, this, &TreeViewComboBox::filterChanged); } -void TreeViewComboBox::setTopLevelClasses(const QList& list) { +void TreeViewComboBox::setTopLevelClasses(const QList& list) { m_topLevelClasses = list; } @@ -226,16 +226,9 @@ checks whether \c aspect is one of the allowed top level types */ bool TreeViewComboBox::isTopLevel(const AbstractAspect* aspect) const { - foreach (const char* classString, m_topLevelClasses) { - if (aspect->inherits(classString)) { - if ( strcmp(classString, "Spreadsheet") == 0 ) { - if (aspect->inherits("FileDataSource")) - return true; //here - else - return true; - } else { - return true; - } + foreach (int type, m_topLevelClasses) { + if (aspect->inherits(static_cast(type))) { + return true; } } return false; diff --git a/src/kdefrontend/GuiObserver.cpp b/src/kdefrontend/GuiObserver.cpp --- a/src/kdefrontend/GuiObserver.cpp +++ b/src/kdefrontend/GuiObserver.cpp @@ -102,15 +102,57 @@ \ingroup kdefrontend */ +namespace GuiObserverHelper +{ + +template +bool raiseDock(T*& dock, QStackedWidget* parent) +{ + const bool generated = !dock; + if (generated) { + dock = new T(parent); + parent->addWidget(dock); + } + parent->setCurrentWidget(dock); + + return generated; +} + +template +void raiseDockSetupConnect(T*& dock, QStatusBar* statusBar, QStackedWidget* parent) +{ + if (raiseDock(dock, parent)) + QObject::connect(dock, &T::info, [=](const QString& text){ statusBar->showMessage(text); }); +} + +template +void raiseDockSetup(T*& dock, QStatusBar* statusBar, QStackedWidget* parent) +{ + if (raiseDock(dock, parent)) { + dock->setupGeneral(); + QObject::connect(dock, &T::info, [=](const QString& text){ statusBar->showMessage(text); }); + } +} + +template +QList castList(QList& selectedAspects) +{ + QList list; + for (auto* aspect : selectedAspects) + list << static_cast(aspect); + return list; +} + +} + +using namespace GuiObserverHelper; + GuiObserver::GuiObserver(MainWin* mainWin) { - connect(mainWin->m_projectExplorer, SIGNAL(selectedAspectsChanged(QList&)), - this, SLOT(selectedAspectsChanged(QList&)) ); - connect(mainWin->m_projectExplorer, SIGNAL(hiddenAspectSelected(const AbstractAspect*)), - this, SLOT(hiddenAspectSelected(const AbstractAspect*)) ); + connect(mainWin->m_projectExplorer, &ProjectExplorer::selectedAspectsChanged, this, &GuiObserver::selectedAspectsChanged); + connect(mainWin->m_projectExplorer, &ProjectExplorer::hiddenAspectSelected, this, &GuiObserver::hiddenAspectSelected); m_mainWindow = mainWin; } - /*! called on selection changes in the project explorer. Determines the type of the currently selected objects (aspects) @@ -125,524 +167,245 @@ return; } - QString prevClassName, className; + const AbstractAspect::AspectType type = selectedAspects.front()->type(); - //check, whether objects of different types where selected - //don't show any dock widgets in this case. + // Check, whether objects of different types were selected. + // Don't show any dock widgets in this case. for (auto* aspect : selectedAspects) { - className = aspect->metaObject()->className(); - if (className != prevClassName && !prevClassName.isEmpty()) { + if (aspect->type() != type) { if (m_mainWindow->stackedWidget->currentWidget()) m_mainWindow->stackedWidget->currentWidget()->hide(); m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Properties")); return; } - prevClassName = className; } - if (m_mainWindow->stackedWidget->currentWidget()) - m_mainWindow->stackedWidget->currentWidget()->show(); - - if (className == QStringLiteral("Spreadsheet")) { + switch (static_cast(type)) { // cast the enum to turn off warnings about unhandled cases + case AbstractAspect::SpreadsheetType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Spreadsheet")); - - if (!m_mainWindow->spreadsheetDock) { - m_mainWindow->spreadsheetDock = new SpreadsheetDock(m_mainWindow->stackedWidget); - connect(m_mainWindow->spreadsheetDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->spreadsheetDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->spreadsheetDock->setSpreadsheets(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->spreadsheetDock); - } else if (className == QStringLiteral("Column")) { + raiseDockSetupConnect(m_mainWindow->spreadsheetDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->spreadsheetDock->setSpreadsheets(castList(selectedAspects)); + break; + case AbstractAspect::ColumnType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Column")); - - if (!m_mainWindow->columnDock) { - m_mainWindow->columnDock = new ColumnDock(m_mainWindow->stackedWidget); - connect(m_mainWindow->columnDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->columnDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->columnDock->setColumns(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->columnDock); - } else if (className == QStringLiteral("Matrix")) { + raiseDockSetupConnect(m_mainWindow->columnDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->columnDock->setColumns(castList(selectedAspects)); + break; + case AbstractAspect::MatrixType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Matrix")); - - if (!m_mainWindow->matrixDock) { - m_mainWindow->matrixDock = new MatrixDock(m_mainWindow->stackedWidget); - connect(m_mainWindow->matrixDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->matrixDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->matrixDock->setMatrices(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->matrixDock); - } else if (className == QStringLiteral("Worksheet")) { + raiseDockSetupConnect(m_mainWindow->matrixDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->matrixDock->setMatrices(castList(selectedAspects)); + break; + case AbstractAspect::WorksheetType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Worksheet")); - - if (!m_mainWindow->worksheetDock) { - m_mainWindow->worksheetDock = new WorksheetDock(m_mainWindow->stackedWidget); - connect(m_mainWindow->worksheetDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->worksheetDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->worksheetDock->setWorksheets(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->worksheetDock); - } else if (className == QStringLiteral("CartesianPlot")) { + raiseDockSetupConnect(m_mainWindow->worksheetDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->worksheetDock->setWorksheets(castList(selectedAspects)); + break; + case AbstractAspect::CartesianPlotType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Cartesian Plot")); - - if (!m_mainWindow->cartesianPlotDock) { - m_mainWindow->cartesianPlotDock = new CartesianPlotDock(m_mainWindow->stackedWidget); - connect(m_mainWindow->cartesianPlotDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->cartesianPlotDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->cartesianPlotDock->setPlots(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->cartesianPlotDock); - } else if (className == QStringLiteral("CartesianPlotLegend")) { + raiseDockSetupConnect(m_mainWindow->cartesianPlotDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->cartesianPlotDock->setPlots(castList(selectedAspects)); + break; + case AbstractAspect::CartesianPlotLegendType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Legend")); - - if (!m_mainWindow->cartesianPlotLegendDock) { - m_mainWindow->cartesianPlotLegendDock = new CartesianPlotLegendDock(m_mainWindow->stackedWidget); - connect(m_mainWindow->cartesianPlotLegendDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->cartesianPlotLegendDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->cartesianPlotLegendDock->setLegends(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->cartesianPlotLegendDock); - } else if (className == QStringLiteral("Axis")) { + raiseDockSetupConnect(m_mainWindow->cartesianPlotLegendDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->cartesianPlotLegendDock->setLegends(castList(selectedAspects)); + break; + case AbstractAspect::AxisType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Axis")); - - if (!m_mainWindow->axisDock) { - m_mainWindow->axisDock = new AxisDock(m_mainWindow->stackedWidget); - connect(m_mainWindow->axisDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->axisDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->axisDock->setAxes(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->axisDock); - } else if (className == QStringLiteral("XYCurve")) { + raiseDockSetupConnect(m_mainWindow->axisDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->axisDock->setAxes(castList(selectedAspects)); + break; + case AbstractAspect::XYCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "xy-Curve")); - - if (!m_mainWindow->xyCurveDock) { - m_mainWindow->xyCurveDock = new XYCurveDock(m_mainWindow->stackedWidget); - m_mainWindow->xyCurveDock->setupGeneral(); - connect(m_mainWindow->xyCurveDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->xyCurveDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->xyCurveDock->setCurves(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->xyCurveDock); - } else if (className == QStringLiteral("XYEquationCurve")) { + raiseDockSetup(m_mainWindow->xyCurveDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->xyCurveDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::XYEquationCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "xy-Equation")); - - if (!m_mainWindow->xyEquationCurveDock) { - m_mainWindow->xyEquationCurveDock = new XYEquationCurveDock(m_mainWindow->stackedWidget); - m_mainWindow->xyEquationCurveDock->setupGeneral(); - connect(m_mainWindow->xyEquationCurveDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->xyEquationCurveDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->xyEquationCurveDock->setCurves(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->xyEquationCurveDock); - } else if (className == QStringLiteral("XYDataReductionCurve")) { + raiseDockSetup(m_mainWindow->xyEquationCurveDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->xyEquationCurveDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::XYDataReductionCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Data Reduction")); if (!m_mainWindow->xyDataReductionCurveDock) { m_mainWindow->xyDataReductionCurveDock = new XYDataReductionCurveDock(m_mainWindow->stackedWidget, m_mainWindow->statusBar()); m_mainWindow->xyDataReductionCurveDock->setupGeneral(); - connect(m_mainWindow->xyDataReductionCurveDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); + connect(m_mainWindow->xyDataReductionCurveDock, &XYDataReductionCurveDock::info, + [&](const QString& text){ m_mainWindow->statusBar()->showMessage(text); }); m_mainWindow->stackedWidget->addWidget(m_mainWindow->xyDataReductionCurveDock); } - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->xyDataReductionCurveDock->setCurves(list); + m_mainWindow->xyDataReductionCurveDock->setCurves(castList(selectedAspects)); m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->xyDataReductionCurveDock); - } else if (className == QStringLiteral("XYDifferentiationCurve")) { + break; + case AbstractAspect::XYDifferentiationCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Differentiation")); - - if (!m_mainWindow->xyDifferentiationCurveDock) { - m_mainWindow->xyDifferentiationCurveDock = new XYDifferentiationCurveDock(m_mainWindow->stackedWidget); - m_mainWindow->xyDifferentiationCurveDock->setupGeneral(); - connect(m_mainWindow->xyDifferentiationCurveDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->xyDifferentiationCurveDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->xyDifferentiationCurveDock->setCurves(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->xyDifferentiationCurveDock); - } else if (className == QStringLiteral("XYIntegrationCurve")) { + raiseDockSetup(m_mainWindow->xyDifferentiationCurveDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->xyDifferentiationCurveDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::XYIntegrationCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Integration")); - - if (!m_mainWindow->xyIntegrationCurveDock) { - m_mainWindow->xyIntegrationCurveDock = new XYIntegrationCurveDock(m_mainWindow->stackedWidget); - m_mainWindow->xyIntegrationCurveDock->setupGeneral(); - connect(m_mainWindow->xyIntegrationCurveDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->xyIntegrationCurveDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->xyIntegrationCurveDock->setCurves(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->xyIntegrationCurveDock); - } else if (className == QStringLiteral("XYInterpolationCurve")) { + raiseDockSetup(m_mainWindow->xyIntegrationCurveDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->xyIntegrationCurveDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::XYInterpolationCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Interpolation")); - - if (!m_mainWindow->xyInterpolationCurveDock) { - m_mainWindow->xyInterpolationCurveDock = new XYInterpolationCurveDock(m_mainWindow->stackedWidget); - m_mainWindow->xyInterpolationCurveDock->setupGeneral(); - connect(m_mainWindow->xyInterpolationCurveDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->xyInterpolationCurveDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->xyInterpolationCurveDock->setCurves(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->xyInterpolationCurveDock); - } else if (className == QStringLiteral("XYSmoothCurve")) { + raiseDockSetup(m_mainWindow->xyInterpolationCurveDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->xyInterpolationCurveDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::XYSmoothCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Smoothing")); - - if (!m_mainWindow->xySmoothCurveDock) { - m_mainWindow->xySmoothCurveDock = new XYSmoothCurveDock(m_mainWindow->stackedWidget); - m_mainWindow->xySmoothCurveDock->setupGeneral(); - connect(m_mainWindow->xySmoothCurveDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->xySmoothCurveDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->xySmoothCurveDock->setCurves(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->xySmoothCurveDock); - } else if (className == QStringLiteral("XYFitCurve")) { + raiseDockSetup(m_mainWindow->xySmoothCurveDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->xySmoothCurveDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::XYFitCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Fit")); - - if (!m_mainWindow->xyFitCurveDock) { - m_mainWindow->xyFitCurveDock = new XYFitCurveDock(m_mainWindow->stackedWidget); - m_mainWindow->xyFitCurveDock->setupGeneral(); - connect(m_mainWindow->xyFitCurveDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->xyFitCurveDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->xyFitCurveDock->setCurves(list); - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->xyFitCurveDock); - } else if (className == QStringLiteral("XYFourierTransformCurve")) { + raiseDockSetup(m_mainWindow->xyFitCurveDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->xyFitCurveDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::XYFourierTransformCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Fourier Transform")); - - if (!m_mainWindow->xyFourierTransformCurveDock) { - m_mainWindow->xyFourierTransformCurveDock = new XYFourierTransformCurveDock(m_mainWindow->stackedWidget); - m_mainWindow->xyFourierTransformCurveDock->setupGeneral(); - connect(m_mainWindow->xyFourierTransformCurveDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->xyFourierTransformCurveDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - - m_mainWindow->xyFourierTransformCurveDock->setCurves(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->xyFourierTransformCurveDock); - } else if (className == QStringLiteral("XYFourierFilterCurve")) { + raiseDockSetup(m_mainWindow->xyFourierTransformCurveDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->xyFourierTransformCurveDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::XYFourierFilterCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Fourier Filter")); - - if (!m_mainWindow->xyFourierFilterCurveDock) { - m_mainWindow->xyFourierFilterCurveDock = new XYFourierFilterCurveDock(m_mainWindow->stackedWidget); - m_mainWindow->xyFourierFilterCurveDock->setupGeneral(); - connect(m_mainWindow->xyFourierFilterCurveDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->xyFourierFilterCurveDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->xyFourierFilterCurveDock->setCurves(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->xyFourierFilterCurveDock); - } else if (className == QStringLiteral("XYConvolutionCurve")) { + raiseDockSetup(m_mainWindow->xyFourierFilterCurveDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->xyFourierFilterCurveDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::XYConvolutionCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Convolution/Deconvolution")); - - if (!m_mainWindow->xyConvolutionCurveDock) { - m_mainWindow->xyConvolutionCurveDock = new XYConvolutionCurveDock(m_mainWindow->stackedWidget); - m_mainWindow->xyConvolutionCurveDock->setupGeneral(); - connect(m_mainWindow->xyConvolutionCurveDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->xyConvolutionCurveDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->xyConvolutionCurveDock->setCurves(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->xyConvolutionCurveDock); - } else if (className == QStringLiteral("XYCorrelationCurve")) { + raiseDockSetup(m_mainWindow->xyConvolutionCurveDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->xyConvolutionCurveDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::XYCorrelationCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Correlation")); - - if (!m_mainWindow->xyCorrelationCurveDock) { - m_mainWindow->xyCorrelationCurveDock = new XYCorrelationCurveDock(m_mainWindow->stackedWidget); - m_mainWindow->xyCorrelationCurveDock->setupGeneral(); - connect(m_mainWindow->xyCorrelationCurveDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->xyCorrelationCurveDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->xyCorrelationCurveDock->setCurves(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->xyCorrelationCurveDock); - } else if (className == QStringLiteral("Histogram")) { + raiseDockSetup(m_mainWindow->xyCorrelationCurveDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->xyCorrelationCurveDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::HistogramType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Histogram Properties")); - - if (!m_mainWindow->histogramDock) { - m_mainWindow->histogramDock = new HistogramDock(m_mainWindow->stackedWidget); - connect(m_mainWindow->histogramDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->histogramDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list<(aspect); - m_mainWindow->histogramDock->setCurves(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->histogramDock); - } else if (className == QStringLiteral("TextLabel")) { + raiseDockSetupConnect(m_mainWindow->histogramDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + m_mainWindow->histogramDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::TextLabelType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Text Label")); - - if (!m_mainWindow->textLabelDock) { - m_mainWindow->textLabelDock = new LabelWidget(m_mainWindow->stackedWidget); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->textLabelDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->textLabelDock->setLabels(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->textLabelDock); - } else if (className == QStringLiteral("CustomPoint")) { + raiseDock(m_mainWindow->textLabelDock, m_mainWindow->stackedWidget); + m_mainWindow->textLabelDock->setLabels(castList(selectedAspects)); + break; + case AbstractAspect::CustomPointType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Custom Point")); - - if (!m_mainWindow->customPointDock) { - m_mainWindow->customPointDock = new CustomPointDock(m_mainWindow->stackedWidget); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->customPointDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->customPointDock->setPoints(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->customPointDock); - } else if (className == QStringLiteral("DatapickerCurve")) { + raiseDock(m_mainWindow->customPointDock, m_mainWindow->stackedWidget); + m_mainWindow->customPointDock->setPoints(castList(selectedAspects)); + break; + case AbstractAspect::DatapickerCurveType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Datapicker Curve")); - - if (!m_mainWindow->datapickerCurveDock) { - m_mainWindow->datapickerCurveDock = new DatapickerCurveWidget(m_mainWindow->stackedWidget); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->datapickerCurveDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->datapickerCurveDock->setCurves(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->datapickerCurveDock); - } else if (className == QStringLiteral("Datapicker")) { + raiseDock(m_mainWindow->datapickerCurveDock, m_mainWindow->stackedWidget); + m_mainWindow->datapickerCurveDock->setCurves(castList(selectedAspects)); + break; + case AbstractAspect::DatapickerType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Datapicker")); + raiseDock(m_mainWindow->datapickerImageDock, m_mainWindow->stackedWidget); - if (!m_mainWindow->datapickerImageDock) { - m_mainWindow->datapickerImageDock = new DatapickerImageWidget(m_mainWindow->stackedWidget); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->datapickerImageDock); + { + QList list; + for (auto* aspect : selectedAspects) + list << qobject_cast(aspect)->image(); + m_mainWindow->datapickerImageDock->setImages(list); } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect)->image(); - m_mainWindow->datapickerImageDock->setImages(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->datapickerImageDock); - } else if (className == QStringLiteral("Project")) { + break; + case AbstractAspect::ProjectType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Project")); - - if (!m_mainWindow->projectDock) { - m_mainWindow->projectDock = new ProjectDock(m_mainWindow->stackedWidget); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->projectDock); - } - + raiseDock(m_mainWindow->projectDock, m_mainWindow->stackedWidget); m_mainWindow->projectDock->setProject(m_mainWindow->m_project); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->projectDock); - } else if (className == QStringLiteral("CantorWorksheet")) { + break; #ifdef HAVE_CANTOR_LIBS - if (!m_mainWindow->cantorWorksheetDock) { - m_mainWindow->cantorWorksheetDock = new CantorWorksheetDock(m_mainWindow->stackedWidget); - connect(m_mainWindow->cantorWorksheetDock, SIGNAL(info(QString)), m_mainWindow->statusBar(), SLOT(showMessage(QString))); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->cantorWorksheetDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - if (list.size() == 1) - m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window %1 is a Cantor backend", "%1 Properties", list.first()->backendName())); - else - m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "CAS Properties")); - m_mainWindow->cantorWorksheetDock->setCantorWorksheets(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->cantorWorksheetDock); + case AbstractAspect::CantorWorksheetType: + raiseDockSetupConnect(m_mainWindow->cantorWorksheetDock, m_mainWindow->statusBar(), m_mainWindow->stackedWidget); + + { + QList list = castList(selectedAspects); + if (list.size() == 1) + m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window %1 is a Cantor backend", "%1 Properties", list.first()->backendName())); + else + m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "CAS Properties")); + m_mainWindow->cantorWorksheetDock->setCantorWorksheets(list); + } + break; #endif - } else if (className == QStringLiteral("Notes")) { + case AbstractAspect::NoteType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Notes")); - - if (!m_mainWindow->notesDock) { - m_mainWindow->notesDock = new NoteDock(m_mainWindow->stackedWidget); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->notesDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->notesDock->setNotesList(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->notesDock); - } + raiseDock(m_mainWindow->notesDock, m_mainWindow->stackedWidget); + m_mainWindow->notesDock->setNotesList(castList(selectedAspects)); + break; #ifdef HAVE_MQTT - else if (className == QStringLiteral("MQTTClient")) { - m_mainWindow->m_propertiesDock->setWindowTitle(i18n("MQTT Data Source")); - - if (!m_mainWindow->m_liveDataDock) { - qDebug()<<"new live data dock"; - m_mainWindow->m_liveDataDock = new LiveDataDock(m_mainWindow->stackedWidget); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->m_liveDataDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->m_liveDataDock->setMQTTClients(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->m_liveDataDock); - } else if (className == QStringLiteral("MQTTSubscription")) { - m_mainWindow->m_propertiesDock->setWindowTitle(i18n("MQTT Data Source")); - - if (!m_mainWindow->m_liveDataDock) { - qDebug()<<"new live data dock"; - m_mainWindow->m_liveDataDock = new LiveDataDock(m_mainWindow->stackedWidget); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->m_liveDataDock); - } - - QList list; - for (auto* aspect : selectedAspects) { - const QString clientName = qobject_cast(aspect)->mqttClient()->name(); - bool found = false; - for (const auto* client : list) { - if (client->name() == clientName) { - found = true; - break; + case AbstractAspect::MQTTClientType: + m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "MQTT Data Source")); + raiseDock(m_mainWindow->m_liveDataDock, m_mainWindow->stackedWidget); + m_mainWindow->m_liveDataDock->setMQTTClients(castList(selectedAspects)); + break; + case AbstractAspect::MQTTSubscriptionType: + m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "MQTT Data Source")); + raiseDock(m_mainWindow->m_liveDataDock, m_mainWindow->stackedWidget); + + { + QList list; + for (auto* aspect : selectedAspects) { + MQTTClient* client = static_cast(aspect)->mqttClient(); + const QString clientName = client->name(); + bool found = false; + for (const auto* lclient : list) { + if (lclient->name() == clientName) { + found = true; + break; + } } + if (!found) + list << client; } - if (!found) - list << qobject_cast(aspect)->mqttClient(); - } - m_mainWindow->m_liveDataDock->setMQTTClients(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->m_liveDataDock); - } else if (className == QStringLiteral("MQTTTopic")) { - m_mainWindow->m_propertiesDock->setWindowTitle(i18n("MQTT Data Source")); - - if (!m_mainWindow->m_liveDataDock) { - m_mainWindow->m_liveDataDock = new LiveDataDock(m_mainWindow->stackedWidget); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->m_liveDataDock); - } - - QList list; - for (auto* aspect : selectedAspects) { - QString clientName = qobject_cast(qobject_cast(aspect)->mqttClient())->name(); - bool found = false; - for (const auto* client : list) { - if (client->name() == clientName) { - found = true; - break; + m_mainWindow->m_liveDataDock->setMQTTClients(list); + } + break; + case AbstractAspect::MQTTTopicType: + m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "MQTT Data Source")); + raiseDock(m_mainWindow->m_liveDataDock, m_mainWindow->stackedWidget); + + { + QList list; + for (auto* aspect : selectedAspects) { + MQTTClient* client = static_cast(aspect)->mqttClient(); + const QString clientName = client->name(); + bool found = false; + for (const auto* lclient : list) { + if (lclient->name() == clientName) { + found = true; + break; + } } + if (!found) + list << client; } - if (!found) - list << qobject_cast(qobject_cast(aspect)->mqttClient()); + m_mainWindow->m_liveDataDock->setMQTTClients(list); } - m_mainWindow->m_liveDataDock->setMQTTClients(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->m_liveDataDock); - } + break; #endif - else if (className == QStringLiteral("LiveDataSource")) { + case AbstractAspect::LiveDataSourceType: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Live Data Source")); - - if (!m_mainWindow->m_liveDataDock) { - m_mainWindow->m_liveDataDock = new LiveDataDock(m_mainWindow->stackedWidget); - m_mainWindow->stackedWidget->addWidget(m_mainWindow->m_liveDataDock); - } - - QList list; - for (auto* aspect : selectedAspects) - list << qobject_cast(aspect); - m_mainWindow->m_liveDataDock->setLiveDataSources(list); - - m_mainWindow->stackedWidget->setCurrentWidget(m_mainWindow->m_liveDataDock); - } else { + raiseDock(m_mainWindow->m_liveDataDock, m_mainWindow->stackedWidget); + m_mainWindow->m_liveDataDock->setLiveDataSources(castList(selectedAspects)); + break; + default: m_mainWindow->m_propertiesDock->setWindowTitle(i18nc("@title:window", "Properties")); if (m_mainWindow->stackedWidget->currentWidget()) m_mainWindow->stackedWidget->currentWidget()->hide(); + return; } + + m_mainWindow->stackedWidget->currentWidget()->show(); } /*! @@ -655,25 +418,30 @@ if (!parent) return; - QString className = parent->metaObject()->className(); - if (className == QStringLiteral("Axis")) { + switch (static_cast(parent->type())) { // cast the enum to turn off warnings about unhandled cases + case AbstractAspect::AxisType: if (!m_mainWindow->axisDock) { m_mainWindow->axisDock = new AxisDock(m_mainWindow->stackedWidget); m_mainWindow->stackedWidget->addWidget(m_mainWindow->axisDock); } m_mainWindow->axisDock->activateTitleTab(); - } else if (className == QStringLiteral("CartesianPlot")) { + break; + case AbstractAspect::CartesianPlotType: if (!m_mainWindow->cartesianPlotDock) { m_mainWindow->cartesianPlotDock = new CartesianPlotDock(m_mainWindow->stackedWidget); m_mainWindow->stackedWidget->addWidget(m_mainWindow->cartesianPlotDock); } m_mainWindow->cartesianPlotDock->activateTitleTab(); - } else if (className == QStringLiteral("CartesianPlotLegend")) { + break; + case AbstractAspect::CartesianPlotLegendType: if (!m_mainWindow->cartesianPlotLegendDock) { m_mainWindow->cartesianPlotLegendDock = new CartesianPlotLegendDock(m_mainWindow->stackedWidget); m_mainWindow->stackedWidget->addWidget(m_mainWindow->cartesianPlotLegendDock); } m_mainWindow->cartesianPlotLegendDock->activateTitleTab(); + break; + default: + break; } } diff --git a/src/kdefrontend/MainWin.cpp b/src/kdefrontend/MainWin.cpp --- a/src/kdefrontend/MainWin.cpp +++ b/src/kdefrontend/MainWin.cpp @@ -1194,7 +1194,7 @@ if (workbook) { QModelIndex index = m_projectExplorer->currentIndex(); const auto* aspect = static_cast(index.internalPointer()); - if (!aspect->inherits("Folder")) { + if (!aspect->inherits(AbstractAspect::FolderType)) { workbook->addChild(spreadsheet); return; } @@ -1215,7 +1215,7 @@ if (workbook) { QModelIndex index = m_projectExplorer->currentIndex(); const auto* aspect = static_cast(index.internalPointer()); - if (!aspect->inherits("Folder")) { + if (!aspect->inherits(AbstractAspect::FolderType)) { workbook->addChild(matrix); return; } @@ -1826,12 +1826,13 @@ auto* dlg = new ImportFileDialog(this, false, fileName); // select existing container - if (m_currentAspect->inherits("Spreadsheet") || m_currentAspect->inherits("Matrix") || m_currentAspect->inherits("Workbook")) - dlg->setCurrentIndex( m_projectExplorer->currentIndex()); - else if (m_currentAspect->inherits("Column")) { - if (m_currentAspect->parentAspect()->inherits("Spreadsheet")) - dlg->setCurrentIndex(m_aspectTreeModel->modelIndexOfAspect(m_currentAspect->parentAspect())); - } + if (m_currentAspect->inherits(AbstractAspect::SpreadsheetType) || + m_currentAspect->inherits(AbstractAspect::MatrixType) || + m_currentAspect->inherits(AbstractAspect::WorkbookType)) + dlg->setCurrentIndex(m_projectExplorer->currentIndex()); + else if (m_currentAspect->inherits(AbstractAspect::ColumnType) && + m_currentAspect->parentAspect()->inherits(AbstractAspect::SpreadsheetType)) + dlg->setCurrentIndex(m_aspectTreeModel->modelIndexOfAspect(m_currentAspect->parentAspect())); if (dlg->exec() == QDialog::Accepted) { dlg->importTo(statusBar()); @@ -1847,12 +1848,13 @@ auto* dlg = new ImportSQLDatabaseDialog(this); // select existing container - if (m_currentAspect->inherits("Spreadsheet") || m_currentAspect->inherits("Matrix") || m_currentAspect->inherits("Workbook")) - dlg->setCurrentIndex( m_projectExplorer->currentIndex()); - else if (m_currentAspect->inherits("Column")) { - if (m_currentAspect->parentAspect()->inherits("Spreadsheet")) - dlg->setCurrentIndex( m_aspectTreeModel->modelIndexOfAspect(m_currentAspect->parentAspect())); - } + if (m_currentAspect->inherits(AbstractAspect::SpreadsheetType) || + m_currentAspect->inherits(AbstractAspect::MatrixType) || + m_currentAspect->inherits(AbstractAspect::WorkbookType)) + dlg->setCurrentIndex(m_projectExplorer->currentIndex()); + else if (m_currentAspect->inherits(AbstractAspect::ColumnType) && + m_currentAspect->parentAspect()->inherits(AbstractAspect::SpreadsheetType)) + dlg->setCurrentIndex(m_aspectTreeModel->modelIndexOfAspect(m_currentAspect->parentAspect())); if (dlg->exec() == QDialog::Accepted) { dlg->importTo(statusBar()); diff --git a/src/kdefrontend/datasources/ImportDialog.cpp b/src/kdefrontend/datasources/ImportDialog.cpp --- a/src/kdefrontend/datasources/ImportDialog.cpp +++ b/src/kdefrontend/datasources/ImportDialog.cpp @@ -96,12 +96,11 @@ cbAddTo->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); grid->addWidget(cbAddTo, 0, 1); - QList list; - list << "Folder" << "Spreadsheet" << "Matrix" << "Workbook"; + QList list{AbstractAspect::FolderType, AbstractAspect::SpreadsheetType, + AbstractAspect::MatrixType, AbstractAspect::WorkbookType}; cbAddTo->setTopLevelClasses(list); - list.clear(); - list << "Spreadsheet" << "Matrix" << "Workbook"; + list.removeFirst(); // do not allow selection of Folders m_aspectTreeModel->setSelectableAspects(list); cbAddTo->setModel(m_aspectTreeModel); diff --git a/src/kdefrontend/datasources/ImportFileDialog.cpp b/src/kdefrontend/datasources/ImportFileDialog.cpp --- a/src/kdefrontend/datasources/ImportFileDialog.cpp +++ b/src/kdefrontend/datasources/ImportFileDialog.cpp @@ -214,16 +214,16 @@ QTime timer; timer.start(); - if (aspect->inherits("Matrix")) { + if (aspect->inherits(AbstractAspect::MatrixType)) { DEBUG(" to Matrix"); auto* matrix = qobject_cast(aspect); filter->readDataFromFile(fileName, matrix, mode); - } else if (aspect->inherits("Spreadsheet")) { + } else if (aspect->inherits(AbstractAspect::SpreadsheetType)) { DEBUG(" to Spreadsheet"); auto* spreadsheet = qobject_cast(aspect); DEBUG(" Calling readDataFromFile() with spreadsheet " << spreadsheet); filter->readDataFromFile(fileName, spreadsheet, mode); - } else if (aspect->inherits("Workbook")) { + } else if (aspect->inherits(AbstractAspect::WorkbookType)) { DEBUG(" to Workbook"); auto* workbook = qobject_cast(aspect); QVector sheets = workbook->children(); @@ -272,9 +272,9 @@ static_cast(filter)->setCurrentObject(names[i]); int index = i + offset; - if (sheets[index]->inherits("Matrix")) + if (sheets[index]->inherits(AbstractAspect::MatrixType)) filter->readDataFromFile(fileName, qobject_cast(sheets[index])); - else if (sheets[index]->inherits("Spreadsheet")) + else if (sheets[index]->inherits(AbstractAspect::SpreadsheetType)) filter->readDataFromFile(fileName, qobject_cast(sheets[index])); } } else { // single import file types @@ -317,7 +317,7 @@ return; } - if (aspect->inherits("Matrix")) { + if (aspect->inherits(AbstractAspect::MatrixType)) { okButton->setEnabled(enable); if (enable) okButton->setToolTip(i18n("Close the dialog and import the data.")); diff --git a/src/kdefrontend/datasources/ImportProjectDialog.cpp b/src/kdefrontend/datasources/ImportProjectDialog.cpp --- a/src/kdefrontend/datasources/ImportProjectDialog.cpp +++ b/src/kdefrontend/datasources/ImportProjectDialog.cpp @@ -79,8 +79,7 @@ m_cbAddTo->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); ui.gbImportTo->layout()->addWidget(m_cbAddTo); - QList list; - list << "Folder"; + QList list{AbstractAspect::FolderType}; m_cbAddTo->setTopLevelClasses(list); m_aspectTreeModel->setSelectableAspects(list); m_cbAddTo->setModel(m_aspectTreeModel); @@ -301,8 +300,8 @@ checks whether \c aspect is one of the allowed top level types */ bool ImportProjectDialog::isTopLevel(const AbstractAspect* aspect) const { - foreach (const char* classString, m_projectParser->topLevelClasses()) { - if (aspect->inherits(classString)) + foreach (int type, m_projectParser->topLevelClasses()) { + if (aspect->inherits(static_cast(type))) return true; } return false; diff --git a/src/kdefrontend/datasources/ImportSQLDatabaseDialog.cpp b/src/kdefrontend/datasources/ImportSQLDatabaseDialog.cpp --- a/src/kdefrontend/datasources/ImportSQLDatabaseDialog.cpp +++ b/src/kdefrontend/datasources/ImportSQLDatabaseDialog.cpp @@ -111,13 +111,13 @@ QTime timer; timer.start(); - if (aspect->inherits("Matrix")) { + if (aspect->inherits(AbstractAspect::MatrixType)) { auto* matrix = qobject_cast(aspect); importSQLDatabaseWidget->read(matrix, mode); - } else if (aspect->inherits("Spreadsheet")) { + } else if (aspect->inherits(AbstractAspect::SpreadsheetType)) { auto* spreadsheet = qobject_cast(aspect); importSQLDatabaseWidget->read(spreadsheet, mode); - } else if (aspect->inherits("Workbook")) { + } else if (aspect->inherits(AbstractAspect::WorkbookType)) { // use active spreadsheet or matrix (only if numeric data is going to be imported) if present, // create a new spreadsheet in the selected workbook otherwise auto* workbook = qobject_cast(aspect); diff --git a/src/kdefrontend/dockwidgets/AxisDock.cpp b/src/kdefrontend/dockwidgets/AxisDock.cpp --- a/src/kdefrontend/dockwidgets/AxisDock.cpp +++ b/src/kdefrontend/dockwidgets/AxisDock.cpp @@ -337,13 +337,11 @@ } void AxisDock::setModel() { - QList list; - list<<"Folder"<<"Spreadsheet"<<"FileDataSource"<<"Column"; + QList list{AbstractAspect::FolderType, AbstractAspect::SpreadsheetType, AbstractAspect::ColumnType}; cbMajorTicksColumn->setTopLevelClasses(list); cbMinorTicksColumn->setTopLevelClasses(list); - list.clear(); - list<<"Column"; + list = {AbstractAspect::ColumnType}; m_aspectTreeModel->setSelectableAspects(list); cbMajorTicksColumn->setModel(m_aspectTreeModel); diff --git a/src/kdefrontend/dockwidgets/HistogramDock.cpp b/src/kdefrontend/dockwidgets/HistogramDock.cpp --- a/src/kdefrontend/dockwidgets/HistogramDock.cpp +++ b/src/kdefrontend/dockwidgets/HistogramDock.cpp @@ -313,15 +313,15 @@ m_aspectTreeModel->enablePlottableColumnsOnly(true); m_aspectTreeModel->enableShowPlotDesignation(true); - QList list; - list << "Folder" << "Workbook" << "Datapicker" << "DatapickerCurve" << "Spreadsheet" - << "FileDataSource" << "Column" << "Worksheet" << "CartesianPlot" << "XYFitCurve" << "CantorWorksheet"; + QList list{AbstractAspect::FolderType, AbstractAspect::WorkbookType, AbstractAspect::DatapickerType, + AbstractAspect::DatapickerCurveType, AbstractAspect::SpreadsheetType, + AbstractAspect::ColumnType, AbstractAspect::WorksheetType, AbstractAspect::CartesianPlotType, + AbstractAspect::XYFitCurveType, AbstractAspect::CantorWorksheetType}; cbDataColumn->setTopLevelClasses(list); cbValuesColumn->setTopLevelClasses(list); - list.clear(); - list << "Column"; + list = {AbstractAspect::ColumnType}; m_aspectTreeModel->setSelectableAspects(list); cbDataColumn->setModel(m_aspectTreeModel); diff --git a/src/kdefrontend/dockwidgets/XYConvolutionCurveDock.cpp b/src/kdefrontend/dockwidgets/XYConvolutionCurveDock.cpp --- a/src/kdefrontend/dockwidgets/XYConvolutionCurveDock.cpp +++ b/src/kdefrontend/dockwidgets/XYConvolutionCurveDock.cpp @@ -205,18 +205,18 @@ void XYConvolutionCurveDock::setModel() { DEBUG("XYConvolutionCurveDock::setModel()"); - QList list; - list << "Folder" << "Datapicker" << "Worksheet" << "CartesianPlot" << "XYCurve"; + QList list{AbstractAspect::FolderType, AbstractAspect::DatapickerType, AbstractAspect::WorksheetType, + AbstractAspect::CartesianPlotType, AbstractAspect::XYCurveType}; cbDataSourceCurve->setTopLevelClasses(list); QList hiddenAspects; for (auto* curve : m_curvesList) hiddenAspects << curve; cbDataSourceCurve->setHiddenAspects(hiddenAspects); - list.clear(); - list << "Folder" << "Workbook" << "Datapicker" << "DatapickerCurve" << "Spreadsheet" - << "FileDataSource" << "Column" << "Worksheet" << "CartesianPlot" << "XYConvolutionCurve"; + list = {AbstractAspect::FolderType, AbstractAspect::WorkbookType, AbstractAspect::DatapickerType, + AbstractAspect::DatapickerCurveType, AbstractAspect::SpreadsheetType, AbstractAspect::ColumnType, + AbstractAspect::WorksheetType, AbstractAspect::CartesianPlotType, AbstractAspect::XYConvolutionCurveType}; cbXDataColumn->setTopLevelClasses(list); cbYDataColumn->setTopLevelClasses(list); cbY2DataColumn->setTopLevelClasses(list); diff --git a/src/kdefrontend/dockwidgets/XYCorrelationCurveDock.cpp b/src/kdefrontend/dockwidgets/XYCorrelationCurveDock.cpp --- a/src/kdefrontend/dockwidgets/XYCorrelationCurveDock.cpp +++ b/src/kdefrontend/dockwidgets/XYCorrelationCurveDock.cpp @@ -188,18 +188,18 @@ void XYCorrelationCurveDock::setModel() { DEBUG("XYCorrelationCurveDock::setModel()"); - QList list; - list << "Folder" << "Datapicker" << "Worksheet" << "CartesianPlot" << "XYCurve"; + QList list{AbstractAspect::FolderType, AbstractAspect::DatapickerType, AbstractAspect::WorksheetType, + AbstractAspect::CartesianPlotType, AbstractAspect::XYCurveType}; cbDataSourceCurve->setTopLevelClasses(list); QList hiddenAspects; for (auto* curve : m_curvesList) hiddenAspects << curve; cbDataSourceCurve->setHiddenAspects(hiddenAspects); - list.clear(); - list << "Folder" << "Workbook" << "Datapicker" << "DatapickerCurve" << "Spreadsheet" - << "FileDataSource" << "Column" << "Worksheet" << "CartesianPlot" << "XYCorrelationCurve"; + list = {AbstractAspect::FolderType, AbstractAspect::WorkbookType, AbstractAspect::DatapickerType, + AbstractAspect::DatapickerCurveType, AbstractAspect::SpreadsheetType, AbstractAspect::ColumnType, + AbstractAspect::WorksheetType, AbstractAspect::CartesianPlotType, AbstractAspect::XYCorrelationCurveType}; cbXDataColumn->setTopLevelClasses(list); cbYDataColumn->setTopLevelClasses(list); cbY2DataColumn->setTopLevelClasses(list); diff --git a/src/kdefrontend/dockwidgets/XYCurveDock.cpp b/src/kdefrontend/dockwidgets/XYCurveDock.cpp --- a/src/kdefrontend/dockwidgets/XYCurveDock.cpp +++ b/src/kdefrontend/dockwidgets/XYCurveDock.cpp @@ -471,9 +471,10 @@ m_aspectTreeModel->enablePlottableColumnsOnly(true); m_aspectTreeModel->enableShowPlotDesignation(true); - QList list; - list << "Folder" << "Workbook" << "Datapicker" << "DatapickerCurve" << "Spreadsheet" - << "FileDataSource" << "Column" << "Worksheet" << "CartesianPlot" << "XYFitCurve" << "CantorWorksheet"; + QList list{AbstractAspect::FolderType, AbstractAspect::WorkbookType, AbstractAspect::DatapickerType, + AbstractAspect::DatapickerCurveType, AbstractAspect::SpreadsheetType, + AbstractAspect::ColumnType, AbstractAspect::WorksheetType, AbstractAspect::CartesianPlotType, + AbstractAspect::XYFitCurveType, AbstractAspect::CantorWorksheetType}; if (cbXColumn) { cbXColumn->setTopLevelClasses(list); @@ -485,8 +486,7 @@ cbYErrorMinusColumn->setTopLevelClasses(list); cbYErrorPlusColumn->setTopLevelClasses(list); - list.clear(); - list << "Column" << "XYCurve"; + list = {AbstractAspect::ColumnType, AbstractAspect::XYCurveType}; m_aspectTreeModel->setSelectableAspects(list); if (cbXColumn) { diff --git a/src/kdefrontend/dockwidgets/XYDataReductionCurveDock.cpp b/src/kdefrontend/dockwidgets/XYDataReductionCurveDock.cpp --- a/src/kdefrontend/dockwidgets/XYDataReductionCurveDock.cpp +++ b/src/kdefrontend/dockwidgets/XYDataReductionCurveDock.cpp @@ -184,18 +184,19 @@ } void XYDataReductionCurveDock::setModel() { - QList list; - list<<"Folder"<<"Datapicker"<<"Worksheet"<<"CartesianPlot"<<"XYCurve"; + QList list{AbstractAspect::FolderType, AbstractAspect::DatapickerType, AbstractAspect::WorksheetType, + AbstractAspect::CartesianPlotType, AbstractAspect::XYCurveType}; cbDataSourceCurve->setTopLevelClasses(list); QList hiddenAspects; for (auto* curve : m_curvesList) hiddenAspects << curve; cbDataSourceCurve->setHiddenAspects(hiddenAspects); - list.clear(); - list<<"Folder"<<"Workbook"<<"Datapicker"<<"DatapickerCurve"<<"Spreadsheet" - <<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"<<"XYFitCurve"; + list = {AbstractAspect::FolderType, AbstractAspect::WorkbookType, AbstractAspect::DatapickerType, + AbstractAspect::DatapickerCurveType, AbstractAspect::SpreadsheetType, + AbstractAspect::ColumnType, AbstractAspect::WorksheetType, AbstractAspect::CartesianPlotType, + AbstractAspect::XYFitCurveType}; cbXDataColumn->setTopLevelClasses(list); cbYDataColumn->setTopLevelClasses(list); diff --git a/src/kdefrontend/dockwidgets/XYDifferentiationCurveDock.cpp b/src/kdefrontend/dockwidgets/XYDifferentiationCurveDock.cpp --- a/src/kdefrontend/dockwidgets/XYDifferentiationCurveDock.cpp +++ b/src/kdefrontend/dockwidgets/XYDifferentiationCurveDock.cpp @@ -169,18 +169,18 @@ } void XYDifferentiationCurveDock::setModel() { - QList list; - list<<"Folder"<<"Datapicker"<<"Worksheet"<<"CartesianPlot"<<"XYCurve"; + QList list{AbstractAspect::FolderType, AbstractAspect::DatapickerType, AbstractAspect::WorksheetType, + AbstractAspect::CartesianPlotType, AbstractAspect::XYCurveType}; cbDataSourceCurve->setTopLevelClasses(list); QList hiddenAspects; for (auto* curve : m_curvesList) hiddenAspects << curve; cbDataSourceCurve->setHiddenAspects(hiddenAspects); - list.clear(); - list<<"Folder"<<"Workbook"<<"Datapicker"<<"DatapickerCurve"<<"Spreadsheet" - <<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"<<"XYFitCurve"; + list = {AbstractAspect::FolderType, AbstractAspect::WorkbookType, AbstractAspect::DatapickerType, + AbstractAspect::DatapickerCurveType, AbstractAspect::SpreadsheetType, AbstractAspect::ColumnType, + AbstractAspect::WorksheetType, AbstractAspect::CartesianPlotType, AbstractAspect::XYFitCurveType}; cbXDataColumn->setTopLevelClasses(list); cbYDataColumn->setTopLevelClasses(list); diff --git a/src/kdefrontend/dockwidgets/XYFitCurveDock.cpp b/src/kdefrontend/dockwidgets/XYFitCurveDock.cpp --- a/src/kdefrontend/dockwidgets/XYFitCurveDock.cpp +++ b/src/kdefrontend/dockwidgets/XYFitCurveDock.cpp @@ -283,17 +283,17 @@ void XYFitCurveDock::setModel() { DEBUG("XYFitCurveDock::setModel()"); - QList list; - list << "Folder" << "Datapicker" << "Worksheet" << "CartesianPlot" << "XYCurve"; + QList list{AbstractAspect::FolderType, AbstractAspect::DatapickerType, AbstractAspect::WorksheetType, + AbstractAspect::CartesianPlotType, AbstractAspect::XYCurveType}; cbDataSourceCurve->setTopLevelClasses(list); QList hiddenAspects; for (auto* curve : m_curvesList) hiddenAspects << curve; cbDataSourceCurve->setHiddenAspects(hiddenAspects); - list.clear(); - list << "Folder" << "Workbook" << "Spreadsheet" << "FileDataSource" << "Column" << "CantorWorksheet" << "Datapicker"; + list = {AbstractAspect::FolderType, AbstractAspect::WorkbookType, AbstractAspect::SpreadsheetType, + AbstractAspect::ColumnType, AbstractAspect::CantorWorksheetType, AbstractAspect::DatapickerType}; cbXDataColumn->setTopLevelClasses(list); cbYDataColumn->setTopLevelClasses(list); cbXErrorColumn->setTopLevelClasses(list); diff --git a/src/kdefrontend/dockwidgets/XYFourierFilterCurveDock.cpp b/src/kdefrontend/dockwidgets/XYFourierFilterCurveDock.cpp --- a/src/kdefrontend/dockwidgets/XYFourierFilterCurveDock.cpp +++ b/src/kdefrontend/dockwidgets/XYFourierFilterCurveDock.cpp @@ -183,18 +183,18 @@ } void XYFourierFilterCurveDock::setModel() { - QList list; - list<<"Folder"<<"Datapicker"<<"Worksheet"<<"CartesianPlot"<<"XYCurve"; + QList list{AbstractAspect::FolderType, AbstractAspect::DatapickerType, AbstractAspect::WorksheetType, + AbstractAspect::CartesianPlotType, AbstractAspect::XYCurveType}; cbDataSourceCurve->setTopLevelClasses(list); QList hiddenAspects; for (auto* curve : m_curvesList) hiddenAspects << curve; cbDataSourceCurve->setHiddenAspects(hiddenAspects); - list.clear(); - list<<"Folder"<<"Workbook"<<"Datapicker"<<"DatapickerCurve"<<"Spreadsheet" - <<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"<<"XYFitCurve"; + list = {AbstractAspect::FolderType, AbstractAspect::WorkbookType, AbstractAspect::DatapickerType, + AbstractAspect::DatapickerCurveType, AbstractAspect::SpreadsheetType, AbstractAspect::ColumnType, + AbstractAspect::WorksheetType, AbstractAspect::CartesianPlotType, AbstractAspect::XYFitCurveType}; cbXDataColumn->setTopLevelClasses(list); cbYDataColumn->setTopLevelClasses(list); diff --git a/src/kdefrontend/dockwidgets/XYFourierTransformCurveDock.cpp b/src/kdefrontend/dockwidgets/XYFourierTransformCurveDock.cpp --- a/src/kdefrontend/dockwidgets/XYFourierTransformCurveDock.cpp +++ b/src/kdefrontend/dockwidgets/XYFourierTransformCurveDock.cpp @@ -162,9 +162,10 @@ } void XYFourierTransformCurveDock::setModel() { - QList list; - list<<"Folder"<<"Workbook"<<"Datapicker"<<"DatapickerCurve"<<"Spreadsheet" - <<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"<<"XYFitCurve"<<"CantorWorksheet"; + QList list{AbstractAspect::FolderType, AbstractAspect::WorkbookType, AbstractAspect::DatapickerType, + AbstractAspect::DatapickerCurveType, AbstractAspect::SpreadsheetType, AbstractAspect::ColumnType, + AbstractAspect::WorksheetType, AbstractAspect::CartesianPlotType, AbstractAspect::XYFitCurveType, + AbstractAspect::CantorWorksheetType}; cbXDataColumn->setTopLevelClasses(list); cbYDataColumn->setTopLevelClasses(list); diff --git a/src/kdefrontend/dockwidgets/XYIntegrationCurveDock.cpp b/src/kdefrontend/dockwidgets/XYIntegrationCurveDock.cpp --- a/src/kdefrontend/dockwidgets/XYIntegrationCurveDock.cpp +++ b/src/kdefrontend/dockwidgets/XYIntegrationCurveDock.cpp @@ -170,18 +170,18 @@ } void XYIntegrationCurveDock::setModel() { - QList list; - list<<"Folder"<<"Datapicker"<<"Worksheet"<<"CartesianPlot"<<"XYCurve"; + QList list{AbstractAspect::FolderType, AbstractAspect::DatapickerType, AbstractAspect::WorksheetType, + AbstractAspect::CartesianPlotType, AbstractAspect::XYCurveType}; cbDataSourceCurve->setTopLevelClasses(list); QList hiddenAspects; for (auto* curve : m_curvesList) hiddenAspects << curve; cbDataSourceCurve->setHiddenAspects(hiddenAspects); - list.clear(); - list<<"Folder"<<"Workbook"<<"Datapicker"<<"DatapickerCurve"<<"Spreadsheet" - <<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"<<"XYFitCurve"; + list = {AbstractAspect::FolderType, AbstractAspect::WorkbookType, AbstractAspect::DatapickerType, + AbstractAspect::DatapickerCurveType, AbstractAspect::SpreadsheetType, AbstractAspect::ColumnType, + AbstractAspect::WorksheetType, AbstractAspect::CartesianPlotType, AbstractAspect::XYFitCurveType}; cbXDataColumn->setTopLevelClasses(list); cbYDataColumn->setTopLevelClasses(list); diff --git a/src/kdefrontend/dockwidgets/XYInterpolationCurveDock.cpp b/src/kdefrontend/dockwidgets/XYInterpolationCurveDock.cpp --- a/src/kdefrontend/dockwidgets/XYInterpolationCurveDock.cpp +++ b/src/kdefrontend/dockwidgets/XYInterpolationCurveDock.cpp @@ -203,18 +203,19 @@ } void XYInterpolationCurveDock::setModel() { - QList list; - list<<"Folder"<<"Datapicker"<<"Worksheet"<<"CartesianPlot"<<"XYCurve"; + QList list{AbstractAspect::FolderType, AbstractAspect::DatapickerType, AbstractAspect::WorksheetType, + AbstractAspect::CartesianPlotType, AbstractAspect::XYCurveType}; cbDataSourceCurve->setTopLevelClasses(list); QList hiddenAspects; - for (XYCurve* curve: m_curvesList) + for (auto* curve : m_curvesList) hiddenAspects << curve; cbDataSourceCurve->setHiddenAspects(hiddenAspects); - list.clear(); - list<<"Folder"<<"Workbook"<<"Datapicker"<<"DatapickerCurve"<<"Spreadsheet" - <<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"<<"XYFitCurve"<<"CantorWorksheet"; + list = {AbstractAspect::FolderType, AbstractAspect::WorkbookType, AbstractAspect::DatapickerType, + AbstractAspect::DatapickerCurveType, AbstractAspect::SpreadsheetType, AbstractAspect::ColumnType, + AbstractAspect::WorksheetType, AbstractAspect::CartesianPlotType, AbstractAspect::XYFitCurveType, + AbstractAspect::CantorWorksheetType}; cbXDataColumn->setTopLevelClasses(list); cbYDataColumn->setTopLevelClasses(list); diff --git a/src/kdefrontend/dockwidgets/XYSmoothCurveDock.cpp b/src/kdefrontend/dockwidgets/XYSmoothCurveDock.cpp --- a/src/kdefrontend/dockwidgets/XYSmoothCurveDock.cpp +++ b/src/kdefrontend/dockwidgets/XYSmoothCurveDock.cpp @@ -189,18 +189,19 @@ } void XYSmoothCurveDock::setModel() { - QList list; - list<<"Folder"<<"Datapicker"<<"Worksheet"<<"CartesianPlot"<<"XYCurve"; + QList list{AbstractAspect::FolderType, AbstractAspect::DatapickerType, AbstractAspect::WorksheetType, + AbstractAspect::CartesianPlotType, AbstractAspect::XYCurveType}; cbDataSourceCurve->setTopLevelClasses(list); QList hiddenAspects; for (auto* curve : m_curvesList) hiddenAspects << curve; cbDataSourceCurve->setHiddenAspects(hiddenAspects); - list.clear(); - list<<"Folder"<<"Workbook"<<"Datapicker"<<"DatapickerCurve"<<"Spreadsheet" - <<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"<<"XYFitCurve"<<"CantorWorksheet"; + list = {AbstractAspect::FolderType, AbstractAspect::WorkbookType, AbstractAspect::DatapickerType, + AbstractAspect::DatapickerCurveType, AbstractAspect::SpreadsheetType, AbstractAspect::ColumnType, + AbstractAspect::WorksheetType, AbstractAspect::CartesianPlotType, AbstractAspect::XYFitCurveType, + AbstractAspect::CantorWorksheetType}; cbXDataColumn->setTopLevelClasses(list); cbYDataColumn->setTopLevelClasses(list); diff --git a/src/kdefrontend/spreadsheet/FunctionValuesDialog.h b/src/kdefrontend/spreadsheet/FunctionValuesDialog.h --- a/src/kdefrontend/spreadsheet/FunctionValuesDialog.h +++ b/src/kdefrontend/spreadsheet/FunctionValuesDialog.h @@ -57,8 +57,8 @@ #else std::unique_ptr m_aspectTreeModel; #endif - QList m_topLevelClasses; - QList m_selectableClasses; + QList m_topLevelClasses; + QList m_selectableClasses; QList m_variableNames; QList m_variableLabels; diff --git a/src/kdefrontend/spreadsheet/FunctionValuesDialog.cpp b/src/kdefrontend/spreadsheet/FunctionValuesDialog.cpp --- a/src/kdefrontend/spreadsheet/FunctionValuesDialog.cpp +++ b/src/kdefrontend/spreadsheet/FunctionValuesDialog.cpp @@ -68,8 +68,9 @@ ui.teEquation->setMaximumHeight(QLineEdit().sizeHint().height()*2); ui.teEquation->setFocus(); - m_topLevelClasses<<"Folder"<<"Workbook"<<"Spreadsheet"<<"FileDataSource"<<"Column"; - m_selectableClasses<<"Column"; + m_topLevelClasses = {AbstractAspect::FolderType, AbstractAspect::WorkbookType, + AbstractAspect::SpreadsheetType, AbstractAspect::ColumnType}; + m_selectableClasses = {AbstractAspect::ColumnType}; // needed for buggy compiler #if __cplusplus < 201103L @@ -127,7 +128,7 @@ const QStringList& columnPathes = m_columns.first()->formulaVariableColumnPathes(); //add all available variables and select the corresponding columns - const QVector cols = m_spreadsheet->project()->children("Column", AbstractAspect::Recursive); + const QVector cols = m_spreadsheet->project()->children(AbstractAspect::ColumnType, AbstractAspect::Recursive); for (int i = 0; i < variableNames.size(); ++i) { addVariable(); m_variableNames[i]->setText(variableNames.at(i)); diff --git a/src/kdefrontend/spreadsheet/PlotDataDialog.cpp b/src/kdefrontend/spreadsheet/PlotDataDialog.cpp --- a/src/kdefrontend/spreadsheet/PlotDataDialog.cpp +++ b/src/kdefrontend/spreadsheet/PlotDataDialog.cpp @@ -103,11 +103,9 @@ cbExistingWorksheets->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred)); gridLayout->addWidget(cbExistingWorksheets, 1, 1, 1, 1); - QList list; - list<<"Folder"<<"Worksheet"<<"CartesianPlot"; + QList list{AbstractAspect::FolderType, AbstractAspect::WorksheetType, AbstractAspect::CartesianPlotType}; cbExistingPlots->setTopLevelClasses(list); - list.clear(); - list<<"CartesianPlot"; + list = {AbstractAspect::CartesianPlotType}; m_plotsModel->setSelectableAspects(list); cbExistingPlots->setModel(m_plotsModel); @@ -118,11 +116,9 @@ cbExistingPlots->setCurrentModelIndex(m_plotsModel->modelIndexOfAspect(plot)); } - list.clear(); - list<<"Folder"<<"Worksheet"; + list = {AbstractAspect::FolderType, AbstractAspect::WorksheetType}; cbExistingWorksheets->setTopLevelClasses(list); - list.clear(); - list<<"Worksheet"; + list = {AbstractAspect::WorksheetType}; m_worksheetsModel->setSelectableAspects(list); cbExistingWorksheets->setModel(m_worksheetsModel);