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