Logo Search packages:      
Sourcecode: scidavis version File versions  Download package

AbstractSimpleFilter Class Reference

#include <AbstractSimpleFilter.h>

Inheritance diagram for AbstractSimpleFilter:

AbstractFilter AbstractAspect DateTime2DoubleFilter DateTime2StringFilter DayOfWeek2DoubleFilter Double2DateTimeFilter Double2DayOfWeekFilter Double2MonthFilter Double2StringFilter Month2DoubleFilter SimpleCopyThroughFilter String2DateTimeFilter String2DayOfWeekFilter String2DoubleFilter String2MonthFilter

List of all members.


Detailed Description

Simplified filter interface for filters with only one output port.

This class is only meant to simplify implementation of a restricted subtype of filter. It should not be instantiated directly. You should always either derive from AbstractFilter or (if necessary) provide an actual (non-abstract) implementation.

The trick here is that, in a sense, the filter is its own output port. This means you can implement a complete filter in only one class and don't have to coordinate data transfer between a filter class and a data source class. Additionaly, AbstractSimpleFilter offers some useful convenience methods which make writing filters as painless as possible.

For the data type of the output, all types supported by AbstractColumn (currently double, QString and QDateTime) are supported.

Tutorial, Step 1

The simplest filter you can write assumes there's also only one input port and rows on the input correspond 1:1 to rows in the output. All you need to specify is what data type you want to have (in this example double) on the input port and how to compute the output values:

 01 #include "AbstractSimpleFilter.h"
 02 class TutorialFilter1 : public AbstractSimpleFilter
 03 {
 04   protected:
 05         virtual bool inputAcceptable(int, AbstractColumn *source) {
 06               return (source->dataType() == SciDAVis::TypeDouble);
 07         }
 08   public:
 09         virtual SciDAVis::ColumnDataType dataType() const { return SciDAVis::TypeDouble; }
 10
 11         virtual double valueAt(int row) const {
 12               if (!d_inputs.value(0)) return 0.0;
 13               double input_value = d_inputs.value(0)->valueAt(row);
 14               return input_value * input_value;
 15         }
 16 };

This filter reads an input value (line 13) and returns its square (line 14). Reimplementing inputAcceptable() makes sure that the data source really is of type double (lines 5 to 7). Otherwise, the source will be rejected by AbstractFilter::input(). The output type is repoted by reimplementing dataType() (line 09). Before you actually use d_inputs.value(0), make sure that the input port has been connected to a data source (line 12). Otherwise line 13 would result in a crash. That's it, we've already written a fully-functional filter!

Equivalently, you can write 1:1-filters for QString or QDateTime inputs by checking for SciDAVis::TypeQString or SciDAVis::TypeQDateTime in line 6. You would then use AbstractColumn::textAt(row) or AbstractColumn::dateTimeAt(row) in line 13 to access the input data. For QString output, you need to implement AbstractColumn::textAt(row). For QDateTime output, you have to implement three methods:

 virtual QDateTime dateTimeAt(int row) const;
 virtual QDate dateAt(int row) const;
 virtual QTime timeAt(int row) const;

Tutorial, Step 2

