/*
* Copyright (C) 2009, 2010 Nicolas Bonnefon and other contributors
*
* This file is part of glogg.
*
* glogg is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* glogg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with glogg. If not, see .
*/
#ifndef FILTERSET_H
#define FILTERSET_H
#include
#include
#include
#include "persistable.h"
// Represents a filter, i.e. a regexp and the colors matching text
// should be rendered in.
class Filter
{
public:
// Construct an uninitialized Filter (when reading from a config file)
Filter();
Filter(const QString& pattern, bool ignoreCase,
const QString& foreColor, const QString& backColor );
// Tests the string passed for a match, returns a value just like
// QRegExp::indexIn (i.e. -1 if no match)
int indexIn( const QString& string ) const;
// Accessor functions
QString pattern() const;
void setPattern( const QString& pattern );
bool ignoreCase() const;
void setIgnoreCase( bool ignoreCase );
const QString& foreColorName() const;
void setForeColor( const QString& foreColorName );
const QString& backColorName() const;
void setBackColor( const QString& backColorName );
// Operators for serialization
// (must be kept to migrate filters from <=0.8.2)
friend QDataStream& operator<<( QDataStream& out, const Filter& object );
friend QDataStream& operator>>( QDataStream& in, Filter& object );
// Reads/writes the current config in the QSettings object passed
void saveToStorage( QSettings& settings ) const;
void retrieveFromStorage( QSettings& settings );
private:
QRegExp regexp_;
QString foreColorName_;
QString backColorName_;
bool enabled_;
};
// Represents an ordered set of filters to be applied to each line displayed.
class FilterSet : public Persistable
{
public:
// Construct an empty filter set
FilterSet();
// Returns weither the passed line match a filter of the set,
// if so, it returns the fore/back colors the line should use.
// Ownership of the colors is transfered to the caller.
bool matchLine( const QString& line,
QColor* foreColor, QColor* backColor ) const;
// Reads/writes the current config in the QSettings object passed
virtual void saveToStorage( QSettings& settings ) const;
virtual void retrieveFromStorage( QSettings& settings );
// Should be private really, but I don't know how to have
// it recognised by QVariant then.
typedef QList FilterList;
// Operators for serialization
// (must be kept to migrate filters from <=0.8.2)
friend QDataStream& operator<<(
QDataStream& out, const FilterSet& object );
friend QDataStream& operator>>(
QDataStream& in, FilterSet& object );
private:
static const int FILTERSET_VERSION;
FilterList filterList;
// To simplify this class interface, FilterDialog can access our
// internal structure directly.
friend class FiltersDialog;
};
Q_DECLARE_METATYPE(Filter)
Q_DECLARE_METATYPE(FilterSet)
Q_DECLARE_METATYPE(FilterSet::FilterList)
#endif