SciDAVis  1.D4
AbstractSimpleFilter.h
Go to the documentation of this file.
1 /***************************************************************************
2  File : AbstractSimpleFilter.h
3  Project : SciDAVis
4  --------------------------------------------------------------------
5  Copyright : (C) 2007 by Knut Franke, Tilman Benkert
6  Email (use @ for *) : knut.franke*gmx.de, thzs*gmx.net
7  Description : Simplified filter interface for filters with
8  only one output port.
9 
10  ***************************************************************************/
11 
12 /***************************************************************************
13  * *
14  * This program is free software; you can redistribute it and/or modify *
15  * it under the terms of the GNU General Public License as published by *
16  * the Free Software Foundation; either version 2 of the License, or *
17  * (at your option) any later version. *
18  * *
19  * This program is distributed in the hope that it will be useful, *
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
22  * GNU General Public License for more details. *
23  * *
24  * You should have received a copy of the GNU General Public License *
25  * along with this program; if not, write to the Free Software *
26  * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
27  * Boston, MA 02110-1301 USA *
28  * *
29  ***************************************************************************/
30 #ifndef ABSTRACT_SIMPLE_FILTER
31 #define ABSTRACT_SIMPLE_FILTER
32 
33 #include "core/AbstractFilter.h"
34 #include "core/AbstractColumn.h"
35 #include "lib/IntervalAttribute.h"
36 #include "lib/XmlStreamReader.h"
37 #include <QUndoCommand>
38 #include <QXmlStreamWriter>
39 
40 // forward declaration - class follows
41 class SimpleFilterColumn;
42 
129 {
130  Q_OBJECT
131 
132  public:
136  virtual int inputCount() const { return 1; }
138  virtual int outputCount() const { return 1; }
140  virtual AbstractColumn* output(int port);
141  virtual const AbstractColumn * output(int port) const;
144  return d_inputs.value(0) ?
145  d_inputs.at(0)->plotDesignation() :
147  }
150  {
151  // calling this function while d_input is empty is a sign of very bad code
152  // nevertheless it will return some rather meaningless value to
153  // avoid crashes
154  return d_inputs.value(0) ? d_inputs.at(0)->dataType() : SciDAVis::TypeQString;
155  }
157 
163  {
164  // calling this function while d_input is empty is a sign of very bad code
165  // nevertheless it will return some rather meaningless value to
166  // avoid crashes
167  return d_inputs.value(0) ? d_inputs.at(0)->columnMode() : SciDAVis::Text;
168  }
170 
173  virtual QString textAt(int row) const
174  {
175  return d_inputs.value(0) ? d_inputs.at(0)->textAt(row) : QString();
176  }
178 
181  virtual QDate dateAt(int row) const
182  {
183  return d_inputs.value(0) ? d_inputs.at(0)->dateAt(row) : QDate();
184  }
186 
189  virtual QTime timeAt(int row) const
190  {
191  return d_inputs.value(0) ? d_inputs.at(0)->timeAt(row) : QTime();
192  }
194 
197  virtual QDateTime dateTimeAt(int row) const
198  {
199  return d_inputs.value(0) ? d_inputs.at(0)->dateTimeAt(row) : QDateTime();
200  }
202 
205  virtual double valueAt(int row) const
206  {
207  return d_inputs.value(0) ? d_inputs.at(0)->valueAt(row) : 0.0;
208  }
209 
211 
212  virtual int rowCount() const {
213  return d_inputs.value(0) ? d_inputs.at(0)->rowCount() : 0;
214  }
215  virtual QList< Interval<int> > dependentRows(Interval<int> input_range) const { return QList< Interval<int> >() << input_range; }
217 
219 
220 
221  virtual bool isMasked(int row) const { return d_masking.isSet(row); }
223  virtual bool isMasked(Interval<int> i) const { return d_masking.isSet(i); }
225  virtual QList< Interval<int> > maskedIntervals() const { return d_masking.intervals(); }
227  virtual void clearMasks();
229 
233  virtual void setMasked(Interval<int> i, bool mask = true);
235  virtual void setMasked(int row, bool mask = true) { setMasked(Interval<int>(row,row), mask); }
237 
239  virtual bool isInvalid(int row) const { return d_inputs.value(0) ? d_inputs.at(0)->isInvalid(row) : false; }
241  virtual bool isInvalid(Interval<int> i) const { return d_inputs.value(0) ? d_inputs.at(0)->isInvalid(i) : false; }
243  virtual QList< Interval<int> > invalidIntervals() const
244  {
245  return d_inputs.value(0) ? d_inputs.at(0)->invalidIntervals() : QList< Interval<int> >();
246  }
247 
249 
250 
251  virtual void save(QXmlStreamWriter * writer) const;
253  virtual bool load(XmlStreamReader * reader);
255  virtual void writeExtraAttributes(QXmlStreamWriter * writer) const { Q_UNUSED(writer) }
257 
258  protected:
260 
262 
264  virtual void inputPlotDesignationChanged(const AbstractColumn*);
265  virtual void inputModeAboutToChange(const AbstractColumn*);
266  virtual void inputModeChanged(const AbstractColumn*);
267  virtual void inputDataAboutToChange(const AbstractColumn*);
268  virtual void inputDataChanged(const AbstractColumn*);
269 
270  virtual void inputRowsAboutToBeInserted(const AbstractColumn * source, int before, int count);
271  virtual void inputRowsInserted(const AbstractColumn * source, int before, int count);
272  virtual void inputRowsAboutToBeRemoved(const AbstractColumn * source, int first, int count);
273  virtual void inputRowsRemoved(const AbstractColumn * source, int first, int count);
275 
277 };
278 
280 {
281  Q_OBJECT
282 
283  public:
285 
286  virtual SciDAVis::ColumnDataType dataType() const { return d_owner->dataType(); }
287  virtual SciDAVis::ColumnMode columnMode() const { return d_owner->columnMode(); }
288  virtual int rowCount() const { return d_owner->rowCount(); }
290  virtual bool isInvalid(int row) const { return d_owner->isInvalid(row); }
291  virtual bool isInvalid(Interval<int> i) const { return d_owner->isInvalid(i); }
292  virtual QList< Interval<int> > invalidIntervals() const { return d_owner->invalidIntervals(); }
293  virtual bool isMasked(int row) const { return d_owner->isMasked(row); }
294  virtual bool isMasked(Interval<int> i) const { return d_owner->isMasked(i); }
295  virtual QList< Interval<int> > maskedIntervals() const { return d_owner->maskedIntervals(); }
296  virtual void clearMasks() { d_owner->clearMasks(); }
297  virtual QString textAt(int row) const { return d_owner->textAt(row); }
298  virtual QDate dateAt(int row) const { return d_owner->dateAt(row); }
299  virtual QTime timeAt(int row) const { return d_owner->timeAt(row); }
300  virtual QDateTime dateTimeAt(int row) const { return d_owner->dateTimeAt(row); }
301  virtual double valueAt(int row) const { return d_owner->valueAt(row); }
302 
303  private:
305 
306  friend class AbstractSimpleFilter;
307 };
308 
309 #endif // ifndef ABSTRACT_SIMPLE_FILTER
310