Now for something slightly more interesting: a filter that uses only every second row of its input. We no longer have a 1:1 correspondence between input and output rows, so we'll have to do a bit more work in order to have everything come out as expected. We'll use double-typed input and output again:
 01 #include "AbstractSimpleFilter.h"
 02 class TutorialFilter2 : public AbstractSimpleFilter
 03 {
 04   protected:
 05         virtual bool inputAcceptable(int, AbstractColumn *source) {
 06               return (source->dataType() == SciDAVis::TypeDouble);
 07         }
 08   public:
 09         virtual SciDAVis::ColumnDataType dataType() const { return SciDAVis::TypeDouble; }
Even rows (including row 0) get dropped, odd rows are renumbered:
 10   public:
 11   virtual double valueAt(int row) const {
 12         if (!d_inputs.value(0)) return 0.0;
 13         return d_inputs.value(0)->valueAt(2*row + 1);
 14   }

Definition at line 128 of file AbstractSimpleFilter.h.


Public Slots

virtual void remove ()
 Remove me from my parent's list of children.
void setCaptionSpec (const QString &value)
 Set the specification string used for constructing the caption().
void setComment (const QString &value)
void setName (const QString &value)
QString uniqueNameFor (const QString &current_name) const
 Make the specified name unique among my children by incrementing a trailing number.

Signals

void aspectAboutToBeAdded (const AbstractAspect *parent, int index)
 Emit this when a parent aspect is about to get a new child inserted.
void aspectAboutToBeRemoved (const AbstractAspect *parent, int index)
 Emit this from a parent before removing its child.
void aspectAboutToBeRemoved (const AbstractAspect *aspect)
 Emit this from an aspect about to be removed from its parent's children.
void aspectAdded (const AbstractAspect *parent, int index)
 Emit this from a parent after adding a new child to it.
void aspectAdded (const AbstractAspect *aspect)
 Emit this from a newly added aspect.
void aspectDescriptionAboutToChange (const AbstractAspect *aspect)
 Emit this before the name, comment or caption spec is changed.
void aspectDescriptionChanged (const AbstractAspect *aspect)
 Emit this when the name, comment or caption spec changed.
void aspectRemoved (const AbstractAspect *parent, int index)
 Emit this from the parent after removing a child.
void statusInfo (const QString &text)
 Emit this to give status information to the user.

Public Member Functions

 AbstractSimpleFilter ()
 Ctor.
void addChild (AbstractAspect *child)
 Add the given Aspect to my list of children.
QString caption () const
QString captionSpec () const
 Return the specification string used for constructing the caption().
AbstractAspectchild (int index) const
 Get a child by its position in my list of children.
int childCount () const
 Return the number of child Aspects.
virtual SciDAVis::ColumnMode columnMode () const
 Return the column mode.
QString comment () const
virtual QMenu * createContextMenu () const
 Return a new context menu.
QDateTime creationTime () const
virtual SciDAVis::ColumnDataType dataType () const
 Return the data type of the input.
virtual QDate dateAt (int row) const
 Return the date part of row 'row'.
virtual QDateTime dateTimeAt (int row) const
 Set the content of row 'row'.
QList< AbstractAspect * > descendantsThatInherit (const char *class_name)
 Get all descendents that inherit the given class.
future::Folderfolder ()
 Return the folder the Aspect is contained in or 0 if not.
int highestConnectedInput () const
 Return the index of the highest input port that is connected.
virtual QIcon icon () const
 Return an icon to be used for decorating my views.
void importV0x0001XXCreationTime (const QString &str)
int index () const
 Return my position in my parent's list of children.
int indexOfChild (const AbstractAspect *child) const
 Return the position of child in my list of children.
const AbstractColumninput (int port) const
 Return the input currently connected to the specified port, or 0.
bool input (const AbstractFilter *sources)
 Connect all outputs of the provided filter to the corresponding inputs of this filter.
bool input (int port, const AbstractColumn *source)
 Connect the provided data source to the specified input port.
virtual int inputCount () const
 Default to one input port.
virtual QString inputLabel (int port) const
 Return the label associated to the given input port.
void insertChild (AbstractAspect *child, int index)
 Insert the given Aspect at a specific position in my list of children.
virtual QList< Interval< int > > invalidIntervals () const
 Return all intervals of invalid rows.
bool isDescendantOf (AbstractAspect *other)
 Return whether the there is a path upwards to the given aspect.
virtual bool isInvalid (Interval< int > i) const
 Return whether a certain interval of rows contains only invalid values.
virtual bool isInvalid (int row) const
 Return whether a certain row contains an invalid value.
void moveChild (int from, int to)
 Change the positon of a child in my list of children.
QString name () const
virtual const AbstractColumnoutput (int port) const
 Overloaded method for const access.
virtual AbstractColumnoutput (int port)
 Return a pointer to d_output_column on port 0 (don't override unless you really know what you are doing).
virtual int outputCount () const
 We manage only one output port (don't override unless you really know what you are doing).
AbstractAspectparentAspect () const
 Return my parent Aspect or 0 if I currently don't have one.
virtual QString path () const
 Return the path that leads from the top-most Aspect (usually a Project) to me.
virtual SciDAVis::PlotDesignation plotDesignation () const
 Copy plot designation of input port 0.
int portIndexOf (const AbstractColumn *column)
 Return the input port to which the column is connected or -1 if it's not connected.
virtual Projectproject ()
 Return the Project this Aspect belongs to, or 0 if it is currently not part of one.
virtual const Projectproject () const
 Return the Project this Aspect belongs to, or 0 if it is currently not part of one.
virtual void removeAllChildAspects ()
 Remove all child aspects.
void removeChild (int index)
 Remove the Aspect at the given index from my list of children.
void removeChild (AbstractAspect *child, bool detach=false)
 Remove the given Aspect from my list of children.
void reparentChild (AbstractAspect *new_parent, AbstractAspect *child)
 Move a child to another aspect and transfer ownership.
void reparentChild (AbstractAspect *new_parent, AbstractAspect *child, int d_new_index)
 Move a child to another aspect and transfer ownership.
virtual QString textAt (int row) const
 Return the content of row 'row'.
virtual QTime timeAt (int row) const
 Return the time part of row 'row'.
virtual double valueAt (int row) const
 Return the double value in row 'row'.
undo related
void beginMacro (const QString &text)
 Begin an undo stack macro (series of commands).
void endMacro ()
 End the undo stack macro.
void exec (QUndoCommand *command)
 Execute the given command, pushing it on the undoStack() if available.
virtual QUndoStack * undoStack () const
 Return the undo stack of the Project, or 0 if this Aspect is not part of a Project.
Masking
virtual void clearMasks ()
 Clear all masking information.
virtual bool isMasked (Interval< int > i) const
 Return whether a certain interval of rows rows is fully masked.
virtual bool isMasked (int row) const
 Return whether a certain row is masked.
virtual QList< Interval< int > > maskedIntervals () const
 Return all intervals of masked rows.
virtual void setMasked (int row, bool mask=true)
 Overloaded function for convenience.
virtual void setMasked (Interval< int > i, bool mask=true)
 Set an interval masked.
assuming a 1:1 correspondence between input and output rows
virtual QList< Interval< int > > dependentRows (Interval< int > input_range) const
virtual int rowCount () const
XML related functions
virtual bool load (XmlStreamReader *reader)
 Load from XML.
virtual void save (QXmlStreamWriter *writer) const
 Save to XML.
virtual void writeExtraAttributes (QXmlStreamWriter *writer) const
 Override this in derived classes if they have other attributes than filter_name.

Static Public Member Functions

static QVariant global (const QString &key)
 Retrieve a global setting.
static void setGlobal (const QString &key, const QVariant &value)
 Update a global setting.
static void setGlobalDefault (const QString &key, const QVariant &value)
 Set default value for a global setting.

Protected Slots

signal handlers
void inputAboutToBeDestroyed (const AbstractColumn *source)
virtual void inputAboutToBeReplaced (const AbstractColumn *source, const AbstractColumn *replacement)
 An input is about to be replaced.
void inputDescriptionAboutToChange (const AbstractAspect *aspect)
virtual void inputDescriptionAboutToChange (const AbstractColumn *source)
 Name and/or comment of an input will be changed.
void inputDescriptionChanged (const AbstractAspect *aspect)
virtual void inputDescriptionChanged (const AbstractColumn *source)
 Name and/or comment of an input changed.
virtual void inputMaskingAboutToChange (const AbstractColumn *source)
virtual void inputMaskingChanged (const AbstractColumn *source)

Protected Member Functions

virtual void completeAspectInsertion (AbstractAspect *aspect, int index)
 Called after a new child has been inserted or added.
void info (const QString &text)
 Implementations should call this whenever status information should be given to the user.
virtual void inputAboutToBeDisconnected (const AbstractColumn *source)
 Called whenever an input is disconnected or deleted.
virtual bool inputAcceptable (int port, const AbstractColumn *source)
 Give implementations a chance to reject connections to their input ports.
virtual void prepareAspectRemoval (AbstractAspect *aspect)
 Called before a child is removed.
void setCreationTime (const QDateTime &time)
 Set the creation time.
signal handlers
virtual void inputDataAboutToChange (const AbstractColumn *)
 The data of an input is about to change.
virtual void inputDataChanged (const AbstractColumn *)
 The data of an input has changed.
virtual void inputModeAboutToChange (const AbstractColumn *)
 The display mode and possibly the data type of an input is about to change.
virtual void inputModeChanged (const AbstractColumn *)
 The display mode and possibly the data type has changed.
virtual void inputPlotDesignationAboutToChange (const AbstractColumn *)
 The plot designation of an input is about to change.
virtual void inputPlotDesignationChanged (const AbstractColumn *)
 The plot designation of an input changed.
virtual void inputRowsAboutToBeInserted (const AbstractColumn *source, int before, int count)
virtual void inputRowsAboutToBeRemoved (const AbstractColumn *source, int first, int count)
virtual void inputRowsInserted (const AbstractColumn *source, int before, int count)
virtual void inputRowsRemoved (const AbstractColumn *source, int first, int count)
serialize/deserialize
bool readBasicAttributes (XmlStreamReader *reader)
 Load name, creation time and caption spec from XML.
bool readCommentElement (XmlStreamReader *reader)
 Load comment from an XML element.
void writeBasicAttributes (QXmlStreamWriter *writer) const
 Save name, creation time and caption spec to XML.
void writeCommentElement (QXmlStreamWriter *writer) const
 Save the comment to XML.

Protected Attributes

QVector< const AbstractColumn * > d_inputs
 The data sources connected to my input ports.
IntervalAttribute< bool > d_masking
SimpleFilterColumn * d_output_column

Friends

class Private

The documentation for this class was generated from the following files:

Generated by  Doxygen 1.6.0   Back to index