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:
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user