2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file popup_controller.cpp
18 * @author Lukasz Wrzosek (l.wrzosek@samsung.com)
20 * @bref Implementation file for popup controller
23 #include <dpl/popup/popup_controller.h>
25 #include <dpl/assert.h>
26 #include <dpl/log/log.h>
27 #include <dpl/singleton_impl.h>
28 IMPLEMENT_SINGLETON(DPL::Popup::PopupController)
33 void CtrlPopup::SetTitle(const std::string &title)
36 m_popup->SetTitle(title);
39 void CtrlPopup::Append(PopupObject::IPopupObject *object)
42 m_popup->Append(object);
45 CtrlPopup::CtrlPopup(IPopupPtr popup) :
52 CtrlPopup::~CtrlPopup()
56 void CtrlPopup::EmitAnswer(const AnswerCallbackData & answer)
58 AnswerCallbackData l_answer = answer;
59 PopupAnswerEvent event(SharedFromThis(), m_callback, l_answer);
60 DPL::Event::EventSupport<PopupAnswerEvent>::EmitEvent(event);
63 PopupController::PopupController() : m_canvas(NULL)
67 CtrlPopupPtr PopupController::CreatePopup() const
70 new CtrlPopup(PopupManagerSingleton::Instance().CreatePopup()));
73 void PopupController::OnEventReceived(const ShowPopupEventShort& event)
75 CtrlPopupPtr popup = event.GetArg0();
76 popup->m_callback = event.GetArg1();
78 //pass canvas from controller to manager
79 //canvas is not passed earlier because value wasn't set properly
80 PopupManagerSingleton::Instance().setExternalCanvas(getExternalCanvas());
82 PopupManagerSingleton::Instance().RunAsyncWithArgType(
84 &PopupController::StaticOnAnswerReceived,
85 new CtrlPopupPtr(popup));
88 void PopupController::StaticOnAnswerReceived(const AnswerCallbackData & answer,
91 Assert(popup != NULL);
92 (*popup)->EmitAnswer(answer);
93 delete popup; // Just SharedPtr is destroyed, not the popup itself
96 void PopupControllerUser::OnEventReceived(const PopupAnswerEvent& event)
98 //Here we are in a proper context to call the callback
99 PopupAnswerCallback answerCall = event.GetArg1();
100 AnswerCallbackData answer = event.GetArg2();
101 answerCall.Call(answer);
102 event.GetArg0()->DPL::Event::EventSupport<PopupAnswerEvent>::RemoveListener(this);
105 void PopupControllerUser::ListenForAnswer(CtrlPopupPtr popup)
107 popup->DPL::Event::EventSupport<PopupAnswerEvent>::AddListener(this);