From b965ce70256ab85010fdfa26e87a0c2b8d8f52a6 Mon Sep 17 00:00:00 2001 From: Humdinger Date: Sat, 16 Dec 2017 20:56:09 +0100 Subject: [PATCH] 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). --- src/apps/haikudepot/ui/FilterView.cpp | 41 ++++------------- src/apps/haikudepot/ui/FilterView.h | 4 +- src/apps/haikudepot/ui/MainWindow.cpp | 65 ++++++++++++++++----------- src/apps/haikudepot/ui/MainWindow.h | 3 +- 4 files changed, 52 insertions(+), 61 deletions(-) diff --git a/src/apps/haikudepot/ui/FilterView.cpp b/src/apps/haikudepot/ui/FilterView.cpp index be2d0ca982..1e25f3b063 100644 --- a/src/apps/haikudepot/ui/FilterView.cpp +++ b/src/apps/haikudepot/ui/FilterView.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -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(); diff --git a/src/apps/haikudepot/ui/FilterView.h b/src/apps/haikudepot/ui/FilterView.h index 4e444d6b4a..b290e8135c 100644 --- a/src/apps/haikudepot/ui/FilterView.h +++ b/src/apps/haikudepot/ui/FilterView.h @@ -8,6 +8,7 @@ #include +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; }; diff --git a/src/apps/haikudepot/ui/MainWindow.cpp b/src/apps/haikudepot/ui/MainWindow.cpp index a06ca7f047..798a7ca70d 100644 --- a/src/apps/haikudepot/ui/MainWindow.cpp +++ b/src/apps/haikudepot/ui/MainWindow.cpp @@ -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() { diff --git a/src/apps/haikudepot/ui/MainWindow.h b/src/apps/haikudepot/ui/MainWindow.h index 2fda08e70b..64b580f32d 100644 --- a/src/apps/haikudepot/ui/MainWindow.h +++ b/src/apps/haikudepot/ui/MainWindow.h @@ -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;