You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.2 KiB
95 lines
2.2 KiB
/** -*- C++ -*-
|
|
@file adept/quickfilter.h
|
|
@author Peter Rockai <me@mornfall.net>
|
|
*/
|
|
|
|
#include <tdelocale.h>
|
|
#include <tqlayout.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( TQWidget *parent, const char *name = 0 );
|
|
virtual Predicate predicate();
|
|
public slots:
|
|
void predicateChanged();
|
|
void reset();
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|