HaikuDepot: Replace the "featured packages" checkbox with tabs.

As discussed in #14598, there are now two tabs instead of the
checkbox: "Featured packages" and "All packages". It otherwise
behaves as before.

Also fixes #12428.
This commit is contained in:
Augustin Cavalier 2018-10-28 14:20:46 -04:00
parent 1562519066
commit e00a489b80
8 changed files with 59 additions and 50 deletions

View File

@ -348,7 +348,7 @@ private:
FeaturedPackagesView::FeaturedPackagesView()
:
BView("featured package view", 0)
BView(B_TRANSLATE("Featured packages"), 0)
{
BGroupLayout* layout = new BGroupLayout(B_VERTICAL);
SetLayout(layout);

View File

@ -46,10 +46,6 @@ FilterView::FilterView()
BPopUpMenu* showMenu = new BPopUpMenu(B_TRANSLATE("Category"));
fShowField = new BMenuField("category", B_TRANSLATE("Category:"), showMenu);
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",
B_TRANSLATE("Search terms:"), "", NULL);
@ -71,7 +67,6 @@ FilterView::FilterView()
.AddGroup(B_HORIZONTAL)
.AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING, 1.2f)
.Add(fShowField, 0.0f)
.Add(fShowFeaturedPackages, 0.0f)
.SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET))
.End()
.AddGlue(0.5f)
@ -92,7 +87,6 @@ void
FilterView::AttachedToWindow()
{
fShowField->Menu()->SetTargetForItems(Window());
fShowFeaturedPackages->SetTarget(Window());
fSearchTermsText->SetTarget(this);
fSearchTermsText->MakeFocus();
@ -121,8 +115,6 @@ FilterView::MessageReceived(BMessage* message)
void
FilterView::AdoptModel(const Model& model)
{
fShowFeaturedPackages->SetValue(model.ShowFeaturedPackages());
// Adopt categories
BMenu* showMenu = fShowField->Menu();
showMenu->RemoveItems(0, showMenu->CountItems(), true);

View File

@ -18,7 +18,6 @@ enum {
MSG_CATEGORY_SELECTED = 'ctsl',
MSG_DEPOT_SELECTED = 'dpsl',
MSG_SEARCH_TERMS_MODIFIED = 'stmd',
MSG_SHOW_FEATURED_PACKAGES = 'sofp',
};
@ -34,7 +33,6 @@ public:
private:
BMenuField* fShowField;
BCheckBox* fShowFeaturedPackages;
BTextControl* fSearchTermsText;
};

View File

@ -76,6 +76,7 @@ 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',
@ -156,11 +157,10 @@ MainWindow::MainWindow(const BMessage& settings)
fWorkStatusView = new WorkStatusView("work status");
fPackageListView->AttachWorkStatusView(fWorkStatusView);
BView* listArea = new BView("list area", 0);
fListLayout = new BCardLayout();
listArea->SetLayout(fListLayout);
listArea->AddChild(fFeaturedPackagesView);
listArea->AddChild(fPackageListView);
fListTabs = new TabView(BMessenger(this),
BMessage(MSG_SHOW_FEATURED_PACKAGES), "list tabs");
fListTabs->AddTab(fFeaturedPackagesView);
fListTabs->AddTab(fPackageListView);
BLayoutBuilder::Group<>(this, B_VERTICAL, 0.0f)
.AddGroup(B_HORIZONTAL, 0.0f)
@ -170,7 +170,7 @@ MainWindow::MainWindow(const BMessage& settings)
.Add(fFilterView)
.AddSplit(fSplitView)
.AddGroup(B_VERTICAL)
.Add(listArea)
.Add(fListTabs)
.SetInsets(
B_USE_DEFAULT_SPACING, 0.0f,
B_USE_DEFAULT_SPACING, 0.0f)
@ -203,9 +203,9 @@ MainWindow::MainWindow(const BMessage& settings)
fModel.SetShowSourcePackages(showOption);
if (fModel.ShowFeaturedPackages())
fListLayout->SetVisibleItem((int32)0);
fListTabs->Select(0);
else
fListLayout->SetVisibleItem(1);
fListTabs->Select(1);
_RestoreUserName(settings);
_RestoreWindowFrame(settings);
@ -348,10 +348,14 @@ MainWindow::MessageReceived(BMessage* message)
break;
case MSG_SHOW_FEATURED_PACKAGES:
// check to see if we aren't already on the current tab
if (fListTabs->Selection() ==
(fModel.ShowFeaturedPackages() ? 0 : 1))
break;
{
BAutolock locker(fModel.Lock());
fModel.SetShowFeaturedPackages(
!fModel.ShowFeaturedPackages());
fListTabs->Selection() == 0);
}
_AdoptModel();
break;
@ -849,9 +853,9 @@ MainWindow::_AdoptModel()
fShowDevelopPackagesItem->SetMarked(fModel.ShowDevelopPackages());
if (fModel.ShowFeaturedPackages())
fListLayout->SetVisibleItem((int32)0);
fListTabs->Select(0);
else
fListLayout->SetVisibleItem((int32)1);
fListTabs->Select(1);
fFilterView->AdoptModel(fModel);
}

