Ticket #11563: bug#11563_contents_tab.patch

File bug#11563_contents_tab.patch, 10.8 KB (added by TigerKid001, 9 years ago)

Contents Tab patch

  • 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 :  
    5151    Model.cpp
    5252    PackageAction.cpp
    5353    PackageActionHandler.cpp
     54    PackageContentsView.cpp
    5455    PackageInfo.cpp
    5556    PackageInfoListener.cpp
    5657    PackageInfoView.cpp
    DoCatalogs HaikuDepot :  
    8586    FilterView.cpp
    8687    MainWindow.cpp
    8788    Model.cpp
     89    PackageContentsView.cpp
    8890    PackageInfoView.cpp
    8991    PackageListView.cpp
    9092    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
     24using BPackageKit::BHPKG::BNoErrorOutput;
     25using BPackageKit::BHPKG::BPackageContentHandler;
     26using BPackageKit::BHPKG::BPackageEntry;
     27using BPackageKit::BHPKG::BPackageEntryAttribute;
     28using BPackageKit::BHPKG::BPackageInfoAttributeValue;
     29using 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.
     37class CustomScrollView : public BScrollView {
     38public:
     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
     73class 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
     142PackageContentsView::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
     163PackageContentsView::~PackageContentsView()
     164{
     165    MakeEmpty();
     166}
     167
     168
     169void
     170PackageContentsView::AttachedToWindow()
     171{
     172    BView::AttachedToWindow();
     173}
     174
     175
     176void
     177PackageContentsView::AllAttached()
     178{
     179    BView::AllAttached();
     180}
     181
     182
     183void
     184PackageContentsView::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
     218void
     219PackageContentsView::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
     14class PackageContentsView : public BView {
     15public:
     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();
     24private:
     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  
    2020#include <LayoutUtils.h>
    2121#include <LocaleRoster.h>
    2222#include <Message.h>
    23 #include <TabView.h>
     23#include <OutlineListView.h>
    2424#include <ScrollView.h>
    2525#include <SpaceLayoutItem.h>
    2626#include <StatusBar.h>
    2727#include <StringView.h>
     28#include <TabView.h>
    2829#include <Url.h>
    2930
     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
    3036#include "BitmapButton.h"
    3137#include "BitmapView.h"
    3238#include "LinkView.h"
     
    3440#include "MarkupTextView.h"
    3541#include "MessagePackageListener.h"
    3642#include "PackageActionHandler.h"
     43#include "PackageContentsView.h"
     44#include "PackageInfo.h"
    3745#include "PackageManager.h"
    3846#include "RatingView.h"
    3947#include "ScrollableGroupView.h"
     
    4452#define B_TRANSLATION_CONTEXT "PackageInfoView"
    4553
    4654
    47 static const rgb_color kLightBlack = (rgb_color){ 60, 60, 60, 255 };
     55static const rgb_color kLightBlack = (rgb_color) { 60, 60, 60, 255 };
    4856static const float kContentTint = (B_NO_TINT + B_LIGHTEN_1_TINT) / 2.0f;
    4957
    5058
    private:  
    11581166};
    11591167
    11601168
     1169// #pragma mark - ContentsView
     1170
     1171
     1172class ContentsView : public BView {
     1173public:
     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
     1209private:
     1210    BGroupLayout*       fLayout;
     1211    PackageContentsView*  fPackageContents;
     1212};
     1213
     1214
    11611215// #pragma mark - ChangelogView
    11621216
    11631217
    public:  
    12301284        fAboutView = new AboutView();
    12311285        fUserRatingsView = new UserRatingsView();
    12321286        fChangelogView = new ChangelogView();
     1287        fContentsView = new ContentsView();
    12331288
    12341289        AddTab(fAboutView);
    12351290        AddTab(fUserRatingsView);
    12361291        AddTab(fChangelogView);
    1237 
     1292        AddTab(fContentsView);
     1293       
    12381294        TabAt(0)->SetLabel(B_TRANSLATE("About"));
    12391295        TabAt(1)->SetLabel(B_TRANSLATE("Ratings"));
    12401296        TabAt(2)->SetLabel(B_TRANSLATE("Changelog"));
     1297        TabAt(3)->SetLabel(B_TRANSLATE("Contents"));
    12411298
    12421299        Select(0);
    12431300    }
    public:  
    12531310        fAboutView->SetPackage(package);
    12541311        fUserRatingsView->SetPackage(package);
    12551312        fChangelogView->SetPackage(package);
     1313        fContentsView->SetPackage(package);
    12561314    }
    12571315
    12581316    void Clear()
    public:  
    12601318        fAboutView->Clear();
    12611319        fUserRatingsView->Clear();
    12621320        fChangelogView->Clear();
     1321        fContentsView->Clear();
    12631322    }
    12641323
    12651324private:
    private:  
    12681327    AboutView*          fAboutView;
    12691328    UserRatingsView*    fUserRatingsView;
    12701329    ChangelogView*      fChangelogView;
     1330    ContentsView*       fContentsView;
    12711331};
    12721332
    12731333