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:
parent
2c3e4eaa41
commit
706edd805f
|
@ -47,7 +47,7 @@ private:
|
|||
BSplitView* fSplitView;
|
||||
|
||||
Model fModel;
|
||||
PackageInfoList fVisiblePackages;
|
||||
PackageList fVisiblePackages;
|
||||
|
||||
PackageManager fPackageManager;
|
||||
};
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue