TizenRefApp-8717 [Gallery] Update presenters according to new Presenter 38/134638/1
authorIgor Nazarov <i.nazarov@samsung.com>
Mon, 19 Jun 2017 16:10:16 +0000 (19:10 +0300)
committerIgor Nazarov <i.nazarov@samsung.com>
Mon, 19 Jun 2017 16:52:11 +0000 (19:52 +0300)
functionality

- Page::prepare() method updated;
- Presenters updated according to new changes (Page and Presenter);
- Minor bug fix.

Change-Id: I05402213d89b01a709a2149a260c5898e454d8d1

22 files changed:
inc/gallery/presenters/AtspiHighlightHelper.h
inc/gallery/presenters/Dialog.hpp
inc/gallery/presenters/MoreOptionsPresenter.h
inc/gallery/presenters/NoContentPage.h
inc/gallery/presenters/Page.h
inc/gallery/presenters/Page.hpp
inc/gallery/presenters/Presenter.h
inc/gallery/presenters/PreviewPage.h
inc/gallery/presenters/SelectModePresenter.h
inc/gallery/presenters/ThumbnailPage.h
inc/gallery/presenters/VideoPlayerPage.h
inc/gallery/presenters/ViewerPage.h
src/presenters/AtspiHighlightHelper.cpp
src/presenters/MoreOptionsPresenter.cpp
src/presenters/NoContentPage.cpp
src/presenters/Page.cpp
src/presenters/PreviewPage.cpp
src/presenters/ProcessingPresenter.cpp
src/presenters/SelectModePresenter.cpp
src/presenters/ThumbnailPage.cpp
src/presenters/VideoPlayerPage.cpp
src/presenters/ViewerPage.cpp

index ca908e0c07e6bbc41145215a5410d1e95c2c4fb9..4175d571a8830f1124bd4ab0868233a0692eea75 100644 (file)
@@ -29,7 +29,8 @@ namespace gallery {
                                ucl::Widget &widget, Elm_Atspi_Relation_Type flowRelation)>;
 
        public:
-               static AtspiHighlightHelperSRef newInstance(ucl::ElmWidget &rootWidget);
+               static AtspiHighlightHelperSRef newInstance(Presenter &parent,
+                               ucl::ElmWidget &rootWidget);
 
                void setEventHandler(EventHandler handler);
                void registerWidget(ucl::ElmWidget &widget);
