return {elm_naviframe_top_item_get(uniqueObj_.get())};
}
-void Naviframe::onPopAnimationEnd()
+void Naviframe::onPopAnimationEnd(std::function<void()> onPopAnimationEnd)
{
if (naviframeStack_.size()) {
auto children = naviframeStack_.top();
removeFromParent(children.first);
removeFromParent(children.second);
naviframeStack_.pop();
+ onPopAnimationEnd();
}
}
void Naviframe::onPop(Elm_Object_Item *item)
{
- setEvasSmartCallback("transition,finished", [this]() {
+ setEvasSmartCallback("transition,finished", [this, item]() {
removeEvasSmartCallback("transition,finished");
- onPopAnimationEnd();
+ auto cb = naviframeCallbacks_.find(item);
+ if (cb == naviframeCallbacks_.end()) {
+ ERROR("No callback registered for this frame");
+ return;
+ }
+ onPopAnimationEnd(cb->second);
});
- auto cb = naviframeCallbacks_.find(item);
- if (cb == naviframeCallbacks_.end()) {
- ERROR("No callback registered for this frame");
- return;
- }
- cb->second();
}
Eina_Bool Naviframe::callbackMethod(void *data, Elm_Object_Item *it)
void createEflObject(std::function<void()> onBackButtonPressed = {});
void onPop(Elm_Object_Item *item);
static Eina_Bool callbackMethod(void *data, Elm_Object_Item *it);
- void onPopAnimationEnd();
+ void onPopAnimationEnd(std::function<void()> onPopAnimationEnd);
std::stack<std::pair<Widget *, Widget *>> naviframeStack_;
std::unordered_map<Elm_Object_Item *, std::function<void()>> naviframeCallbacks_;
handleNonToolbarActionsBeforeNaviframePush();
auto style = isToolbarNeeded() ? "tabbar/notitle" : std::string{};
- naviframeItem_ = naviframe_->pushBack(listPresenter_->getTitle(), genlist_, {}, backItem_, style);
+ auto ptr = std::make_shared<Toolbar *>(nullptr);
+ naviframeItem_ = naviframe_->pushBack(listPresenter_->getTitle(), genlist_, [ptr]() {
+ if (*ptr) {
+ auto parent = (*ptr)->getParent();
+ parent->removeChild(*ptr);
+ }
+ },
+ backItem_,
+ style);
if (isToolbarNeeded())
- handleToolbarActions();
+ handleToolbarActions(ptr);
else
handleNonToolbarActionsAfterNaviframePush();
}
auto parent = titleRightButton_->getParent();
parent->removeChild(titleRightButton_);
}
- if (toolbar_) {
- auto parent = toolbar_->getParent();
- parent->removeChild(toolbar_);
- }
}
bool ListView::isToolbarNeeded()
return cancelAction || saveAction;
}
-void ListView::handleToolbarActions()
+void ListView::handleToolbarActions(const std::shared_ptr<Toolbar *> &ptr)
{
auto cancelAction = listPresenter_->getAction("cancelAction");
auto saveAction = listPresenter_->getAction("saveAction");
toolbar_ = Widget::make<Toolbar>(naviframe_);
+ *ptr = toolbar_;
if (cancelAction) {
toolbar_->addItem(cancelAction->title_.value(), [=]() {
cancelAction->onInvoke_(cancelAction);
private:
void addItemsToGenlist();
bool isToolbarNeeded();
- void handleToolbarActions();
+ void handleToolbarActions(const std::shared_ptr<Toolbar *> &ptr);
void handleNonToolbarActionsBeforeNaviframePush();
void handleNonToolbarActionsAfterNaviframePush();
GenlistItem::WidgetType translateType(ListItem::WidgetType t);