blob: 236f3b29c44094edff0d36ae0d869cc87851d07c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
/* -*- C++ -*- adept/tagfilter.h
written by Peter Rockai <me@mornfall.net> */
#include <tdelocale.h>
#include <tqlayout.h>
#include <tqtimer.h>
#include <tqpoint.h>
#include <apt-front/cache/entity/entity.h>
#include <apt-front/cache/entity/package.h>
#include <apt-front/cache/entity/tag.h>
#include <apt-front/predicate/factory.h>
#include <adept/quickfilterui.h>
#include <adept/filterlist.h>
#include <adept/lister.h>
#include <adept/taglist.h>
#include <adept/tagfilterui.h>
#include <adept/utils.h>
#ifndef EPT_TAGFILTER_H
#define EPT_TAGFILTER_H
namespace adept {
using namespace Tagcoll;
template< typename T >
struct TagFilter : predicate::Implementation< T, TagFilter< T > >,
InterfacingPredicate, cache::Observer
{
typedef cache::entity::Tag Tag;
TagFilter() {
setupPredicate();
observeComponent< cache::component::Tags >();
}
void setupPredicate() {
Cache &cache = cache::Global::get(); // FIXME?
m_op = predicate::Factory< T >::tagSet( m_wanted );
for (Tag::Set::iterator i = m_unwanted.begin(); i != m_unwanted.end(); ++i ) {
m_op = m_op and not predicate::Factory< T >::tag( *i );
}
}
std::string summary() const {
return u8( i18n( "Tag Filter" ) );
}
void parseArguments( const predicate::ArgumentList & ) {}
bool operator==( const TagFilter &o ) const {
return o.m_wanted == m_wanted && o.m_unwanted == m_unwanted;
}
bool operator()( const T &p ) {
return m_op( p );
}
void setWanted( Tag::Set t ) {
m_wanted = t;
setupPredicate();
}
void setUnwanted( Tag::Set t ) {
m_unwanted = t;
setupPredicate();
}
Tag::Set wanted() const { return m_wanted; }
Tag::Set unwanted() const { return m_unwanted; }
void notifyPreRebuild( cache::component::Base * ) {
kdDebug() << "TagFilter pre-rebuild" << endl;
m_unwanted.clear(); m_wanted.clear();
}
void notifyPostRebuild( cache::component::Base * ) {
Cache &c = cache::Global::get( m_cache );
setupPredicate();
}
virtual void reset() {
m_wanted.clear();
m_unwanted.clear();
setupPredicate();
}
protected:
predicate::Predicate< T > m_op;
Tag::Set m_wanted;
Tag::Set m_unwanted;
};
class TagFilterWidget : public TagFilterUi
{
Q_OBJECT
public:
TagFilterWidget( TQWidget *p, const char *n );
virtual Predicate predicate();
public slots:
void predicateChanged();
void wantedChanged();
void unwantedChanged();
protected:
TagList *m_addingTo;
std::vector< entity::Tag > m_tagMenuMap;
};
}
#endif
|