@@ -39,7 +40,7 @@ namespace gallery {
                AtspiHighlightHelper(ucl::IRefCountObj &rc);
                virtual ~AtspiHighlightHelper();
 
-               ucl::Result prepare(ucl::ElmWidget &rootWidget);
+               ucl::Result prepare(Presenter &parent, ucl::ElmWidget &rootWidget);
 
        private:
                void onAtspiGesture(ucl::Widget &widget, void *eventInfo);
index 8542874eb92920531affcd819df799374ce44d62..35487b9307aef4b38c0a44b17f62b6385d066be1 100644 (file)
@@ -22,7 +22,7 @@ namespace gallery {
        inline ucl::Result Dialog::prepare(ucl::ElmWidget &parent,
                        const PopupType popupType, ON_PREPARE &&onPrepare)
        {
-               UCL_FAIL_RETURN(Presenter::prepare(parent),
+               UCL_FAIL_RETURN(Presenter::prepare(parent, PF_DEACTIVATOR),
                                "Presenter::prepare() failed!");
 
                UCL_FAIL_RETURN(createPopup(parent, popupType),
index de89f1ab566d0f24fb0fd5a7d421269cb1280521..88f45ca31cfaa273cd96c377c3861f035f4d32f5 100644 (file)
@@ -47,9 +47,11 @@ namespace gallery {
                        bool isEmpty() const;
                        Builder &clear();
                        Builder &addOption(Option option);
-                       MoreOptionsPresenterSRef build(ucl::ElmWidget &parent) const;
+                       Builder &setParentWidget(const ucl::ElmWidgetSRef &parentWidget);
+                       MoreOptionsPresenterSRef build(Presenter &parent) const;
                private:
                        ucl::SharedRef<MoreOptions> m_options;
+                       ucl::ElmWidgetSRef m_parentWidget;
                };
 
                class IListener : public ucl::Polymorphic {
@@ -81,7 +83,7 @@ namespace gallery {
                                const MoreOptionsCSRef &options);
                virtual ~MoreOptionsPresenter();
 
-               ucl::Result prepare(ucl::ElmWidget &parent);
+               ucl::Result prepare(Presenter &parent, ucl::ElmWidget &parentWidget);
                ucl::Result addItem(const Option &option);
 
                bool resetTimer(double timeout);
index c61fbf21baf2550959f5b23c289c13b6f330dd21..4b8575c2f7d78ff11f66c9a34b6a9e8439141460 100644 (file)
@@ -42,7 +42,7 @@ namespace gallery {
                                const ExitRequestHandler &onExitRequest);
                virtual ~NoContentPage();
 
-               ucl::Result prepare();
+               ucl::Result doPrepare(ucl::NaviItem &item);
        };
 }
 
index c1a1b295f2e6bb8bbc438b3c322438c50a5b03a8..201ccc736d52e05e5dc8cd010a7e0e8e9932b336 100644 (file)
@@ -53,8 +53,8 @@ namespace gallery {
                                const ExitRequestHandler &onExitRequest);
                virtual ~Page();
 
-               template <class ITEM_FACTORY>
-               ucl::Result prepare(ITEM_FACTORY &&makeItem);
+               template <class ON_PREPARE>
+               ucl::Result prepare(ON_PREPARE &&onPrepare);
 
                ucl::NaviItem getItem();
 
index b0e1ae7755b9d2cb67aed526681b668dcc10358f..7a8fdbd8ff9adaafefcd89390c510e377d009cf6 100644 (file)
 
 namespace gallery {
 
-       template <class ITEM_FACTORY>
-       inline ucl::Result Page::prepare(ITEM_FACTORY &&makeItem)
+       template <class ON_PREPARE>
+       inline ucl::Result Page::prepare(ON_PREPARE &&onPrepare)
        {
-               m_item = makeItem();
-               if (!m_item) {
-                       UCL_LOG_RETURN(ucl::RES_FAIL, "m_item is NULL");
-               }
+               UCL_FAIL_RETURN(Presenter::prepare(*m_navi),
+                               "Presenter::prepare() failed!");
+
+               UCL_FAIL_RETURN(onPrepare(m_item), "onPrepare() failed!");
+
                return preparePart2();
        }
 
index d021fa4bddc74b09ec87ae6d1d52985ca4c0e956..ee39f0e5b34556ab7fbbef225f449f5514f3b334 100644 (file)
@@ -51,7 +51,7 @@ namespace gallery {
 
                        PF_PASSIVE = 0,
                        PF_DEACTIVATOR = (PF_ADD_DEACTIVATOR_SOURCES | PF_ADD_SELF_EXCEPT),
-                       PF_DEFAULT = PF_DEACTIVATOR
+                       PF_DEFAULT = PF_ADD_DEACTIVATOR_SOURCES
                };
 
        protected:
index 63c546be8d89ef8faa3eb6639bfe6f105831fa31..38d97981d864e9ce81352629df4ddc616aa15e13 100644 (file)
@@ -68,7 +68,7 @@ namespace gallery {
                                const IMediaAlbumSRef &album, bool selectModeStartup);
                virtual ~PreviewPage();
 
-               ucl::Result prepare(int startItemIndex);
+               ucl::Result doPrepare(int startItemIndex, ucl::NaviItem &item);
                void showItem(int itemIndex);
                void selectItem(int itemIndex);
                int getSafeItemIndex(int itemIndex) const;
index 2ba0a56c23d4854b22ffa352b50cf620d4c1c190..3cf1fa94c1ed1e68630f2c201d26c1fdc8fd8bfe 100644 (file)
@@ -42,8 +42,10 @@ namespace gallery {
                public:
                        Builder();
                        Builder &setFlags(int flags);
-                       SelectModePresenterSRef build(PageContent &content) const;
+                       Builder &setPageContent(const PageContentSRef &content);
+                       SelectModePresenterSRef build(Presenter &parent) const;
                private:
+                       PageContentSRef m_content;
                        int m_flags;
                };
 
@@ -74,10 +76,10 @@ namespace gallery {
        private:
                friend class ucl::ReffedObj<SelectModePresenter>;
                SelectModePresenter(ucl::IRefCountObj &rc,
-                               PageContent &content, int flags);
+                               const PageContentSRef &content, int flags);
                virtual ~SelectModePresenter();
 
-               ucl::Result prepare();
+               ucl::Result prepare(Presenter &parent);
 
                void doUpdate();
 
index 914d759148cee171b99a08e9f3a6d7366269f75e..9ad821a1169d30868c216a84dcb9b8e4ec9a242e 100644 (file)
@@ -55,7 +55,7 @@ namespace gallery {
                                const IMediaAlbumSRef &album);
                virtual ~ThumbnailPage();
 
-               ucl::Result prepare();
+               ucl::Result doPrepare(ucl::NaviItem &item);
 
                void reload();
 
index 61df6f6b54ab18e0dfd9aa9a6475688018cf9f6e..8004c481afbe5908151b924132b3c1d8fad7fd63 100644 (file)
@@ -57,7 +57,7 @@ namespace gallery {
                                const MediaItemSRef &media);
                virtual ~VideoPlayerPage();
 
-               ucl::Result prepare();
+               ucl::Result doPrepare(ucl::NaviItem &item);
 
                ucl::Result prepareSoundManager();
 
index 82ecc9242d647fa1e3d7f8e10f07a9cad4a646af..3a577d9087288f50875aae4df86070ef7ca00e41 100644 (file)
@@ -66,7 +66,8 @@ namespace gallery {
                                const MediaItemSRef &media, bool exitOnZoomOut);
                virtual ~ViewerPage();
 
-               ucl::Result prepare(int imageLoadSize, bool isImageLoadSizeFull);
+               ucl::Result doPrepare(int imageLoadSize, bool isImageLoadSizeFull,
+                               ucl::NaviItem &item);
 
                void zoomIn(int originX, int originY);
 
@@ -76,11 +77,6 @@ namespace gallery {
 
                void onJobComplete();
 
-               // Presenter //
-
-               virtual void onActivateBy(const DeactivatorInfo &info) final override;
-               virtual void onDeactivateBy(const DeactivatorInfo &info) final override;
-
                // Page //
 
                virtual void onBackKey() final override;
index ad589c6c54714a6dd330fab498e352de3449cad5..d6f05c9684f04f533c888ae8ac26d8023504b4d4 100644 (file)
@@ -30,11 +30,11 @@ namespace gallery {
        using ucl::ATSPI_ON_GESTURE;
 
        AtspiHighlightHelperSRef AtspiHighlightHelper::newInstance(
-                       ElmWidget &rootWidget)
+                       Presenter &parent, ElmWidget &rootWidget)
        {
                auto result = makeShared<AtspiHighlightHelper>();
 
-               FAIL_RETURN_VALUE(result->prepare(rootWidget), {},
+               FAIL_RETURN_VALUE(result->prepare(parent, rootWidget), {},
                                "result->prepare() failed!");
 
                return result;
@@ -49,9 +49,10 @@ namespace gallery {
        {
        }
 
-       Result AtspiHighlightHelper::prepare(ElmWidget &rootWidget)
+       Result AtspiHighlightHelper::prepare(Presenter &parent,
+                       ElmWidget &rootWidget)
        {
-               FAIL_RETURN(Presenter::prepare(rootWidget),
+               FAIL_RETURN(Presenter::prepare(parent),
                                "Presenter::prepare() failed!");
 
                registerWidget(rootWidget);
index 260fa30500ee8a1c8c85c4d6914d9aedfb6940c1..6a20b2dbc0d46af76c2ddf6ac10ee9005dd4ae06 100644 (file)
@@ -82,16 +82,27 @@ namespace gallery {
                return *this;
        }
 
+       MoreOptionsPresenter::Builder &MoreOptionsPresenter::Builder::
+                       setParentWidget(const ElmWidgetSRef &parentWidget)
+       {
+               m_parentWidget = parentWidget;
+               return *this;
+       }
+
        MoreOptionsPresenterSRef MoreOptionsPresenter::Builder::build(
-                       ElmWidget &parent) const
+                       Presenter &parent) const
        {
                if (isEmpty()) {
                        LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {}, "Builder is empty!");
                }
+               if (!m_parentWidget) {
+                       LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {},
+                                       "m_parentWidget is NULL!");
+               }
 
                auto result = makeShared<MoreOptionsPresenter>(m_options);
 
-               FAIL_RETURN_VALUE(result->prepare(parent), {},
+               FAIL_RETURN_VALUE(result->prepare(parent, *m_parentWidget), {},
                                "result->prepare() failed!");
 
                return result;
@@ -116,11 +127,13 @@ namespace gallery {
                }
        }
 
-       Result MoreOptionsPresenter::prepare(ElmWidget &parent)
+       Result MoreOptionsPresenter::prepare(Presenter &parent,
+                       ElmWidget &parentWidget)
        {
-               FAIL_RETURN(Presenter::prepare(parent), "Presenter::prepare() failed!");
+               FAIL_RETURN(Presenter::prepare(parent, PF_DEACTIVATOR),
+                               "Presenter::prepare() failed!");
 
-               Evas_Object *const more = eext_more_option_add(parent);
+               Evas_Object *const more = eext_more_option_add(parentWidget);
                if (!more) {
                        LOG_RETURN(RES_FAIL, "eext_more_option_add() failed!");
                }
@@ -144,6 +157,8 @@ namespace gallery {
 
                deactivateBy(m_widget.get());
 
+               parent.addDeactivatorSource(*m_widget);
+
                return RES_OK;
        }
 
index 5dc69b3c3d41806e048c58ab142be5dc6ba4e625..597e51310f6a49e2d1bf23519eb4322ef29a87ed 100644 (file)
@@ -24,8 +24,9 @@
 
 namespace gallery {
 
-       using ucl::Layout;
+       using ucl::NaviItem;
        using ucl::NaviframeSRef;
+       using ucl::Layout;
 
        using ucl::LAYOUT_NO_CONTENTS;
        using ucl::PART_TITLE;
@@ -60,7 +61,11 @@ namespace gallery {
 
                auto result = makeShared<NoContentPage>(m_navi, onExitRequest);
 
-               FAIL_RETURN_VALUE(result->prepare(), {}, "result->prepare() failed!");
+               FAIL_RETURN_VALUE(result->prepare([&result](NaviItem &item)
+                       {
+                               return result->doPrepare(item);
+                       }),
+                       {}, "result->prepare() failed!");
 
                return result;
        }
@@ -78,7 +83,7 @@ namespace gallery {
        {
        }
 
-       Result NoContentPage::prepare()
+       Result NoContentPage::doPrepare(NaviItem &item)
        {
                const auto layout = Layout::Builder().
                                setIsOwner(true).
@@ -99,12 +104,10 @@ namespace gallery {
                layout->setText(STR_APP_NAME, PART_TITLE);
                layout->setText(STR_NO_PHOTOS);
 
-               FAIL_RETURN(Page::prepare(
-                       [this, &layout]()
-                       {
-                               return getNaviframe().push(*layout, NAVIFRAME_NO_CLIP);
-                       }),
-                       "Page::prepare() failed!");
+               item = getNaviframe().push(*layout, NAVIFRAME_NO_CLIP);
+               if (!item) {
+                       LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
+               }
 
                layout->setIsOwner(false);
 
index 43ed7686506b901fc271f5847fc75b0d3023db22..9ccf2ed1fd181c97d6c45870503bae1d8f781595 100644 (file)
@@ -49,8 +49,9 @@ namespace gallery {
 
        Result Page::preparePart2()
        {
-               FAIL_RETURN(Presenter::prepare(*m_navi),
-                               "Presenter::prepare() failed!");
+               if (!m_item) {
+                       UCL_LOG_RETURN(ucl::RES_FAIL, "m_item is NULL");
+               }
 
                Evas_Object *content = m_item.getContent();
                if (!content) {
index d21fb77af6d7c0b9536b2e663131c2ec7341fbe8..9071dacec4e4c55590b538401c8acf1aadfdebbe 100644 (file)
@@ -36,6 +36,7 @@ namespace gallery { namespace { namespace impl {
 
 namespace gallery {
 
+       using ucl::NaviItem;
        using ucl::NaviframeSRef;
        using ucl::RefCountAware;
 
@@ -104,8 +105,11 @@ namespace gallery {
                auto result = makeShared<PreviewPage>(
                                m_navi, onExitRequest, m_album, m_selectModeStartup);
 
-               FAIL_RETURN_VALUE(result->prepare(m_startItemIndex), {},
-                               "result->prepare() failed!");
+               FAIL_RETURN_VALUE(result->prepare([this, &result](NaviItem &item)
+                       {
+                               return result->doPrepare(m_startItemIndex, item);
+                       }),
+                       {}, "result->prepare() failed!");
 
                if (m_selectModeStartup && m_autoSelectStartItem) {
                        result->selectItem(m_startItemIndex);
@@ -152,7 +156,7 @@ namespace gallery {
                        }
                        m_isSelected = selected;
 
-                       if (m_imageGrid.isInSelectMode()) {
+                       if (m_imageGrid.isInSelectMode() && !m_imageGrid.isInTransition()) {
                                ImageGrid::ItemParams params = {};
                                addFlags(params);
                                m_imageGrid.updateItem(m_index, params);
@@ -278,7 +282,7 @@ namespace gallery {
                return getSafeItemIndex(m_imageGrid->getScrolledToItemIndex());
        }
 
-       Result PreviewPage::prepare(const int startItemIndex)
+       Result PreviewPage::doPrepare(const int startItemIndex, NaviItem &item)
        {
                m_content = PageContent::Builder().
                                setFlags(PageContent::FLAG_BOTTOM_BUTTON |
@@ -288,6 +292,7 @@ namespace gallery {
                if (!m_content) {
                        LOG_RETURN(RES_FAIL, "PageContent::build() failed!");
                }
+               setDeactivatorSink(m_content);
 
                m_imageGrid = ImageGrid::Builder().
                                setListener(asWeakThis<ImageGrid::IListener>(this)).
@@ -297,47 +302,44 @@ namespace gallery {
                if (!m_imageGrid) {
                        LOG_RETURN(RES_FAIL, "ImageGrid::build() failed!");
                }
-               ImageGrid::Unrealizer u(*m_imageGrid);
-
                m_content->set(*m_imageGrid);
+               ImageGrid::Unrealizer u(*m_imageGrid);
 
                m_more = MoreOptionsPresenter::Builder().
+                               setParentWidget(m_content).
                                addOption({impl::MORE_OPTION_ID_DELETE,
                                        STR_DELETE, nullptr,
                                        getImageTheme(ICON_MORE_OPT_DELETE)}).
-                               build(*m_content);
+                               build(*this);
                if (!m_more) {
                        LOG_RETURN(RES_FAIL, "MoreOptionsPresenter::build() failed!");
                }
-
                m_content->set(m_more->getWidget(), PageContent::Part::MORE_OPTIONS);
-               addDeactivatorSource(m_more->getWidget());
 
                m_smp = SelectModePresenter::Builder().
+                               setPageContent(m_content).
                                setFlags(SelectModePresenter::FLAG_NO_MORE_OPTIONS).
-                               build(*m_content);
+                               build(*this);
                if (!m_smp) {
                        LOG_RETURN(RES_FAIL, "SelectModePresenter::build() failed!");
                }
 
+               m_atspiHelper = AtspiHighlightHelper::newInstance(*this, getWindow());
+               if (!m_atspiHelper) {
+                       LOG_RETURN(RES_FAIL, "AtspiHighlightHelper::newInstance() failed!");
+               }
+
                FAIL_RETURN(m_album->forEachMedia(
                                DELEGATE(PreviewPage::onEachMedia, this)),
                                "m_album->forEachMedia() failed!");
 
-               FAIL_RETURN(Page::prepare(
-                       [this]()
-                       {
-                               return getNaviframe().push(*m_content, NAVIFRAME_NO_CLIP);
-                       }),
-                       "Page::prepare() failed!");
+               m_imageGrid->setItemCount(m_items.size());
 
-               m_atspiHelper = AtspiHighlightHelper::newInstance(getWindow());
-               if (!m_atspiHelper) {
-                       LOG_RETURN(RES_FAIL, "AtspiHighlightHelper::newInstance() failed!");
+               item = getNaviframe().push(*m_content, NAVIFRAME_NO_CLIP);
+               if (!item) {
+                       LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
                }
 
-               m_imageGrid->setItemCount(m_items.size());
-
                m_album->addChangeHandler(WEAK_DELEGATE(
                                PreviewPage::onAlbumChanged, asWeak(*this)));
 
@@ -413,15 +415,6 @@ namespace gallery {
                                        impl::BRING_IN_SCROLL_FRICTION);
                }
 
-               if (!info.isBroadcast) {
-                       m_more->activateBy(info.deactivator);
-                       if (m_atspiHelper) {
-                               m_atspiHelper->activateBy(info.deactivator);
-                       }
-               }
-
-               m_smp->activateBy(info.deactivator);
-
                if (isActive() || m_smp->isActive()) {
                        m_imageGrid->activateRotary();
                }
@@ -429,13 +422,6 @@ namespace gallery {
 
        void PreviewPage::onDeactivateBy(const DeactivatorInfo &info)
        {
-               if (!info.isBroadcast) {
-                       m_more->deactivateBy(info.deactivator);
-                       m_atspiHelper->deactivateBy(info.deactivator);
-               }
-
-               m_smp->deactivateBy(info.deactivator);
-
                if (!m_smp->isActive()) {
                        m_imageGrid->deactivateRotary();
                }
@@ -669,16 +655,16 @@ namespace gallery {
                        item->setSelected(false);
                }
 
+               m_imageGrid->setSelectModeEnabled(true);
+               if (m_imageGrid->isInTransition()) {
+                       deactivateBy(m_imageGrid.get());
+               }
+
                m_content->setMoreOptionsVisible(false);
 
                m_smp->setBottomButtonText(STR_DELETE_CAPS);
                m_smp->update(m_selectCount, m_items.size());
                m_smp->setVisible(true);
-
-               m_imageGrid->setSelectModeEnabled(true);
-               if (m_imageGrid->isInTransition()) {
-                       deactivateBy(m_imageGrid.get());
-               }
        }
 
        void PreviewPage::switchToNormalMode()
@@ -688,14 +674,14 @@ namespace gallery {
                }
                m_isInSelectMode = false;
 
-               m_content->setMoreOptionsVisible(true);
-
-               m_smp->setVisible(false);
-
                m_imageGrid->setSelectModeEnabled(false);
                if (m_imageGrid->isInTransition()) {
                        deactivateBy(m_imageGrid.get());
                }
+
+               m_content->setMoreOptionsVisible(true);
+
+               m_smp->setVisible(false);
        }
 
        void PreviewPage::toggleItemSelected(const int itemIndex)
index 619f122d67279caebd2d0b88c006640485ad47c1..3d1ad21ff927389802051163cf28374e91df6ef1 100644 (file)
@@ -107,7 +107,7 @@ namespace gallery {
                        const TString &processingText,
                        const bool forceProgress)
        {
-               FAIL_RETURN(Presenter::prepare(parent),
+               FAIL_RETURN(Presenter::prepare(parent, PF_PASSIVE),
                                "Presenter::prepare() failed!");
 
                FAIL_RETURN(createWidget(parent, processingText),
index 0c0e8f152fc9a11b54a87e032f6b08715c597ddb..b9b333cfedc4b735d005444405a88324a1272e49 100644 (file)
@@ -52,12 +52,23 @@ namespace gallery {
                return *this;
        }
 
+       SelectModePresenter::Builder &SelectModePresenter::Builder::
+                       setPageContent(const PageContentSRef &content)
+       {
+               m_content = content;
+               return *this;
+       }
+
        SelectModePresenterSRef SelectModePresenter::Builder::build(
-                       PageContent &content) const
+                       Presenter &parent) const
        {
-               auto result = makeShared<SelectModePresenter>(content, m_flags);
+               if (!m_content) {
+                       LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {}, "m_content is NULL!");
+               }
 
-               FAIL_RETURN_VALUE(result->prepare(), {},
+               auto result = makeShared<SelectModePresenter>(m_content, m_flags);
+
+               FAIL_RETURN_VALUE(result->prepare(parent), {},
                                "result->prepare() failed!");
 
                return result;
@@ -66,9 +77,9 @@ namespace gallery {
        // SelectModePresenter //
 
        SelectModePresenter::SelectModePresenter(IRefCountObj &rc,
-                       PageContent &content, const int flags) :
+                       const PageContentSRef &content, const int flags) :
                Presenter(rc),
-               m_content(asShared(content)),
+               m_content(content),
                m_flags(flags),
                m_totalCount(0),
                m_selectCount(0),
@@ -86,15 +97,16 @@ namespace gallery {
                deletePopup();
        }
 
-       Result SelectModePresenter::prepare()
+       Result SelectModePresenter::prepare(Presenter &parent)
        {
-               FAIL_RETURN(Presenter::prepare(*m_content),
+               FAIL_RETURN(Presenter::prepare(parent, PF_DEACTIVATOR),
                                "Presenter::prepare() failed!");
 
                m_selectButton = makeShared<StyledWidget>(
                                elm_button_add(*m_content), true);
                m_selectButton->setStyle(impl::SELECT_BTN_STYLE);
                m_content->set(*m_selectButton, PageContent::Part::SELECT_BUTTON);
+               m_content->setSelectButtonVisible(false);
                show(*m_selectButton);
 
                m_selectButton->addEventHandler(BTN_CLICKED, WEAK_DELEGATE(
@@ -115,6 +127,8 @@ namespace gallery {
                                        SelectModePresenter::onRotary), this);
                }
 
+               deactivateBy(m_selectButton.get());
+
                return RES_OK;
        }
 
index c6defbb446ff79125427be3f4e955b7feaff67df..398d7d652f16f4ce7439572894bdaedd11077f77 100644 (file)
@@ -36,6 +36,7 @@ namespace gallery { namespace { namespace impl {
 
 namespace gallery {
 
+       using ucl::NaviItem;
        using ucl::NaviframeSRef;
        using ucl::RefCountAware;
 
@@ -80,7 +81,11 @@ namespace gallery {
                auto result = makeShared<ThumbnailPage>(
                                m_navi, onExitRequest, m_album);
 
-               FAIL_RETURN_VALUE(result->prepare(), {}, "result->prepare() failed!");
+               FAIL_RETURN_VALUE(result->prepare([&result](NaviItem &item)
+                       {
+                               return result->doPrepare(item);
+                       }),
+                       {}, "result->prepare() failed!");
 
                return result;
        }
@@ -169,7 +174,7 @@ namespace gallery {
                m_imageGrid->setItemCount(m_mediaItems.size());
        }
 
-       Result ThumbnailPage::prepare()
+       Result ThumbnailPage::doPrepare(NaviItem &item)
        {
                m_content = PageContent::Builder().
                                setFlags(PageContent::FLAG_MORE_OPTIONS).
@@ -177,6 +182,7 @@ namespace gallery {
                if (!m_content) {
                        LOG_RETURN(RES_FAIL, "PageContent::build() failed!");
                }
+               setDeactivatorSink(m_content);
 
                m_imageGrid = ImageGrid::Builder().
                                setListener(asWeakThis<ImageGrid::IListener>(this)).
@@ -185,39 +191,35 @@ namespace gallery {
                if (!m_imageGrid) {
                        LOG_RETURN(RES_FAIL, "ImageGrid::build() failed!");
                }
-
                m_content->set(*m_imageGrid);
 
                m_more = MoreOptionsPresenter::Builder().
+                               setParentWidget(m_content).
                                addOption({impl::MORE_OPTION_ID_DELETE,
                                        STR_DELETE, nullptr,
                                        getImageTheme(ICON_MORE_OPT_DELETE)}).
-                               build(*m_content);
+                               build(*this);
                if (!m_more) {
                        LOG_RETURN(RES_FAIL, "MoreOptionsPresenter::build() failed!");
                }
-
                m_content->set(m_more->getWidget(), PageContent::Part::MORE_OPTIONS);
-               addDeactivatorSource(m_more->getWidget());
+
+               m_atspiHelper = AtspiHighlightHelper::newInstance(*this, getWindow());
+               if (!m_atspiHelper) {
+                       LOG_RETURN(RES_FAIL, "AtspiHighlightHelper::newInstance() failed!");
+               }
 
                FAIL_RETURN(m_album->forEachMedia(
                                DELEGATE(ThumbnailPage::onEachMedia, this)),
                                "m_album->forEachMedia() failed!");
 
-               FAIL_RETURN(Page::prepare(
-                       [this]()
-                       {
-                               return getNaviframe().push(*m_content, NAVIFRAME_NO_CLIP);
-                       }),
-                       "Page::prepare() failed!");
+               m_imageGrid->setItemCount(m_mediaItems.size());
 
-               m_atspiHelper = AtspiHighlightHelper::newInstance(getWindow());
-               if (!m_atspiHelper) {
-                       LOG_RETURN(RES_FAIL, "AtspiHighlightHelper::newInstance() failed!");
+               item = getNaviframe().push(*m_content, NAVIFRAME_NO_CLIP);
+               if (!item) {
+                       LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
                }
 
-               m_imageGrid->setItemCount(m_mediaItems.size());
-
                m_album->addChangeHandler(WEAK_DELEGATE(
                                ThumbnailPage::onAlbumChanged, asWeak(*this)));
 
@@ -251,13 +253,6 @@ namespace gallery {
                                        impl::BRING_IN_SCROLL_FRICTION);
                }
 
-               if (!info.isBroadcast) {
-                       m_more->activateBy(info.deactivator);
-                       if (m_atspiHelper) {
-                               m_atspiHelper->activateBy(info.deactivator);
-                       }
-               }
-
                if (isActive()) {
                        m_imageGrid->activateRotary();
                }
@@ -265,11 +260,6 @@ namespace gallery {
 
        void ThumbnailPage::onDeactivateBy(const DeactivatorInfo &info)
        {
-               if (!info.isBroadcast) {
-                       m_more->deactivateBy(info.deactivator);
-                       m_atspiHelper->deactivateBy(info.deactivator);
-               }
-
                m_imageGrid->deactivateRotary();
        }
 
index cc0bf227863eccf85334f01f8061fb712ddc47bc..cbc1192044a7ef5cdc953bac71cc3f16f7a86692 100644 (file)
@@ -77,8 +77,9 @@ namespace gallery {
 
        using ucl::AutoAppCtrl;
 
-       using ucl::Layout;
+       using ucl::NaviItem;
        using ucl::NaviframeSRef;
+       using ucl::Layout;
        using ucl::StyledWidgetSRef;
        using ucl::WidgetEventHandler;
 
@@ -126,7 +127,11 @@ namespace gallery {
                auto result = makeShared<VideoPlayerPage>(
                                m_navi, onExitRequest, m_media);
 
-               FAIL_RETURN_VALUE(result->prepare(), {}, "result->prepare() failed!");
+               FAIL_RETURN_VALUE(result->prepare([&result](NaviItem &item)
+                       {
+                               return result->doPrepare(item);
+                       }),
+                       {}, "result->prepare() failed!");
 
                return result;
        }
@@ -184,7 +189,7 @@ namespace gallery {
                }
        }
 
-       Result VideoPlayerPage::prepare()
+       Result VideoPlayerPage::doPrepare(NaviItem &item)
        {
                m_content = Layout::Builder().
                                setTheme(impl::LAYOUT_VIDEO_PLAYER).
@@ -194,12 +199,10 @@ namespace gallery {
                        LOG_RETURN(RES_FAIL, "m_content is NULL");
                }
 
-               FAIL_RETURN(Page::prepare(
-                       [this]()
-                       {
-                               return getNaviframe().push(*m_content, NAVIFRAME_NO_CLIP);
-                       }),
-                       "Page::prepare() failed!");
+               item = getNaviframe().push(*m_content, NAVIFRAME_NO_CLIP);
+               if (!item) {
+                       LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
+               }
 
                createImage();
 
index 3dbd236c693154ae41881aeb6e93183ec1c14919..87135b83aef5809e2542b4de2ba51978a70572c5 100644 (file)
@@ -29,6 +29,7 @@ namespace gallery { namespace { namespace impl {
 
 namespace gallery {
 
+       using ucl::NaviItem;
        using ucl::NaviframeSRef;
 
        // ViewerPage::Builder //
@@ -102,8 +103,12 @@ namespace gallery {
                auto result = makeShared<ViewerPage>(
                                m_navi, onExitRequest, m_media, m_exitOnZoomOut);
 
-               FAIL_RETURN_VALUE(result->prepare(m_imageLoadSize,
-                               m_isImageLoadSizeFull), {}, "result->prepare() failed!");
+               FAIL_RETURN_VALUE(result->prepare([this, &result](NaviItem &item)
+                       {
+                               return result->doPrepare(m_imageLoadSize,
+                                               m_isImageLoadSizeFull, item);
+                       }),
+                       {}, "result->prepare() failed!");
 
                if ((m_zoomInX >= 0) && (m_zoomInY >= 0)) {
                        result->zoomIn(m_zoomInX, m_zoomInY);
@@ -132,8 +137,8 @@ namespace gallery {
                }
        }
 
-       Result ViewerPage::prepare(const int imageLoadSize,
-                       const bool isImageLoadSizeFull)
+       Result ViewerPage::doPrepare(const int imageLoadSize,
+                       const bool isImageLoadSizeFull, NaviItem &item)
        {
                const int mediaFlags = m_media->getFlags();
                const bool canSave = (mediaFlags & MediaItem::FLAG_SAVE);
@@ -159,22 +164,23 @@ namespace gallery {
                        if (!m_content) {
                                LOG_RETURN(RES_FAIL, "PageContent::build() failed!");
                        }
+                       setDeactivatorSink(m_content);
 
                        rootWidget = m_content.get();
                        m_content->set(*m_imageViewer);
 
                        m_more = MoreOptionsPresenter::Builder().
+                                       setParentWidget(m_content).
                                        addOption({impl::MORE_OPTION_ID_SAVE,
                                                STR_SAVE_TO_GEAR, nullptr,
                                                getImageTheme(ICON_MORE_OPT_SAVE)}).
-                                       build(*m_content);
+                                       build(*this);
                        if (!m_more) {
                                LOG_RETURN(RES_FAIL, "MoreOptionsPresenter::build() failed!");
                        }
 
                        m_content->set(m_more->getWidget(),
                                        PageContent::Part::MORE_OPTIONS);
-                       addDeactivatorSource(m_more->getWidget());
 
                        m_more->setListener(asWeakThis<
                                        MoreOptionsPresenter::IListener>(this));
@@ -191,17 +197,16 @@ namespace gallery {
                m_imageViewer->addEventHandler(IMAGE_VIEWER_ZOOM_END,
                                WEAK_DELEGATE(ViewerPage::onZoomEnd, asWeak(*this)));
 
-               FAIL_RETURN(Page::prepare(
-                       [this, rootWidget]()
-                       {
-                               const auto topItem = getNaviframe().getTopItem();
-                               if (topItem) {
-                                       return getNaviframe().insertAfter(topItem,
-                                                       *rootWidget, NAVIFRAME_NO_CLIP);
-                               }
-                               return getNaviframe().push(*rootWidget, NAVIFRAME_NO_CLIP);
-                       }),
-                       "Page::prepare() failed!");
+               const auto topItem = getNaviframe().getTopItem();
+               if (topItem) {
+                       item = getNaviframe().insertAfter(topItem,
+                                       *rootWidget, NAVIFRAME_NO_CLIP);
+               } else {
+                       item = getNaviframe().push(*rootWidget, NAVIFRAME_NO_CLIP);
+               }
+               if (!item) {
+                       LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
+               }
 
                m_touchParser = makeShared<TouchParser>(*m_imageViewer);
                m_touchParser->setDoubleTapHandler(WEAK_DELEGATE(
@@ -246,20 +251,6 @@ namespace gallery {
                }
        }
 
-       void ViewerPage::onActivateBy(const DeactivatorInfo &info)
-       {
-               if (m_more && (info.deactivator == &getNaviframe())) {
-                       m_more->activateBy(info.deactivator);
-               }
-       }
-
-       void ViewerPage::onDeactivateBy(const DeactivatorInfo &info)
-       {
-               if (m_more && (info.deactivator == &getNaviframe())) {
-                       m_more->deactivateBy(info.deactivator);
-               }
-       }
-
        void ViewerPage::onBackKey()
        {
                if (m_imageViewer->isZoomedOut()) {