Add possibility to disable buttons in toolbar 77/210677/1
authorOskar Chodowicz <o.chodowicz@samsung.com>
Tue, 23 Jul 2019 14:28:13 +0000 (16:28 +0200)
committerOskar Chodowicz <o.chodowicz@samsung.com>
Tue, 23 Jul 2019 14:28:13 +0000 (16:28 +0200)
Change-Id: Ib7af9a3be5fedbc1224dc050ca4246545b3ccf2e

src/presenter/UpdateAccessoriesSwitchPagePresenter.cpp
src/ui/Toolbar.cpp
src/ui/Toolbar.hpp
src/view/ListView.cpp

index f6b6ae45258d995fc019ba516ec4ef8e73f75854..74958e91b1f4df4000bc430988823357aa7268c3 100644 (file)
@@ -13,10 +13,8 @@ UpdateAccessoriesSwitchPagePresenter::UpdateAccessoriesSwitchPagePresenter(std::
        saveAction_ = addAction(std::make_unique<Action>("saveAction",
                "IDS_ACCS_UNIVERSAL_SWITCH_SAVE",
                [this](auto action) {
-                       if (!entryItem_->entryText_.value().empty()) {
-                               model_.updateSwitch(SwitchConfigurationItem{switchId_, entryItem_->entryText_.value(), activityId_});
-                               Singleton<AppContext>::instance().pop();
-                       }
+                       model_.updateSwitch(SwitchConfigurationItem{switchId_, entryItem_->entryText_.value(), activityId_});
+                       Singleton<AppContext>::instance().pop();
                }));
        groups_.emplace_back("");
        auto &items = groups_.back().items_;
@@ -25,7 +23,14 @@ UpdateAccessoriesSwitchPagePresenter::UpdateAccessoriesSwitchPagePresenter(std::
                "IDS_ACCS_UNIVERSAL_SWITCH_NAME",
                std::string{},
                std::function<void(ListItem *)>{},
-               ListItem::WidgetType::entry));
+               ListItem::WidgetType::entry,
+               std::function<void(ListItem *)>{},
+               [this](auto item) {
+                       if (item->entryText_.value().empty())
+                               saveAction_->enabled_ = false;
+                       else
+                               saveAction_->enabled_ = true;
+               }));
 
        entryItem_ = items.back().get();
        auto switchInfo = model_.getDetailsForSwitchConfigurationItem(switchId_);
index dc16180c85bbf9c3ff1827f4e8d4c0a92d3bc3bd..3eb21ea7e8a1f58d07ba201ed963b652b0447e89 100644 (file)
@@ -2,6 +2,15 @@
 
 #include "AccessibilitySettingLog.hpp"
 
+void ToolbarItem::disable(bool disable)
+{
+       elm_object_item_disabled_set(item_, disable ? EINA_TRUE : EINA_FALSE);
+}
+
+ToolbarItem::ToolbarItem(Elm_Object_Item *item)
+       : item_(item)
+{}
+
 void Toolbar::createEflObject()
 {
        uniqueObj_.reset(elm_toolbar_add(parent_->getObject()));
@@ -25,13 +34,14 @@ void Toolbar::expandTransverseLength(bool expand)
        elm_toolbar_transverse_expanded_set(uniqueObj_.get(), expand ? EINA_TRUE : EINA_FALSE);
 }
 
-void Toolbar::addItem(const TranslatedString &label, std::function<void()> onClick)
+ToolbarItem Toolbar::addItem(const TranslatedString &label, std::function<void()> onClick)
 {
        auto cbData = std::make_unique<WidgetCallback::Data<Toolbar, int>>(this, callbacks_.size());
        auto dataPtr = cbData.get();
        auto val = WidgetCallback::Value<Toolbar, int>{std::move(onClick), std::move(cbData)};
        callbacks_.push_back(std::move(val));
-       elm_toolbar_item_append(uniqueObj_.get(), NULL, label.c_str(), callbackMethod, dataPtr);
+       auto item = elm_toolbar_item_append(uniqueObj_.get(), NULL, label.c_str(), callbackMethod, dataPtr);
+       return ToolbarItem{static_cast<Elm_Object_Item *>(item)};
 }
 
 void Toolbar::callbackMethod(void *data, Evas_Object *obj, void *event_info)
index 29607d60051c3e81b7b065da01c575a341773698..8a8459592b80adc88ddbd81ccdc4bad69245a655 100644 (file)
@@ -3,6 +3,28 @@
 
 #include "Widget.hpp"
 
+class ToolbarItem
+{
+       friend class Toolbar;
+
+       public:
+       ToolbarItem() = default;
+       void disable(bool disable);
+
+       operator bool() const
+       {
+               return (item_ != nullptr);
+       }
+       bool operator!() const
+       {
+               return (item_ == nullptr);
+       }
+
+       private:
+       ToolbarItem(Elm_Object_Item *item);
+       Elm_Object_Item *item_ = nullptr;
+};
+
 class Toolbar : public Widget
 {
        template <typename T, typename... Args>
@@ -12,7 +34,7 @@ class Toolbar : public Widget
        void setSelectMode(Elm_Object_Select_Mode mode);
        void setShrinkMode(Elm_Toolbar_Shrink_Mode mode);
        void expandTransverseLength(bool expand);
-       void addItem(const TranslatedString &label, std::function<void()> onClick);
+       ToolbarItem addItem(const TranslatedString &label, std::function<void()> onClick);
 
        protected:
        static void callbackMethod(void *data, Evas_Object *obj, void *event_info);
index 0c3fc5905183e0a615be11efe9fdfcc318092893..44ac8691e15f6bbc586d9b905846edb07b8005b2 100644 (file)
@@ -72,9 +72,13 @@ void ListView::handleToolbarActions(const std::shared_ptr<Toolbar *> &ptr)
                });
        }
        if (saveAction) {
-               toolbar_->addItem(saveAction->title_.value(), [=]() {
+               auto saveItem = toolbar_->addItem(saveAction->title_.value(), [=]() {
                        saveAction->onInvoke_(saveAction);
                });
+               saveItem.disable(!saveAction->enabled_.value());
+               saveAction->enabled_.attach([=](auto val) mutable {
+                       saveItem.disable(!val);
+               });
        }
        if (naviframeItem_)
                naviframeItem_.setPartContent("tabbar", toolbar_);