hrev45948 adds 1 changeset to branch 'master' old head: 68ed4f7dd6c679488ce2f1e0f6e47e678138836e new head: 601d751f4f6d7a2868017c95cfca3c86d5c5d25c overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=601d751+%5E68ed4f7 ---------------------------------------------------------------------------- 601d751: HaikuDepot: Switched back to actual BTabView * Instead of showing all package actions along the bottom of the window, only the applicable actions are shown, but besides the package title. * The radio buttons are gone, instead an actual BTabView is used, but now in a more pretty way. * The package info content stretches to the window border which will make showing a vertical scroll bar look better. [ Stephan Aßmus <superstippi@xxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev45948 Commit: 601d751f4f6d7a2868017c95cfca3c86d5c5d25c URL: http://cgit.haiku-os.org/haiku/commit/?id=601d751 Author: Stephan Aßmus <superstippi@xxxxxx> Date: Sat Aug 3 22:51:49 2013 UTC ---------------------------------------------------------------------------- 8 files changed, 173 insertions(+), 225 deletions(-) src/apps/haiku-depot/Jamfile | 2 - src/apps/haiku-depot/MainWindow.cpp | 16 +- src/apps/haiku-depot/MainWindow.h | 4 +- src/apps/haiku-depot/PackageActionsView.cpp | 81 -------- src/apps/haiku-depot/PackageActionsView.h | 29 --- src/apps/haiku-depot/PackageInfoView.cpp | 255 ++++++++++++++---------- src/apps/haiku-depot/PackageInfoView.h | 6 +- src/apps/haiku-depot/PackageManager.h | 5 +- ---------------------------------------------------------------------------- diff --git a/src/apps/haiku-depot/Jamfile b/src/apps/haiku-depot/Jamfile index 7e28d0d..b0e0217 100644 --- a/src/apps/haiku-depot/Jamfile +++ b/src/apps/haiku-depot/Jamfile @@ -8,7 +8,6 @@ Application HaikuDepot : main.cpp MainWindow.cpp Model.cpp - PackageActionsView.cpp PackageInfo.cpp PackageInfoView.cpp PackageListView.cpp @@ -25,7 +24,6 @@ DoCatalogs HaikuDepot : App.cpp FilterView.cpp MainWindow.cpp - PackageActionsView.cpp PackageInfoView.cpp PackageListView.cpp PackageManager.cpp diff --git a/src/apps/haiku-depot/MainWindow.cpp b/src/apps/haiku-depot/MainWindow.cpp index d3fbcbf..9431844 100644 --- a/src/apps/haiku-depot/MainWindow.cpp +++ b/src/apps/haiku-depot/MainWindow.cpp @@ -19,7 +19,6 @@ #include <TabView.h> #include "FilterView.h" -#include "PackageActionsView.h" #include "PackageInfoView.h" #include "PackageListView.h" @@ -39,22 +38,21 @@ MainWindow::MainWindow(BRect frame) fFilterView = new FilterView(); fPackageListView = new PackageListView(); - fPackageInfoView = new PackageInfoView(); - fPackageActionsView = new PackageActionsView(); + fPackageInfoView = new PackageInfoView(&fPackageManager); fSplitView = new BSplitView(B_VERTICAL, B_USE_SMALL_SPACING); BLayoutBuilder::Group<>(this, B_VERTICAL, 0.0f) .Add(menuBar) .Add(fFilterView) - .AddGroup(B_VERTICAL) - .AddSplit(fSplitView) + .AddSplit(fSplitView) + .AddGroup(B_VERTICAL) .Add(fPackageListView) - .Add(fPackageInfoView) + .SetInsets( + B_USE_DEFAULT_SPACING, 0.0f, + B_USE_DEFAULT_SPACING, 0.0f) .End() - .Add(fPackageActionsView) - .SetInsets(B_USE_DEFAULT_SPACING, 0.0f, B_USE_DEFAULT_SPACING, - B_USE_DEFAULT_SPACING) + .Add(fPackageInfoView) .End() ; diff --git a/src/apps/haiku-depot/MainWindow.h b/src/apps/haiku-depot/MainWindow.h index bca9efd..f7d12fe 100644 --- a/src/apps/haiku-depot/MainWindow.h +++ b/src/apps/haiku-depot/MainWindow.h @@ -8,6 +8,7 @@ #include <Window.h> #include "Model.h" +#include "PackageManager.h" class BSplitView; @@ -43,11 +44,12 @@ private: FilterView* fFilterView; PackageListView* fPackageListView; PackageInfoView* fPackageInfoView; - PackageActionsView* fPackageActionsView; BSplitView* fSplitView; Model fModel; PackageInfoList fVisiblePackages; + + PackageManager fPackageManager; }; #endif // MAIN_WINDOW_H diff --git a/src/apps/haiku-depot/PackageActionsView.cpp b/src/apps/haiku-depot/PackageActionsView.cpp deleted file mode 100644 index 8d18043..0000000 --- a/src/apps/haiku-depot/PackageActionsView.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2013, Stephan Aßmus <superstippi@xxxxxx>. - * All rights reserved. Distributed under the terms of the MIT License. - */ - -#include "PackageActionsView.h" - -#include <algorithm> -#include <stdio.h> - -#include <Button.h> -#include <Catalog.h> -#include <LayoutBuilder.h> -#include <Message.h> - - -#undef B_TRANSLATION_CONTEXT -#define B_TRANSLATION_CONTEXT "PackageActionsView" - - -enum { - MSG_INSTALL = 'inst', - MSG_TOGGLE_ACTIVE = 'tgac', - MSG_UPDATE = 'stmd', - MSG_UNINSTALL = 'dein', -}; - - -PackageActionsView::PackageActionsView() - : - BGroupView("package actions view") -{ - // Contruct action buttons - fInstallButton = new BButton("install", B_TRANSLATE("Install"), - new BMessage(MSG_INSTALL)); - - fToggleActiveButton = new BButton("toggle active", - B_TRANSLATE("Deactivate"), new BMessage(MSG_TOGGLE_ACTIVE)); - - fUpdateButton = new BButton("update", - B_TRANSLATE("Update"), new BMessage(MSG_UPDATE)); - - fUninstallButton = new BButton("uninstall", B_TRANSLATE("Uninstall"), - new BMessage(MSG_UNINSTALL)); - - // Build layout - BLayoutBuilder::Group<>(this) - .AddGlue(1.0f) - .Add(fUninstallButton) - .AddGlue(0.1f) - .Add(fUpdateButton) - .Add(fToggleActiveButton) - .Add(fInstallButton) - ; -} - - -PackageActionsView::~PackageActionsView() -{ -} - - -void -PackageActionsView::AttachedToWindow() -{ - fInstallButton->SetTarget(this); - fToggleActiveButton->SetTarget(this); - fUpdateButton->SetTarget(this); - fUninstallButton->SetTarget(this); -} - - -void -PackageActionsView::MessageReceived(BMessage* message) -{ - switch (message->what) { - default: - BGroupView::MessageReceived(message); - break; - } -} diff --git a/src/apps/haiku-depot/PackageActionsView.h b/src/apps/haiku-depot/PackageActionsView.h deleted file mode 100644 index 02ef03c..0000000 --- a/src/apps/haiku-depot/PackageActionsView.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2013, Stephan Aßmus <superstippi@xxxxxx>. - * All rights reserved. Distributed under the terms of the MIT License. - */ -#ifndef PACKAGE_ACTIONS_VIEW_H -#define PACKAGE_ACTIONS_VIEW_H - -#include <GroupView.h> - - -class BButton; - - -class PackageActionsView : public BGroupView { -public: - PackageActionsView(); - virtual ~PackageActionsView(); - - virtual void AttachedToWindow(); - virtual void MessageReceived(BMessage* message); - -private: - BButton* fInstallButton; - BButton* fToggleActiveButton; - BButton* fUpdateButton; - BButton* fUninstallButton; -}; - -#endif // PACKAGE_ACTIONS_VIEW_H diff --git a/src/apps/haiku-depot/PackageInfoView.cpp b/src/apps/haiku-depot/PackageInfoView.cpp index 3a61325..9ded809 100644 --- a/src/apps/haiku-depot/PackageInfoView.cpp +++ b/src/apps/haiku-depot/PackageInfoView.cpp @@ -15,16 +15,19 @@ #include <Font.h> #include <LayoutBuilder.h> #include <Message.h> -#include <RadioButton.h> +#include <TabView.h> #include <SpaceLayoutItem.h> #include <StringView.h> +#include "PackageManager.h" + #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "PackageInfoView" static const rgb_color kLightBlack = (rgb_color){ 60, 60, 60, 255 }; +static const float kContentTint = (B_NO_TINT + B_LIGHTEN_1_TINT) / 2.0f; class BitmapView : public BView { @@ -43,6 +46,13 @@ public: { } + virtual void AttachedToWindow() + { + BView* parent = Parent(); + if (parent != NULL) + SetLowColor(parent->ViewColor()); + } + virtual void Draw(BRect updateRect) { BRect bounds(Bounds()); @@ -180,9 +190,7 @@ private: enum { - MSG_SHOW_ABOUT_PAGE = 'shap', - MSG_SHOW_RATINGS_PAGE = 'shrp', - MSG_SHOW_CHANGELOG_PAGE = 'shcp', + MSG_PACKAGE_ACTION = 'pkga', }; @@ -232,22 +240,11 @@ public: fVoteInfo->SetFont(&font); fVoteInfo->SetHighColor(kLightBlack); - fAboutPageButton = new BRadioButton("about page button", - B_TRANSLATE("About"), new BMessage(MSG_SHOW_ABOUT_PAGE)); - fAboutPageButton->SetValue(B_CONTROL_ON); - - fRatingsPageButton = new BRadioButton("ratings page button", - B_TRANSLATE("Ratings"), new BMessage(MSG_SHOW_RATINGS_PAGE)); - - fChangelogPageButton = new BRadioButton("changelog page button", - B_TRANSLATE("Changelog"), new BMessage(MSG_SHOW_CHANGELOG_PAGE)); - BLayoutBuilder::Group<>(this) .Add(fIconView) .AddGroup(B_VERTICAL, 1.0f) .Add(fTitleView) .Add(fPublisherView) -// .SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET)) .End() .AddGlue(0.2f) .AddGroup(B_HORIZONTAL, B_USE_SMALL_SPACING) @@ -256,9 +253,6 @@ public: .Add(fVoteInfo) .End() .AddGlue(3.0f) - .Add(fAboutPageButton) - .Add(fRatingsPageButton) - .Add(fChangelogPageButton) ; Clear(); @@ -268,13 +262,6 @@ public: { } - void SetTarget(BHandler* handler) - { - fAboutPageButton->SetTarget(handler); - fRatingsPageButton->SetTarget(handler); - fChangelogPageButton->SetTarget(handler); - } - void SetPackage(const PackageInfo& package) { if (package.Icon().Get() != NULL) @@ -304,33 +291,18 @@ public: fVoteInfo->SetText(voteInfo); - if (fAboutPageButton->IsHidden(fAboutPageButton)) - fAboutPageButton->Show(); - if (fRatingsPageButton->IsHidden(fRatingsPageButton)) - fRatingsPageButton->Show(); - if (fChangelogPageButton->IsHidden(fChangelogPageButton)) - fChangelogPageButton->Show(); - - fAboutPageButton->SetValue(B_CONTROL_ON); - InvalidateLayout(); Invalidate(); } void Clear() { + fIconView->SetBitmap(NULL); fTitleView->SetText(""); fPublisherView->SetText(""); fRatingView->SetRating(-1.0f); fAvgRating->SetText(""); fVoteInfo->SetText(""); - - if (!fAboutPageButton->IsHidden(fAboutPageButton)) - fAboutPageButton->Hide(); - if (!fRatingsPageButton->IsHidden(fRatingsPageButton)) - fRatingsPageButton->Hide(); - if (!fChangelogPageButton->IsHidden(fChangelogPageButton)) - fChangelogPageButton->Hide(); } private: @@ -342,10 +314,94 @@ private: RatingView* fRatingView; BStringView* fAvgRating; BStringView* fVoteInfo; +}; + + +// #pragma mark - PackageActionView + + +class PackageActionView : public BView { +public: + PackageActionView(PackageManager* packageManager) + : + BView("about view", B_WILL_DRAW), + fPackageManager(packageManager), + fLayout(new BGroupLayout(B_HORIZONTAL)) + { + SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + + SetLayout(fLayout); + } + + virtual ~PackageActionView() + { + Clear(); + } + + virtual void MessageReceived(BMessage* message) + { + switch (message->what) { + case MSG_PACKAGE_ACTION: + { + int32 index; + if (message->FindInt32("index", &index) == B_OK) { + const PackageActionRef& action + = fPackageActions.ItemAt(index); + if (action.Get() != NULL) { + status_t result = action->Perform(); + if (result != B_OK) { + fprintf(stderr, "Package action failed: %s '%s'\n", + action->Label(), + action->Package().Title().String()); + } + } + } + break; + } + + default: + BView::MessageReceived(message); + break; + } + } + + void SetPackage(const PackageInfo& package) + { + Clear(); - BRadioButton* fAboutPageButton; - BRadioButton* fRatingsPageButton; - BRadioButton* fChangelogPageButton; + fPackageActions = fPackageManager->GetPackageActions(package); + + // Add Buttons in reverse action order + for (int32 i = fPackageActions.CountItems() - 1; i >= 0; i--) { + const PackageActionRef& action = fPackageActions.ItemAtFast(i); + + BMessage* message = new BMessage(MSG_PACKAGE_ACTION); + message->AddInt32("index", i); + + BButton* button = new BButton(action->Label(), message); + fLayout->AddView(button); + button->SetTarget(this); + + fButtons.AddItem(button); + } + } + + void Clear() + { + for (int32 i = fButtons.CountItems() - 1; i >= 0; i--) { + BButton* button = (BButton*)fButtons.ItemAtFast(i); + button->RemoveSelf(); + delete button; + } + fButtons.MakeEmpty(); + } + +private: + PackageManager* fPackageManager; + + BGroupLayout* fLayout; + PackageActionList fPackageActions; + BList fButtons; }; @@ -356,18 +412,20 @@ class AboutView : public BView { public: AboutView() : - BView("about view", B_WILL_DRAW), + BView("about view", 0), fLayout(new BGroupLayout(B_HORIZONTAL)), fEmailIcon("text/x-email"), fWebsiteIcon("text/html") { - SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + SetViewColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), + kContentTint)); SetLayout(fLayout); fDescriptionView = new BTextView("description view"); - fDescriptionView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + fDescriptionView->SetViewColor(ViewColor()); fDescriptionView->MakeEditable(false); + fDescriptionView->SetInsets(0.0f, be_plain_font->Size(), 0.0f, 0.0f); BFont smallFont; GetFont(&smallFont); @@ -384,6 +442,7 @@ public: fWebsiteLinkView->SetHighColor(kLightBlack); BLayoutBuilder::Group<>(fLayout) + .Add(BSpaceLayoutItem::CreateHorizontalStrut(32.0f)) .Add(fDescriptionView, 1.0f) .AddGroup(B_VERTICAL, 0.0f) .AddGlue() @@ -394,10 +453,12 @@ public: .Add(fEmailLinkView, 1, 0) .Add(fWebsiteIconView, 0, 1) .Add(fWebsiteLinkView, 1, 1) + .SetInsets(B_USE_DEFAULT_SPACING) .End() .End() .End() .SetExplicitMaxSize(BSize(B_SIZE_UNSET, B_SIZE_UNLIMITED)) + .SetInsets(B_USE_DEFAULT_SPACING, 0.0f, 0.0f, 0.0f) ; } @@ -406,10 +467,6 @@ public: Clear(); } - virtual void Draw(BRect updateRect) - { - } - void SetPackage(const PackageInfo& package) { fDescriptionView->SetText(package.FullDescription()); @@ -449,19 +506,23 @@ class UserRatingsView : public BView { public: UserRatingsView() : - BView("package ratings view", B_WILL_DRAW), + BView("package ratings view", 0), fLayout(new BGroupLayout(B_HORIZONTAL)) { - SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + SetViewColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), + kContentTint)); SetLayout(fLayout); fTextView = new BTextView("ratings view"); - fTextView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + fTextView->SetViewColor(ViewColor()); fTextView->MakeEditable(false); + fTextView->SetInsets(0.0f, be_plain_font->Size(), 0.0f, 0.0f); BLayoutBuilder::Group<>(fLayout) + .Add(BSpaceLayoutItem::CreateHorizontalStrut(32.0f)) .Add(fTextView, 1.0f) + .SetInsets(B_USE_DEFAULT_SPACING, 0.0f, 0.0f, 0.0f) ; } @@ -470,10 +531,6 @@ public: Clear(); } - virtual void Draw(BRect updateRect) - { - } - void SetPackage(const PackageInfo& package) { fTextView->SetText(""); @@ -521,16 +578,20 @@ public: BView("package changelog view", B_WILL_DRAW), fLayout(new BGroupLayout(B_HORIZONTAL)) { - SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + SetViewColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), + kContentTint)); SetLayout(fLayout); fTextView = new BTextView("changelog view"); - fTextView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + fTextView->SetViewColor(ViewColor()); fTextView->MakeEditable(false); + fTextView->SetInsets(0.0f, be_plain_font->Size(), 0.0f, 0.0f); BLayoutBuilder::Group<>(fLayout) + .Add(BSpaceLayoutItem::CreateHorizontalStrut(32.0f)) .Add(fTextView, 1.0f) + .SetInsets(B_USE_DEFAULT_SPACING, 0.0f, 0.0f, 0.0f) ; } @@ -562,26 +623,28 @@ private: // #pragma mark - PagesView -class PagesView : public BView { +class PagesView : public BTabView { public: PagesView() : - BView("pages view", 0), + BTabView("pages view", B_WIDTH_FROM_WIDEST), fLayout(new BCardLayout()) { - SetViewColor(B_TRANSPARENT_COLOR); - SetLowColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - SetLayout(fLayout); + SetBorder(B_NO_BORDER); fAboutView = new AboutView(); fUserRatingsView = new UserRatingsView(); fChangelogView = new ChangelogView(); + + AddTab(fAboutView); + AddTab(fUserRatingsView); + AddTab(fChangelogView); - fLayout->AddView(fAboutView); - fLayout->AddView(fUserRatingsView); - fLayout->AddView(fChangelogView); - - fLayout->SetVisibleItem(0L); + TabAt(0)->SetLabel(B_TRANSLATE("About")); + TabAt(1)->SetLabel(B_TRANSLATE("Ratings")); + TabAt(2)->SetLabel(B_TRANSLATE("Changelog")); + + Select(0); } virtual ~PagesView() @@ -589,28 +652,9 @@ public: Clear(); } - virtual void MessageReceived(BMessage* message) - { - switch (message->what) { - case MSG_SHOW_ABOUT_PAGE: - fLayout->SetVisibleItem(0L); - break; - case MSG_SHOW_RATINGS_PAGE: - fLayout->SetVisibleItem(1L); - break; - case MSG_SHOW_CHANGELOG_PAGE: - fLayout->SetVisibleItem(2L); - break; - - default: - BView::MessageReceived(message); - break; - } - } - void SetPackage(const PackageInfo& package) { - fLayout->SetVisibleItem(0L); + Select(0); fAboutView->SetPackage(package); fUserRatingsView->SetPackage(package); fChangelogView->SetPackage(package); @@ -635,20 +679,26 @@ private: // #pragma mark - PackageInfoView -PackageInfoView::PackageInfoView() +PackageInfoView::PackageInfoView(PackageManager* packageManager) : BGroupView("package info view", B_VERTICAL) { fTitleView = new TitleView(); + fPackageActionView = new PackageActionView(packageManager); fPagesView = new PagesView(); BLayoutBuilder::Group<>(this) - .Add(fTitleView, 0.0f) - .AddGroup(B_HORIZONTAL) - .Add(BSpaceLayoutItem::CreateHorizontalStrut(32.0f)) - .Add(fPagesView) + .AddGroup(B_HORIZONTAL, 0.0f) + .Add(fTitleView) + .Add(fPackageActionView) + .SetInsets( + B_USE_DEFAULT_SPACING, 0.0f, + B_USE_DEFAULT_SPACING, 0.0f) .End() + .Add(fPagesView) ; + + Clear(); } @@ -660,7 +710,6 @@ PackageInfoView::~PackageInfoView() void PackageInfoView::AttachedToWindow() { - fTitleView->SetTarget(fPagesView); } @@ -678,17 +727,23 @@ PackageInfoView::MessageReceived(BMessage* message) void PackageInfoView::SetPackage(const PackageInfo& package) { - fPackageInfo = package; - fTitleView->SetPackage(fPackageInfo); - fPagesView->SetPackage(fPackageInfo); + fTitleView->SetPackage(package); + fPackageActionView->SetPackage(package); + fPagesView->SetPackage(package); + + if (fPagesView->IsHidden(fPagesView)) + fPagesView->Show(); } void PackageInfoView::Clear() { - fPackageInfo = PackageInfo(); fTitleView->Clear(); + fPackageActionView->Clear(); fPagesView->Clear(); + + if (!fPagesView->IsHidden(fPagesView)) + fPagesView->Hide(); } diff --git a/src/apps/haiku-depot/PackageInfoView.h b/src/apps/haiku-depot/PackageInfoView.h index 0af22d5..28cfb96 100644 --- a/src/apps/haiku-depot/PackageInfoView.h +++ b/src/apps/haiku-depot/PackageInfoView.h @@ -11,12 +11,14 @@ class TitleView; +class PackageActionView; +class PackageManager; class PagesView; class PackageInfoView : public BGroupView { public: - PackageInfoView(); + PackageInfoView(PackageManager* packageManager); virtual ~PackageInfoView(); virtual void AttachedToWindow(); @@ -27,8 +29,8 @@ public: private: TitleView* fTitleView; + PackageActionView* fPackageActionView; PagesView* fPagesView; - PackageInfo fPackageInfo; }; #endif // PACKAGE_INFO_VIEW_H diff --git a/src/apps/haiku-depot/PackageManager.h b/src/apps/haiku-depot/PackageManager.h index ee1326c..1310da5 100644 --- a/src/apps/haiku-depot/PackageManager.h +++ b/src/apps/haiku-depot/PackageManager.h @@ -24,7 +24,10 @@ public: // Package Kit supports this stuff already. virtual status_t Perform() = 0; -protected: + const PackageInfo& Package() const + { return fPackage; } + +private: PackageInfo fPackage; };