ALLOW,
DENY
};
- typedef std::function<void(NResponseType)> AnswerHandler;
- IAnswerable(AnswerHandler handler) : m_handler(handler) {}
- virtual void process(enum Button) const = 0;
+ IAnswerable() {}
+ virtual NResponseType getAnswer(enum Button) const = 0;
virtual ~IAnswerable() {}
-protected:
- AnswerHandler m_handler;
};
class AnswerablePopupCheck : public IAnswerable {
public:
- AnswerablePopupCheck(PopupCheck *popup, AnswerHandler handler)
- : IAnswerable(handler), m_popup(popup) {}
- virtual void process(enum Button button) const {
+ AnswerablePopupCheck(PopupCheck *popup)
+ : m_popup(popup) {}
+ virtual NResponseType getAnswer(enum Button button) const {
NResponseType answer;
switch (button) {
case IAnswerable::Button::ALLOW:
default:
answer = NResponseType::Error;
}
- m_handler( answer);
+ return answer;
}
private:
PopupCheck *m_popup;
evas_object_hide(m_win);
}
+void Popupper::buttonAnswer(IAnswerable::Button button) {
+ NResponseType answer = m_answerablePtr->getAnswer(button);
+ m_popupResponseHandler(answer);
+}
void Popupper::allowPressedCb(void *data, Evas_Object *, void *)
{
- IAnswerable *answerable = static_cast<IAnswerable *>(data);
- answerable->process(IAnswerable::Button::ALLOW);
+ Popupper *popupper = static_cast<Popupper*>(data);
+ popupper->buttonAnswer(IAnswerable::Button::ALLOW);
}
void Popupper::denyPressedCb(void *data, Evas_Object *, void *)
{
- IAnswerable *answerable = static_cast<IAnswerable *>(data);
- answerable->process(IAnswerable::Button::DENY);
+ Popupper *popupper = static_cast<Popupper*>(data);
+ popupper->buttonAnswer(IAnswerable::Button::DENY);
}
Eina_Bool Popupper::hwKeyClickedCb(void *data, int type, void *event)
return;
}
- m_answerablePtr.reset(new AnswerablePopupCheck(popup, m_popupResponseHandler));
+ m_answerablePtr.reset(new AnswerablePopupCheck(popup));
evas_object_smart_callback_add(popup->getAllowButton(), "clicked", &Popupper::allowPressedCb,
- m_answerablePtr.get());
+ this);
evas_object_smart_callback_add(popup->getDenyButton(), "clicked", &Popupper::denyPressedCb,
- m_answerablePtr.get());
+ this);
m_elementPtr.reset(popup);
show();
static void denyPressedCb(void *data, Evas_Object *, void *);
static Eina_Bool hwKeyClickedCb(void *data, int type, void *event);
+ void buttonAnswer(IAnswerable::Button button);
void show();
PopupHandler m_popupResponseHandler;