Ticket #11563: bug#11563_contents_tab.patch
File bug#11563_contents_tab.patch, 10.8 KB (added by , 9 years ago) |
---|
-
src/apps/haikudepot/Jamfile
From 05041953d178481a86603349905c1541d6fbc576 Mon Sep 17 00:00:00 2001 From: "Sidhant Sharma [:TigerKid001]" <tigerkid001@gmail.com> Date: Tue, 6 Jan 2015 14:02:11 +0530 Subject: [PATCH] Bug#11563 - HaikuDepot Contents Tab --- src/apps/haikudepot/Jamfile | 2 + src/apps/haikudepot/ui/PackageContentsView.cpp | 221 +++++++++++++++++++++++++ src/apps/haikudepot/ui/PackageContentsView.h | 30 ++++ src/apps/haikudepot/ui/PackageInfoView.cpp | 66 +++++++- 4 files changed, 316 insertions(+), 3 deletions(-) create mode 100644 src/apps/haikudepot/ui/PackageContentsView.cpp create mode 100644 src/apps/haikudepot/ui/PackageContentsView.h diff --git a/src/apps/haikudepot/Jamfile b/src/apps/haikudepot/Jamfile index 6dc4c78..2d6a5b3 100644
a b Application HaikuDepot : 51 51 Model.cpp 52 52 PackageAction.cpp 53 53 PackageActionHandler.cpp 54 PackageContentsView.cpp 54 55 PackageInfo.cpp 55 56 PackageInfoListener.cpp 56 57 PackageInfoView.cpp … … DoCatalogs HaikuDepot : 85 86 FilterView.cpp 86 87 MainWindow.cpp 87 88 Model.cpp 89 PackageContentsView.cpp 88 90 PackageInfoView.cpp 89 91 PackageListView.cpp 90 92 PackageManager.cpp -
new file src/apps/haikudepot/ui/PackageContentsView.cpp
diff --git a/src/apps/haikudepot/ui/PackageContentsView.cpp b/src/apps/haikudepot/ui/PackageContentsView.cpp new file mode 100644 index 0000000..8917df0
- + 1 #include "PackageContentsView.h" 2 3 #include <algorithm> 4 #include <stdio.h> 5 6 #include <Autolock.h> 7 #include <Catalog.h> 8 #include <MessageFormat.h> 9 #include <ScrollBar.h> 10 #include <Window.h> 11 #include <LayoutBuilder.h> 12 #include <LayoutUtils.h> 13 #include <OutlineListView.h> 14 #include <Path.h> 15 #include <ScrollView.h> 16 17 #include <package/hpkg/PackageReader.h> 18 #include <package/hpkg/NoErrorOutput.h> 19 #include <package/hpkg/PackageContentHandler.h> 20 #include <package/hpkg/PackageEntry.h> 21 #include "MainWindow.h" 22 #include "PackageAction.h" 23 24 using BPackageKit::BHPKG::BNoErrorOutput; 25 using BPackageKit::BHPKG::BPackageContentHandler; 26 using BPackageKit::BHPKG::BPackageEntry; 27 using BPackageKit::BHPKG::BPackageEntryAttribute; 28 using BPackageKit::BHPKG::BPackageInfoAttributeValue; 29 using BPackageKit::BHPKG::BPackageReader; 30 31 #undef B_TRANSLATION_CONTEXT 32 #define B_TRANSLATION_CONTEXT "PackageContentsView" 33 34 35 //! Layouts the scrollbar so it looks nice with no border and the document 36 // window look. 37 class CustomScrollView : public BScrollView { 38 public: 39 CustomScrollView(const char* name, BView* target) 40 : 41 BScrollView(name, target, 0, false, true, B_NO_BORDER) 42 { 43 } 44 45 virtual void DoLayout() 46 { 47 BRect innerFrame = Bounds(); 48 innerFrame.right -= B_V_SCROLL_BAR_WIDTH + 1; 49 50 BView* target = Target(); 51 if (target != NULL) { 52 Target()->MoveTo(innerFrame.left, innerFrame.top); 53 Target()->ResizeTo(innerFrame.Width(), innerFrame.Height()); 54 } 55 56 BScrollBar* scrollBar = ScrollBar(B_VERTICAL); 57 if (scrollBar != NULL) { 58 BRect rect = innerFrame; 59 rect.left = rect.right + 1; 60 rect.right = rect.left + B_V_SCROLL_BAR_WIDTH; 61 rect.bottom -= B_H_SCROLL_BAR_HEIGHT; 62 63 scrollBar->MoveTo(rect.left, rect.top); 64 scrollBar->ResizeTo(rect.Width(), rect.Height()); 65 } 66 } 67 }; 68 69 70 // #pragma mark - PackageContentOutliner 71 72 73 class PackageContentsView::PackageContentOutliner 74 : public BPackageContentHandler { 75 public: 76 PackageContentOutliner(BOutlineListView* contentsList) 77 { 78 fContents = contentsList; 79 } 80 81 virtual status_t HandleEntry(BPackageEntry* entry) 82 { 83 if (entry->Parent() == NULL) { 84 fSuperParent = entry; 85 fSuperParentItem = new BStringItem(fSuperParent->Name()); 86 fContents->AddItem(fSuperParentItem); 87 fParent = fSuperParent; 88 fParentItem = fSuperParentItem; 89 } else { 90 if (entry->Parent() == fParent) { 91 BListItem* item = new BStringItem(entry->Name()); 92 fContents->AddUnder(item, fParentItem); 93 fParent = entry; 94 fParentItem = item; 95 } else if (entry->Parent() == fSuperParent) { 96 BListItem* item = new BStringItem(entry->Name()); 97 fContents->AddUnder(item, fSuperParentItem); 98 fParent = entry; 99 fParentItem = item; 100 } 101 } 102 return B_OK; 103 } 104 105 virtual status_t HandleEntryAttribute(BPackageEntry* entry, 106 BPackageEntryAttribute* attribute) 107 { 108 return B_OK; 109 } 110 111 virtual status_t HandleEntryDone(BPackageEntry* entry) 112 { 113 return B_OK; 114 } 115 116 virtual status_t HandlePackageAttribute( 117 const BPackageInfoAttributeValue& value) 118 { 119 return B_OK; 120 } 121 122 virtual void HandleErrorOccurred() 123 { 124 } 125 126 BOutlineListView* GetContentsList() { 127 return fContents; 128 } 129 130 private: 131 BOutlineListView* fContents; 132 BListItem* fParentItem; 133 BListItem* fSuperParentItem; 134 BPackageEntry* fParent; 135 BPackageEntry* fSuperParent; 136 }; 137 138 139 // #pragma mark - PackageContentView 140 141 142 PackageContentsView::PackageContentsView(BRect frame, const char* name) 143 : 144 BView("package_contents_view",B_WILL_DRAW), 145 fLayout(new BGroupLayout(B_HORIZONTAL)) 146 { 147 BRect frame = Bounds(); 148 frame.InsetBy(5,5); 149 150 fContentsList = new BOutlineListView(frame, "contents_list", 151 B_SINGLE_SELECTION_LIST); 152 153 BScrollView* scrollView = new CustomScrollView("contents scroll view", 154 fContentsList); 155 156 BLayoutBuilder::Group<>(this) 157 .Add(scrollView, 1.0f) 158 .SetInsets(B_USE_DEFAULT_SPACING, -1.0f, -1.0f, -1.0f) 159 ; 160 } 161 162 163 PackageContentsView::~PackageContentsView() 164 { 165 MakeEmpty(); 166 } 167 168 169 void 170 PackageContentsView::AttachedToWindow() 171 { 172 BView::AttachedToWindow(); 173 } 174 175 176 void 177 PackageContentsView::AllAttached() 178 { 179 BView::AllAttached(); 180 } 181 182 183 void 184 PackageContentsView::AddPackage(const PackageInfo& package) 185 { 186 fContentsList->MakeEmpty(); 187 status_t status; 188 189 if (package.IsLocalFile() ) { 190 BString pathString = package.LocalFilePath(); 191 BPath packagePath; 192 packagePath.SetTo(pathString.String()); 193 194 BNoErrorOutput errorOutput; 195 BPackageReader reader(&errorOutput); 196 197 status = reader.Init(packagePath.Path()); 198 if (status != B_OK) { 199 printf("failed to init BPackageReader(%s): %s\n", 200 packagePath.Path(), strerror(status)); 201 return; 202 } 203 204 // Scan package contents and populate list 205 PackageContentOutliner contentHandler(fContentsList); 206 status = reader.ParseContent(&contentHandler); 207 if (status != B_OK) { 208 printf("PackageContnetsView::PackageContentsView(): " 209 "failed parse package contents: %s\n", strerror(status)); 210 } else { 211 fContentsList = contentHandler.GetContentsList(); 212 } 213 } 214 Invalidate(); 215 } 216 217 218 void 219 PackageContentsView::MakeEmpty() { 220 fContentsList->MakeEmpty(); 221 } -
new file src/apps/haikudepot/ui/PackageContentsView.h
diff --git a/src/apps/haikudepot/ui/PackageContentsView.h b/src/apps/haikudepot/ui/PackageContentsView.h new file mode 100644 index 0000000..ee13e62
- + 1 /* 2 * Copyright 2013, Stephan Aßmus <superstippi@gmx.de>. 3 * Copyright 2013, Rene Gollent <rene@gollent.com>. 4 * All rights reserved. Distributed under the terms of the MIT License. 5 */ 6 #ifndef PACKAGE_CONTENTS_VIEW_H 7 #define PACKAGE_CONTENTS_VIEW_H 8 9 #include <OutlineListView.h> 10 #include <View.h> 11 #include "PackageInfo.h" 12 #include "ScrollableGroupView.h" 13 14 class PackageContentsView : public BView { 15 public: 16 PackageContentsView(BRect frame, const char* name); 17 virtual ~PackageContentsView(); 18 19 virtual void AttachedToWindow(); 20 virtual void AllAttached(); 21 22 void AddPackage(const PackageInfo& package); 23 void MakeEmpty(); 24 private: 25 class PackageContentOutliner; 26 BGroupLayout* fLayout; 27 BOutlineListView* fContentsList; 28 }; 29 30 #endif // PACKAGE_CONTENTS_VIEW_H -
src/apps/haikudepot/ui/PackageInfoView.cpp
diff --git a/src/apps/haikudepot/ui/PackageInfoView.cpp b/src/apps/haikudepot/ui/PackageInfoView.cpp index 93bcda0..0041933 100644
a b 20 20 #include <LayoutUtils.h> 21 21 #include <LocaleRoster.h> 22 22 #include <Message.h> 23 #include < TabView.h>23 #include <OutlineListView.h> 24 24 #include <ScrollView.h> 25 25 #include <SpaceLayoutItem.h> 26 26 #include <StatusBar.h> 27 27 #include <StringView.h> 28 #include <TabView.h> 28 29 #include <Url.h> 29 30 31 #include <package/hpkg/PackageReader.h> 32 #include <package/hpkg/NoErrorOutput.h> 33 #include <package/hpkg/PackageContentHandler.h> 34 #include <package/hpkg/PackageEntry.h> 35 30 36 #include "BitmapButton.h" 31 37 #include "BitmapView.h" 32 38 #include "LinkView.h" … … 34 40 #include "MarkupTextView.h" 35 41 #include "MessagePackageListener.h" 36 42 #include "PackageActionHandler.h" 43 #include "PackageContentsView.h" 44 #include "PackageInfo.h" 37 45 #include "PackageManager.h" 38 46 #include "RatingView.h" 39 47 #include "ScrollableGroupView.h" … … 44 52 #define B_TRANSLATION_CONTEXT "PackageInfoView" 45 53 46 54 47 static const rgb_color kLightBlack = (rgb_color) { 60, 60, 60, 255 };55 static const rgb_color kLightBlack = (rgb_color) { 60, 60, 60, 255 }; 48 56 static const float kContentTint = (B_NO_TINT + B_LIGHTEN_1_TINT) / 2.0f; 49 57 50 58 … … private: 1158 1166 }; 1159 1167 1160 1168 1169 // #pragma mark - ContentsView 1170 1171 1172 class ContentsView : public BView { 1173 public: 1174 ContentsView() 1175 : 1176 BView("package contents view", B_WILL_DRAW), 1177 fLayout(new BGroupLayout(B_HORIZONTAL)) 1178 { 1179 SetViewColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), 1180 kContentTint)); 1181 BRect frame = Bounds(); 1182 frame.InsetBy(5,5) ; 1183 1184 SetLayout(fLayout); 1185 fPackageContents = new PackageContentsView(frame, "contents_list"); 1186 AddChild(fPackageContents); 1187 1188 } 1189 1190 virtual ~ContentsView() 1191 { 1192 } 1193 1194 virtual void Draw(BRect updateRect) 1195 { 1196 } 1197 1198 void SetPackage(const PackageInfo& package) 1199 { 1200 fPackageContents -> AddPackage(package); 1201 } 1202 1203 void Clear() 1204 { 1205 fPackageContents->MakeEmpty(); 1206 } 1207 1208 1209 private: 1210 BGroupLayout* fLayout; 1211 PackageContentsView* fPackageContents; 1212 }; 1213 1214 1161 1215 // #pragma mark - ChangelogView 1162 1216 1163 1217 … … public: 1230 1284 fAboutView = new AboutView(); 1231 1285 fUserRatingsView = new UserRatingsView(); 1232 1286 fChangelogView = new ChangelogView(); 1287 fContentsView = new ContentsView(); 1233 1288 1234 1289 AddTab(fAboutView); 1235 1290 AddTab(fUserRatingsView); 1236 1291 AddTab(fChangelogView); 1237 1292 AddTab(fContentsView); 1293 1238 1294 TabAt(0)->SetLabel(B_TRANSLATE("About")); 1239 1295 TabAt(1)->SetLabel(B_TRANSLATE("Ratings")); 1240 1296 TabAt(2)->SetLabel(B_TRANSLATE("Changelog")); 1297 TabAt(3)->SetLabel(B_TRANSLATE("Contents")); 1241 1298 1242 1299 Select(0); 1243 1300 } … … public: 1253 1310 fAboutView->SetPackage(package); 1254 1311 fUserRatingsView->SetPackage(package); 1255 1312 fChangelogView->SetPackage(package); 1313 fContentsView->SetPackage(package); 1256 1314 } 1257 1315 1258 1316 void Clear() … … public: 1260 1318 fAboutView->Clear(); 1261 1319 fUserRatingsView->Clear(); 1262 1320 fChangelogView->Clear(); 1321 fContentsView->Clear(); 1263 1322 } 1264 1323 1265 1324 private: … … private: 1268 1327 AboutView* fAboutView; 1269 1328 UserRatingsView* fUserRatingsView; 1270 1329 ChangelogView* fChangelogView; 1330 ContentsView* fContentsView; 1271 1331 }; 1272 1332 1273 1333