From a4e1f41de249a24f3a3607b3ed5d5f02c094e8b5 Mon Sep 17 00:00:00 2001 From: tpearson Date: Sat, 9 Jan 2010 10:18:22 +0000 Subject: Added adept (KDE3 version abandoned by original author) git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/adept@1072021 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- adept/libadept/easytagfilter.h | 93 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 adept/libadept/easytagfilter.h (limited to 'adept/libadept/easytagfilter.h') diff --git a/adept/libadept/easytagfilter.h b/adept/libadept/easytagfilter.h new file mode 100644 index 0000000..edbe8b5 --- /dev/null +++ b/adept/libadept/easytagfilter.h @@ -0,0 +1,93 @@ +/** -*- C++ -*- + @file adept/quickfilter.h + @author Peter Rockai +*/ + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +#ifndef EPT_EASYTAGFILTER_H +#define EPT_EASYTAGFILTER_H + +namespace adept { + +template< typename T > +struct EasyTagFilter : predicate::Implementation< T, EasyTagFilter< T > >, + InterfacingPredicate +{ + typedef std::map< std::string, std::string > Tags; + + EasyTagFilter() { + setupPredicate(); + } + + void setupPredicate() { + Cache &cache = cache::Global::get(); // FIXME? + m_op = predicate::True< T >(); + for (Tags::iterator i = m_tags.begin(); i != m_tags.end(); ++i ) { + m_op = m_op and predicate::Factory< T >::tag( + cache.tags().tagByName( i->first + "::" + i->second ) ); + // kdDebug() << t.summary() << endl; + } + } + + std::string summary() const { + std::string r( i18n( "EasyTag filter: " ).local8Bit() ); + for (Tags::const_iterator j, i = m_tags.begin(); + i != m_tags.end(); ++i ) { + j = i; ++j; + r += i->first + ": " + i->second; + if (j != m_tags.end()) + r += ", "; + } + return r; + } + + void parseArguments( const predicate::ArgumentList & ) {} + + bool operator==( const EasyTagFilter &o ) const { + return o.m_tags == m_tags; + } + + bool operator()( const T &p ) { + return m_op( p ); + } + + void set( const std::string &f, const std::string &t ) { + m_tags[f] = t; + setupPredicate(); + } + + std::string get( const std::string &f ) { + return m_tags[ f ]; + } + +protected: + Tags m_tags; + predicate::Predicate< T > m_op; +}; + +class EasyTagFilterWidget : public EasyTagFilterUi +{ + Q_OBJECT +public: + EasyTagFilterWidget( QWidget *parent, const char *name = 0 ); + virtual Predicate predicate(); +public slots: + void predicateChanged(); + void reset(); +}; + +} + +#endif -- cgit v1.2.3