From 706edd805f055a2f2dc134a232082ae15f391529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Sat, 10 Aug 2013 19:30:49 +0200 Subject: [PATCH] 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. --- src/apps/haiku-depot/MainWindow.h | 2 +- src/apps/haiku-depot/Model.cpp | 49 ++++++++++++++++++++++++------ src/apps/haiku-depot/Model.h | 10 +++++- src/apps/haiku-depot/PackageInfo.h | 14 +++++++-- 4 files changed, 61 insertions(+), 14 deletions(-) diff --git a/src/apps/haiku-depot/MainWindow.h b/src/apps/haiku-depot/MainWindow.h index f7d12fea13..694f32dc7b 100644 --- a/src/apps/haiku-depot/MainWindow.h +++ b/src/apps/haiku-depot/MainWindow.h @@ -47,7 +47,7 @@ private: BSplitView* fSplitView; Model fModel; - PackageInfoList fVisiblePackages; + PackageList fVisiblePackages; PackageManager fPackageManager; }; diff --git a/src/apps/haiku-depot/Model.cpp b/src/apps/haiku-depot/Model.cpp index a2f89359f2..21bc600412 100644 --- a/src/apps/haiku-depot/Model.cpp +++ b/src/apps/haiku-depot/Model.cpp @@ -47,9 +47,9 @@ public: // Also the PackageList could actually contain references to packages // instead of the packages as objects. The equal operator is quite // expensive as is. - const PackageInfoList& packageList = fDepot.PackageList(); - for (int i = packageList.CountItems() - 1; i >= 0; i--) { - if (packageList.ItemAtFast(i) == package) + const PackageList& packages = fDepot.Packages(); + for (int i = packages.CountItems() - 1; i >= 0; i--) { + if (packages.ItemAtFast(i) == package) return true; } return false; @@ -131,20 +131,19 @@ Model::Model() } -PackageInfoList +PackageList Model::CreatePackageList() const { // TODO: Allow to restrict depot, filter by search terms, ... // Return all packages from all depots. - PackageInfoList resultList; + PackageList resultList; for (int32 i = 0; i < fDepots.CountItems(); i++) { - const PackageInfoList& packageList - = fDepots.ItemAtFast(i).PackageList(); + const PackageList& packages = fDepots.ItemAtFast(i).Packages(); - for (int32 j = 0; j < packageList.CountItems(); j++) { - const PackageInfo& package = packageList.ItemAtFast(j); + for (int32 j = 0; j < packages.CountItems(); j++) { + const PackageInfo& package = packages.ItemAtFast(j); if (fCategoryFilter->AcceptsPackage(package) && fDepotFilter->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 Model::SetCategory(const BString& category) { diff --git a/src/apps/haiku-depot/Model.h b/src/apps/haiku-depot/Model.h index cdc0128e17..e455035029 100644 --- a/src/apps/haiku-depot/Model.h +++ b/src/apps/haiku-depot/Model.h @@ -25,7 +25,7 @@ public: Model(); // !Returns new PackageInfoList from current parameters - PackageInfoList CreatePackageList() const; + PackageList CreatePackageList() const; bool AddDepot(const DepotInfo& depot); const DepotList& Depots() const @@ -50,6 +50,10 @@ public: const CategoryList& Categories() const { return fCategories; } + void SetPackageState( + const PackageInfo& package, + PackageState state); + // Configure PackageFilters void SetCategory(const BString& category); @@ -69,6 +73,10 @@ private: CategoryList fCategories; + PackageList fInstalledPackages; + PackageList fActivatedPackages; + PackageList fUninstalledPackages; + PackageFilterRef fCategoryFilter; PackageFilterRef fDepotFilter; PackageFilterRef fSearchTermsFilter; diff --git a/src/apps/haiku-depot/PackageInfo.h b/src/apps/haiku-depot/PackageInfo.h index db9f1b7abd..7461a07b5d 100644 --- a/src/apps/haiku-depot/PackageInfo.h +++ b/src/apps/haiku-depot/PackageInfo.h @@ -232,7 +232,15 @@ private: }; -typedef List PackageInfoList; +typedef List PackageList; + + +enum PackageState { + NONE = 0, + INSTALLED = 1, + ACTIVATED = 2, + UNINSTALLED = 3, +}; class DepotInfo { @@ -248,14 +256,14 @@ public: const BString& Name() const { return fName; } - const PackageInfoList& PackageList() const + const PackageList& Packages() const { return fPackages; } bool AddPackage(const PackageInfo& package); private: BString fName; - PackageInfoList fPackages; + PackageList fPackages; };