HaikuDepot: PackageInfoList -> PackageList, added PackageState enum

* Model has SetPackageState(). It adds or removes a PackageInfo
   to/from three internal lists, installed, activated and uninstalled
   packages.
This commit is contained in:
Stephan Aßmus
2013-08-10 20:37:10 +02:00
parent 2c3e4eaa41
commit 706edd805f
4 changed files with 61 additions and 14 deletions
+1 -1
View File
@@ -47,7 +47,7 @@ private:
BSplitView* fSplitView; BSplitView* fSplitView;
Model fModel; Model fModel;
PackageInfoList fVisiblePackages; PackageList fVisiblePackages;
PackageManager fPackageManager; PackageManager fPackageManager;
}; };
+40 -9
View File
@@ -47,9 +47,9 @@ public:
// Also the PackageList could actually contain references to packages // Also the PackageList could actually contain references to packages
// instead of the packages as objects. The equal operator is quite // instead of the packages as objects. The equal operator is quite
// expensive as is. // expensive as is.
const PackageInfoList& packageList = fDepot.PackageList(); const PackageList& packages = fDepot.Packages();
for (int i = packageList.CountItems() - 1; i >= 0; i--) { for (int i = packages.CountItems() - 1; i >= 0; i--) {
if (packageList.ItemAtFast(i) == package) if (packages.ItemAtFast(i) == package)
return true; return true;
} }
return false; return false;
@@ -131,20 +131,19 @@ Model::Model()
} }
PackageInfoList PackageList
Model::CreatePackageList() const Model::CreatePackageList() const
{ {
// TODO: Allow to restrict depot, filter by search terms, ... // TODO: Allow to restrict depot, filter by search terms, ...
// Return all packages from all depots. // Return all packages from all depots.
PackageInfoList resultList; PackageList resultList;
for (int32 i = 0; i < fDepots.CountItems(); i++) { for (int32 i = 0; i < fDepots.CountItems(); i++) {
const PackageInfoList& packageList const PackageList& packages = fDepots.ItemAtFast(i).Packages();
= fDepots.ItemAtFast(i).PackageList();
for (int32 j = 0; j < packageList.CountItems(); j++) { for (int32 j = 0; j < packages.CountItems(); j++) {
const PackageInfo& package = packageList.ItemAtFast(j); const PackageInfo& package = packages.ItemAtFast(j);
if (fCategoryFilter->AcceptsPackage(package) if (fCategoryFilter->AcceptsPackage(package)
&& fDepotFilter->AcceptsPackage(package) && fDepotFilter->AcceptsPackage(package)
&& fSearchTermsFilter->AcceptsPackage(package)) { && fSearchTermsFilter->AcceptsPackage(package)) {
@@ -164,6 +163,38 @@ Model::AddDepot(const DepotInfo& depot)
} }
void
Model::SetPackageState(const PackageInfo& package, PackageState state)
{
switch (state) {
default:
case NONE:
fInstalledPackages.Remove(package);
fActivatedPackages.Remove(package);
fUninstalledPackages.Remove(package);
break;
case INSTALLED:
if (!fInstalledPackages.Contains(package))
fInstalledPackages.Add(package);
fActivatedPackages.Remove(package);
fUninstalledPackages.Remove(package);
break;
case ACTIVATED:
if (!fInstalledPackages.Contains(package))
fInstalledPackages.Add(package);
if (!fActivatedPackages.Contains(package))
fActivatedPackages.Add(package);
fUninstalledPackages.Remove(package);
break;
case UNINSTALLED:
fInstalledPackages.Remove(package);
fActivatedPackages.Remove(package);
fUninstalledPackages.Add(package);
break;
}
}
void void
Model::SetCategory(const BString& category) Model::SetCategory(const BString& category)
{ {
+9 -1
View File
@@ -25,7 +25,7 @@ public:
Model(); Model();
// !Returns new PackageInfoList from current parameters // !Returns new PackageInfoList from current parameters
PackageInfoList CreatePackageList() const; PackageList CreatePackageList() const;
bool AddDepot(const DepotInfo& depot); bool AddDepot(const DepotInfo& depot);
const DepotList& Depots() const const DepotList& Depots() const
@@ -50,6 +50,10 @@ public:
const CategoryList& Categories() const const CategoryList& Categories() const
{ return fCategories; } { return fCategories; }
void SetPackageState(
const PackageInfo& package,
PackageState state);
// Configure PackageFilters // Configure PackageFilters
void SetCategory(const BString& category); void SetCategory(const BString& category);
@@ -69,6 +73,10 @@ private:
CategoryList fCategories; CategoryList fCategories;
PackageList fInstalledPackages;
PackageList fActivatedPackages;
PackageList fUninstalledPackages;
PackageFilterRef fCategoryFilter; PackageFilterRef fCategoryFilter;
PackageFilterRef fDepotFilter; PackageFilterRef fDepotFilter;
PackageFilterRef fSearchTermsFilter; PackageFilterRef fSearchTermsFilter;
+11 -3
View File
@@ -232,7 +232,15 @@ private:
}; };
typedef List<PackageInfo, false> PackageInfoList; typedef List<PackageInfo, false> PackageList;
enum PackageState {
NONE = 0,
INSTALLED = 1,
ACTIVATED = 2,
UNINSTALLED = 3,
};
class DepotInfo { class DepotInfo {
@@ -248,14 +256,14 @@ public:
const BString& Name() const const BString& Name() const
{ return fName; } { return fName; }
const PackageInfoList& PackageList() const const PackageList& Packages() const
{ return fPackages; } { return fPackages; }
bool AddPackage(const PackageInfo& package); bool AddPackage(const PackageInfo& package);
private: private:
BString fName; BString fName;
PackageInfoList fPackages; PackageList fPackages;
}; };