Refact popups. 98/128298/1
authorDenis Dolzhenko <d.dolzhenko@samsung.com>
Mon, 8 May 2017 11:16:20 +0000 (14:16 +0300)
committerDenis Dolzhenko <d.dolzhenko@samsung.com>
Mon, 8 May 2017 11:24:53 +0000 (14:24 +0300)
Change-Id: Ifbe1af7f7c2476e7eea98afeb55fc696a91c063a
Signed-off-by: Denis Dolzhenko <d.dolzhenko@samsung.com>
src/Common/View/inc/BasePopup.h
src/Common/View/inc/Popup.h
src/Common/View/inc/PopupManager.h
src/Common/View/inc/View.h
src/Common/View/src/BasePopup.cpp
src/Common/View/src/Popup.cpp
src/Common/View/src/PopupManager.cpp
src/Common/View/src/ToastPopup.cpp
src/MsgThread/Controller/inc/MsgThreadFrame.h
src/MsgThread/Controller/src/MsgThreadFrame.cpp

index 08c6ff3a0f8764ef7d9636bc6b0b05abb4fafad9..f8b1c256ee218b277d11ce8784a98a3e186c97d5 100644 (file)
@@ -26,11 +26,13 @@ namespace Msg {
     class BasePopup
         : public View {
 
+            friend class PopupManager;
+
         public:
             BasePopup(Evas_Object *popup);
             virtual ~BasePopup();
 
-            void destroy();
+            void destroy(bool anim = true);
 
             void setDismissByOutsideTapFlag(bool value);
             bool getDismissByOutsideTapFlag() const;
@@ -43,6 +45,7 @@ namespace Msg {
 
         protected:
             static Evas_Object *getWindow();
+            virtual void dismiss();
 
         private:
             bool m_OutsideTapDismiss;
index da3b8e15bf4d33e4f801db27393780edb8ff2622..78355136e38225af84bc181a61cba19587b78262 100644 (file)
@@ -35,6 +35,7 @@ namespace Msg {
             Popup();
             virtual ~Popup();
 
+
             void show(bool deferred = true);
             void setTitle(const TText &title);
             void setTimeOut(double timeout = defaultTimeOut);
@@ -48,13 +49,14 @@ namespace Msg {
         protected:
             Evas_Object *addButton(const char *part, PopupButtonCb buttonCb, void *userData);
             Evas_Object *addButton(const TText &text, const char *iconName, const char *part, PopupButtonCb buttonCb, void *userData);
-
+            void dismiss() override;
 
         private:
             Evas_Object *createIcon(Evas_Object *) const;
             static void on_button_clicked(void *data, Evas_Object *obj, void *event_info);
             static void on_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info);
             static void on_timeout_cb(void *data, Evas_Object *obj, void *event_info);
+            static void on_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
 
         private:
             Ecore_Idler *m_pShowIdler;
index 562b22ba29304c96cc51242412c199c779e2657e..9977c56dee0fce48aab79508e079448a016ad297 100644 (file)
@@ -46,8 +46,8 @@ namespace Msg {
              */
             Window &getWindow() const;
 
-            void pop(void *id = nullptr);
-            void pop(BasePopup *popup);
+            void pop(void *id = nullptr, bool anim = true);
+            void pop(BasePopup *popup, bool anim = true);
             void push(BasePopup &popup, void *id = nullptr);
             BasePopup *getTop() const;
 
@@ -58,7 +58,7 @@ namespace Msg {
 
         private:
             void onHwBackButtonClicked(Evas_Object *obj, void *eventInfo);
-            void destroyPopup();
+            void destroyPopup(bool anim);
 
         private:
             BasePopup *m_pPopup;
index dee8a866af7fc719f6d3e306175297e734b26805..f3b91d72bfcc4a4c6a8ca9b1c02474bca1fa201a 100644 (file)
@@ -228,6 +228,7 @@ namespace Msg
             void addSmartCb(const char *event, Evas_Smart_Cb func, const void *data);
             void addSignalCb(const char *emission, const char *source, Edje_Signal_Cb func, void *data);
             void addHwButtonEvent(Eext_Callback_Type cbType, Eext_Event_Cb cb, void *data);
+            void HwButtonEvent(Eext_Callback_Type cbType, Eext_Event_Cb cb, void *data);
 
             static void addHwButtonEvent(Evas_Object *obj, Eext_Callback_Type cbType, Eext_Event_Cb cb, void *data);
             static void addEventCb(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data);
index a326f65830e1d9d5db92f87077ef4be3510cc65c..33ce49e5a390a7b9e6883170ba708768c2fb873f 100644 (file)
@@ -34,9 +34,14 @@ BasePopup::~BasePopup()
 {
 }
 
-void BasePopup::destroy()
+void BasePopup::destroy(bool anim)
 {
-    App::getInst().getPopupManager().pop(this);
+    App::getInst().getPopupManager().pop(this, anim);
+}
+
+void BasePopup::dismiss()
+{
+    View::destroy();
 }
 
 Evas_Object *BasePopup::getWindow()
index 094d1423b58162d78a06d7e93e6ca0636514c853..b53e2ab811a0c1f2182d124bab0fd595c74ff4cb 100644 (file)
@@ -40,6 +40,7 @@ Popup::Popup()
 {
     addSmartCb("block,clicked", on_popup_block_clicked_cb, this);
     addSmartCb("timeout", on_timeout_cb, this);
+    addSmartCb("dismissed", on_dismissed_cb, this);
     elm_popup_orient_set(getEo(), ELM_POPUP_ORIENT_CENTER);
     expand();
 }
@@ -126,6 +127,11 @@ void Popup::setTitle(const TText &title)
     setText(title, titlePart);
 }
 
+void Popup::dismiss()
+{
+    elm_popup_dismiss(getEo());
+}
+
 void Popup::show(bool deferred)
 {
     if (!deferred) {
@@ -165,10 +171,18 @@ void Popup::on_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_
 
 void Popup::on_timeout_cb(void *data, Evas_Object *obj, void *event_info)
 {
+    MSG_LOG("");
     auto *popup = static_cast<Popup*>(data);
     popup->destroy();
 }
 
+void Popup::on_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+    MSG_LOG("");
+    auto *popup = static_cast<Popup*>(data);
+    popup->View::destroy();
+}
+
 void Popup::defaultButtonCb(Popup &popup, void *userData)
 {
     popup.destroy();
index 39a972c9ca84140b03c9951ad67e957131335d69..2816cb3181de68d11e936fd5e2e141eb5cc4dabf 100644 (file)
@@ -38,22 +38,22 @@ PopupManager::~PopupManager()
 {
 }
 
-void PopupManager::pop(void *id)
+void PopupManager::pop(void *id, bool anim)
 {
     if (!id || (id == m_pPopupId))
-        destroyPopup();
+        destroyPopup(anim);
 }
 
-void PopupManager::pop(BasePopup *popup)
+void PopupManager::pop(BasePopup *popup, bool anim)
 {
     if (!popup || (popup == m_pPopup))
-        destroyPopup();
+        destroyPopup(anim);
 }
 
-void PopupManager::destroyPopup()
+void PopupManager::destroyPopup(bool anim)
 {
     if (m_pPopup) {
-        m_pPopup->View::destroy();
+        anim ? m_pPopup->dismiss() : m_pPopup->destroy();
         m_pPopup = nullptr;
     }
     m_pPopupId = nullptr;
@@ -76,7 +76,10 @@ BasePopup *PopupManager::getTop() const
 
 void PopupManager::onHwBackButtonClicked(Evas_Object *obj, void *eventInfo)
 {
-    if (m_pPopup && m_pPopup->getDismissByBackButtonFlag())
+    MSG_LOG("");
+    if (m_pPopup &&
+        m_pPopup->getEo() == obj &&
+        m_pPopup->getDismissByBackButtonFlag())
         pop();
 }
 
index c20132dbcb3ef6fb6037e2b67de5954e8e759f79..c6e3515a09aa83fe234d65b80ce879728fdcc8af 100644 (file)
@@ -34,6 +34,8 @@ ToastPopup::ToastPopup(double timeout)
 {
     setStyle("toast/circle");
     setTimeOut(timeout);
+    elm_popup_orient_set(getEo(), ELM_POPUP_ORIENT_BOTTOM);
+    evas_object_size_hint_weight_set(getEo(), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
 }
 
 ToastPopup::~ToastPopup()
index 50226d4cd95468868992177e917ac692202a23d1..535d0af1fdc1ce9c62ca53b82df8174917e9841a 100644 (file)
@@ -58,6 +58,7 @@ namespace Msg {
             void setNormalMode();
 
             void showSelectPopup();
+            void showDelPopup();
             void hideSelectPopup();
             void navigateToConvFrame(ThreadId id);
             void navigateToComposeFrame();
index 8423863bb98a6b98e51ce806587ae35abae8fcdf..f758730a8cdb11a95552200792cc13db6c6fe6ab 100644 (file)
@@ -18,7 +18,6 @@
 #include "Popup.h"
 #include "SelectCtxPopup.h"
 #include "StandardPopup.h"
-#include "ToastPopup.h"
 #include "IconTextPopup.h"
 #include "MsgThreadFrame.h"
 #include "Callback.h"
@@ -192,6 +191,15 @@ void MsgThreadFrame::hideSelectPopup()
         m_pSelectPopup->destroy();
 }
 
+void MsgThreadFrame::showDelPopup()
+{
+    auto *popup = new IconTextPopup;
+    popup->setIcon(IconTextPopup::CheckIcon);
+    popup->setText(msgt("WDS_ALM_TPOP_DELETED_ABB"));
+    popup->setTimeOut();
+    popup->show();
+}
+
 void MsgThreadFrame::navigateToConvFrame(ThreadId id)
 {
     auto *frame = new ConvFrame(getParent());
@@ -224,13 +232,8 @@ void MsgThreadFrame::onHwBackButtonPreessed(Evas_Object *obj, void *event_info)
 void MsgThreadFrame::onDelButtonClicked(Evas_Object *obj, void *event)
 {
     MSG_LOG("");
-    if (m_pThreadList->deleteCheckedItems()) {
-        auto *popup = new IconTextPopup;
-        popup->setIcon(IconTextPopup::CheckIcon);
-        popup->setText(msgt("WDS_ALM_TPOP_DELETED_ABB"));
-        popup->setTimeOut();
-        popup->show();
-    }
+    if (m_pThreadList->deleteCheckedItems())
+        showDelPopup();
     setNormalMode();
 }