toggle,
radio,
icon,
- slider
+ slider,
+ entry
};
ListItem(std::string title,
double value_ = 0.0;
std::pair<double, double> range_;
double step_ = 1;
+ ObservableProperty<std::string> entryText_;
};
#endif
#include "AccessibilitySettingLog.hpp"
#include "Check.hpp"
+#include "Entry.hpp"
#include "Genlist.hpp"
#include "Icon.hpp"
#include "Label.hpp"
step_ = val;
}
+std::string GenlistItem::getEntryText()
+{
+ return entryText_;
+}
+
+void GenlistItem::setEntryText(TranslatedString text)
+{
+ entryText_ = text.str();
+ update();
+}
+
size_t GenlistItem::getId()
{
return id_;
case WidgetType::slider:
return self->realizeSlider(part);
+ case WidgetType::entry:
+ return self->realizeEntry(part);
+
default:
break;
}
return layout->getObject();
}
+Evas_Object *GenlistItem::realizeEntry(const std::string &part)
+{
+ auto layout = Widget::make<Layout>(genlist_, "edje/genlist.edj", "gl_custom_item");
+ if (!text_.empty()) {
+ auto label = Widget::make<Label>(genlist_, text_);
+ layout->setPartContent("elm.text", label);
+ }
+
+ auto entry = Widget::make<Entry>(layout);
+ layout->setPartContent("elm.swallow.content", entry);
+ entry->setEntryText(entryText_);
+ entry->setEvasSmartCallback("changed,user", [=]() {
+ this->entryText_ = entry->getEntryText();
+ if (onContentValueChanged_) {
+ onContentValueChanged_(this);
+ }
+ });
+
+ return layout->getObject();
+}
+
void GenlistItem::onItemSelection(void *data, Evas_Object *obj, void *event_info)
{
auto self = static_cast<GenlistItem *>(data);
toggle,
radio,
icon,
- slider
+ slider,
+ entry
};
GenlistItem(std::string style, TranslatedString text, TranslatedString desc = {}, Type type = Type::group);
void setValue(double val);
void setRange(std::pair<double, double> range);
void setStep(double val);
+ void setEntryText(TranslatedString text);
+ std::string getEntryText();
// TODO: current implementation does not take advantage from radio groups.
// When legacy solution for adding genlist items is completely removed
Evas_Object *realizeIcon(const std::string &part);
Evas_Object *realizeRadio(const std::string &part);
Evas_Object *realizeSlider(const std::string &part);
+ Evas_Object *realizeEntry(const std::string &part);
static char *textRealizator(void *data, Evas_Object *obj, const char *part);
static Evas_Object *contentRealizator(void *data, Evas_Object *obj, const char *part);
double value_ = 0.0;
std::pair<double, double> range_;
double step_ = 0.01;
+ std::string entryText_;
};
#endif
ASSERT(search != itemsMapping_.end(), "Item not mapped");
search->second->widgetState_ = item->getState();
search->second->value_ = item->getValue();
+ search->second->entryText_ = item->getEntryText();
if (search->second->onWidgetChanged_) {
search->second->onWidgetChanged_(search->second);
}
for (const auto &it : g.items_) {
auto type = translateType(it->widgetType_);
auto style = it->description_.value().empty() ? "type1" : "multiline";
- if (it->widgetType_ == ListItem::WidgetType::slider)
+ if (it->widgetType_ == ListItem::WidgetType::slider || it->widgetType_ == ListItem::WidgetType::entry)
style = "full";
GenlistItem *genlistItem = nullptr;
if (it->widgetType_ == ListItem::WidgetType::icon)
genlistItem->setValue(it->value_);
genlistItem->setRange(std::move(it->range_));
genlistItem->setStep(it->step_);
+ genlistItem->setEntryText(it->entryText_.value());
itemsMapping_.emplace(genlistItem, it.get());
it->title_.attach([this, gi = genlistItem](auto val) { gi->setText(val); });
case ListItem::WidgetType::slider:
return GenlistItem::WidgetType::slider;
+
+ case ListItem::WidgetType::entry:
+ return GenlistItem::WidgetType::entry;
}
ERROR("Invalid type");
return {};