xref: /haiku/src/apps/haikudepot/packagemodel/PackageFilter.h (revision 363fc60bf3eb6fd69f0bc6f8448855eecfedfa9d)
1 /*
2  * Copyright 2013-2014, Stephan Aßmus <superstippi@gmx.de>.
3  * Copyright 2016-2023, Andrew Lindesay <apl@lindesay.co.nz>.
4  * All rights reserved. Distributed under the terms of the MIT License.
5  *
6  * Note that this file included code earlier from `Model.cpp` and
7  * copyrights have been latterly been carried across in 2024.
8  */
9 #ifndef PACKAGE_FILTER_H
10 #define PACKAGE_FILTER_H
11 
12 #include <vector>
13 
14 #include <Referenceable.h>
15 #include <String.h>
16 
17 #include "PackageInfo.h"
18 
19 
20 class PackageFilter : public BReferenceable
21 {
22 public:
23 	virtual						~PackageFilter();
24 
25 	virtual	bool				AcceptsPackage(const PackageInfoRef& package) const = 0;
26 };
27 
28 
29 typedef BReference<PackageFilter> PackageFilterRef;
30 
31 
32 class NotFilter : public PackageFilter
33 {
34 public:
35 								NotFilter(PackageFilterRef filter);
36 	virtual bool				AcceptsPackage(const PackageInfoRef& package) const;
37 
38 private:
39 			PackageFilterRef	fFilter;
40 };
41 
42 
43 class AndFilter : public PackageFilter
44 {
45 public:
46 			void				AddFilter(PackageFilterRef filter);
47 	virtual bool				AcceptsPackage(const PackageInfoRef& package) const;
48 
49 private:
50 			std::vector<PackageFilterRef>
51 								fFilters;
52 };
53 
54 
55 class PackageFilterFactory
56 {
57 public:
58 	static	PackageFilterRef	CreateCategoryFilter(const BString& category);
59 	static	PackageFilterRef	CreateSearchTermsFilter(const BString& searchTerms);
60 	static	PackageFilterRef	CreateDepotFilter(const BString& depotName);
61 	static	PackageFilterRef	CreateStateFilter(PackageState state);
62 	static	PackageFilterRef	CreateSourceFilter();
63 	static	PackageFilterRef	CreateDevelopmentFilter();
64 };
65 
66 
67 #endif // PACKAGE_FILTER_H
68