From 0aea921993d99c92ba8bc8fc09bf09b334baa83b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Sun, 28 Jul 2013 15:46:54 +0200 Subject: [PATCH] HaikuDepot: Show package in info area when selected in list * Includes fixes along the way. Shows only package title as of now. --- src/apps/haiku-depot/MainWindow.cpp | 33 +++++++++++++++++++++--- src/apps/haiku-depot/MainWindow.h | 4 +++ src/apps/haiku-depot/PackageInfoView.cpp | 10 ++++++- src/apps/haiku-depot/PackageListView.cpp | 20 ++++++++++++++ src/apps/haiku-depot/PackageListView.h | 7 +++++ 5 files changed, 70 insertions(+), 4 deletions(-) diff --git a/src/apps/haiku-depot/MainWindow.cpp b/src/apps/haiku-depot/MainWindow.cpp index e00ca2cb45..cfec1a68a3 100644 --- a/src/apps/haiku-depot/MainWindow.cpp +++ b/src/apps/haiku-depot/MainWindow.cpp @@ -88,6 +88,19 @@ MainWindow::MessageReceived(BMessage* message) case B_SIMPLE_DATA: case B_REFS_RECEIVED: break; + + case MSG_PACKAGE_SELECTED: + { + int32 index; + if (message->FindInt32("index", &index) == B_OK + && index >= 0 && index < fVisiblePackages.CountItems()) { + _AdoptPackage(fVisiblePackages.ItemAtFast(index)); + } else { + _ClearPackage(); + } + break; + } + default: BWindow::MessageReceived(message); break; @@ -107,15 +120,29 @@ MainWindow::_BuildMenu(BMenuBar* menuBar) void MainWindow::_AdoptModel() { - PackageInfoList packages = fModel.CreatePackageList(); + fVisiblePackages = fModel.CreatePackageList(); fPackageListView->Clear(); - for (int32 i = 0; i < packages.CountItems(); i++) { - fPackageListView->AddPackage(packages.ItemAtFast(i)); + for (int32 i = 0; i < fVisiblePackages.CountItems(); i++) { + fPackageListView->AddPackage(fVisiblePackages.ItemAtFast(i)); } } +void +MainWindow::_AdoptPackage(const PackageInfo& package) +{ + fPackageInfoView->SetPackage(package); +} + + +void +MainWindow::_ClearPackage() +{ + fPackageInfoView->Clear(); +} + + void MainWindow::_InitDummyModel() { diff --git a/src/apps/haiku-depot/MainWindow.h b/src/apps/haiku-depot/MainWindow.h index f1aff79a65..bca9efdd14 100644 --- a/src/apps/haiku-depot/MainWindow.h +++ b/src/apps/haiku-depot/MainWindow.h @@ -33,6 +33,9 @@ public: private: void _BuildMenu(BMenuBar* menuBar); void _AdoptModel(); + + void _AdoptPackage(const PackageInfo& package); + void _ClearPackage(); void _InitDummyModel(); @@ -44,6 +47,7 @@ private: BSplitView* fSplitView; Model fModel; + PackageInfoList fVisiblePackages; }; #endif // MAIN_WINDOW_H diff --git a/src/apps/haiku-depot/PackageInfoView.cpp b/src/apps/haiku-depot/PackageInfoView.cpp index 9f7af16358..3d5e65e847 100644 --- a/src/apps/haiku-depot/PackageInfoView.cpp +++ b/src/apps/haiku-depot/PackageInfoView.cpp @@ -23,7 +23,7 @@ class TitleView : public BView { public: TitleView() : - BView("title view", B_WILL_DRAW), + BView("title view", B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE), fIcon(NULL), fTitle() { @@ -47,6 +47,8 @@ public: BPoint offset(B_ORIGIN); BRect bounds(Bounds()); + FillRect(updateRect, B_SOLID_LOW); + if (fIcon != NULL) { // TODO: ... } @@ -81,6 +83,7 @@ public: // TODO: Fetch icon fTitle = package.Title(); InvalidateLayout(); + Invalidate(); } void Clear() @@ -88,6 +91,11 @@ public: delete fIcon; fIcon = NULL; fTitle = ""; + + if (Parent() != NULL) { + InvalidateLayout(); + Invalidate(); + } } private: diff --git a/src/apps/haiku-depot/PackageListView.cpp b/src/apps/haiku-depot/PackageListView.cpp index 40b5298940..27e32981ee 100644 --- a/src/apps/haiku-depot/PackageListView.cpp +++ b/src/apps/haiku-depot/PackageListView.cpp @@ -9,6 +9,7 @@ #include #include +#include #undef B_TRANSLATION_CONTEXT @@ -288,6 +289,8 @@ PackageListView::PackageListView() B_TRUNCATE_END), kSizeColumn); AddColumn(new PackageColumn(B_TRANSLATE("Status"), 100, 50, 500, B_TRUNCATE_END), kStatusColumn); + + SetSortingEnabled(true); } @@ -314,6 +317,23 @@ PackageListView::MessageReceived(BMessage* message) } +void +PackageListView::SelectionChanged() +{ + BColumnListView::SelectionChanged(); + + BMessage message(MSG_PACKAGE_SELECTED); + + BRow* selected = CurrentSelection(); + int32 index = -1; + if (selected != NULL) + index = IndexOf(selected); + message.AddInt32("index", index); + + Window()->PostMessage(&message); +} + + void PackageListView::AddPackage(const PackageInfo& package) { diff --git a/src/apps/haiku-depot/PackageListView.h b/src/apps/haiku-depot/PackageListView.h index eb8a19c3c1..05c57a3da2 100644 --- a/src/apps/haiku-depot/PackageListView.h +++ b/src/apps/haiku-depot/PackageListView.h @@ -14,6 +14,11 @@ class PackageRow; +enum { + MSG_PACKAGE_SELECTED = 'pkgs', +}; + + class PackageListView : public BColumnListView { public: PackageListView(); @@ -22,6 +27,8 @@ public: virtual void AttachedToWindow(); virtual void MessageReceived(BMessage* message); + virtual void SelectionChanged(); + void AddPackage(const PackageInfo& package); private: