class MediaItem : public ucl::Polymorphic {
public:
using ThumbnailPathGetCb =
- ucl::Delegate<void(ucl::Result, const std::string &path)>;
+ ucl::WeakDelegate<void(ucl::Result, const std::string &path)>;
class Remover;
class RemoverBuilder final {
const std::string &getFilePath() const;
- ucl::Result getThumbnailPath(ThumbnailPathGetCb cb) const;
+ ucl::Result getThumbnailPath(const ThumbnailPathGetCb &cb) const;
void cancelThumbnailPathGet() const;
ucl::Result removeFile();
Builder();
~Builder();
Builder &setNaviframe(const ucl::NaviframeSRef &navi);
- NoContentPageWRef build(ExitRequestHandler onExitRequest) const;
+ NoContentPageWRef build(
+ const ExitRequestHandler &onExitRequest) const;
private:
ucl::NaviframeSRef m_navi;
};
private:
friend class ucl::RefCountObj<NoContentPage>;
NoContentPage(ucl::RefCountObjBase &rc, const ucl::NaviframeSRef &navi,
- ExitRequestHandler onExitRequest);
+ const ExitRequestHandler &onExitRequest);
virtual ~NoContentPage();
ucl::Result prepare();
class Page : public Presenter {
public:
- using ExitRequestHandler = ucl::Delegate<void(Page &page)>;
+ using ExitRequestHandler = ucl::WeakDelegate<void(Page &page)>;
public:
ucl::Naviframe &getNaviframe();
protected:
Page(ucl::RefCountObjBase &rc, const ucl::NaviframeSRef &navi,
- ExitRequestHandler onExitRequest);
+ const ExitRequestHandler &onExitRequest);
virtual ~Page();
template <class ITEM_FACTORY>
Builder &setStartItemIndex(int index);
Builder &setSelectModeStartup(bool value);
Builder &setAutoSelectStartItem(bool value);
- PreviewPageWRef build(ExitRequestHandler onExitRequest) const;
+ PreviewPageWRef build(
+ const ExitRequestHandler &onExitRequest) const;
private:
ucl::NaviframeSRef m_navi;
IMediaAlbumSRef m_album;
private:
friend class ucl::RefCountObj<PreviewPage>;
PreviewPage(ucl::RefCountObjBase &rc, const ucl::NaviframeSRef &navi,
- ExitRequestHandler onExitRequest, const IMediaAlbumSRef &album,
- bool selectModeStartup);
+ const ExitRequestHandler &onExitRequest,
+ const IMediaAlbumSRef &album, bool selectModeStartup);
virtual ~PreviewPage();
ucl::Result prepare(int startItemIndex);
private:
class Item;
- using ItemUPtr = std::unique_ptr<Item>;
+ using ItemSRef = ucl::SharedRef<Item>;
private:
const IMediaAlbumSRef m_album;
const bool m_selectModeStartup;
ImageGridSRef m_imageGrid;
- std::vector<ItemUPtr> m_items;
+ std::vector<ItemSRef> m_items;
IJobSRef m_job;
PageContentSRef m_content;
~Builder();
Builder &setNaviframe(const ucl::NaviframeSRef &navi);
Builder &setAlbum(const IMediaAlbumSRef &album);
- ThumbnailPageWRef build(ExitRequestHandler onExitRequest) const;
+ ThumbnailPageWRef build(
+ const ExitRequestHandler &onExitRequest) const;
private:
ucl::NaviframeSRef m_navi;
IMediaAlbumSRef m_album;
private:
friend class ucl::RefCountObj<ThumbnailPage>;
ThumbnailPage(ucl::RefCountObjBase &rc, const ucl::NaviframeSRef &navi,
- ExitRequestHandler onExitRequest, const IMediaAlbumSRef &album);
+ const ExitRequestHandler &onExitRequest,
+ const IMediaAlbumSRef &album);
virtual ~ThumbnailPage();
ucl::Result prepare();
private:
class RealizedItem;
- using RealizedItemUPtr = std::unique_ptr<RealizedItem>;
+ using RealizedItemSRef = ucl::SharedRef<RealizedItem>;
private:
const IMediaAlbumSRef m_album;
MediaItems m_mediaItems;
- std::vector<RealizedItemUPtr> m_realizedItems;
+ std::vector<RealizedItemSRef> m_realizedItems;
PageContentSRef m_content;
ImageGridSRef m_imageGrid;
~Builder();
Builder &setNaviframe(const ucl::NaviframeSRef &navi);
Builder &setMedia(const MediaItemSRef &media);
- VideoPlayerPageWRef build(ExitRequestHandler onExitRequest) const;
+ VideoPlayerPageWRef build(
+ const ExitRequestHandler &onExitRequest) const;
private:
ucl::NaviframeSRef m_navi;
MediaItemSRef m_media;
friend class ucl::RefCountObj<VideoPlayerPage>;
VideoPlayerPage(ucl::RefCountObjBase &rc,
const ucl::NaviframeSRef &navi,
- ExitRequestHandler onExitRequest,
+ const ExitRequestHandler &onExitRequest,
const MediaItemSRef &media);
virtual ~VideoPlayerPage();
Builder &setZoomIn(int x, int y);
Builder &setImageLoadSize(int size, bool isFull);
Builder &setExitOnZoomOut(bool value);
- ViewerPageWRef build(ExitRequestHandler onExitRequest) const;
+ ViewerPageWRef build(
+ const ExitRequestHandler &onExitRequest) const;
private:
ucl::NaviframeSRef m_navi;
MediaItemSRef m_media;
private:
friend class ucl::RefCountObj<ViewerPage>;
ViewerPage(ucl::RefCountObjBase &rc, const ucl::NaviframeSRef &navi,
- ExitRequestHandler onExitRequest, const MediaItemSRef &media,
- bool exitOnZoomOut);
+ const ExitRequestHandler &onExitRequest,
+ const MediaItemSRef &media, bool exitOnZoomOut);
virtual ~ViewerPage();
ucl::Result prepare(int imageLoadSize, bool isImageLoadSizeFull);
class TouchParser final : public ucl::RefCountAware {
public:
- using TapHandler = ucl::Delegate<void(int x, int y)>;
+ using TapHandler = ucl::WeakDelegate<void(int x, int y)>;
private:
friend class ucl::RefCountObj<TouchParser>;
virtual ~TouchParser();
public:
- void setTapHandler(TapHandler handler);
- void setDoubleTapHandler(TapHandler handler);
- void setTapAndHoldHandler(TapHandler handler);
+ void setTapHandler(const TapHandler &handler);
+ void setDoubleTapHandler(const TapHandler &handler);
+ void setTapAndHoldHandler(const TapHandler &handler);
private:
void onMouseDown(ucl::Widget &widget, void *eventInfo);
return RES_FAIL;
}
- Result MediaItem::getThumbnailPath(ThumbnailPathGetCb cb) const
+ Result MediaItem::getThumbnailPath(const ThumbnailPathGetCb &cb) const
{
if (!(m_flags & FLAG_THUMBNAIL)) {
LOG_RETURN(RES_NOT_SUPPORTED, "Operation not supported!");
"util::createCircleSurface() failed!");
m_sysEventProvider.addEventHandler(
- DELEGATE(Instance::onSysEvent, this));
+ WEAK_DELEGATE(Instance::onSysEvent, asWeak(*this)));
return RES_OK;
}
{
DLOG("Creating NoContentPage.");
m_page = NoContentPage::Builder().setNaviframe(m_navi).
- build(DELEGATE(Instance::onPageExitRequest, this));
+ build(WEAK_DELEGATE(
+ Instance::onPageExitRequest, asWeak(*this)));
}
void Instance::createThumbnailPage()
m_page = ThumbnailPage::Builder().setNaviframe(m_navi).
setAlbum(m_gallery->getAlbum()).
- build(DELEGATE(Instance::onPageExitRequest, this));
+ build(WEAK_DELEGATE(
+ Instance::onPageExitRequest, asWeak(*this)));
}
void Instance::createViewerPage(const MediaItemSRef &media)
m_page = ViewerPage::Builder().setNaviframe(m_navi).
setMedia(media).
setExitOnZoomOut(false).
- build(DELEGATE(Instance::onPageExitRequest, this));
+ build(WEAK_DELEGATE(
+ Instance::onPageExitRequest, asWeak(*this)));
}
void Instance::createVideoPlayerPage(const MediaItemSRef &media)
DLOG("Creating VideoPlayerPage.");
m_page = VideoPlayerPage::Builder().setNaviframe(m_navi).
setMedia(media).
- build(DELEGATE(Instance::onPageExitRequest, this));
+ build(WEAK_DELEGATE(
+ Instance::onPageExitRequest, asWeak(*this)));
}
void Instance::onAlbumChanged()
}
NoContentPageWRef NoContentPage::Builder::build(
- const ExitRequestHandler onExitRequest) const
+ const ExitRequestHandler &onExitRequest) const
{
if (!onExitRequest) {
LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {},
NoContentPage::NoContentPage(RefCountObjBase &rc,
const NaviframeSRef &navi,
- const ExitRequestHandler onExitRequest) :
+ const ExitRequestHandler &onExitRequest) :
Page(rc, navi, onExitRequest)
{
}
using ucl::NAVI_TRANSITION_FINISHED;
Page::Page(RefCountObjBase &rc, const NaviframeSRef &navi,
- const ExitRequestHandler onExitRequest) :
+ const ExitRequestHandler &onExitRequest) :
Presenter(rc),
m_navi(navi),
m_onExitRequest(onExitRequest)
void Page::requestExit()
{
- m_onExitRequest(*this);
+ if (m_onExitRequest) {
+ m_onExitRequest(*this);
+ } else {
+ WLOG("m_onExitRequest is NULL");
+ exit();
+ }
}
void Page::updateActiveState()
namespace gallery {
using ucl::NaviframeSRef;
+ using ucl::RefCountAware;
// PreviewPage::Builder //
}
PreviewPageWRef PreviewPage::Builder::build(
- const ExitRequestHandler onExitRequest) const
+ const ExitRequestHandler &onExitRequest) const
{
if (!onExitRequest) {
LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {},
// PreviewPage::Item //
- class PreviewPage::Item : public NonCopyable {
+ class PreviewPage::Item : public RefCountAware {
public:
- Item(MediaItemSRef &&media, ImageGrid &imageGrid, const int itemIndex) :
+ Item(RefCountObjBase &rc, MediaItemSRef &&media,
+ ImageGrid &imageGrid, const int itemIndex) :
+ RefCountAware(&rc),
m_media(std::move(media)),
m_imageGrid(imageGrid),
m_index(itemIndex),
void realize()
{
FAIL_LOG(m_media->getThumbnailPath(
- DELEGATE(Item::onThumbnail, this)),
+ WEAK_DELEGATE(Item::onThumbnail, asWeak(*this))),
"getThumbnailPath() failed!");
}
PreviewPage::PreviewPage(RefCountObjBase &rc,
const NaviframeSRef &navi,
- const ExitRequestHandler onExitRequest,
+ const ExitRequestHandler &onExitRequest,
const IMediaAlbumSRef &album,
const bool selectModeStartup) :
Page(rc, navi, onExitRequest),
dynamicRefCast<ViewerPage>(m_page)) {
const auto mediaId = viewerPage->getMediaId();
const auto it = std::find_if(m_items.begin(), m_items.end(),
- [&mediaId](const ItemUPtr &item)
+ [&mediaId](const ItemSRef &item)
{
return (item->getMedia()->getId() == mediaId);
});
bool PreviewPage::onEachMedia(MediaItemSRef &&media)
{
- m_items.emplace_back(
- new Item(std::move(media), *m_imageGrid, m_items.size()));
+ m_items.emplace_back(makeShared<Item>(
+ std::move(media), *m_imageGrid, m_items.size()));
return true;
}
info.isImageLoadSizeFull);
}
- m_page = builder.build(DELEGATE(PreviewPage::onPageExitRequest, this));
+ m_page = builder.build(WEAK_DELEGATE(
+ PreviewPage::onPageExitRequest, asWeak(*this)));
}
void PreviewPage::onPageExitRequest(Page &page)
namespace gallery {
using ucl::NaviframeSRef;
+ using ucl::RefCountAware;
// ThumbnailPage::Builder //
}
ThumbnailPageWRef ThumbnailPage::Builder::build(
- const ExitRequestHandler onExitRequest) const
+ const ExitRequestHandler &onExitRequest) const
{
if (!onExitRequest) {
LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {},
// ThumbnailPage::RealizedItem //
- class ThumbnailPage::RealizedItem : public NonCopyable {
+ class ThumbnailPage::RealizedItem : public RefCountAware {
public:
- RealizedItem(ThumbnailPage &parent, const int index) :
+ RealizedItem(RefCountObjBase &rc,
+ ThumbnailPage &parent, const int index) :
+ RefCountAware(&rc),
m_parent(parent),
m_index(index)
{
FAIL_LOG(m_parent.m_mediaItems[m_index]->getThumbnailPath(
- DELEGATE(RealizedItem::onThumbnail, this)),
+ WEAK_DELEGATE(RealizedItem::onThumbnail, asWeak(this))),
"getThumbnailPath() failed!");
}
- ~RealizedItem()
+ virtual ~RealizedItem()
{
m_parent.m_mediaItems[m_index]->cancelThumbnailPathGet();
}
ThumbnailPage::ThumbnailPage(RefCountObjBase &rc,
const NaviframeSRef &navi,
- const ExitRequestHandler onExitRequest,
+ const ExitRequestHandler &onExitRequest,
const IMediaAlbumSRef &album) :
Page(rc, navi, onExitRequest),
m_album(album)
void ThumbnailPage::onItemRealized(const int itemIndex)
{
- m_realizedItems.emplace_back(new RealizedItem(*this, itemIndex));
+ m_realizedItems.emplace_back(
+ makeShared<RealizedItem>(*this, itemIndex));
}
void ThumbnailPage::onItemUnrealized(const int itemIndex)
{
const auto it = std::find_if(
m_realizedItems.begin(), m_realizedItems.end(),
- [itemIndex](const RealizedItemUPtr &item)
+ [itemIndex](const RealizedItemSRef &item)
{
return (item->getIndex() == itemIndex);
});
setStartItemIndex(itemIndex).
setSelectModeStartup(selectModeStartup).
setAutoSelectStartItem(true).
- build(DELEGATE(ThumbnailPage::onPageExitRequest, this));
+ build(WEAK_DELEGATE(
+ ThumbnailPage::onPageExitRequest, asWeak(*this)));
}
void ThumbnailPage::onMoreOptionClicked(MoreOptionsPresenter &sender,
setAlbum(m_album).
setStartItemIndex(m_imageGrid->getScrolledToItemIndex()).
setSelectModeStartup(true).
- build(DELEGATE(ThumbnailPage::onPageExitRequest, this));
+ build(WEAK_DELEGATE(
+ ThumbnailPage::onPageExitRequest, asWeak(*this)));
break;
default:
sender.setOpened(false);
}
VideoPlayerPageWRef VideoPlayerPage::Builder::build(
- const ExitRequestHandler onExitRequest) const
+ const ExitRequestHandler &onExitRequest) const
{
if (!onExitRequest) {
LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {},
VideoPlayerPage::VideoPlayerPage(RefCountObjBase &rc,
const NaviframeSRef &navi,
- const ExitRequestHandler onExitRequest,
+ const ExitRequestHandler &onExitRequest,
const MediaItemSRef &media) :
Page(rc, navi, onExitRequest),
m_media(media),
updatePlayTimeText();
m_touchParser = makeShared<TouchParser>(*m_image);
- m_touchParser->setTapHandler(
- DELEGATE(VideoPlayerPage::onTap, this));
+ m_touchParser->setTapHandler(WEAK_DELEGATE(
+ VideoPlayerPage::onTap, asWeak(*this)));
getWindow().addEventHandler(INSTANCE_PAUSED, WEAK_DELEGATE(
VideoPlayerPage::onInstancePaused, asWeak(*this)));
}
ViewerPageWRef ViewerPage::Builder::build(
- const ExitRequestHandler onExitRequest) const
+ const ExitRequestHandler &onExitRequest) const
{
if (!onExitRequest) {
LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {},
ViewerPage::ViewerPage(RefCountObjBase &rc,
const NaviframeSRef &navi,
- const ExitRequestHandler onExitRequest,
+ const ExitRequestHandler &onExitRequest,
const MediaItemSRef &media,
const bool exitOnZoomOut) :
Page(rc, navi, onExitRequest),
}
if (useThumb) {
- FAIL_RETURN(m_media->getThumbnailPath(DELEGATE(
- ViewerPage::onThumbnail, this)),
+ FAIL_RETURN(m_media->getThumbnailPath(WEAK_DELEGATE(
+ ViewerPage::onThumbnail, asWeak(*this))),
"m_media->getThumbnailPath() failed!");
} else if (!forceLoad) {
m_imageViewer->setLowResImagePath(m_media->getFilePath());
"Page::prepare() failed!");
m_touchParser = makeShared<TouchParser>(*m_imageViewer);
- m_touchParser->setDoubleTapHandler(
- DELEGATE(ViewerPage::onDoubleTap, this));
+ m_touchParser->setDoubleTapHandler(WEAK_DELEGATE(
+ ViewerPage::onDoubleTap, asWeak(*this)));
return RES_OK;
}
m_touchParser = makeShared<TouchParser>(m_btn);
m_touchParser->setDoubleTapHandler(
- DELEGATE(Item::onDoubleTap, this));
+ WEAK_DELEGATE(Item::onDoubleTap, asWeak(*this)));
m_touchParser->setTapAndHoldHandler(
- DELEGATE(Item::onTapAndHold, this));
+ WEAK_DELEGATE(Item::onTapAndHold, asWeak(*this)));
}
~Item()
stopHoldTimer();
}
- void TouchParser::setTapHandler(TapHandler handler)
+ void TouchParser::setTapHandler(const TapHandler &handler)
{
m_tapHandler = handler;
}
- void TouchParser::setDoubleTapHandler(TapHandler handler)
+ void TouchParser::setDoubleTapHandler(const TapHandler &handler)
{
m_doubleTapHandler = handler;
}
- void TouchParser::setTapAndHoldHandler(TapHandler handler)
+ void TouchParser::setTapAndHoldHandler(const TapHandler &handler)
{
m_tapAndHoldHandler = handler;
}
EventHandlerDelFunc delFunc);
~SysEventProvider();
- void addEventHandler(SysEventHandler handler);
- void delEventHandler(SysEventHandler handler);
+ void addEventHandler(const SysEventHandler &handler);
+ void delEventHandler(const SysEventHandler &handler);
private:
int addEventHandler(app_event_handler_h *handler,
namespace ucl {
- inline void SysEventProvider::addEventHandler(SysEventHandler handler)
+ inline void SysEventProvider::addEventHandler(
+ const SysEventHandler &handler)
{
m_event += handler;
}
- inline void SysEventProvider::delEventHandler(SysEventHandler handler)
+ inline void SysEventProvider::delEventHandler(
+ const SysEventHandler &handler)
{
m_event -= handler;
}
#include "ucl/util/types.h"
#include "ucl/util/delegation.h"
+#include "ucl/util/smartDelegation.h"
#include "ucl/misc/HashMap.h"
#include "ucl/misc/Event.h"
UPDATE_REQUESTED
};
- using SysEventHandler = Delegate<void(SysEvent)>;
+ using SysEventHandler = WeakDelegate<void(SysEvent)>;
using AutoAppCtrl = AutoHandle<app_control_h, int, app_control_destroy>;
}