File indexing completed on 2024-05-19 03:48:33

0001 /*
0002     File                 : AbstractSimpleFilter.h
0003     Project              : AbstractColumn
0004     Description          : Simplified filter interface for filters with
0005     only one output port.
0006     --------------------------------------------------------------------
0007     SPDX-FileCopyrightText: 2007 Knut Franke <knut.franke@gmx.de>
0008     SPDX-FileCopyrightText: 2007 Tilman Benkert <thzs@gmx.net>
0009     SPDX-FileCopyrightText: 2017-2020 Stefan Gerlach <stefan.gerlach@uni.kn>
0010 
0011     SPDX-License-Identifier: GPL-2.0-or-later
0012 */
0013 #ifndef ABSTRACTSIMPLEFILTER_H
0014 #define ABSTRACTSIMPLEFILTER_H
0015 
0016 #include "AbstractColumn.h"
0017 #include "AbstractFilter.h"
0018 #include "backend/lib/IntervalAttribute.h"
0019 
0020 #include <QLocale>
0021 
0022 class SimpleFilterColumn;
0023 
0024 class AbstractSimpleFilter : public AbstractFilter {
0025     Q_OBJECT
0026 
0027 public:
0028     AbstractSimpleFilter();
0029     int inputCount() const override;
0030     int outputCount() const override;
0031     AbstractColumn* output(int port) override;
0032     const AbstractColumn* output(int port) const override;
0033     virtual AbstractColumn::PlotDesignation plotDesignation() const;
0034     virtual AbstractColumn::ColumnMode columnMode() const;
0035     virtual QString textAt(int row) const;
0036     virtual QDate dateAt(int row) const;
0037     virtual QTime timeAt(int row) const;
0038     virtual QDateTime dateTimeAt(int row) const;
0039     virtual double valueAt(int row) const;
0040     virtual int integerAt(int row) const;
0041     virtual qint64 bigIntAt(int row) const;
0042 
0043     void setNumberLocale(const QLocale& locale) {
0044         m_numberLocale = locale;
0045         m_useDefaultLocale = false;
0046     }
0047     void setNumberLocaleToDefault() {
0048         m_useDefaultLocale = true;
0049     }
0050 
0051     virtual int rowCount() const;
0052     virtual int rowCount(double min, double max) const;
0053     virtual int availableRowCount(int max = -1) const;
0054     virtual QList<Interval<int>> dependentRows(const Interval<int>& inputRange) const;
0055 
0056     void save(QXmlStreamWriter*) const override;
0057     bool load(XmlStreamReader*, bool preview) override;
0058     virtual void writeExtraAttributes(QXmlStreamWriter*) const;
0059 
0060 Q_SIGNALS:
0061     void formatChanged();
0062     void digitsChanged();
0063 
0064 protected:
0065     void inputPlotDesignationAboutToChange(const AbstractColumn*) override;
0066     void inputPlotDesignationChanged(const AbstractColumn*) override;
0067     void inputModeAboutToChange(const AbstractColumn*) override;
0068     void inputModeChanged(const AbstractColumn*) override;
0069     void inputDataAboutToChange(const AbstractColumn*) override;
0070     void inputDataChanged(const AbstractColumn*) override;
0071 
0072     void inputRowsAboutToBeInserted(const AbstractColumn* source, int before, int count) override;
0073     void inputRowsInserted(const AbstractColumn* source, int before, int count) override;
0074     void inputRowsAboutToBeRemoved(const AbstractColumn* source, int first, int count) override;
0075     void inputRowsRemoved(const AbstractColumn* source, int first, int count) override;
0076 
0077     SimpleFilterColumn* m_output_column;
0078     QLocale m_numberLocale;
0079     bool m_useDefaultLocale{true};
0080 };
0081 
0082 class SimpleFilterColumn : public AbstractColumn {
0083     Q_OBJECT
0084 
0085 public:
0086     explicit SimpleFilterColumn(AbstractSimpleFilter* owner)
0087         : AbstractColumn(owner->name(), AspectType::SimpleFilterColumn)
0088         , m_owner(owner) {
0089     }
0090 
0091     AbstractColumn::ColumnMode columnMode() const override;
0092     int rowCount() const override {
0093         return m_owner->rowCount();
0094     }
0095     int rowCount(double /*min*/, double /*max*/) const override {
0096         return 0;
0097     }
0098     int availableRowCount(int max = -1) const override {
0099         return m_owner->availableRowCount(max);
0100     }
0101     AbstractColumn::PlotDesignation plotDesignation() const override {
0102         return m_owner->plotDesignation();
0103     }
0104     QString textAt(int row) const override;
0105     QDate dateAt(int row) const override;
0106     QTime timeAt(int row) const override;
0107     QDateTime dateTimeAt(int row) const override;
0108     double valueAt(int row) const override;
0109     int integerAt(int row) const override;
0110     qint64 bigIntAt(int row) const override;
0111     void save(QXmlStreamWriter*) const override{};
0112     bool load(XmlStreamReader*, bool preview) override {
0113         Q_UNUSED(preview);
0114         return true;
0115     };
0116 
0117 private:
0118     AbstractSimpleFilter* m_owner;
0119 
0120     friend class AbstractSimpleFilter;
0121 };
0122 
0123 #endif // ifndef ABSTRACTSIMPLEFILTER_H