SciDAVis  1.D4
AbstractFilter.h
Go to the documentation of this file.
1 /***************************************************************************
2  File : AbstractFilter.h
3  Project : SciDAVis
4  --------------------------------------------------------------------
5  Copyright : (C) 2007-2009 by Knut Franke, Tilman Benkert
6  Email (use @ for *) : knut.franke*gmx.de, thzs*gmx.net
7  Description : Base class for all analysis operations.
8 
9  ***************************************************************************/
10 
11 /***************************************************************************
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * *
18  * This program is distributed in the hope that it will be useful, *
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
21  * GNU General Public License for more details. *
22  * *
23  * You should have received a copy of the GNU General Public License *
24  * along with this program; if not, write to the Free Software *
25  * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
26  * Boston, MA 02110-1301 USA *
27  * *
28  ***************************************************************************/
29 #ifndef ABSTRACT_FILTER_H
30 #define ABSTRACT_FILTER_H
31 
32 #include "AbstractAspect.h"
33 #include "AbstractColumn.h"
34 #include <QVector>
35 
77 {
78  Q_OBJECT
79 
80  public:
82  AbstractFilter(const QString& name) : AbstractAspect(name) {}
84  virtual ~AbstractFilter() {}
85 
87  virtual int inputCount() const = 0;
94  virtual int outputCount() const = 0;
103  int highestConnectedInput() const { return d_inputs.count() - 1; }
120  bool input(int port, const AbstractColumn* source);
127  bool input(const AbstractFilter* sources);
129  const AbstractColumn *input(int port) const { return d_inputs.value(port); }
138  virtual QString inputLabel(int port) const;
145  virtual AbstractColumn* output(int port=0) = 0;
147  virtual const AbstractColumn* output(int port=0) const = 0;
148 
150  int portIndexOf(const AbstractColumn * column)
151  {
152  for(int i=0; i<d_inputs.size(); i++)
153  if(d_inputs.at(i) == column) return i;
154  return -1;
155  }
156 
157  protected:
163  virtual bool inputAcceptable(int port, const AbstractColumn *source) {
164  Q_UNUSED(port); Q_UNUSED(source); return true;
165  }
172  virtual void inputAboutToBeDisconnected(const AbstractColumn * source) { Q_UNUSED(source); }
173 
174  protected slots:
175 
177 
178 
183  virtual void inputDescriptionAboutToChange(const AbstractColumn * source) { Q_UNUSED(source); }
185  const AbstractColumn * col = qobject_cast<const AbstractColumn*>(aspect);
186  if (col) inputDescriptionAboutToChange(col);
187  }
189 
194  virtual void inputDescriptionChanged(const AbstractColumn * source) { Q_UNUSED(source); }
196  const AbstractColumn * col = qobject_cast<const AbstractColumn*>(aspect);
197  if (col && d_inputs.contains(col)) inputDescriptionChanged(col);
198  }
204  virtual void inputPlotDesignationAboutToChange(const AbstractColumn * source) { Q_UNUSED(source); }
205 ;
211  virtual void inputPlotDesignationChanged(const AbstractColumn * source) { Q_UNUSED(source); }
217  virtual void inputModeAboutToChange(const AbstractColumn * source) { Q_UNUSED(source); }
223  virtual void inputModeChanged(const AbstractColumn * source) { Q_UNUSED(source); }
229  virtual void inputDataAboutToChange(const AbstractColumn * source) { Q_UNUSED(source); }
235  virtual void inputDataChanged(const AbstractColumn * source) { Q_UNUSED(source); }
248  virtual void inputAboutToBeReplaced(const AbstractColumn * source, const AbstractColumn* replacement);
249 
250  virtual void inputRowsAboutToBeInserted(const AbstractColumn * source, int before, int count) {
251  Q_UNUSED(source); Q_UNUSED(before); Q_UNUSED(count);
252  }
253  virtual void inputRowsInserted(const AbstractColumn * source, int before, int count) {
254  Q_UNUSED(source); Q_UNUSED(before); Q_UNUSED(count);
255  }
256  virtual void inputRowsAboutToBeRemoved(const AbstractColumn * source, int first, int count) {
257  Q_UNUSED(source); Q_UNUSED(first); Q_UNUSED(count);
258  }
259  virtual void inputRowsRemoved(const AbstractColumn * source, int first, int count) {
260  Q_UNUSED(source); Q_UNUSED(first); Q_UNUSED(count);
261  }
262  virtual void inputMaskingAboutToChange(const AbstractColumn * source) {
263  Q_UNUSED(source);
264  }
265  virtual void inputMaskingChanged(const AbstractColumn * source) {
266  Q_UNUSED(source);
267  }
269  input(portIndexOf(source), 0);
270  }
272 
273  protected:
275  QVector<const AbstractColumn*> d_inputs;
276 };
277 
278 #endif // ifndef ABSTRACT_FILTER_H
279