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 <stdio.h>
|
||||||
|
|
||||||
#include <Catalog.h>
|
#include <Catalog.h>
|
||||||
|
#include <CheckBox.h>
|
||||||
#include <LayoutBuilder.h>
|
#include <LayoutBuilder.h>
|
||||||
#include <MenuField.h>
|
#include <MenuField.h>
|
||||||
#include <MenuItem.h>
|
#include <MenuItem.h>
|
||||||
@@ -41,14 +42,13 @@ FilterView::FilterView()
|
|||||||
:
|
:
|
||||||
BGroupView("filter view", B_VERTICAL)
|
BGroupView("filter view", B_VERTICAL)
|
||||||
{
|
{
|
||||||
// Contruct category popup
|
// Construct category popup
|
||||||
BPopUpMenu* showMenu = new BPopUpMenu(B_TRANSLATE("Category"));
|
BPopUpMenu* showMenu = new BPopUpMenu(B_TRANSLATE("Category"));
|
||||||
fShowField = new BMenuField("category", B_TRANSLATE("Category:"), showMenu);
|
fShowField = new BMenuField("category", B_TRANSLATE("Category:"), showMenu);
|
||||||
|
|
||||||
// Construct repository popup
|
fShowFeaturedPackages = new BCheckBox("showonlyfeatured",
|
||||||
BPopUpMenu* repositoryMenu = new BPopUpMenu(B_TRANSLATE("Repository"));
|
B_TRANSLATE("Show only featured packages"),
|
||||||
fRepositoryField = new BMenuField("repository", B_TRANSLATE("Repository:"),
|
new BMessage(MSG_SHOW_FEATURED_PACKAGES));
|
||||||
repositoryMenu);
|
|
||||||
|
|
||||||
// Construct search terms field
|
// Construct search terms field
|
||||||
fSearchTermsText = new BTextControl("search terms",
|
fSearchTermsText = new BTextControl("search terms",
|
||||||
@@ -71,7 +71,7 @@ FilterView::FilterView()
|
|||||||
.AddGroup(B_HORIZONTAL)
|
.AddGroup(B_HORIZONTAL)
|
||||||
.AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING, 1.2f)
|
.AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING, 1.2f)
|
||||||
.Add(fShowField, 0.0f)
|
.Add(fShowField, 0.0f)
|
||||||
.Add(fRepositoryField, 0.0f)
|
.Add(fShowFeaturedPackages, 0.0f)
|
||||||
.SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET))
|
.SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET))
|
||||||
.End()
|
.End()
|
||||||
.AddGlue(0.5f)
|
.AddGlue(0.5f)
|
||||||
@@ -92,7 +92,7 @@ void
|
|||||||
FilterView::AttachedToWindow()
|
FilterView::AttachedToWindow()
|
||||||
{
|
{
|
||||||
fShowField->Menu()->SetTargetForItems(Window());
|
fShowField->Menu()->SetTargetForItems(Window());
|
||||||
fRepositoryField->Menu()->SetTargetForItems(Window());
|
fShowFeaturedPackages->SetTarget(Window());
|
||||||
fSearchTermsText->SetTarget(this);
|
fSearchTermsText->SetTarget(this);
|
||||||
|
|
||||||
fSearchTermsText->MakeFocus();
|
fSearchTermsText->MakeFocus();
|
||||||
@@ -121,32 +121,7 @@ FilterView::MessageReceived(BMessage* message)
|
|||||||
void
|
void
|
||||||
FilterView::AdoptModel(const Model& model)
|
FilterView::AdoptModel(const Model& model)
|
||||||
{
|
{
|
||||||
// Adopt depots
|
fShowFeaturedPackages->SetValue(model.ShowFeaturedPackages());
|
||||||
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);
|
|
||||||
|
|
||||||
// Adopt categories
|
// Adopt categories
|
||||||
BMenu* showMenu = fShowField->Menu();
|
BMenu* showMenu = fShowField->Menu();
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include <GroupView.h>
|
#include <GroupView.h>
|
||||||
|
|
||||||
|
|
||||||
|
class BCheckBox;
|
||||||
class BMenuField;
|
class BMenuField;
|
||||||
class BTextControl;
|
class BTextControl;
|
||||||
class Model;
|
class Model;
|
||||||
@@ -17,6 +18,7 @@ enum {
|
|||||||
MSG_CATEGORY_SELECTED = 'ctsl',
|
MSG_CATEGORY_SELECTED = 'ctsl',
|
||||||
MSG_DEPOT_SELECTED = 'dpsl',
|
MSG_DEPOT_SELECTED = 'dpsl',
|
||||||
MSG_SEARCH_TERMS_MODIFIED = 'stmd',
|
MSG_SEARCH_TERMS_MODIFIED = 'stmd',
|
||||||
|
MSG_SHOW_FEATURED_PACKAGES = 'sofp',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -32,7 +34,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
BMenuField* fShowField;
|
BMenuField* fShowField;
|
||||||
BMenuField* fRepositoryField;
|
BCheckBox* fShowFeaturedPackages;
|
||||||
BTextControl* fSearchTermsText;
|
BTextControl* fSearchTermsText;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,6 @@ enum {
|
|||||||
MSG_AUTHORIZATION_CHANGED = 'athc',
|
MSG_AUTHORIZATION_CHANGED = 'athc',
|
||||||
MSG_PACKAGE_CHANGED = 'pchd',
|
MSG_PACKAGE_CHANGED = 'pchd',
|
||||||
|
|
||||||
MSG_SHOW_FEATURED_PACKAGES = 'sofp',
|
|
||||||
MSG_SHOW_AVAILABLE_PACKAGES = 'savl',
|
MSG_SHOW_AVAILABLE_PACKAGES = 'savl',
|
||||||
MSG_SHOW_INSTALLED_PACKAGES = 'sins',
|
MSG_SHOW_INSTALLED_PACKAGES = 'sins',
|
||||||
MSG_SHOW_SOURCE_PACKAGES = 'ssrc',
|
MSG_SHOW_SOURCE_PACKAGES = 'ssrc',
|
||||||
@@ -153,26 +152,13 @@ MainWindow::MainWindow(const BMessage& settings)
|
|||||||
|
|
||||||
fSplitView = new BSplitView(B_VERTICAL, 5.0f);
|
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");
|
fWorkStatusView = new WorkStatusView("work status");
|
||||||
fPackageListView->AttachWorkStatusView(fWorkStatusView);
|
fPackageListView->AttachWorkStatusView(fWorkStatusView);
|
||||||
|
|
||||||
BView* listArea = new BView("list area", 0);
|
BView* listArea = new BView("list area", 0);
|
||||||
fListLayout = new BCardLayout();
|
fListLayout = new BCardLayout();
|
||||||
listArea->SetLayout(fListLayout);
|
listArea->SetLayout(fListLayout);
|
||||||
listArea->AddChild(featuredPackagesGroup);
|
listArea->AddChild(fFeaturedPackagesView);
|
||||||
listArea->AddChild(fPackageListView);
|
listArea->AddChild(fPackageListView);
|
||||||
|
|
||||||
BLayoutBuilder::Group<>(this, B_VERTICAL, 0.0f)
|
BLayoutBuilder::Group<>(this, B_VERTICAL, 0.0f)
|
||||||
@@ -321,7 +307,7 @@ MainWindow::MessageReceived(BMessage* message)
|
|||||||
{
|
{
|
||||||
fModelWorker = B_BAD_THREAD_ID;
|
fModelWorker = B_BAD_THREAD_ID;
|
||||||
_AdoptModel();
|
_AdoptModel();
|
||||||
fFilterView->AdoptModel(fModel);
|
_UpdateAvailableRepositories();
|
||||||
fWorkStatusView->SetIdle();
|
fWorkStatusView->SetIdle();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -447,6 +433,7 @@ MainWindow::MessageReceived(BMessage* message)
|
|||||||
fModel.SetDepot(name);
|
fModel.SetDepot(name);
|
||||||
}
|
}
|
||||||
_AdoptModel();
|
_AdoptModel();
|
||||||
|
_UpdateAvailableRepositories();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -682,15 +669,11 @@ MainWindow::_BuildMenu(BMenuBar* menuBar)
|
|||||||
|
|
||||||
menuBar->AddItem(menu);
|
menuBar->AddItem(menu);
|
||||||
|
|
||||||
|
fRepositoryMenu = new BMenu(B_TRANSLATE("Repositories"));
|
||||||
|
menuBar->AddItem(fRepositoryMenu);
|
||||||
|
|
||||||
menu = new BMenu(B_TRANSLATE("Show"));
|
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(
|
fShowAvailablePackagesItem = new BMenuItem(
|
||||||
B_TRANSLATE("Available packages"),
|
B_TRANSLATE("Available packages"),
|
||||||
new BMessage(MSG_SHOW_AVAILABLE_PACKAGES));
|
new BMessage(MSG_SHOW_AVAILABLE_PACKAGES));
|
||||||
@@ -839,17 +822,17 @@ MainWindow::_AdoptModel()
|
|||||||
release_sem(fNewPackagesToShowSem);
|
release_sem(fNewPackagesToShowSem);
|
||||||
|
|
||||||
BAutolock locker(fModel.Lock());
|
BAutolock locker(fModel.Lock());
|
||||||
fShowFeaturedPackagesItem->SetMarked(fModel.ShowFeaturedPackages());
|
|
||||||
fShowFeaturedPackagesItem->SetEnabled(fModel.SearchTerms() == "");
|
|
||||||
fShowAvailablePackagesItem->SetMarked(fModel.ShowAvailablePackages());
|
fShowAvailablePackagesItem->SetMarked(fModel.ShowAvailablePackages());
|
||||||
fShowInstalledPackagesItem->SetMarked(fModel.ShowInstalledPackages());
|
fShowInstalledPackagesItem->SetMarked(fModel.ShowInstalledPackages());
|
||||||
fShowSourcePackagesItem->SetMarked(fModel.ShowSourcePackages());
|
fShowSourcePackagesItem->SetMarked(fModel.ShowSourcePackages());
|
||||||
fShowDevelopPackagesItem->SetMarked(fModel.ShowDevelopPackages());
|
fShowDevelopPackagesItem->SetMarked(fModel.ShowDevelopPackages());
|
||||||
|
|
||||||
if (fModel.ShowFeaturedPackages() && fModel.SearchTerms() == "")
|
if (fModel.ShowFeaturedPackages())
|
||||||
fListLayout->SetVisibleItem((int32)0);
|
fListLayout->SetVisibleItem((int32)0);
|
||||||
else
|
else
|
||||||
fListLayout->SetVisibleItem((int32)1);
|
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
|
void
|
||||||
MainWindow::_RatePackage()
|
MainWindow::_RatePackage()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ private:
|
|||||||
void _OpenLoginWindow(
|
void _OpenLoginWindow(
|
||||||
const BMessage& onSuccessMessage);
|
const BMessage& onSuccessMessage);
|
||||||
void _UpdateAuthorization();
|
void _UpdateAuthorization();
|
||||||
|
void _UpdateAvailableRepositories();
|
||||||
void _RatePackage();
|
void _RatePackage();
|
||||||
void _ShowScreenshot();
|
void _ShowScreenshot();
|
||||||
|
|
||||||
@@ -100,10 +101,10 @@ private:
|
|||||||
ScreenshotWindow* fScreenshotWindow;
|
ScreenshotWindow* fScreenshotWindow;
|
||||||
|
|
||||||
BMenu* fUserMenu;
|
BMenu* fUserMenu;
|
||||||
|
BMenu* fRepositoryMenu;
|
||||||
BMenuItem* fLogInItem;
|
BMenuItem* fLogInItem;
|
||||||
BMenuItem* fLogOutItem;
|
BMenuItem* fLogOutItem;
|
||||||
|
|
||||||
BMenuItem* fShowFeaturedPackagesItem;
|
|
||||||
BMenuItem* fShowAvailablePackagesItem;
|
BMenuItem* fShowAvailablePackagesItem;
|
||||||
BMenuItem* fShowInstalledPackagesItem;
|
BMenuItem* fShowInstalledPackagesItem;
|
||||||
BMenuItem* fShowDevelopPackagesItem;
|
BMenuItem* fShowDevelopPackagesItem;
|
||||||
|
|||||||
Reference in New Issue
Block a user