namespace Wrt {
enum PopupType {
INFO_PROMPT = 1,
- YES_NO_PROMPT
+ YES_NO_PROMPT,
+ YES_NO_CHECK_PROMPT
};
}
${WRT_POPUP_COMMON_SRCS}
wrt-popup.cpp
YesNoPopup.cpp
+ YesNoCheckPopup.cpp
InfoPopup.cpp
renderer/evas_object.cpp
renderer/popup_controller.cpp
--- /dev/null
+/*
+ * File: YesNoCheckPopup.cpp
+ * Author: pciezkowski
+ *
+ * Created on December 12, 2012, 9:23 AM
+ */
+
+#include "YesNoCheckPopup.h"
+#include <memory>
+#include <string.h>
+#include "popup_manager.h"
+#include "PopupSerializer.h"
+
+namespace Wrt {
+namespace Popup {
+
+YesNoCheckPopup::~YesNoCheckPopup()
+{
+}
+
+Renderer::CtrlPopupPtr YesNoCheckPopup::createPopup(DPL::BinaryQueueAutoPtr data)
+{
+ std::string title = PopupSerializer::getStringArg(*data);
+ std::string message = PopupSerializer::getStringArg(*data);
+ std::string checkboxLabel = PopupSerializer::getStringArg(*data);
+ Assert(data->Empty());
+ LogDebug("title: " << title << " message: " << message << " checkbox: " <<
+ checkboxLabel);
+ Renderer::CtrlPopupPtr popup =
+ Renderer::PopupControllerSingleton::Instance().CreatePopup();
+
+ popup->SetTitle(title);
+ popup->Append(new Renderer::PopupObject::Label(message));
+ popup->Append(new Renderer::PopupObject::Check(checkboxLabel));
+ popup->Append(new Renderer::PopupObject::Button(YES_LABEL, POPUP_YES_VALUE));
+ popup->Append(new Renderer::PopupObject::Button(NO_LABEL, POPUP_NO_VALUE));
+ return popup;
+}
+
+void YesNoCheckPopup::responseCallback(
+ const Renderer::AnswerCallbackData &answer)
+{
+ bool result = (POPUP_YES_VALUE == answer.buttonAnswer);
+ DPL::BinaryQueue retValue;
+ PopupSerializer::appendArg(result, retValue);
+ LogDebug("Check state: " << answer.chackState);
+ PopupSerializer::appendArg(answer.chackState, retValue);
+ m_parent->response(retValue);
+}
+
+
+} // Popup
+} // Wrt
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @file YesNoCheckPopup.cpp
+ * @author Przmeyslaw Ciezkowsko (p.ciezkowski@samsung.com)
+ * @version 1.0
+ * @brief Popup that contains 'Yes' and 'No' buttons and checkbox. Inplementation
+ */
+
+#include "YesNoPopup.h"
+#include "wrt-popup.h"
+
+#ifndef WRT_YES_NO_CHECK_POPUP_H
+#define WRT_YES_NO_CHECK_POPUP_H
+
+namespace Wrt {
+namespace Popup {
+
+class YesNoCheckPopup: public YesNoPopup {
+public:
+ virtual ~YesNoCheckPopup();
+protected:
+ virtual Renderer::CtrlPopupPtr createPopup(DPL::BinaryQueueAutoPtr data);
+ virtual void responseCallback(const Renderer::AnswerCallbackData &answer);
+
+};
+
+} // Popup
+} // Wrt
+
+#endif /* WRT_YES_NO_CHECK_POPUP_H */
+
#include "popup_manager.h"
#include "PopupSerializer.h"
-namespace {
-const char YES_LABEL[] = "Yes";
-const char NO_LABEL[] = "No";
-const int POPUP_YES_VALUE = 1;
-const int POPUP_NO_VALUE = 2;
-} //anonymous
-
namespace Wrt {
namespace Popup {
void YesNoPopup::show(DPL::BinaryQueueAutoPtr data, WrtPopup* parent)
{
LogDebug("Entered");
- std::string title = PopupSerializer::getStringArg(*data);
- std::string message = PopupSerializer::getStringArg(*data);
- Assert(data->Empty());
- LogDebug("title: " << title << " message: " << message);
-
m_parent = parent;
-
- Renderer::CtrlPopupPtr popup =
- Renderer::PopupControllerSingleton::Instance().CreatePopup();
-
- popup->SetTitle(title);
- popup->Append(new Renderer::PopupObject::Label(message));
-
- popup->Append(new Renderer::PopupObject::Button(YES_LABEL, POPUP_YES_VALUE));
- popup->Append(new Renderer::PopupObject::Button(NO_LABEL, POPUP_NO_VALUE));
-
+ Renderer::CtrlPopupPtr popup = createPopup(data);
ListenForAnswer(popup);
Renderer::ShowPopupEventShort event(popup,
m_parent->response(retValue);
}
+YesNoPopup::~YesNoPopup()
+{
+}
+
+Renderer::CtrlPopupPtr YesNoPopup::createPopup(DPL::BinaryQueueAutoPtr data)
+{
+ std::string title = PopupSerializer::getStringArg(*data);
+ std::string message = PopupSerializer::getStringArg(*data);
+ Assert(data->Empty());
+ LogDebug("title: " << title << " message: " << message);
+ Renderer::CtrlPopupPtr popup =
+ Renderer::PopupControllerSingleton::Instance().CreatePopup();
+
+ popup->SetTitle(title);
+ popup->Append(new Renderer::PopupObject::Label(message));
+
+ popup->Append(new Renderer::PopupObject::Button(YES_LABEL, POPUP_YES_VALUE));
+ popup->Append(new Renderer::PopupObject::Button(NO_LABEL, POPUP_NO_VALUE));
+ return popup;
+}
+
} // Popup
} // Wrt
namespace Wrt {
namespace Popup {
+const char YES_LABEL[] = "Yes";
+const char NO_LABEL[] = "No";
+const int POPUP_YES_VALUE = 1;
+const int POPUP_NO_VALUE = 2;
+
class YesNoPopup : public IPopup
{
public:
virtual void show(DPL::BinaryQueueAutoPtr data, WrtPopup* parent);
-
-private:
-
- void responseCallback(const Renderer::AnswerCallbackData &answer);
+ virtual ~YesNoPopup();
+protected:
+ virtual Renderer::CtrlPopupPtr createPopup(DPL::BinaryQueueAutoPtr data);
+ virtual void responseCallback(const Renderer::AnswerCallbackData &answer);
WrtPopup* m_parent;
};
#include "PopupSerializer.h"
#include "YesNoPopup.h"
#include "InfoPopup.h"
+#include "YesNoCheckPopup.h"
namespace Wrt {
namespace Popup {
m_popup.reset(new InfoPopup());
m_popup->show(data, this);
break;
+ case YES_NO_CHECK_PROMPT:
+ m_popup.reset(new YesNoCheckPopup());
+ m_popup->show(data, this);
+ break;
default:
Assert(false);
}
}
}
+PopupResponse PopupInvoker::askYesNoCheckbox(const std::string& title,
+ const std::string& message, const std::string& checkboxLabel)
+{
+ Try
+ {
+ DPL::BinaryQueue data;
+ PopupSerializer::appendArg(YES_NO_CHECK_PROMPT, data);
+ PopupSerializer::appendArg(title, data);
+ PopupSerializer::appendArg(message, data);
+ PopupSerializer::appendArg(checkboxLabel, data);
+ DPL::NamedInputPipe tmp;
+ tmp.Open(m_outputName);
+ m_output.Open(m_outputName);
+ m_input.Open(m_inputName);
+ m_output.Write(data, data.Size());
+
+ executePopup();
+
+ //Result from popup application is available. Read it.
+ DPL::BinaryQueueAutoPtr resultData =
+ m_input.Read(std::numeric_limits<std::size_t>::max());
+ const int result = PopupSerializer::getIntArg(*resultData);
+ const int rememberResult = PopupSerializer::getIntArg(*resultData);
+
+ LogDebug("Popup result is: " << result << " remeber: " << rememberResult);
+
+ Assert(resultData->Empty());
+ tmp.Close();
+ m_input.Close();
+ m_output.Close();
+
+ if (1 == result) {
+ if (rememberResult == 1) {
+ return YES_DO_REMEMBER;
+ } else {
+ return YES_DONT_REMEMBER;
+ }
+ } else {
+ if (rememberResult == 1) {
+ return NO_DO_REMEMBER;
+ } else {
+ return NO_DONT_REMEMBER;
+ }
+ }
+ }
+ Catch(DPL::Exception)
+ {
+ LogError("error occured");
+ }
+ return NO_DONT_REMEMBER;
+}
+
void PopupInvoker::executePopup()
{
pid_t pid = fork();
namespace Wrt {
namespace Popup {
+enum PopupResponse {
+ NO_DO_REMEMBER,
+ NO_DONT_REMEMBER,
+ YES_DONT_REMEMBER,
+ YES_DO_REMEMBER
+};
+
class PopupInvoker
{
public:
void showInfo(const std::string &title,
const std::string &message,
const std::string &buttonLabel = std::string("OK"));
+ PopupResponse askYesNoCheckbox(const std::string& title,
+ const std::string& message, const std::string& checkboxLabel);
private: