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