diff --git a/src/apps/haikudepot/Jamfile b/src/apps/haikudepot/Jamfile index b90445eac7..dcb158ba6c 100644 --- a/src/apps/haikudepot/Jamfile +++ b/src/apps/haikudepot/Jamfile @@ -39,11 +39,13 @@ Application HaikuDepot : BitmapButton.cpp BitmapView.cpp DecisionProvider.cpp + FeaturedPackageView.cpp FilterView.cpp JobStateListener.cpp LinkView.cpp main.cpp MainWindow.cpp + MessagePackageListener.cpp Model.cpp PackageAction.cpp PackageActionHandler.cpp diff --git a/src/apps/haikudepot/ui/MessagePackageListener.cpp b/src/apps/haikudepot/ui/MessagePackageListener.cpp new file mode 100644 index 0000000000..c0d7f92995 --- /dev/null +++ b/src/apps/haikudepot/ui/MessagePackageListener.cpp @@ -0,0 +1,64 @@ +/* + * Copyright 2013-214, Stephan Aßmus . + * All rights reserved. Distributed under the terms of the MIT License. + */ + + +#include "MessagePackageListener.h" + +#include +#include + +#include "PackageInfo.h" + + +MessagePackageListener::MessagePackageListener(BView* view) + : + fView(view) +{ +} + + +MessagePackageListener::~MessagePackageListener() +{ +} + + +void +MessagePackageListener::PackageChanged(const PackageInfoEvent& event) +{ + BMessenger messenger(fView); + if (!messenger.IsValid()) + return; + + BMessage message(MSG_UPDATE_PACKAGE); + message.AddString("title", event.Package()->Title()); + message.AddUInt32("changes", event.Changes()); + + messenger.SendMessage(&message); +} + + +void +MessagePackageListener::SetPackage(const PackageInfoRef& package) +{ + if (fPackage == package) + return; + + PackageInfoListenerRef listener(this); + + if (fPackage.Get() != NULL) + fPackage->RemoveListener(listener); + + fPackage = package; + + if (fPackage.Get() != NULL) + fPackage->AddListener(listener); +} + + +const PackageInfoRef& +MessagePackageListener::Package() const +{ + return fPackage; +} diff --git a/src/apps/haikudepot/ui/MessagePackageListener.h b/src/apps/haikudepot/ui/MessagePackageListener.h new file mode 100644 index 0000000000..f00b54062b --- /dev/null +++ b/src/apps/haikudepot/ui/MessagePackageListener.h @@ -0,0 +1,35 @@ +/* + * Copyright 2013-214, Stephan Aßmus . + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef MESSAGE_PACKAGE_LISTENER_H +#define MESSAGE_PACKAGE_LISTENER_H + + +#include "PackageInfoListener.h" + + +enum { + MSG_UPDATE_PACKAGE = 'updp' +}; + +class BView; + + +class MessagePackageListener : public PackageInfoListener { +public: + MessagePackageListener(BView* view); + virtual ~MessagePackageListener(); + + virtual void PackageChanged(const PackageInfoEvent& event); + + void SetPackage(const PackageInfoRef& package); + const PackageInfoRef& Package() const; + +private: + BView* fView; + PackageInfoRef fPackage; +}; + + +#endif // MESSAGE_PACKAGE_LISTENER_H diff --git a/src/apps/haikudepot/ui/PackageInfoView.cpp b/src/apps/haikudepot/ui/PackageInfoView.cpp index 1502814e4a..94c1839e8f 100644 --- a/src/apps/haikudepot/ui/PackageInfoView.cpp +++ b/src/apps/haikudepot/ui/PackageInfoView.cpp @@ -31,6 +31,7 @@ #include "BitmapView.h" #include "LinkView.h" #include "MarkupParser.h" +#include "MessagePackageListener.h" #include "PackageActionHandler.h" #include "PackageManager.h" #include "RatingView.h" @@ -1318,68 +1319,6 @@ private: }; -// #pragma mark - PackageInfoViewListener - - -enum { - MSG_UPDATE_PACKAGE = 'updp' -}; - - -class PackageInfoView::Listener : public PackageInfoListener { -public: - Listener(PackageInfoView* view) - : - fView(view) - { - } - - virtual ~Listener() - { - } - - virtual void PackageChanged(const PackageInfoEvent& event) - { - BMessenger messenger(fView); - if (!messenger.IsValid()) - return; - - const PackageInfo& package = *event.Package().Get(); - - BMessage message(MSG_UPDATE_PACKAGE); - message.AddString("title", package.Title()); - message.AddUInt32("changes", event.Changes()); - - messenger.SendMessage(&message); - } - - void SetPackage(const PackageInfoRef& package) - { - if (fPackage == package) - return; - - PackageInfoListenerRef listener(this); - - if (fPackage.Get() != NULL) - fPackage->RemoveListener(listener); - - fPackage = package; - - if (fPackage.Get() != NULL) - fPackage->AddListener(listener); - } - - const PackageInfoRef& Package() const - { - return fPackage; - } - -private: - PackageInfoView* fView; - PackageInfoRef fPackage; -}; - - // #pragma mark - PackageInfoView @@ -1388,7 +1327,7 @@ PackageInfoView::PackageInfoView(BLocker* modelLock, : BView("package info view", 0), fModelLock(modelLock), - fPackageListener(new(std::nothrow) Listener(this)) + fPackageListener(new(std::nothrow) MessagePackageListener(this)) { fCardLayout = new BCardLayout(); SetLayout(fCardLayout); diff --git a/src/apps/haikudepot/ui/PackageInfoView.h b/src/apps/haikudepot/ui/PackageInfoView.h index 7dde526886..1adb741eb7 100644 --- a/src/apps/haikudepot/ui/PackageInfoView.h +++ b/src/apps/haikudepot/ui/PackageInfoView.h @@ -13,6 +13,7 @@ class BCardLayout; class BLocker; +class MessagePackageListener; class TitleView; class PackageActionHandler; class PackageActionView; @@ -39,9 +40,6 @@ public: { return fPackage; } void Clear(); -private: - class Listener; - private: BLocker* fModelLock; @@ -51,7 +49,7 @@ private: PagesView* fPagesView; PackageInfoRef fPackage; - Listener* fPackageListener; + MessagePackageListener* fPackageListener; }; #endif // PACKAGE_INFO_VIEW_H