Changes to HaikuDepot GUI

As discussed at #13860.

* Moved "Show only featured packages" from the "Show" menu to a
  checkbox in the filter view.
* Moved "Repositories" popup menu into the menu bar.
* Removed the "Featured packages" title.
* Entering a search term doesn't override the "Only featured"
  filter anymore (used to disable the "Only featured" filter).
This commit is contained in:
Humdinger
2018-02-28 19:17:57 +00:00
committed by waddlesplash
parent 959fdbd314
commit b965ce7025
4 changed files with 52 additions and 61 deletions
+8 -33
View File
@@ -9,6 +9,7 @@
#include <stdio.h>
#include <Catalog.h>
#include <CheckBox.h>
#include <LayoutBuilder.h>
#include <MenuField.h>
#include <MenuItem.h>
@@ -41,14 +42,13 @@ FilterView::FilterView()
:
BGroupView("filter view", B_VERTICAL)
{
// Contruct category popup
// Construct category popup
BPopUpMenu* showMenu = new BPopUpMenu(B_TRANSLATE("Category"));
fShowField = new BMenuField("category", B_TRANSLATE("Category:"), showMenu);
// Construct repository popup
BPopUpMenu* repositoryMenu = new BPopUpMenu(B_TRANSLATE("Repository"));
fRepositoryField = new BMenuField("repository", B_TRANSLATE("Repository:"),
repositoryMenu);
fShowFeaturedPackages = new BCheckBox("showonlyfeatured",
B_TRANSLATE("Show only featured packages"),
new BMessage(MSG_SHOW_FEATURED_PACKAGES));
// Construct search terms field
fSearchTermsText = new BTextControl("search terms",
@@ -71,7 +71,7 @@ FilterView::FilterView()
.AddGroup(B_HORIZONTAL)
.AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING, 1.2f)
.Add(fShowField, 0.0f)
.Add(fRepositoryField, 0.0f)
.Add(fShowFeaturedPackages, 0.0f)
.SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET))
.End()
.AddGlue(0.5f)
@@ -92,7 +92,7 @@ void
FilterView::AttachedToWindow()
{
fShowField->Menu()->SetTargetForItems(Window());
fRepositoryField->Menu()->SetTargetForItems(Window());
fShowFeaturedPackages->SetTarget(Window());
fSearchTermsText->SetTarget(this);
fSearchTermsText->MakeFocus();
@@ -121,32 +121,7 @@ FilterView::MessageReceived(BMessage* message)
void
FilterView::AdoptModel(const Model& model)
{
// Adopt depots
BMenu* repositoryMenu = fRepositoryField->Menu();
repositoryMenu->RemoveItems(0, repositoryMenu->CountItems(), true);
repositoryMenu->AddItem(new BMenuItem(B_TRANSLATE("All repositories"),
new BMessage(MSG_DEPOT_SELECTED)));
repositoryMenu->AddItem(new BSeparatorItem());
bool foundSelectedDepot = false;
const DepotList& depots = model.Depots();
for (int i = 0; i < depots.CountItems(); i++) {
const DepotInfo& depot = depots.ItemAtFast(i);
BMessage* message = new BMessage(MSG_DEPOT_SELECTED);
message->AddString("name", depot.Name());
BMenuItem* item = new BMenuItem(depot.Name(), message);
repositoryMenu->AddItem(item);
if (depot.Name() == model.Depot()) {
item->SetMarked(true);
foundSelectedDepot = true;
}
}
if (!foundSelectedDepot)
repositoryMenu->ItemAt(0)->SetMarked(true);
fShowFeaturedPackages->SetValue(model.ShowFeaturedPackages());
// Adopt categories
BMenu* showMenu = fShowField->Menu();
+3 -1
View File
@@ -8,6 +8,7 @@
#include <GroupView.h>
class BCheckBox;
class BMenuField;
class BTextControl;
class Model;
@@ -17,6 +18,7 @@ enum {
MSG_CATEGORY_SELECTED = 'ctsl',
MSG_DEPOT_SELECTED = 'dpsl',
MSG_SEARCH_TERMS_MODIFIED = 'stmd',
MSG_SHOW_FEATURED_PACKAGES = 'sofp',
};
@@ -32,7 +34,7 @@ public:
private:
BMenuField* fShowField;
BMenuField* fRepositoryField;
BCheckBox* fShowFeaturedPackages;
BTextControl* fSearchTermsText;
};
+39 -26
View File
@@ -74,7 +74,6 @@ enum {
MSG_AUTHORIZATION_CHANGED = 'athc',
MSG_PACKAGE_CHANGED = 'pchd',
MSG_SHOW_FEATURED_PACKAGES = 'sofp',
MSG_SHOW_AVAILABLE_PACKAGES = 'savl',
MSG_SHOW_INSTALLED_PACKAGES = 'sins',
MSG_SHOW_SOURCE_PACKAGES = 'ssrc',
@@ -153,26 +152,13 @@ MainWindow::MainWindow(const BMessage& settings)
fSplitView = new BSplitView(B_VERTICAL, 5.0f);
BGroupView* featuredPackagesGroup = new BGroupView(B_VERTICAL);
BStringView* featuredPackagesTitle = new BStringView(
"featured packages title", B_TRANSLATE("Featured packages"));
BFont font(be_bold_font);
font.SetSize(font.Size() * 1.3f);
featuredPackagesTitle->SetFont(&font);
featuredPackagesGroup->SetExplicitMaxSize(
BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET));
BLayoutBuilder::Group<>(featuredPackagesGroup)
.Add(featuredPackagesTitle)
.Add(fFeaturedPackagesView)
;
fWorkStatusView = new WorkStatusView("work status");
fPackageListView->AttachWorkStatusView(fWorkStatusView);
BView* listArea = new BView("list area", 0);
fListLayout = new BCardLayout();
listArea->SetLayout(fListLayout);
listArea->AddChild(featuredPackagesGroup);
listArea->AddChild(fFeaturedPackagesView);
listArea->AddChild(fPackageListView);
BLayoutBuilder::Group<>(this, B_VERTICAL, 0.0f)
@@ -321,7 +307,7 @@ MainWindow::MessageReceived(BMessage* message)
{
fModelWorker = B_BAD_THREAD_ID;
_AdoptModel();
fFilterView->AdoptModel(fModel);
_UpdateAvailableRepositories();
fWorkStatusView->SetIdle();
break;
}
@@ -447,6 +433,7 @@ MainWindow::MessageReceived(BMessage* message)
fModel.SetDepot(name);
}
_AdoptModel();
_UpdateAvailableRepositories();
break;
}
@@ -682,15 +669,11 @@ MainWindow::_BuildMenu(BMenuBar* menuBar)
menuBar->AddItem(menu);
fRepositoryMenu = new BMenu(B_TRANSLATE("Repositories"));
menuBar->AddItem(fRepositoryMenu);
menu = new BMenu(B_TRANSLATE("Show"));
fShowFeaturedPackagesItem = new BMenuItem(
B_TRANSLATE("Only featured packages"),
new BMessage(MSG_SHOW_FEATURED_PACKAGES));
menu->AddItem(fShowFeaturedPackagesItem);
menu->AddSeparatorItem();
fShowAvailablePackagesItem = new BMenuItem(
B_TRANSLATE("Available packages"),
new BMessage(MSG_SHOW_AVAILABLE_PACKAGES));
@@ -839,17 +822,17 @@ MainWindow::_AdoptModel()
release_sem(fNewPackagesToShowSem);
BAutolock locker(fModel.Lock());
fShowFeaturedPackagesItem->SetMarked(fModel.ShowFeaturedPackages());
fShowFeaturedPackagesItem->SetEnabled(fModel.SearchTerms() == "");
fShowAvailablePackagesItem->SetMarked(fModel.ShowAvailablePackages());
fShowInstalledPackagesItem->SetMarked(fModel.ShowInstalledPackages());
fShowSourcePackagesItem->SetMarked(fModel.ShowSourcePackages());
fShowDevelopPackagesItem->SetMarked(fModel.ShowDevelopPackages());
if (fModel.ShowFeaturedPackages() && fModel.SearchTerms() == "")
if (fModel.ShowFeaturedPackages())
fListLayout->SetVisibleItem((int32)0);
else
fListLayout->SetVisibleItem((int32)1);
fFilterView->AdoptModel(fModel);
}
@@ -1409,6 +1392,36 @@ MainWindow::_UpdateAuthorization()
}
void
MainWindow::_UpdateAvailableRepositories()
{
fRepositoryMenu->RemoveItems(0, fRepositoryMenu->CountItems(), true);
fRepositoryMenu->AddItem(new BMenuItem(B_TRANSLATE("All repositories"),
new BMessage(MSG_DEPOT_SELECTED)));
fRepositoryMenu->AddItem(new BSeparatorItem());
bool foundSelectedDepot = false;
const DepotList& depots = fModel.Depots();
for (int i = 0; i < depots.CountItems(); i++) {
const DepotInfo& depot = depots.ItemAtFast(i);
BMessage* message = new BMessage(MSG_DEPOT_SELECTED);
message->AddString("name", depot.Name());
BMenuItem* item = new BMenuItem(depot.Name(), message);
fRepositoryMenu->AddItem(item);
if (depot.Name() == fModel.Depot()) {
item->SetMarked(true);
foundSelectedDepot = true;
}
}
if (!foundSelectedDepot)
fRepositoryMenu->ItemAt(0)->SetMarked(true);
}
void
MainWindow::_RatePackage()
{
+2 -1
View File
@@ -85,6 +85,7 @@ private:
void _OpenLoginWindow(
const BMessage& onSuccessMessage);
void _UpdateAuthorization();
void _UpdateAvailableRepositories();
void _RatePackage();
void _ShowScreenshot();
@@ -100,10 +101,10 @@ private:
ScreenshotWindow* fScreenshotWindow;
BMenu* fUserMenu;
BMenu* fRepositoryMenu;
BMenuItem* fLogInItem;
BMenuItem* fLogOutItem;
BMenuItem* fShowFeaturedPackagesItem;
BMenuItem* fShowAvailablePackagesItem;
BMenuItem* fShowInstalledPackagesItem;
BMenuItem* fShowDevelopPackagesItem;