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 19:30:49 +02:00
parent 2c3e4eaa41
commit 706edd805f
4 changed files with 61 additions and 14 deletions

View File

@ -47,7 +47,7 @@ private:
BSplitView* fSplitView;
Model fModel;
PackageInfoList fVisiblePackages;
PackageList fVisiblePackages;
PackageManager fPackageManager;
};

View File

@ -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)
{

View File

@ -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;

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 {
@ -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;
};