summaryrefslogtreecommitdiffstats
path: root/adept/libadept/easytagfilter.h
diff options
context:
space:
mode:
Diffstat (limited to 'adept/libadept/easytagfilter.h')
-rw-r--r--adept/libadept/easytagfilter.h93
1 files changed, 93 insertions, 0 deletions
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 <me@mornfall.net>
+*/
+
+#include <klocale.h>
+#include <qlayout.h>
+#include <kdebug.h>
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/cache/component/tags.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/easytagfilterui.h>
+#include <adept/filterlist.h>
+#include <adept/lister.h>
+
+#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