Ticket #12041: 0001-Implement-GlobalProgressView-which-shows-for-now.patch

File 0001-Implement-GlobalProgressView-which-shows-for-now.patch, 8.0 KB (added by jackburton, 8 years ago)
  • src/apps/haikudepot/Jamfile

    From dea8809802047297cfc62d34a3af9201c0a9fa24 Mon Sep 17 00:00:00 2001
    From: Stefano Ceccherini <stefano.ceccherini@gmail.com>
    Date: Fri, 22 Jan 2016 21:31:43 +0100
    Subject: [PATCH] Implement GlobalProgressView which shows, for now, the
     download progress of single packages
    
    ---
     src/apps/haikudepot/Jamfile                   |  2 +
     src/apps/haikudepot/model/Model.cpp           |  4 +-
     src/apps/haikudepot/model/Model.h             | 29 +++++++++++++++
     src/apps/haikudepot/model/PackageAction.cpp   |  2 +
     src/apps/haikudepot/ui/GlobalProgressView.cpp | 53 +++++++++++++++++++++++++++
     src/apps/haikudepot/ui/GlobalProgressView.h   | 27 ++++++++++++++
     src/apps/haikudepot/ui/MainWindow.cpp         |  3 ++
     src/apps/haikudepot/ui/MainWindow.h           |  2 +
     8 files changed, 121 insertions(+), 1 deletion(-)
     create mode 100644 src/apps/haikudepot/ui/GlobalProgressView.cpp
     create mode 100644 src/apps/haikudepot/ui/GlobalProgressView.h
    
    diff --git a/src/apps/haikudepot/Jamfile b/src/apps/haikudepot/Jamfile
    index 30cc734..7bfcf26 100644
    a b Application HaikuDepot :  
    4949    DecisionProvider.cpp
    5050    FeaturedPackagesView.cpp
    5151    FilterView.cpp
     52    GlobalProgressView.cpp
    5253    JobStateListener.cpp
    5354    LinkView.cpp
    5455    LinkedBitmapView.cpp
    DoCatalogs HaikuDepot :  
    9293    App.cpp
    9394    FeaturedPackagesView.cpp
    9495    FilterView.cpp
     96    GlobalProgressView.cpp
    9597    MainWindow.cpp
    9698    Model.cpp
    9799    PackageContentsView.cpp
  • src/apps/haikudepot/model/Model.cpp

    diff --git a/src/apps/haikudepot/model/Model.cpp b/src/apps/haikudepot/model/Model.cpp
    index 289e5e9..3f78e61 100644
    a b Model::Model()  
    355355    fShowDevelopPackages(false),
    356356
    357357    fPopulateAllPackagesThread(-1),
    358     fStopPopulatingAllPackages(false)
     358    fStopPopulatingAllPackages(false),
     359    fGlobalProgressListener(new GlobalProgressListener())
    359360{
    360361    _UpdateIsFeaturedFilter();
    361362
    Model::Model()  
    410411
    411412Model::~Model()
    412413{
     414    delete fGlobalProgressListener;
    413415    StopPopulatingAllPackages();
    414416}
    415417
  • src/apps/haikudepot/model/Model.h

    diff --git a/src/apps/haikudepot/model/Model.h b/src/apps/haikudepot/model/Model.h
    index 36454a9..ba73997 100644
    a b  
    99#include <Locker.h>
    1010
    1111#include "PackageInfo.h"
     12#include "PackageManager.h"
    1213#include "WebAppInterface.h"
    1314
     15#include <iostream>
    1416
    1517class BFile;
    1618class BMessage;
    typedef BReference<ModelListener> ModelListenerRef;  
    3941typedef List<ModelListenerRef, false> ModelListenerList;
    4042
    4143
     44class GlobalProgressListener : public PackageProgressListener {
     45public:
     46    GlobalProgressListener() {};
     47    virtual ~GlobalProgressListener() {};
     48    const char* PackageName() const { return fPackageName.String(); }
     49    float Progress() const { return fProgress; }
     50private:
     51    virtual void                DownloadProgressChanged(
     52                                    const char* packageName,
     53                                    float progress)
     54    {
     55        fPackageName = packageName;
     56        fProgress = progress;
     57    }
     58    virtual void                DownloadProgressComplete(
     59                                    const char* packageName)
     60    {
     61        fPackageName = packageName;
     62    }
     63private:
     64    BString fPackageName;
     65    float fProgress;
     66};
     67
    4268class Model {
    4369public:
    4470                                Model();
    public:  
    144170            const WebAppInterface& GetWebAppInterface() const
    145171                                    { return fWebAppInterface; }
    146172
     173            PackageProgressListener* GetGlobalProgressListener()
     174                                    { return fGlobalProgressListener; }
    147175
    148176private:
    149177            void                _UpdateIsFeaturedFilter();
    private:  
    231259            WebAppInterface     fWebAppInterface;
    232260
    233261            ModelListenerList   fListeners;
     262            GlobalProgressListener* fGlobalProgressListener;
    234263};
    235264
    236265
  • src/apps/haikudepot/model/PackageAction.cpp

    diff --git a/src/apps/haikudepot/model/PackageAction.cpp b/src/apps/haikudepot/model/PackageAction.cpp
    index ee14c5c..48b2b8f 100644
    a b PackageAction::PackageAction(int32 type, PackageInfoRef package, Model* model)  
    2929    // TODO: allow configuring the installation location
    3030    fPackageManager = new(std::nothrow) PackageManager(
    3131        (BPackageInstallationLocation)fInstallLocation);
     32    fPackageManager->AddProgressListener(fModel->GetGlobalProgressListener());
    3233}
    3334
    3435
    3536PackageAction::~PackageAction()
    3637{
     38    fPackageManager->RemoveProgressListener(fModel->GetGlobalProgressListener());
    3739    delete fPackageManager;
    3840}
    3941
  • new file src/apps/haikudepot/ui/GlobalProgressView.cpp

    diff --git a/src/apps/haikudepot/ui/GlobalProgressView.cpp b/src/apps/haikudepot/ui/GlobalProgressView.cpp
    new file mode 100644
    index 0000000..23cf022
    - +  
     1/*
     2 * GlobalProgressView.cpp
     3 *
     4 *  Created on: 17/gen/2016
     5 *      Author: stefano
     6 */
     7
     8#include "GlobalProgressView.h"
     9
     10#include "MainWindow.h"
     11#include "Model.h"
     12
     13#include <LayoutBuilder.h>
     14#include <StringView.h>
     15
     16#include <iostream>
     17
     18GlobalProgressView::GlobalProgressView(Model& model)
     19    :
     20    BGroupView("global_progress_view", B_VERTICAL),
     21    fModel(model)
     22{
     23    BLayoutBuilder::Group<>(this)
     24            .AddGroup(B_HORIZONTAL)
     25                .Add(fStringView = new BStringView("Progress", ""))
     26            .End();
     27    SetFlags(Flags() | B_PULSE_NEEDED);
     28}
     29
     30
     31GlobalProgressView::~GlobalProgressView()
     32{
     33}
     34
     35
     36/* virtual */
     37void
     38GlobalProgressView::AttachedToWindow()
     39{
     40    Window()->SetPulseRate(20000);
     41}
     42
     43
     44/* virtual */
     45void
     46GlobalProgressView::Pulse()
     47{
     48    GlobalProgressListener* progressListener = (GlobalProgressListener*)fModel.GetGlobalProgressListener();
     49    BString text;
     50    text << "Dowloading " << progressListener->PackageName();
     51    text << ": " << (progressListener->Progress() * 100);
     52    fStringView->SetText(text.String());
     53}
  • new file src/apps/haikudepot/ui/GlobalProgressView.h

    diff --git a/src/apps/haikudepot/ui/GlobalProgressView.h b/src/apps/haikudepot/ui/GlobalProgressView.h
    new file mode 100644
    index 0000000..1c04c0d
    - +  
     1/*
     2 * GlobalProgressView.h
     3 *
     4 *  Created on: 17/gen/2016
     5 *      Author: stefano
     6 */
     7
     8#ifndef SRC_APPS_HAIKUDEPOT_UI_GLOBALPROGRESSVIEW_H_
     9#define SRC_APPS_HAIKUDEPOT_UI_GLOBALPROGRESSVIEW_H_
     10
     11#include <GroupView.h>
     12
     13#include "PackageManager.h"
     14
     15class BStringView;
     16class GlobalProgressView: public BGroupView {
     17public:
     18    GlobalProgressView(Model& model);
     19    virtual ~GlobalProgressView();
     20    virtual void AttachedToWindow();
     21    virtual void Pulse();
     22private:
     23    Model& fModel;
     24    BStringView* fStringView;
     25};
     26
     27#endif /* SRC_APPS_HAIKUDEPOT_UI_GLOBALPROGRESSVIEW_H_ */
  • src/apps/haikudepot/ui/MainWindow.cpp

    diff --git a/src/apps/haikudepot/ui/MainWindow.cpp b/src/apps/haikudepot/ui/MainWindow.cpp
    index b9f7529..b11781e 100644
    a b  
    4646#include "DecisionProvider.h"
    4747#include "FeaturedPackagesView.h"
    4848#include "FilterView.h"
     49#include "GlobalProgressView.h"
    4950#include "JobStateListener.h"
    5051#include "PackageInfoView.h"
    5152#include "PackageListView.h"
    MainWindow::MainWindow(const BMessage& settings)  
    143144    fFeaturedPackagesView = new FeaturedPackagesView();
    144145    fPackageListView = new PackageListView(fModel.Lock());
    145146    fPackageInfoView = new PackageInfoView(fModel.Lock(), this);
     147    fGlobalProgressView = new GlobalProgressView(fModel);
    146148
    147149    fSplitView = new BSplitView(B_VERTICAL, 5.0f);
    148150
    MainWindow::MainWindow(const BMessage& settings)  
    178180                    B_USE_DEFAULT_SPACING, 0.0f,
    179181                    B_USE_DEFAULT_SPACING, 0.0f)
    180182            .End()
     183            .Add(fGlobalProgressView)
    181184            .Add(fPackageInfoView)
    182185        .End()
    183186    ;
  • src/apps/haikudepot/ui/MainWindow.h

    diff --git a/src/apps/haikudepot/ui/MainWindow.h b/src/apps/haikudepot/ui/MainWindow.h
    index 784350a..4f09acf 100644
    a b class BMenuItem;  
    2020class BSplitView;
    2121class FeaturedPackagesView;
    2222class FilterView;
     23class GlobalProgressView;
    2324class PackageActionsView;
    2425class PackageInfoView;
    2526class PackageListView;
    private:  
    9495            FeaturedPackagesView* fFeaturedPackagesView;
    9596            PackageListView*    fPackageListView;
    9697            PackageInfoView*    fPackageInfoView;
     98            GlobalProgressView* fGlobalProgressView;
    9799            BSplitView*         fSplitView;
    98100
    99101            ScreenshotWindow*   fScreenshotWindow;