View File

@ -10,6 +10,7 @@
#include <Window.h>
#include "TabView.h"
#include "BulkLoadStateMachine.h"
#include "Model.h"
#include "PackageAction.h"
@ -94,7 +95,7 @@ private:
private:
FilterView* fFilterView;
BCardLayout* fListLayout;
TabView* fListTabs;
FeaturedPackagesView* fFeaturedPackagesView;
PackageListView* fPackageListView;
PackageInfoView* fPackageInfoView;

View File

@ -772,7 +772,7 @@ struct PackageListView::RowByNameHashDefinition {
PackageListView::PackageListView(BLocker* modelLock)
:
BColumnListView("package list view", 0, B_FANCY_BORDER, true),
BColumnListView(B_TRANSLATE("All packages"), 0, B_FANCY_BORDER, true),
fModelLock(modelLock),
fPackageListener(new(std::nothrow) PackageListener(this)),
fRowByNameTable(new RowByNameTable()),

View File

@ -0,0 +1,39 @@
/*
* Copyright 2014, Stephan Aßmus <superstippi@gmx.de>.
* All rights reserved. Distributed under the terms of the MIT License.
*/
#ifndef TABVIEW_H
#define TABVIEW_H
#include <Messenger.h>
#include <TabView.h>
class TabView : public BTabView {
public:
TabView(const BMessenger& target, const BMessage& message,
const char* name = "tab view")
:
BTabView(name, B_WIDTH_FROM_WIDEST),
fTarget(target),
fMessage(message)
{
}
virtual void Select(int32 tabIndex)
{
BTabView::Select(tabIndex);
BMessage message(fMessage);
message.AddInt32("tab index", tabIndex);
fTarget.SendMessage(&message);
}
private:
BMessenger fTarget;
BMessage fMessage;
};
#endif // TABVIEW_H

View File

@ -17,12 +17,12 @@
#include <LayoutBuilder.h>
#include <MenuField.h>
#include <PopUpMenu.h>
#include <TabView.h>
#include <TextControl.h>
#include <UnicodeChar.h>
#include "BitmapView.h"
#include "Model.h"
#include "TabView.h"
#include "WebAppInterface.h"
@ -39,31 +39,6 @@ enum {
};
class TabView : public BTabView {
public:
TabView(const BMessenger& target, const BMessage& message)
:
BTabView("tab view", B_WIDTH_FROM_WIDEST),
fTarget(target),
fMessage(message)
{
}
virtual void Select(int32 tabIndex)
{
BTabView::Select(tabIndex);
BMessage message(fMessage);
message.AddInt32("tab index", tabIndex);
fTarget.SendMessage(&message);
}
private:
BMessenger fTarget;
BMessage fMessage;
};
static void
add_languages_to_menu(const StringList& languages, BMenu* menu)
{