Added possibility to reject "checked" state change in GenlistCheckItem. 40/62640/1
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Thu, 17 Mar 2016 07:35:41 +0000 (09:35 +0200)
committerEugene Kurzberg <i.kurtsberg@samsung.com>
Thu, 17 Mar 2016 07:40:08 +0000 (09:40 +0200)
Change-Id: Ia575e13297c2ef4643ed8f131146ed639102d707
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
lib-apps-common/inc/Ui/GenlistCheckItem.h
lib-apps-common/src/Ui/GenlistCheckItem.cpp
lib-common/inc/Contacts/SelectView.h
lib-common/src/Contacts/SelectView.cpp

index 3117fc0..bb3f879 100644 (file)
@@ -31,8 +31,9 @@ namespace Ui
                /**
                 * @brief Item check callback.
                 * @param[in]   Whether item is checked
+                * @return Whether item's state should be changed.
                 */
-               typedef std::function<void(bool)> CheckCallback;
+               typedef std::function<bool(bool)> CheckCallback;
 
                GenlistCheckItem();
 
@@ -71,14 +72,15 @@ namespace Ui
                virtual void onSelected() override;
 
                /**
-                * @brief Called when item is checked or unchecked.
+                * @brief Called when item's "checked" state changes.
                 * @param[in]   isChecked   Whether item is checked
+                * @return Whether item's state should be changed.
                 */
-               virtual void onChecked(bool isChecked) { }
+               virtual bool onChecked(bool isChecked) { return true; }
 
        private:
-               void onChecked();
                void onCheckChanged(Evas_Object *check, void *eventInfo);
+               bool notifyCheck(bool isChecked);
 
                std::string m_CheckPart;
                Eina_Bool m_IsChecked;
index 21d0979..a817ecd 100644 (file)
@@ -65,20 +65,27 @@ Evas_Object *GenlistCheckItem::getContent(Evas_Object *parent, const char *part)
 
 void GenlistCheckItem::onSelected()
 {
-       setChecked(!m_IsChecked);
-       onChecked();
+       if (notifyCheck(!m_IsChecked)) {
+               setChecked(!m_IsChecked);
+       }
 }
 
-void GenlistCheckItem::onChecked()
+void GenlistCheckItem::onCheckChanged(Evas_Object *check, void *eventInfo)
 {
-       onChecked(m_IsChecked);
-
-       if (m_OnChecked) {
-               m_OnChecked(m_IsChecked);
+       if (!notifyCheck(m_IsChecked)) {
+               elm_check_state_set(check, !m_IsChecked);
        }
 }
 
-void GenlistCheckItem::onCheckChanged(Evas_Object *check, void *eventInfo)
+bool GenlistCheckItem::notifyCheck(bool isChecked)
 {
-       onChecked();
+       if (!onChecked(isChecked)) {
+               return false;
+       }
+
+       if (m_OnChecked && !m_OnChecked(isChecked)) {
+               return false;
+       }
+
+       return true;
 }
index be43353..b27b67d 100644 (file)
@@ -149,8 +149,8 @@ namespace Contacts
                void destroyPageButtons();
 
                void onItemSelected(SelectItem *item);
-               void onItemChecked(SelectItem *item, bool isChecked);
-               void onSelectAllChecked(bool isChecked);
+               bool onItemChecked(SelectItem *item, bool isChecked);
+               bool onSelectAllChecked(bool isChecked);
                void onSelectAllDestroy();
 
                void onDonePressed(Evas_Object *button, void *eventInfo);
index 92b5301..871f013 100644 (file)
@@ -284,16 +284,17 @@ void SelectView::onItemSelected(SelectItem *item)
        }
 }
 
-void SelectView::onItemChecked(SelectItem *item, bool isChecked)
+bool SelectView::onItemChecked(SelectItem *item, bool isChecked)
 {
        if (m_SelectLimit && m_SelectCount == m_SelectLimit && isChecked) {
-               item->setChecked(false);
-       } else {
-               updateSelectCount(isChecked ? CountIncrement : CountDecrement);
+               return false;
        }
+
+       updateSelectCount(isChecked ? CountIncrement : CountDecrement);
+       return true;
 }
 
-void SelectView::onSelectAllChecked(bool isChecked)
+bool SelectView::onSelectAllChecked(bool isChecked)
 {
        for (auto &&item : m_Items) {
                item->setChecked(isChecked);
@@ -302,6 +303,8 @@ void SelectView::onSelectAllChecked(bool isChecked)
        m_SelectCount = isChecked ? m_Items.size() : 0;
        updatePageTitle();
        updateDoneButtonState();
+
+       return true;
 }
 
 void SelectView::onSelectAllDestroy()