File indexing completed on 2024-05-12 03:47:26

0001 /*
0002     File                 : AbstractFilter.h
0003     Project              : SciDAVis
0004     Description          : Base class for all analysis operations.
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2007, 2008 Knut Franke <knut.franke*gmx.de (use @ for *)>
0007     SPDX-FileCopyrightText: 2007, 2008 Tilman Benkert <thzs@gmx.net>
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #ifndef ABSTRACT_FILTER_H
0012 #define ABSTRACT_FILTER_H
0013 
0014 #include "AbstractAspect.h"
0015 #include <QVector>
0016 
0017 class AbstractColumn;
0018 
0019 class AbstractFilter : public AbstractAspect {
0020     Q_OBJECT
0021 
0022 public:
0023     explicit AbstractFilter(const QString& name)
0024         : AbstractAspect(name, AspectType::AbstractFilter) {
0025     }
0026     ~AbstractFilter() override = default;
0027 
0028     virtual int inputCount() const = 0;
0029     virtual int outputCount() const = 0;
0030     int highestConnectedInput() const;
0031     bool input(int port, const AbstractColumn* source);
0032     bool input(const AbstractFilter* sources);
0033     const AbstractColumn* input(int port) const;
0034     virtual QString inputLabel(int port) const;
0035     virtual AbstractColumn* output(int port = 0) = 0;
0036     virtual const AbstractColumn* output(int port = 0) const = 0;
0037 
0038     int portIndexOf(const AbstractColumn* column);
0039 
0040 protected:
0041     virtual bool inputAcceptable(int port, const AbstractColumn* source);
0042     virtual void inputAboutToBeDisconnected(const AbstractColumn* source);
0043 
0044 protected Q_SLOTS:
0045     virtual void inputDescriptionAboutToChange(const AbstractColumn* source);
0046     void inputDescriptionAboutToChange(const AbstractAspect* aspect);
0047     virtual void inputDescriptionChanged(const AbstractColumn* source);
0048     void inputDescriptionChanged(const AbstractAspect* aspect);
0049     virtual void inputPlotDesignationAboutToChange(const AbstractColumn* source);
0050 
0051     virtual void inputPlotDesignationChanged(const AbstractColumn* source);
0052     virtual void inputModeAboutToChange(const AbstractColumn* source);
0053     virtual void inputModeChanged(const AbstractColumn* source);
0054     virtual void inputDataAboutToChange(const AbstractColumn* source);
0055     virtual void inputDataChanged(const AbstractColumn* source);
0056 
0057     virtual void inputRowsAboutToBeInserted(const AbstractColumn* source, int before, int count) {
0058         Q_UNUSED(source);
0059         Q_UNUSED(before);
0060         Q_UNUSED(count);
0061     }
0062     virtual void inputRowsInserted(const AbstractColumn* source, int before, int count) {
0063         Q_UNUSED(source);
0064         Q_UNUSED(before);
0065         Q_UNUSED(count);
0066     }
0067     virtual void inputRowsAboutToBeRemoved(const AbstractColumn* source, int first, int count) {
0068         Q_UNUSED(source);
0069         Q_UNUSED(first);
0070         Q_UNUSED(count);
0071     }
0072     virtual void inputRowsRemoved(const AbstractColumn* source, int first, int count) {
0073         Q_UNUSED(source);
0074         Q_UNUSED(first);
0075         Q_UNUSED(count);
0076     }
0077     virtual void inputMaskingAboutToChange(const AbstractColumn* source) {
0078         Q_UNUSED(source);
0079     }
0080     virtual void inputMaskingChanged(const AbstractColumn* source) {
0081         Q_UNUSED(source);
0082     }
0083     void inputAboutToBeDestroyed(const AbstractColumn* source) {
0084         input(portIndexOf(source), nullptr);
0085     }
0086 
0087 protected:
0088     QVector<const AbstractColumn*> m_inputs;
0089 };
0090 
0091 #endif // ifndef ABSTRACT_FILTER_H