void onAlarmDeleted(AlarmItem *item);
void onAddPressed();
void onFormatChanged(system_settings_key_e key);
- void onItemLongpressed(Evas_Object *genlist, void *genItem);
+ void onItemLongpressed(Evas_Object *genlist, Elm_Object_Item *item);
bool onSelectFinished();
Evas_Object *m_NoContents;
m_Genlist = new Ui::Genlist();
m_Genlist->create(parent);
eext_circle_object_genlist_add(m_Genlist->getEvasObject(), surface);
- evas_object_smart_callback_add(m_Genlist->getEvasObject(),
- "longpressed", makeCallback(&AlarmsView::onItemLongpressed), this);
+ evas_object_smart_callback_add(m_Genlist->getEvasObject(), "longpressed",
+ (Evas_Smart_Cb)makeCallback(&AlarmsView::onItemLongpressed), this);
elm_object_content_set(layout, m_Genlist->getEvasObject());
- m_MultiSelector = new Ux::MultiSelector();
+ m_MultiSelector = new Ux::MultiSelector(this);
m_MultiSelector->create(layout);
m_MultiSelector->setStrings({ "WDS_MSG_OPT_SELECT_ALL_ABB", "WDS_MSG_OPT_DESELECT_ALL_ABB" });
elm_object_part_content_set(layout, "elm.swallow.icon", m_MultiSelector->getEvasObject());
m_Genlist->update("elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
}
-void AlarmsView::onItemLongpressed(Evas_Object *genlist, void *genItem)
+void AlarmsView::onItemLongpressed(Evas_Object *genlist, Elm_Object_Item *item)
{
if (getSelectMode() == Ux::SelectNone) {
setSelectMode(Ux::SelectMulti);
return onSelectFinished();
});
- elm_genlist_item_selected_set((Elm_Object_Item *)genItem, EINA_TRUE);
+ elm_genlist_item_selected_set(item, EINA_TRUE);
}
}
namespace Ux
{
+ class SelectView;
class EXPORT_API MultiSelector : public Ui::Control
{
public:
const char *deselectAll; /**< "Deselect all" item text. */
};
- MultiSelector();
+ /**
+ * @brief Create selector.
+ * @param[in] selectView Select view.
+ */
+ explicit MultiSelector(SelectView *selectView);
/**
* @brief Set count of selected items.
void onButtonClicked(Evas_Object *button, void *eventInfo);
Strings m_Strings;
+ SelectView *m_SelectView;
};
}
*/
const SelectItems &getSelectItems() const;
+ /**
+ * @return Whether all items are selected.
+ */
+ bool isMaxSelected() const;
+
/**
* @brief Set translatable strings for the view.
* @remark Should be called before create().
*/
void setLimitCallback(LimitCallback callback);
+ /**
+ * @brief Select/Deselect all items.
+ * @param[in] isSelected Whether all items should be selected.
+ */
+ void setAllSelected(bool isSelected);
+
protected:
/**
* @brief Add selectable item to be managed by the view.
size_t getSelectMax() const;
bool isLimitReached() const;
- bool isMaxSelected() const;
void updatePageTitle();
void updatePageButtons();
#include "Ux/MultiSelector.h"
#include "Ui/CircleMenu.h"
#include "Utils/Callback.h"
+#include "Ux/SelectView.h"
#define BUF_SIZE 8
using namespace Ux;
-MultiSelector::MultiSelector()
- : m_Strings { }
+MultiSelector::MultiSelector(SelectView *selectView)
+ : m_Strings { },
+ m_SelectView(selectView)
{
}
void MultiSelector::onButtonClicked(Evas_Object *button, void *eventInfo)
{
+ if (!m_SelectView) {
+ return;
+ }
+
auto menu = new Ui::CircleMenu();
menu->create(button);
- menu->addItem(m_Strings.selectAll, [] {
- //TODO React on select all event
- });
- menu->addItem(m_Strings.deselectAll, [] {
- //TODO React on deselect all event
- });
+ if (!m_SelectView->isMaxSelected()) {
+ menu->addItem(m_Strings.selectAll, [this] {
+ m_SelectView->setAllSelected(true);
+ });
+ }
+ if (m_SelectView->getSelectCount() > 0) {
+ menu->addItem(m_Strings.deselectAll, [this] {
+ m_SelectView->setAllSelected(false);
+ });
+ }
menu->show();
}
return m_Items;
}
+bool SelectView::isMaxSelected() const
+{
+ return m_VisibleSelectCount == getSelectMax();
+}
+
void SelectView::setStrings(const Strings &strings)
{
m_Strings = strings;
m_OnLimitReached = std::move(callback);
}
+void SelectView::setAllSelected(bool isSelected)
+{
+ m_IsMultiChecking = true;
+ for (auto &&item : m_Items) {
+ if (!item->isExcluded() && item->isVisible()) {
+ if (!item->setChecked(isSelected)) {
+ break;
+ }
+ }
+ }
+
+ m_IsMultiChecking = false;
+ updatePageTitle();
+}
+
void SelectView::addSelectItem(SelectItem *item)
{
item->m_SelectView = this;
Evas_Object *SelectView::createDoneButton()
{
- if (!getPage()) {
- return nullptr;
+ if (auto page = getPage()) {
+ return page->addTitleButton(Ui::ButtonRight, m_Strings.buttonDone, nullptr, nullptr);
}
- return getPage()->addTitleButton(Ui::ButtonRight, m_Strings.buttonDone, nullptr, nullptr);
+ return nullptr;
}
Evas_Object *SelectView::createCancelButton()
{
- if (!getPage()) {
- return nullptr;
+ if (auto page = getPage()) {
+ return page->addTitleButton(Ui::ButtonLeft, m_Strings.buttonCancel, nullptr, nullptr);
}
- return getPage()->addTitleButton(Ui::ButtonLeft, m_Strings.buttonCancel, nullptr, nullptr);
+ return nullptr;
}
size_t SelectView::getSelectMax() const
return m_SelectLimit && m_TotalSelectCount == m_SelectLimit;
}
-bool SelectView::isMaxSelected() const
-{
- return m_VisibleSelectCount == getSelectMax();
-}
-
void SelectView::updatePageTitle()
{
char buffer[TITLE_BUFFER_SIZE];
return true;
}
- m_IsMultiChecking = true;
- for (auto &&item : m_Items) {
- if (!item->isExcluded() && item->isVisible()) {
- if (!item->setChecked(isChecked)) {
- break;
- }
- }
- }
-
- m_IsMultiChecking = false;
- updatePageTitle();
+ setAllSelected(isChecked);
return isChecked == isMaxSelected();
}