diff --git a/src/apps/haikudepot/ui/FeaturedPackagesView.cpp b/src/apps/haikudepot/ui/FeaturedPackagesView.cpp index afc761e1f5..06e85beedd 100644 --- a/src/apps/haikudepot/ui/FeaturedPackagesView.cpp +++ b/src/apps/haikudepot/ui/FeaturedPackagesView.cpp @@ -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); diff --git a/src/apps/haikudepot/ui/FilterView.cpp b/src/apps/haikudepot/ui/FilterView.cpp index 1e25f3b063..807b030a84 100644 --- a/src/apps/haikudepot/ui/FilterView.cpp +++ b/src/apps/haikudepot/ui/FilterView.cpp @@ -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); diff --git a/src/apps/haikudepot/ui/FilterView.h b/src/apps/haikudepot/ui/FilterView.h index b290e8135c..6740766785 100644 --- a/src/apps/haikudepot/ui/FilterView.h +++ b/src/apps/haikudepot/ui/FilterView.h @@ -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; }; diff --git a/src/apps/haikudepot/ui/MainWindow.cpp b/src/apps/haikudepot/ui/MainWindow.cpp index 647dc18289..610eafb6d6 100644 --- a/src/apps/haikudepot/ui/MainWindow.cpp +++ b/src/apps/haikudepot/ui/MainWindow.cpp @@ -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); } diff --git a/src/apps/haikudepot/ui/MainWindow.h b/src/apps/haikudepot/ui/MainWindow.h index 8b89cd4776..bb48ba83a6 100644 --- a/src/apps/haikudepot/ui/MainWindow.h +++ b/src/apps/haikudepot/ui/MainWindow.h @@ -10,6 +10,7 @@ #include +#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; diff --git a/src/apps/haikudepot/ui/PackageListView.cpp b/src/apps/haikudepot/ui/PackageListView.cpp index 22851aa475..4485fa46b5 100644 --- a/src/apps/haikudepot/ui/PackageListView.cpp +++ b/src/apps/haikudepot/ui/PackageListView.cpp @@ -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()), diff --git a/src/apps/haikudepot/ui/TabView.h b/src/apps/haikudepot/ui/TabView.h new file mode 100644 index 0000000000..7af7ba979d --- /dev/null +++ b/src/apps/haikudepot/ui/TabView.h @@ -0,0 +1,39 @@ +/* + * Copyright 2014, Stephan Aßmus . + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef TABVIEW_H +#define TABVIEW_H + + +#include +#include + + +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 diff --git a/src/apps/haikudepot/ui/UserLoginWindow.cpp b/src/apps/haikudepot/ui/UserLoginWindow.cpp index 217be01e10..29263a1d05 100644 --- a/src/apps/haikudepot/ui/UserLoginWindow.cpp +++ b/src/apps/haikudepot/ui/UserLoginWindow.cpp @@ -17,12 +17,12 @@ #include #include #include -#include #include #include #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) {