summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Olshevskyi <i.olshevskyi@samsung.com>2017-10-27 15:01:30 +0300
committerIgor Olshevskyi <i.olshevskyi@samsung.com>2017-10-27 15:02:14 +0300
commit07ca30998217ff2451b63fe6a6de622aef334715 (patch)
treed74768054e9e9d7b004f5dc974fa923af926c9de
parent4d4857ed811f1fa9cee16fdbcf39716bc160a96a (diff)
parentbb07006afb68b262cd38e59656ef58436c887448 (diff)
downloadcall-setting-07ca30998217ff2451b63fe6a6de622aef334715.tar.gz
call-setting-07ca30998217ff2451b63fe6a6de622aef334715.tar.bz2
call-setting-07ca30998217ff2451b63fe6a6de622aef334715.zip
Merge branch 'tizen_dev' into tizen_4.0submit/tizen_4.0/20171030.141651
Change-Id: I08dabe158da6efb646abd9078948cb33a9114f0a
-rw-r--r--call-setting/model/impl/misc/BlockListManager.h2
-rw-r--r--call-setting/presenters/Instance.h32
-rw-r--r--call-setting/presenters/InstanceManager.h12
-rw-r--r--call-setting/presenters/dialogs/ListOptionDialog.cpp22
-rw-r--r--call-setting/presenters/dialogs/base/Dialog.cpp8
-rw-r--r--call-setting/presenters/items/BlockUnknownCallersItem.h38
-rw-r--r--call-setting/presenters/items/CallWaitingItem.h29
-rw-r--r--call-setting/presenters/items/CallerIdItem.h24
-rw-r--r--call-setting/presenters/items/RadioOptionItem.cpp39
-rw-r--r--call-setting/presenters/items/RadioOptionItem.h54
-rw-r--r--call-setting/presenters/items/SimpleListItem.cpp26
-rw-r--r--call-setting/presenters/items/SimpleListItem.h69
-rw-r--r--call-setting/presenters/items/VoicemailNumberItem.h24
-rw-r--r--call-setting/presenters/items/base/CheckOptionItem.cpp39
-rw-r--r--call-setting/presenters/items/base/CheckOptionItem.h83
-rw-r--r--call-setting/presenters/items/base/ListOptionItem.h69
-rw-r--r--call-setting/presenters/misc/AtspiHighlightHelper.cpp148
-rw-r--r--call-setting/presenters/misc/AtspiHighlightHelper.h93
-rw-r--r--call-setting/presenters/misc/KeypadPresenter.cpp191
-rw-r--r--call-setting/presenters/misc/KeypadPresenter.h33
-rw-r--r--call-setting/presenters/misc/MoreOptionsPresenter.cpp10
-rw-r--r--call-setting/presenters/misc/ProcessingPresenter.cpp66
-rw-r--r--call-setting/presenters/misc/ProcessingPresenter.h10
-rw-r--r--call-setting/presenters/misc/SelectModePresenter.cpp23
-rw-r--r--call-setting/presenters/pages/BlockListPage.cpp3
-rw-r--r--call-setting/presenters/pages/BlockListPage.h36
-rw-r--r--call-setting/presenters/pages/BlockedNumbersPage.cpp77
-rw-r--r--call-setting/presenters/pages/BlockedNumbersPage.h42
-rw-r--r--call-setting/presenters/pages/KeypadPage.cpp44
-rw-r--r--call-setting/presenters/pages/KeypadPage.h38
-rw-r--r--call-setting/presenters/pages/MainPage.cpp20
-rw-r--r--call-setting/presenters/pages/MainPage.h33
-rw-r--r--call-setting/presenters/pages/NoContentPage.cpp8
-rw-r--r--call-setting/presenters/pages/NoContentPage.h42
-rw-r--r--call-setting/presenters/pages/VoicemailPage.cpp3
-rw-r--r--call-setting/presenters/pages/VoicemailPage.h29
-rw-r--r--call-setting/presenters/pages/base/Page.cpp25
-rw-r--r--call-setting/presenters/pages/base/Page.h109
-rw-r--r--call-setting/presenters/types.h3
-rw-r--r--call-setting/resources.cpp24
-rw-r--r--call-setting/resources.h14
-rw-r--r--call-setting/view/AoSequencer.cpp82
-rw-r--r--call-setting/view/AoSequencer.h103
-rw-r--r--call-setting/view/AoSequencer.hpp78
-rw-r--r--call-setting/view/KeypadBackspaceBtn.cpp2
-rw-r--r--call-setting/view/KeypadBackspaceBtn.h29
-rw-r--r--call-setting/view/KeypadEntry.cpp36
-rw-r--r--call-setting/view/KeypadEntry.h33
-rw-r--r--call-setting/view/KeypadNumberBtn.cpp2
-rw-r--r--call-setting/view/KeypadNumberBtn.h55
-rw-r--r--call-setting/view/PageContent.cpp8
-rw-r--r--call-setting/view/PageContent.h78
-rw-r--r--call-setting/view/TouchParser.cpp32
-rw-r--r--call-setting/view/TouchParser.h34
-rw-r--r--call-setting/view/helpers.cpp112
-rw-r--r--call-setting/view/helpers.h52
-rw-r--r--edc/buttons.edc32
-rw-r--r--edc/images/keypad_0.pngbin19126 -> 1986 bytes
-rw-r--r--edc/images/keypad_1.pngbin19678 -> 2302 bytes
-rw-r--r--edc/images/keypad_2.pngbin19028 -> 1890 bytes
-rw-r--r--edc/images/keypad_3.pngbin19072 -> 1903 bytes
-rw-r--r--edc/images/keypad_4.pngbin19703 -> 2308 bytes
-rw-r--r--edc/images/keypad_5.pngbin19156 -> 2073 bytes
-rw-r--r--edc/images/keypad_6.pngbin19690 -> 2298 bytes
-rw-r--r--edc/images/keypad_7.pngbin19091 -> 1907 bytes
-rw-r--r--edc/images/keypad_8.pngbin19078 -> 1908 bytes
-rw-r--r--edc/images/keypad_9.pngbin19699 -> 2313 bytes
-rw-r--r--edc/layouts.edc118
-rw-r--r--project_def.prop2
-rw-r--r--res/po/ar.po33
-rw-r--r--res/po/az.po33
-rw-r--r--res/po/bg.po33
-rw-r--r--res/po/ca.po33
-rw-r--r--res/po/cs.po33
-rw-r--r--res/po/da.po33
-rw-r--r--res/po/de.po33
-rw-r--r--res/po/el_GR.po33
-rw-r--r--res/po/en.po33
-rw-r--r--res/po/en_PH.po33
-rw-r--r--res/po/en_US.po33
-rw-r--r--res/po/es_ES.po33
-rw-r--r--res/po/es_US.po33
-rw-r--r--res/po/et.po33
-rw-r--r--res/po/eu.po33
-rw-r--r--res/po/fi.po33
-rw-r--r--res/po/fr.po33
-rw-r--r--res/po/fr_CA.po33
-rw-r--r--res/po/ga.po33
-rw-r--r--res/po/gl.po33
-rw-r--r--res/po/hi.po33
-rw-r--r--res/po/hr.po33
-rw-r--r--res/po/hu.po33
-rw-r--r--res/po/hy.po33
-rw-r--r--res/po/is.po33
-rw-r--r--res/po/it_IT.po33
-rw-r--r--res/po/ja_JP.po33
-rw-r--r--res/po/ka.po33
-rw-r--r--res/po/kk.po33
-rw-r--r--res/po/ko_KR.po33
-rw-r--r--res/po/lt.po33
-rw-r--r--res/po/lv.po33
-rw-r--r--res/po/mk.po33
-rw-r--r--res/po/nb.po33
-rw-r--r--res/po/nl.po33
-rw-r--r--res/po/pl.po33
-rw-r--r--res/po/pt_BR.po33
-rw-r--r--res/po/pt_PT.po33
-rw-r--r--res/po/ro.po33
-rw-r--r--res/po/ru_RU.po33
-rw-r--r--res/po/sk.po33
-rw-r--r--res/po/sl.po33
-rw-r--r--res/po/sr.po33
-rw-r--r--res/po/sv.po33
-rw-r--r--res/po/tr_TR.po35
-rw-r--r--res/po/uk.po33
-rw-r--r--res/po/uz.po33
-rw-r--r--res/po/zh_CN.po33
-rw-r--r--res/po/zh_HK.po33
-rw-r--r--res/po/zh_TW.po33
-rw-r--r--ucl/include/ucl/gui/Atspi.h92
-rw-r--r--ucl/include/ucl/gui/Atspi.hpp56
-rw-r--r--ucl/include/ucl/gui/EdjeWidget.h8
-rw-r--r--ucl/include/ucl/gui/EdjeWidget.hpp8
-rw-r--r--ucl/include/ucl/gui/ElmWidget.h14
-rw-r--r--ucl/include/ucl/gui/ElmWidget.hpp10
-rw-r--r--ucl/include/ucl/gui/NaviItem.h10
-rw-r--r--ucl/include/ucl/gui/NaviItem.hpp7
-rw-r--r--ucl/include/ucl/gui/Naviframe.h93
-rw-r--r--ucl/include/ucl/gui/Naviframe.hpp129
-rw-r--r--ucl/include/ucl/gui/RadioBox.h2
-rw-r--r--ucl/include/ucl/gui/RadioBox.hpp4
-rw-r--r--ucl/include/ucl/gui/Widget.h79
-rw-r--r--ucl/include/ucl/gui/Widget.hpp30
-rw-r--r--ucl/include/ucl/gui/WidgetItem.h8
-rw-r--r--ucl/include/ucl/gui/WidgetItem.hpp8
-rw-r--r--ucl/include/ucl/mvp/ListItemPresenter.h33
-rw-r--r--ucl/source/gui/Genlist.cpp2
-rw-r--r--ucl/source/gui/Layout.cpp2
-rw-r--r--ucl/source/gui/Naviframe.cpp2
-rw-r--r--ucl/source/gui/RadioBox.cpp2
-rw-r--r--ucl/source/gui/Widget.cpp8
-rw-r--r--ucl/source/gui/Window.cpp11
-rw-r--r--ucl/source/mvp/ListItemPresenter.cpp44
-rw-r--r--ucl/source/mvp/ListPresenter.cpp4
144 files changed, 4416 insertions, 484 deletions
diff --git a/call-setting/model/impl/misc/BlockListManager.h b/call-setting/model/impl/misc/BlockListManager.h
index 2fc93f8..6e82a9b 100644
--- a/call-setting/model/impl/misc/BlockListManager.h
+++ b/call-setting/model/impl/misc/BlockListManager.h
@@ -126,7 +126,7 @@ namespace call_setting {
ucl::Result getRules(Rules &rules) const;
/**
- * @brief Adds rule with exanct matching type
+ * @brief Adds rule with exact matching type
* @param[in] number Number
* @param[in] rule Rule
* @return RES_OK on success, otherwise an error code on failure
diff --git a/call-setting/presenters/Instance.h b/call-setting/presenters/Instance.h
index bcd37f5..0a9811b 100644
--- a/call-setting/presenters/Instance.h
+++ b/call-setting/presenters/Instance.h
@@ -30,23 +30,55 @@
namespace call_setting {
+ /**
+ * @brief Implementation of IInstance class
+ */
class Instance final : public ucl::RefCountAware,
public ucl::IInstance,
public ucl::IInstanceAppControlExt {
public:
+ /**
+ * @brief Constructor
+ * @param[in] rc Pointer to IRefCountObj (passed automatically)
+ * @param[in] sysEventProvider System event provider reference
+ */
Instance(ucl::IRefCountObj &rc,
ucl::SysEventProvider &sysEventProvider);
+
+ /**
+ * @brief Default destructor
+ */
~Instance();
// IInstance //
+ /**
+ * @brief Called when instance is created.
+ * @param[in] context Pointer to the context of this instance
+ * @return RES_OK on success, otherwise an error code on failure
+ */
virtual ucl::Result onCreate(
ucl::IInstanceContext *context) final override;
+
+ /**
+ * @brief Called when instance is paused
+ * @details For UIApp function called in app's "pause" cb.
+ */
virtual void onPause() final override;
+
+ /**
+ * @brief Called when instance is resumed
+ * @details For UIApp function called in app's "resume" cb.
+ */
virtual void onResume() final override;
// IInstanceAppControlExt //
+ /**
+ * @brief Called to process an app control request.
+ * @details For UIApp function called in app's "app_control" cb.
+ * @param[in] appControl App control request to process
+ */
virtual void onAppControl(app_control_h appControl) final override;
private:
diff --git a/call-setting/presenters/InstanceManager.h b/call-setting/presenters/InstanceManager.h
index 44df733..f442aa0 100644
--- a/call-setting/presenters/InstanceManager.h
+++ b/call-setting/presenters/InstanceManager.h
@@ -22,13 +22,23 @@
#include "types.h"
namespace call_setting {
-
+ /**
+ * @brief Implementation of InstanceManagerBase class
+ */
class InstanceManager final : public ucl::InstanceManagerBase {
public:
+
+ /**
+ * @brief Default constructor
+ */
InstanceManager();
// ucl::InstanceManagerBase //
+ /**
+ * @brief Creates new application instance object
+ * @return Shared reference to the new instance
+ */
virtual ucl::IInstanceSRef newInstance() const final override;
};
}
diff --git a/call-setting/presenters/dialogs/ListOptionDialog.cpp b/call-setting/presenters/dialogs/ListOptionDialog.cpp
index 2dffbba..7253921 100644
--- a/call-setting/presenters/dialogs/ListOptionDialog.cpp
+++ b/call-setting/presenters/dialogs/ListOptionDialog.cpp
@@ -68,25 +68,29 @@ namespace call_setting {
return *this;
}
- ListOptionDialog::Builder &ListOptionDialog::Builder::addOption(Option option)
+ ListOptionDialog::Builder &ListOptionDialog::Builder::addOption(
+ Option option)
{
m_options.emplace_back(std::move(option));
return *this;
}
- ListOptionDialog::Builder &ListOptionDialog::Builder::setTitle(TString title)
+ ListOptionDialog::Builder &ListOptionDialog::Builder::setTitle(
+ TString title)
{
m_title = std::move(title);
return *this;
}
- ListOptionDialog::Builder &ListOptionDialog::Builder::setInitialOptionId(int id)
+ ListOptionDialog::Builder &ListOptionDialog::Builder::setInitialOptionId(
+ int id)
{
m_initialOptionId = id;
return *this;
}
- ListOptionDialog::Builder &ListOptionDialog::Builder::setHandler(EventHandler handler)
+ ListOptionDialog::Builder &ListOptionDialog::Builder::setHandler(
+ EventHandler handler)
{
m_handler = std::move(handler);
return *this;
@@ -215,10 +219,10 @@ namespace call_setting {
}
m_popup->setContent(*layout, impl::PART_CIRCLE_SFC);
- auto surface = eext_circle_surface_layout_add(*layout);
+ auto surface = eext_circle_surface_layout_add(as_eo(*layout));
- m_circleObject = eext_circle_object_genlist_add(m_list->getWidget(),
- surface);
+ m_circleObject = eext_circle_object_genlist_add(
+ as_eo(m_list->getWidget()), surface);
eext_circle_object_genlist_scroller_policy_set(m_circleObject,
ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
@@ -232,8 +236,8 @@ namespace call_setting {
{
using ucl::show;
- const auto button = makeShared<StyledWidget>(elm_button_add(*m_popup),
- false);
+ const auto button = makeShared<StyledWidget>(
+ elm_button_add(as_eo(*m_popup)), false);
button->setStyle(btnStyle);
m_popup->setContent(*button, part);
diff --git a/call-setting/presenters/dialogs/base/Dialog.cpp b/call-setting/presenters/dialogs/base/Dialog.cpp
index 04fde3c..d757397 100644
--- a/call-setting/presenters/dialogs/base/Dialog.cpp
+++ b/call-setting/presenters/dialogs/base/Dialog.cpp
@@ -38,7 +38,7 @@ namespace call_setting {
Result Dialog::createPopup(ElmWidget &parent, const PopupType popupType)
{
Evas_Object *const popupEo = ((popupType == PopupType::NORMAL) ?
- elm_popup_add(parent) : elm_ctxpopup_add(parent));
+ elm_popup_add(as_eo(parent)) : elm_ctxpopup_add(as_eo(parent)));
if (!popupEo) {
LOG_RETURN(RES_FAIL, "elm_popup_add() failed!");
}
@@ -48,7 +48,7 @@ namespace call_setting {
m_popup->addEventHandler(
POPUP_DISMISSED, WEAK_DELEGATE_THIS(onPopupDismissed));
- eext_object_event_callback_add(*m_popup, EEXT_CALLBACK_BACK,
+ eext_object_event_callback_add(popupEo, EEXT_CALLBACK_BACK,
CALLBACK_A(Dialog::onPopupHWBackKey), this);
getWindow().addEventHandler(
@@ -73,7 +73,7 @@ namespace call_setting {
if (m_popup && !m_isDismissed && m_popup->isVisible()) {
m_isDismissed = true;
deactivateSelf();
- elm_popup_dismiss(*m_popup);
+ elm_popup_dismiss(as_eo(*m_popup));
onDismiss();
}
}
@@ -81,7 +81,7 @@ namespace call_setting {
void Dialog::dispose()
{
if (m_popup) {
- eext_object_event_callback_del(*m_popup, EEXT_CALLBACK_BACK,
+ eext_object_event_callback_del(as_eo(*m_popup), EEXT_CALLBACK_BACK,
CALLBACK_A(Dialog::onPopupHWBackKey));
deactivateSelf();
diff --git a/call-setting/presenters/items/BlockUnknownCallersItem.h b/call-setting/presenters/items/BlockUnknownCallersItem.h
index af0a238..0b59ba5 100644
--- a/call-setting/presenters/items/BlockUnknownCallersItem.h
+++ b/call-setting/presenters/items/BlockUnknownCallersItem.h
@@ -25,19 +25,57 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(BlockUnknownCallersItem);
+ /**
+ * @brief Represents checkable option item
+ */
class BlockUnknownCallersItem final : public CheckOptionItem {
public:
+
+ /**
+ * @brief Creates instance of BlockUnknownCallersItem
+ * @param[in] model Shared reference to model component
+ * @return Shared reference to BlockUnknownCallersItem
+ */
static BlockUnknownCallersItemSRef newInstance(
BlockUnknownCallersSRef model);
protected:
// CheckOptionItem //
+ /**
+ * @brief Gets state
+ * @return Current state
+ */
virtual State getState() const final override;
+
+ /**
+ * @brief Gets option value
+ * @return Current option value. @see TriState
+ */
virtual TriState getOptionValue() const final override;
+
+ /**
+ * @brief Gets option title
+ * @return Title
+ */
virtual ucl::CString getOptionTitle() const final override;
+
+ /**
+ * @brief Checks if there is secondary text
+ * @return true if option has secondary text, false - if not
+ */
virtual bool hasOptionSubText() const final override;
+
+ /**
+ * @brief Gets option sub text
+ * @return Sub text
+ */
virtual ucl::CString getOptionSubText() const final override;
+
+ /**
+ * @brief Requests option value change
+ * @param[in] value Value
+ */
virtual void requestOptionValueChange(bool value) final override;
private:
diff --git a/call-setting/presenters/items/CallWaitingItem.h b/call-setting/presenters/items/CallWaitingItem.h
index bc8e81c..4e079f0 100644
--- a/call-setting/presenters/items/CallWaitingItem.h
+++ b/call-setting/presenters/items/CallWaitingItem.h
@@ -27,8 +27,18 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(CallWaitingItem);
+ /**
+ * @brief Represents call waiting option item
+ */
class CallWaitingItem final : public CheckOptionItem {
public:
+
+ /**
+ * @brief Creates instance of CallWaitingItem
+ * @param[in] cw Shared reference to model component
+ * @param[in] toastParent Shared reference to toast parent
+ * @return Shared reference to CallWaitingItem
+ */
static CallWaitingItemSRef newInstance(
CallWaitingSRef cw, ucl::ElmWidgetSRef toastParent);
@@ -36,9 +46,28 @@ namespace call_setting {
// CheckOptionItem //
+ /**
+ * @brief Gets state
+ * @return Current state
+ */
virtual State getState() const final override;
+
+ /**
+ * @brief Gets option value
+ * @return Current option value. @see TriState
+ */
virtual TriState getOptionValue() const final override;
+
+ /**
+ * @brief Gets option title
+ * @return Title
+ */
virtual ucl::CString getOptionTitle() const final override;
+
+ /**
+ * @brief Requests option value change
+ * @param[in] value Value
+ */
virtual void requestOptionValueChange(
const bool value) final override;
diff --git a/call-setting/presenters/items/CallerIdItem.h b/call-setting/presenters/items/CallerIdItem.h
index da6a6b5..9b8b5c7 100644
--- a/call-setting/presenters/items/CallerIdItem.h
+++ b/call-setting/presenters/items/CallerIdItem.h
@@ -25,8 +25,18 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(CallerIdItem);
+ /**
+ * @brief Represents caller id option item
+ */
class CallerIdItem final : public ListOptionItem {
public:
+
+ /**
+ * @brief Creates instance of CallerIdItem
+ * @param[in] model Shared reference to model component
+ * @param[in] dailogParent Shared reference to dialog parent
+ * @return Shared reference to CallerIdItem
+ */
static CallerIdItemSRef newInstance(CallerIdSRef model,
ucl::ElmWidgetSRef dialogParent);
@@ -39,8 +49,22 @@ namespace call_setting {
// ListOptionItem //
+ /**
+ * @brief Gets option value
+ * @return Current option value
+ */
virtual int getOptionValue() const final override;
+
+ /**
+ * @brief Gets option title
+ * @return Title
+ */
virtual ucl::CString getOptionTitle() const final override;
+
+ /**
+ * @brief Requests option value change
+ * @param[in] value Value
+ */
virtual void requestOptionValueChange(const int value) final override;
private:
diff --git a/call-setting/presenters/items/RadioOptionItem.cpp b/call-setting/presenters/items/RadioOptionItem.cpp
index dbe94a9..f8afc55 100644
--- a/call-setting/presenters/items/RadioOptionItem.cpp
+++ b/call-setting/presenters/items/RadioOptionItem.cpp
@@ -16,6 +16,8 @@
#include "RadioOptionItem.h"
+#include "call-setting/resources.h"
+
#include "call-setting/presenters/common.h"
namespace call_setting { namespace { namespace impl {
@@ -26,6 +28,8 @@ namespace call_setting { namespace { namespace impl {
constexpr EdjeSignal SIGNAL_ENBALE_PASS_EVENTS {"elm,event,pass,enabled"};
constexpr EdjeSignalSrc SIGNAL_SRC_ELM {"elm"};
+
+ constexpr SmartEvent RADIO_CHANGED {"changed"};
}}}
namespace call_setting {
@@ -47,10 +51,6 @@ namespace call_setting {
UCL_ASSERT(m_groupValue, "m_groupValue is NULL");
}
- RadioOptionItem::~RadioOptionItem()
- {
- }
-
RadioOptionItem::ItemInsertionParams
RadioOptionItem::getItemInsertionParams()
{
@@ -68,9 +68,31 @@ namespace call_setting {
radio->addToGroup(*m_radioGroup);
radio->emit(impl::SIGNAL_ENBALE_PASS_EVENTS, impl::SIGNAL_SRC_ELM);
+ radio->addEventHandler(
+ impl::RADIO_CHANGED, WEAK_DELEGATE_THIS(onRadioChanged));
+
+ setAtspiParams(*radio);
+
return radio;
}
+ void RadioOptionItem::setAtspiParams(ElmWidget &widget)
+ {
+ auto &radioAtspi = widget.getAtspi();
+ auto &itemAtspi = *getItemAtspi();
+
+ radioAtspi.setTDomain(TEXT_DOMAIN);
+ radioAtspi.setRole(ELM_ATSPI_ROLE_RADIO_BUTTON);
+ radioAtspi.setDescription(STR_SR_RADIO_BUTTON);
+ radioAtspi.addRelationship(ELM_ATSPI_RELATION_CONTROLLED_BY,
+ as_ao(itemAtspi));
+
+ itemAtspi.addRelationship(ELM_ATSPI_RELATION_CONTROLLER_FOR,
+ as_ao(radioAtspi));
+ itemAtspi.addRelationship(ELM_ATSPI_RELATION_DESCRIBED_BY,
+ as_ao(radioAtspi));
+ }
+
CString RadioOptionItem::getItemPartText(EdjePart part)
{
if (part != impl::ITEM_PART_TITLE) {
@@ -80,6 +102,14 @@ namespace call_setting {
return CString::dup(m_textPart.translate());
}
+ void RadioOptionItem::onRadioChanged(Widget &widget, void *eventInfo)
+ {
+ if (!isActive()) {
+ return;
+ }
+ *m_groupValue = m_itemValue;
+ }
+
void RadioOptionItem::onItemSelected()
{
if (!isActive()) {
@@ -88,4 +118,5 @@ namespace call_setting {
m_radioGroup->setGroupValue(m_itemValue);
*m_groupValue = m_itemValue;
}
+
}
diff --git a/call-setting/presenters/items/RadioOptionItem.h b/call-setting/presenters/items/RadioOptionItem.h
index e855e10..6d0c6a4 100644
--- a/call-setting/presenters/items/RadioOptionItem.h
+++ b/call-setting/presenters/items/RadioOptionItem.h
@@ -27,25 +27,77 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(RadioOptionItem);
+ /**
+ * @brief Represents radio option item
+ */
class RadioOptionItem final : public ucl::ListItemPresenter {
public:
+ /**
+ * @brief Radio group value type
+ */
using GroupValue = ucl::MonoObservable<int>;
UCL_DECLARE_REF_ALIASES_NOFW(GroupValue);
public:
+ /**
+ * @brief Constructor
+ * @param[in] rc Pointer to IRefCountObj (passed automatically)
+ * @param[in] text Item text
+ * @param[in] value Item value
+ * @param[in] groupValue Group value
+ * @param[in] rGroup Shared reference to radio group
+ */
RadioOptionItem(ucl::IRefCountObj &rc, ucl::TString text,
int value, GroupValueSRef groupValue,
ucl::RadioBoxSRef rGroup);
protected:
- ~RadioOptionItem();
+ /**
+ * @brief Default destructor
+ */
+ ~RadioOptionItem() = default;
+
+ /**
+ * @brief Radio changed callback
+ * @param[in] widget Widget
+ * @param[in] eventInfo Event info
+ */
+ void onRadioChanged(ucl::Widget &widget, void *eventInfo);
+
+ /**
+ * @brief Sets ATSPI parameters
+ * @param[in] widget Widget
+ */
+ void setAtspiParams(ucl::ElmWidget &widget);
// ListItemPresenter //
+ /**
+ * @brief Gets GUI item insertion parameters
+ * @details Called just before item is added to list
+ * @return Item insertion params structure
+ */
virtual ItemInsertionParams getItemInsertionParams() final override;
+
+ /**
+ * @brief Gets the content widget for specific GUI item part
+ * @param[in] part Target GUI item part
+ * @param[in] parent Parent widget to use for the content widget
+ * @return Shared reference to the content widget or NULL
+ */
virtual ucl::WidgetSRef getItemPartContent(ucl::EdjePart part,
ucl::ElmWidget &parent) final override;
+
+ /**
+ * @brief Gets text for specific GUI item part
+ * @param[in] part Target GUI item part
+ * @return Text for specific part or NULL
+ */
virtual ucl::CString getItemPartText(ucl::EdjePart part) final override;
+
+ /**
+ * @brief Occurs when GUI item is selected
+ */
virtual void onItemSelected() final override;
private:
diff --git a/call-setting/presenters/items/SimpleListItem.cpp b/call-setting/presenters/items/SimpleListItem.cpp
index dd63a39..a0d6f51 100644
--- a/call-setting/presenters/items/SimpleListItem.cpp
+++ b/call-setting/presenters/items/SimpleListItem.cpp
@@ -26,19 +26,22 @@ namespace call_setting { namespace { namespace impl {
namespace call_setting {
- using ucl::HashMap;
using ucl::ListItemPresenter;
using ucl::IPicker;
- SimpleListItem::SimpleListItem(IRefCountObj &rc,
- ElmStyle style, PartTextMap parts) :
+ SimpleListItem::SimpleListItem(IRefCountObj &rc, ElmStyle style,
+ PartTextMap parts, bool useAtspiRedundant) :
ListItemPresenter::ListItemPresenter(rc),
m_listItemStyle(style),
- m_listItemParts(std::move(parts))
+ m_listItemParts(std::move(parts)),
+ m_useAtspiRedundant(useAtspiRedundant)
{
}
- SimpleListItem::~SimpleListItem()
+ SimpleListItem::SimpleListItem(IRefCountObj &rc, ElmStyle style) :
+ ListItemPresenter::ListItemPresenter(rc),
+ m_listItemStyle(style),
+ m_useAtspiRedundant(true)
{
}
@@ -57,7 +60,8 @@ namespace call_setting {
return *this;
}
- ListItemPresenter::ItemInsertionParams SimpleListItem::getItemInsertionParams()
+ ListItemPresenter::ItemInsertionParams
+ SimpleListItem::getItemInsertionParams()
{
return m_listItemStyle;
}
@@ -75,7 +79,8 @@ namespace call_setting {
EdjePart part, ElmWidget &parent)
{
return tryCreatePickModeItemPartContent(part, parent,
- {impl::PICK_MODE_CHECK_PART, impl::PICK_MODE_CHECK_STYLE});
+ {impl::PICK_MODE_CHECK_PART, impl::PICK_MODE_CHECK_STYLE,
+ true});
}
void SimpleListItem::onItemSelected()
@@ -95,4 +100,11 @@ namespace call_setting {
}
}
}
+
+ void SimpleListItem::onItemAttached()
+ {
+ if (m_useAtspiRedundant) {
+ getItemAtspi()->setRole(ELM_ATSPI_ROLE_REDUNDANT_OBJECT);
+ }
+ }
}
diff --git a/call-setting/presenters/items/SimpleListItem.h b/call-setting/presenters/items/SimpleListItem.h
index b4a214b..f75c997 100644
--- a/call-setting/presenters/items/SimpleListItem.h
+++ b/call-setting/presenters/items/SimpleListItem.h
@@ -26,32 +26,94 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(SimpleListItem);
+ /**
+ * @brief Represents simple option item
+ */
class SimpleListItem final : public ucl::ListItemPresenter,
public ucl::IPickable {
public:
+ /**
+ * @brief Constructor
+ * @param[in] rc Pointer to IRefCountObj (passed automatically)
+ * @param[in] style Item style
+ * @param[in] parts Item parts
+ * @param[in] useAtspiRedundant ATSPI object redundancy flag.
+ * true if item is ATSPI-redundant, false - if not
+ */
SimpleListItem(ucl::IRefCountObj &rc, ucl::ElmStyle style,
- PartTextMap parts = {});
-
+ PartTextMap parts, bool useAtspiRedundant = false);
+
+ /**
+ * @brief Constructor
+ * @details Constructs item as ATSPI redundant object
+ * @param[in] rc Pointer to IRefCountObj (passed automatically)
+ * @param[in] style Item style
+ */
+ SimpleListItem(ucl::IRefCountObj &rc, ucl::ElmStyle style);
+
+ /**
+ * @brief Sets select handler
+ * @param[in] handler Handler
+ */
void setItemSelectHandler(NotiHandler handler);
+
+ /**
+ * @brief Sets longpress handler
+ * @param[in] handler Handler
+ */
void setItemLongpressHandler(NotiHandler handler);
// IPickable //
+
+ /**
+ * @brief Gets picker
+ * @return Picker. @see ucl::IPicker
+ */
virtual ucl::IPicker &getPicker() final override;
protected:
// ListItemPresenter //
+ /**
+ * @brief Gets GUI item insertion parameters
+ * @details Called just before item is added to list
+ * @return Item insertion params structure
+ */
virtual ItemInsertionParams getItemInsertionParams() override;
+ /**
+ * @brief Gets text for specific GUI item part
+ * @param[in] part Target GUI item part
+ * @return Text for specific part or NULL
+ */
virtual ucl::CString getItemPartText(ucl::EdjePart part) override;
+
+ /**
+ * @brief Gets the content widget for specific GUI item part
+ * @param[in] part Target GUI item part
+ * @param[in] parent Parent widget to use for the content widget
+ * @return Shared reference to the content widget or NULL
+ */
virtual ucl::WidgetSRef getItemPartContent(
ucl::EdjePart part, ucl::ElmWidget &parent) override;
+ /**
+ * @brief Occurs when GUI item is selected
+ */
virtual void onItemSelected() override;
+
+ /**
+ * @brief Occurs when GUI item is long pressed
+ */
virtual void onItemLongpressed() override;
+ /**
+ * @brief Occurs when GUI item is attached
+ */
+ virtual void onItemAttached() override;
+
private:
- ~SimpleListItem();
+ ~SimpleListItem() = default;
private:
ucl::ElmStyle m_listItemStyle;
@@ -59,6 +121,7 @@ namespace call_setting {
NotiHandler m_onItemSelected;
NotiHandler m_onItemLongpressed;
+ bool m_useAtspiRedundant;
friend class ucl::ReffedObj<SimpleListItem>;
};
diff --git a/call-setting/presenters/items/VoicemailNumberItem.h b/call-setting/presenters/items/VoicemailNumberItem.h
index ed9957c..2070109 100644
--- a/call-setting/presenters/items/VoicemailNumberItem.h
+++ b/call-setting/presenters/items/VoicemailNumberItem.h
@@ -27,8 +27,17 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(VoicemailNumberItem);
+ /**
+ * @brief Represents voicemail number item
+ */
class VoicemailNumberItem final : public ucl::ListItemPresenter {
public:
+ /**
+ * @brief Creates instance of VoicemailNumberItem
+ * @param[in] model Shared reference to model component
+ * @param[in] itemSelectHandler Item select handler
+ * @return Shared reference to VoicemailNumberItem
+ */
static VoicemailNumberItemSRef newInstance(
VoicemailSRef model,
NotiHandler itemSelectHandler);
@@ -36,8 +45,23 @@ namespace call_setting {
protected:
// ListItemPresenter //
+ /**
+ * @brief Gets GUI item insertion parameters
+ * @details Called just before item is added to list
+ * @return Item insertion params structure
+ */
virtual ItemInsertionParams getItemInsertionParams() final override;
+
+ /**
+ * @brief Gets text for specific GUI item part
+ * @param[in] part Target GUI item part
+ * @return Text for specific part or NULL
+ */
virtual ucl::CString getItemPartText(ucl::EdjePart part) final override;
+
+ /**
+ * @brief Occurs when GUI item is selected
+ */
virtual void onItemSelected() final override;
private:
diff --git a/call-setting/presenters/items/base/CheckOptionItem.cpp b/call-setting/presenters/items/base/CheckOptionItem.cpp
index 9450a3b..ff1d095 100644
--- a/call-setting/presenters/items/base/CheckOptionItem.cpp
+++ b/call-setting/presenters/items/base/CheckOptionItem.cpp
@@ -16,6 +16,8 @@
#include "CheckOptionItem.h"
+#include "call-setting/resources.h"
+
#include "call-setting/presenters/common.h"
namespace call_setting { namespace { namespace impl {
@@ -64,20 +66,39 @@ namespace call_setting {
return nullptr;
}
- auto check = makeShared<StyledWidget>(elm_check_add(parent));
+ auto check = makeShared<StyledWidget>(elm_check_add(as_eo(parent)));
check->bindToEo();
check->setStyle(impl::CHECK_STYLE);
- elm_check_state_set(*check, toEina(m_checkValue));
- evas_object_repeat_events_set(*check, EINA_FALSE);
- evas_object_propagate_events_set(*check, EINA_FALSE);
+ elm_check_state_set(as_eo(*check), toEina(m_checkValue));
+ evas_object_repeat_events_set(as_eo(*check), EINA_FALSE);
+ evas_object_propagate_events_set(as_eo(*check), EINA_FALSE);
+
+ check->addEventHandler(impl::CHECK_CHANGED,
+ WEAK_DELEGATE_THIS(onCheckChanged));
- check->addEventHandler(
- impl::CHECK_CHANGED, WEAK_DELEGATE_THIS(onCheckChanged));
+ setAtspiParams(*check);
return check;
}
+ void CheckOptionItem::setAtspiParams(ElmWidget &widget)
+ {
+ auto &checkAtspi = widget.getAtspi();
+ auto &itemAtspi = *getItemAtspi();
+
+ checkAtspi.setTDomain(TEXT_DOMAIN);
+ checkAtspi.setRole(ELM_ATSPI_ROLE_TOGGLE_BUTTON);
+ checkAtspi.setDescription(STR_SR_SWITCH);
+ checkAtspi.addRelationship(ELM_ATSPI_RELATION_CONTROLLED_BY,
+ as_ao(itemAtspi));
+
+ itemAtspi.addRelationship(ELM_ATSPI_RELATION_CONTROLLER_FOR,
+ as_ao(checkAtspi));
+ itemAtspi.addRelationship(ELM_ATSPI_RELATION_DESCRIBED_BY,
+ as_ao(checkAtspi));
+ }
+
CString CheckOptionItem::getItemPartText(const EdjePart part)
{
if (part == impl::ITEM_PART_TITLE) {
@@ -113,10 +134,10 @@ namespace call_setting {
void CheckOptionItem::onCheckChanged(Widget &widget, void *eventInfo)
{
if (!isActive()) {
- elm_check_state_set(widget, toEina(m_checkValue));
+ elm_check_state_set(as_eo(widget), toEina(m_checkValue));
return;
}
- m_checkValue = elm_check_state_get(widget);
+ m_checkValue = elm_check_state_get(as_eo(widget));
syncOptionValue();
}
@@ -179,7 +200,7 @@ namespace call_setting {
if (const auto item = getItem()) {
if (const auto check = dynamicWidgetCast<StyledWidget>(
item.getContent(impl::ITEM_PART_CHECK))) {
- elm_check_state_set(*check, toEina(m_checkValue));
+ elm_check_state_set(as_eo(*check), toEina(m_checkValue));
}
}
}
diff --git a/call-setting/presenters/items/base/CheckOptionItem.h b/call-setting/presenters/items/base/CheckOptionItem.h
index 1bb5bf5..7e64168 100644
--- a/call-setting/presenters/items/base/CheckOptionItem.h
+++ b/call-setting/presenters/items/base/CheckOptionItem.h
@@ -25,37 +25,115 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(CheckOptionItem);
+ /**
+ * @brief Represents item with on/off indicator
+ */
class CheckOptionItem : public ucl::ListItemPresenter {
protected:
+
+ /**
+ * @brief Enumeration of item states
+ */
enum class State {
- NORMAL,
- PROCESSING
+ NORMAL, /**< Normal*/
+ PROCESSING /**< Working*/
};
protected:
+
+ /**
+ * @brief Constructor
+ * @param[in] rc Pointer to IRefCountObj (passed automatically)
+ */
CheckOptionItem(ucl::IRefCountObj &rc);
+
+ /**
+ * @brief Default destructor
+ */
~CheckOptionItem();
+
+ /**
+ * @brief Gets state
+ * @return Current state
+ */
virtual State getState() const = 0;
+
+ /**
+ * @brief Gets option value
+ * @return Current option value. @see TriState
+ */
virtual TriState getOptionValue() const = 0;
+
+ /**
+ * @brief Gets option title
+ * @return Title
+ */
virtual ucl::CString getOptionTitle() const = 0;
+
+ /**
+ * @brief Checks if there is secondary text
+ * @return true if option has secondary text, false - if not
+ */
virtual bool hasOptionSubText() const;
+
+ /**
+ * @brief Gets option sub text
+ * @return Sub text
+ */
virtual ucl::CString getOptionSubText() const;
+
+ /**
+ * @brief Requests option value change
+ * @param[in] value Value
+ */
virtual void requestOptionValueChange(bool value) = 0;
+ /**
+ * @brief Prepares option data
+ */
void prepare();
+
+ /**
+ * @brief Updates option data
+ */
void update();
// ListItemPresenter //
+ /**
+ * @brief Gets GUI item insertion parameters
+ * @details Called just before item is added to list
+ * @return Item insertion params structure
+ */
virtual ItemInsertionParams getItemInsertionParams() final override;
+ /**
+ * @brief Occurs when GUI item is attached to this item presenter
+ * @details Called after getItemInsertionParams() at the end of
+ * item to list addition process.
+ */
virtual void onItemAttached() final override;
+ /**
+ * @brief Gets the content widget for specific GUI item part
+ * @param[in] part Target GUI item part
+ * @param[in] parent Parent widget to use for the content widget
+ * @return Shared reference to the content widget or NULL
+ */
virtual ucl::WidgetSRef getItemPartContent(
ucl::EdjePart part, ucl::ElmWidget &parent) final override;
+
+ /**
+ * @brief Gets text for specific GUI item part
+ * @param[in] part Target GUI item part
+ * @return Text for specific part or NULL
+ */
virtual ucl::CString getItemPartText(ucl::EdjePart part) final override;
+ /**
+ * @brief Occurs when GUI item is selected
+ */
virtual void onItemSelected() final override;
private:
@@ -68,6 +146,7 @@ namespace call_setting {
void syncCheckValue();
void syncCheckValueForce();
void setCheckValue(bool value);
+ void setAtspiParams(ucl::ElmWidget &check);
void syncItemEnabled();
diff --git a/call-setting/presenters/items/base/ListOptionItem.h b/call-setting/presenters/items/base/ListOptionItem.h
index e59449a..322e28b 100644
--- a/call-setting/presenters/items/base/ListOptionItem.h
+++ b/call-setting/presenters/items/base/ListOptionItem.h
@@ -26,39 +26,102 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(ListOptionItem);
+ /**
+ * @brief Represents option item
+ */
class ListOptionItem : public ucl::ListItemPresenter {
protected:
+ /**
+ * @brief Option entry
+ */
struct Option final {
- int id;
- ucl::TString text;
+ int id; /**< Option ID*/
+ ucl::TString text; /**< Option name*/
+
+ /**
+ * @brief Constructor
+ * @param[in] optId Option ID
+ * @param[in] text Option name
+ */
Option(int optId, ucl::TString text) :
id(optId), text(std::move(text))
{
}
};
+ /**
+ * @brief List of options
+ */
using Options = std::list<Option>;
protected:
+
+ /**
+ * @brief Constructor
+ * @param[in] rc Pointer to IRefCountObj (passed automatically)
+ */
ListOptionItem(ucl::IRefCountObj &rc);
+
+ /**
+ * @brief Default destructor
+ */
virtual ~ListOptionItem();
+ /**
+ * @brief Gets option value
+ * @return Current option value
+ */
virtual int getOptionValue() const = 0;
+
+ /**
+ * @brief Gets option title
+ * @return Title
+ */
virtual ucl::CString getOptionTitle() const = 0;
+
+ /**
+ * @brief Requests option value change
+ * @param[in] value Value
+ */
virtual void requestOptionValueChange(int value) = 0;
+ /**
+ * @brief Updates option data
+ */
void update();
+
+ /**
+ * @brief Tries to dismiss dialog
+ */
void tryDismissDialog();
- void prepare(std::list<Option> options,
+ /**
+ * @brief Prepares option data
+ * @param[in] options List of options
+ * @param[in] dialogParent Shared reference to dialog parent
+ */
+ void prepare(Options options,
ucl::ElmWidgetSRef dialogParent);
// ListItemPresenter //
+ /**
+ * @brief Gets GUI item insertion parameters
+ * @details Called just before item is added to list
+ * @return Item insertion params structure
+ */
virtual ItemInsertionParams getItemInsertionParams() final override;
+ /**
+ * @brief Gets text for specific GUI item part
+ * @param[in] part Target GUI item part
+ * @return Text for specific part or NULL
+ */
virtual ucl::CString getItemPartText(ucl::EdjePart part) final override;
+ /**
+ * @brief Occurs when GUI item is selected
+ */
virtual void onItemSelected() final override;
private:
diff --git a/call-setting/presenters/misc/AtspiHighlightHelper.cpp b/call-setting/presenters/misc/AtspiHighlightHelper.cpp
new file mode 100644
index 0000000..f978dca
--- /dev/null
+++ b/call-setting/presenters/misc/AtspiHighlightHelper.cpp
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * 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.
+ */
+
+#include "AtspiHighlightHelper.h"
+
+#include "call-setting/presenters/common.h"
+
+namespace call_setting { namespace { namespace impl {
+
+ constexpr EoDataKey ATSPI_HELPER_DATA {"callui,atspi,highlight,helper"};
+}}}
+
+namespace call_setting {
+
+ using ucl::AtspiGestureEventInfo;
+ using ucl::Atspi;
+ using ucl::ListItemPresenter;
+
+ AtspiHighlightHelperSRef AtspiHighlightHelper::newInstance(
+ GuiPresenter &parent)
+ {
+ auto result = makeShared<AtspiHighlightHelper>();
+
+ FAIL_RETURN_VALUE(result->prepare(parent), {},
+ "result->prepare() failed!");
+
+ return result;
+ }
+
+ AtspiHighlightHelper::AtspiHighlightHelper(IRefCountObj &rc) :
+ GuiPresenter(rc)
+ {
+ }
+
+ Result AtspiHighlightHelper::prepare(GuiPresenter &parent)
+ {
+ FAIL_RETURN(GuiPresenter::prepare(parent),
+ "GuiPresenter::prepare() failed!");
+
+ return RES_OK;
+ }
+
+ void AtspiHighlightHelper::setEventHandler(
+ EventHandler handler)
+ {
+ m_eventHandler = handler;
+ }
+
+ void AtspiHighlightHelper::registerObject(ElmWidget &widget)
+ {
+ widget.getAtspi().addGestureHandler(
+ WEAK_DELEGATE_THIS(onAtspiGesture));
+ }
+
+ void AtspiHighlightHelper::registerObject(ListItemPresenter &listItemPrs)
+ {
+ listItemPrs.setItemAtspiGestureHandler(
+ WEAK_DELEGATE_THIS(onAtspiGesture));
+ }
+
+ void AtspiHighlightHelper::handleAtspiGesture(Atspi &atspi,
+ AtspiGestureEventInfo &e)
+ {
+ Elm_Interface_Atspi_Accessible *currentAo = as_ao(atspi);
+ DLOG("Access object [%p]", currentAo);
+
+ if (!isActive()) {
+ DLOG("Ignored. Presenter is not active");
+ if ((e.gestureInfo.type != ELM_ATSPI_GESTURE_ONE_FINGER_SINGLE_TAP)
+ && (currentAo != as_ao(getWindow()))) {
+ DLOG("Prevent default handler");
+ e.preventDefault = true;
+ }
+ return;
+ }
+
+ e.stopPropagation = true;
+ e.preventDefault = false;
+
+ const Elm_Atspi_Relation_Type relation = getFlowRelation(e.gestureInfo);
+ if (relation == ELM_ATSPI_RELATION_NULL) {
+ DLOG("Not supported gesture type for processing");
+ return;
+ }
+
+ const Elm_Interface_Atspi_Accessible *relationAo = nullptr;
+ if (const auto handler = m_eventHandler.lock()) {
+ relationAo = handler(currentAo, relation);
+ }
+ if (!relationAo) {
+ DLOG("Relation object is NULL");
+ return;
+ }
+ DLOG("Relation object [%p]", relationAo);
+
+ if (currentAo == as_ao(getWindow())) {
+ const auto fakeAtspi = getFakeAtspi();
+ if (!fakeAtspi) {
+ LOG_RETURN_VOID(RES_FAIL, "fakeAtspi is NULL!");
+ }
+ currentAo = as_ao(*fakeAtspi);
+ fakeAtspi->highlight();
+ }
+
+ Atspi currentAtspi {currentAo};
+ currentAtspi.delRelationship(relation, nullptr);
+ currentAtspi.addRelationship(relation, relationAo);
+ }
+
+ Atspi *AtspiHighlightHelper::getFakeAtspi()
+ {
+ auto &win = getWindow();
+ auto widget = static_cast<ElmWidget *>(win.getData(
+ impl::ATSPI_HELPER_DATA));
+
+ if (!widget) {
+ const ElmWidgetSRef obj = util::createFakeAccessObject(win);
+ if (!obj) {
+ LOG_RETURN_VALUE(RES_FAIL, nullptr,
+ "createFakeAccessObject() failed!");
+ }
+ obj->setIsOwner(false);
+ widget = obj.get();
+ win.setData(impl::ATSPI_HELPER_DATA, widget);
+ }
+
+ return &widget->getAtspi();
+ }
+
+ void AtspiHighlightHelper::onAtspiGesture(Atspi &atspi,
+ AtspiGestureEventInfo &eventInfo)
+ {
+ handleAtspiGesture(atspi, eventInfo);
+ }
+}
diff --git a/call-setting/presenters/misc/AtspiHighlightHelper.h b/call-setting/presenters/misc/AtspiHighlightHelper.h
new file mode 100644
index 0000000..146c2ff
--- /dev/null
+++ b/call-setting/presenters/misc/AtspiHighlightHelper.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * 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.
+ */
+
+#ifndef __CALL_SETTING_PRESENTERS_MISC_ATSPI_HIGHLIGHT_HELPER_H__
+#define __CALL_SETTING_PRESENTERS_MISC_ATSPI_HIGHLIGHT_HELPER_H__
+
+#include "ucl/mvp/GuiPresenter.h"
+#include "ucl/mvp/ListItemPresenter.h"
+
+#include "call-setting/presenters/types.h"
+
+namespace call_setting {
+
+ UCL_DECLARE_REF_ALIASES(AtspiHighlightHelper);
+
+ /**
+ * @brief Represents helper presenter for Screen Reader feature
+ */
+ class AtspiHighlightHelper final : public ucl::GuiPresenter {
+ public:
+
+ /**
+ * @brief Event handler definition
+ */
+ using EventHandler = ucl::WeakDelegate<
+ const Elm_Interface_Atspi_Accessible *(
+ const Elm_Interface_Atspi_Accessible *ao,
+ Elm_Atspi_Relation_Type flowRelation)>;
+
+ public:
+
+ /**
+ * @brief Creates new instance of AtspiHighlightHelper
+ * @param[in] parent Parent presenter
+ * @return Shared reference to AtspiHighlightHelper instance
+ * on success or NULL otherwise
+ */
+ static AtspiHighlightHelperSRef newInstance(GuiPresenter &parent);
+
+ /**
+ * @brief Sets event handler
+ * @param[in] handler Event handler
+ */
+ void setEventHandler(EventHandler handler);
+
+ /**
+ * @brief Registers widget for handling Atspi gesture events
+ * @param[in] widget Widget to register
+ */
+ void registerObject(ucl::ElmWidget &widget);
+
+ /**
+ * @brief Registers List Item presenter for handling Atspi
+ * gesture events
+ * @param[in] listItemPrs List item presenter to register
+ */
+ void registerObject(ucl::ListItemPresenter &listItemPrs);
+
+ private:
+ AtspiHighlightHelper(ucl::IRefCountObj &rc);
+ ~AtspiHighlightHelper() = default;
+
+ ucl::Result prepare(GuiPresenter &parent);
+
+ void handleAtspiGesture(ucl::Atspi &atspi,
+ ucl::AtspiGestureEventInfo &e);
+
+ void onAtspiGesture(ucl::Atspi &atspi,
+ ucl::AtspiGestureEventInfo &eventInfo);
+
+ ucl::Atspi *getFakeAtspi();
+
+ private:
+ EventHandler m_eventHandler;
+
+ friend class ucl::ReffedObj<AtspiHighlightHelper>;
+ };
+}
+
+#endif // __CALL_SETTING_PRESENTERS_MISC_ATSPI_HIGHLIGHT_HELPER_H__
diff --git a/call-setting/presenters/misc/KeypadPresenter.cpp b/call-setting/presenters/misc/KeypadPresenter.cpp
index ebca959..5d812de 100644
--- a/call-setting/presenters/misc/KeypadPresenter.cpp
+++ b/call-setting/presenters/misc/KeypadPresenter.cpp
@@ -18,7 +18,10 @@
#include <feedback.h>
+#include "ucl/gui/helpers.h"
+
#include "call-setting/view/KeypadNumberBtn.h"
+#include "call-setting/view/AoSequencer.h"
#include "call-setting/resources.h"
@@ -36,41 +39,65 @@ namespace call_setting { namespace { namespace impl {
constexpr EdjePart PART_ENTRY {"swl.entry"};
constexpr EdjePart PART_GUIDE_TXT {"txt.guide"};
+ constexpr EdjePart PART_AO_ENTRY {"ao.entry"};
+
constexpr EoDataKey BTN_DATA_KEY {"__btn_data__"};
constexpr EdjeSignal SIGNAL_SHOW_GUIDE_TXT {"guide.txt.show"};
constexpr EdjeSignal SIGNAL_HIDE_GUIDE_TXT {"guide.txt.hide"};
constexpr EdjeSignalSrc SIGNAL_SRC_KEYPAD {"keypad"};
+ const TString STR_EMPTY;
+
struct BtnInfo {
- KeypadNumberBtn::Info info;
+ KeypadNumberBtn::Info baseInfo;
EdjePart part;
+ const TString &srDesc;
};
const BtnInfo BtnInfoList[] = {
{{ElmStyle {"callsetting/keypad_00"}, "0", nullptr, nullptr,
- KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.0"}},
+ KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.0"},
+ STR_EMPTY},
+
{{ElmStyle {"callsetting/keypad_01"}, "1", nullptr, nullptr,
- KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.1"}},
+ KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.1"},
+ STR_EMPTY},
+
{{ElmStyle {"callsetting/keypad_02"}, "2", "ABC", nullptr,
- KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.2"}},
+ KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.2"},
+ STR_EMPTY},
+
{{ElmStyle {"callsetting/keypad_03"}, "3", "DFE", "#",
- KeypadNumberBtn::SymbolState::BELOW}, EdjePart {"swl.btn.3"}},
+ KeypadNumberBtn::SymbolState::BELOW}, EdjePart {"swl.btn.3"},
+ STR_SR_DOUBLE_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL},
+
{{ElmStyle {"callsetting/keypad_04"}, "4", "GHI", nullptr,
- KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.4"}},
+ KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.4"},
+ STR_EMPTY},
+
{{ElmStyle {"callsetting/keypad_05"}, "5", "JKL", "+",
- KeypadNumberBtn::SymbolState::RIGHT}, EdjePart {"swl.btn.5"}},
+ KeypadNumberBtn::SymbolState::RIGHT}, EdjePart {"swl.btn.5"},
+ STR_SR_DOUBLE_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL},
+
{{ElmStyle {"callsetting/keypad_06"}, "6", "MNO", nullptr,
- KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.6"}},
+ KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.6"},
+ STR_EMPTY},
+
{{ElmStyle {"callsetting/keypad_07"}, "7", "PQRS", "*",
- KeypadNumberBtn::SymbolState::BELOW}, EdjePart {"swl.btn.7"}},
+ KeypadNumberBtn::SymbolState::BELOW}, EdjePart {"swl.btn.7"},
+ STR_SR_DOUBLE_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL},
+
{{ElmStyle {"callsetting/keypad_08"}, "8", "TUV", nullptr,
- KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.8"}},
+ KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.8"},
+ STR_EMPTY},
+
{{ElmStyle {"callsetting/keypad_09"}, "9", "WXYZ", nullptr,
- KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.9"}}
+ KeypadNumberBtn::SymbolState::HIDDEN}, EdjePart {"swl.btn.9"},
+ STR_EMPTY},
};
- constexpr int BTNS_COUNT = sizeof(BtnInfoList) / sizeof(BtnInfoList[0]);
+ constexpr auto ENTRY_ATSPI_TEXT_BUFFER_SIZE = 512;
void *asData(const int index)
{
@@ -93,6 +120,7 @@ namespace call_setting { namespace { namespace impl {
namespace call_setting {
using ucl::Layout;
+ using ucl::Atspi;
// KeypadPresenter::Builder //
@@ -167,12 +195,18 @@ namespace call_setting {
FAIL_RETURN(createEntry(number),
"createEntry() failed!");
+ FAIL_RETURN(createEntryAo(),
+ "createEntryAo() failed!");
+
FAIL_RETURN(createBackspaceButton(),
"createBackspaceButton() failed!");
FAIL_RETURN(createNumberButtons(),
"createNumberButtons() failed!");
+ FAIL_RETURN(createAtspiHighlightHelper(),
+ "createAtspiHighlightHelper() failed!");
+
return RES_OK;
}
@@ -195,6 +229,8 @@ namespace call_setting {
LOG_RETURN(RES_FAIL, "Layout::build() failed!");
}
+ setDeactivatorSink(m_widget);
+
m_widget->setText(STR_KEYPAD_GUIDE_TEXT,
impl::PART_GUIDE_TXT);
@@ -203,17 +239,21 @@ namespace call_setting {
Result KeypadPresenter::createConfirmButton()
{
- auto eo = elm_button_add(*m_widget);
+ auto eo = elm_button_add(as_eo(*m_widget));
if (!eo) {
LOG_RETURN(RES_FAIL, "eo is NULL");
}
- auto confirmBtn = makeShared<StyledWidget>(eo, false);
- m_widget->setContent(*confirmBtn, impl::PART_CONFIRM_BTN);
+ m_confirmBtn = makeShared<StyledWidget>(eo, false);
+ m_widget->setContent(*m_confirmBtn, impl::PART_CONFIRM_BTN);
- confirmBtn->setStyle(impl::STYLE_BTN_CONFIRM);
- confirmBtn->addEventHandler(BTN_CLICKED,
+ m_confirmBtn->setStyle(impl::STYLE_BTN_CONFIRM);
+ m_confirmBtn->addEventHandler(BTN_CLICKED,
WEAK_DELEGATE_THIS(onConfirmBtnClicked));
+ auto &atspi = m_confirmBtn->getAtspi();
+ atspi.setTDomain(TEXT_DOMAIN);
+ atspi.setName(STR_SR_CONFIRM.getCStr());
+
return RES_OK;
}
@@ -227,19 +267,23 @@ namespace call_setting {
Result KeypadPresenter::createBackspaceButton()
{
- auto backspaceBtn = KeypadBackspaceBtn::newInstance(*m_widget);
- if (!backspaceBtn) {
+ m_backspaceBtn = KeypadBackspaceBtn::newInstance(*m_widget);
+ if (!m_backspaceBtn) {
LOG_RETURN(RES_FAIL, "m_backspaceBtn is NULL");
}
- m_widget->setContent(*backspaceBtn, impl::PART_BACKSPACE_BTN);
- backspaceBtn->setIsOwner(false);
+ m_widget->setContent(*m_backspaceBtn, impl::PART_BACKSPACE_BTN);
+ m_backspaceBtn->setIsOwner(false);
- backspaceBtn->addEventHandler(BTN_CLICKED,
+ m_backspaceBtn->addEventHandler(BTN_CLICKED,
WEAK_DELEGATE_THIS(onBackspaceBtnClicked));
- backspaceBtn->addEventHandler(CS_BTN_LONGPRESSED,
+ m_backspaceBtn->addEventHandler(CS_BTN_LONGPRESSED,
WEAK_DELEGATE_THIS(onBackspaceLongPressed));
+ auto &atspi = m_backspaceBtn->getAtspi();
+ atspi.setTDomain(TEXT_DOMAIN);
+ atspi.setName(STR_SR_BACKSPACE.getCStr());
+
return RES_OK;
}
@@ -270,6 +314,43 @@ namespace call_setting {
if (!number.empty()) {
m_entry->setNumber(number);
}
+ m_entry->getAtspi().setHighlightable(false);
+
+ return RES_OK;
+ }
+
+ CString KeypadPresenter::onAtspiEntryNameCb(Atspi &atspi)
+ {
+ char buffer[impl::ENTRY_ATSPI_TEXT_BUFFER_SIZE] = { 0 };
+ snprintf(buffer, sizeof(buffer), "%s, %s",
+ STR_SR_EDIT_BOX.translate(),
+ STR_SR_KEYPAD.translate());
+
+ return CString::dup(buffer);
+ }
+
+ CString KeypadPresenter::onAtspiEntryDescriptionCb(Atspi &atspi)
+ {
+ auto number = m_entry->getNumber();
+ char buffer[impl::ENTRY_ATSPI_TEXT_BUFFER_SIZE] = { 0 };
+ snprintf(buffer, sizeof(buffer), "%s, %s",
+ (number.empty() ? STR_SR_EMPTY.translate() : number.c_str()),
+ STR_SR_EDITING.translate());
+
+ return CString::dup(buffer);
+ }
+
+ Result KeypadPresenter::createEntryAo()
+ {
+ m_aoEntry = util::createAccessObject(*m_widget, impl::PART_AO_ENTRY);
+
+ auto &atspi = m_aoEntry->getAtspi();
+
+ atspi.setReadingInfo(ELM_ACCESSIBLE_READING_INFO_TYPE_NAME |
+ ELM_ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION);
+
+ atspi.setNameCb(WEAK_DELEGATE_THIS(onAtspiEntryNameCb));
+ atspi.setDescriptionCb(WEAK_DELEGATE_THIS(onAtspiEntryDescriptionCb));
return RES_OK;
}
@@ -287,21 +368,33 @@ namespace call_setting {
Result KeypadPresenter::createNumberButtons()
{
- for (int i = 0; i < impl::BTNS_COUNT; i++) {
+ const auto btnsCount = sizeof(impl::BtnInfoList) /
+ sizeof(impl::BtnInfoList[0]);
+ for (int i = 0; i < btnsCount; i++) {
+ const auto &btnInfo = impl::BtnInfoList[i];
+
auto btn = KeypadNumberBtn::newInstance(*m_widget,
- impl::BtnInfoList[i].info);
+ btnInfo.baseInfo);
if (!btn) {
LOG_RETURN(RES_FAIL, "btn is NULL");
}
-
btn->setData(impl::BTN_DATA_KEY, impl::asData(i));
- m_widget->setContent(*btn, impl::BtnInfoList[i].part);
+ m_widget->setContent(*btn, btnInfo.part);
btn->addEventHandler(BTN_CLICKED,
WEAK_DELEGATE_THIS(onNumberBtnClicked));
btn->addEventHandler(CS_BTN_LONGPRESSED,
WEAK_DELEGATE_THIS(onNumberBtnLongPressed));
+
+ auto &atspi = btn->getAtspi();
+ atspi.setName(btnInfo.baseInfo.digit);
+
+ if (isNotEmpty(btnInfo.srDesc)) {
+ atspi.setTDomain(TEXT_DOMAIN);
+ atspi.setDescription(btnInfo.srDesc.getCStr());
+ }
+ m_numberBtns.emplace_back(std::move(btn));
}
return RES_OK;
@@ -310,13 +403,53 @@ namespace call_setting {
void KeypadPresenter::onNumberBtnClicked(Widget &widget,
void *eventInfo)
{
- m_entry->insert(impl::BtnInfoList[impl::getIndex(widget)].info.digit);
+ m_entry->insert(impl::BtnInfoList[impl::getIndex(widget)].
+ baseInfo.digit);
}
void KeypadPresenter::onNumberBtnLongPressed(Widget &widget,
void *eventInfo)
{
- m_entry->insert(impl::BtnInfoList[impl::getIndex(widget)].info.symbol);
+ m_entry->insert(impl::BtnInfoList[impl::getIndex(widget)].
+ baseInfo.symbol);
+ }
+
+ Elm_Interface_Atspi_Accessible *KeypadPresenter::getAccessObject(
+ bool isFlowsTo)
+ {
+ return (isFlowsTo ? as_ao(*m_numberBtns[0]) : as_ao(*m_backspaceBtn));
+ }
+
+ Result KeypadPresenter::createAtspiHighlightHelper()
+ {
+ m_atspiHelper = AtspiHighlightHelper::newInstance(*this);
+ if (!m_atspiHelper) {
+ LOG_RETURN(RES_FAIL,
+ "AtspiHighlightHelper::newInstance() failed!");
+ }
+
+ for (auto &btn: m_numberBtns) {
+ m_atspiHelper->registerObject(*btn);
+ }
+ m_atspiHelper->registerObject(*m_confirmBtn);
+ m_atspiHelper->registerObject(*m_backspaceBtn);
+ m_atspiHelper->registerObject(*m_aoEntry);
+
+ m_atspiHelper->setEventHandler(WEAK_DELEGATE_THIS(onAtspiHighlight));
+
+ return RES_OK;
+ }
+
+ const Elm_Interface_Atspi_Accessible *KeypadPresenter::onAtspiHighlight(
+ const Elm_Interface_Atspi_Accessible *ao,
+ Elm_Atspi_Relation_Type flowRelation)
+ {
+ return AoSequencer(ao, flowRelation)
+ .processEach(m_numberBtns)
+ .process(*m_confirmBtn)
+ .process(*m_aoEntry)
+ .process(*m_backspaceBtn)
+ .getNext();
}
}
diff --git a/call-setting/presenters/misc/KeypadPresenter.h b/call-setting/presenters/misc/KeypadPresenter.h
index 75aae7b..d293cdc 100644
--- a/call-setting/presenters/misc/KeypadPresenter.h
+++ b/call-setting/presenters/misc/KeypadPresenter.h
@@ -23,8 +23,11 @@
#include "ucl/gui/StyledWidget.h"
#include "ucl/misc/Timeout.h"
-#include "call-setting/view/KeypadEntry.h"
#include "call-setting/view/KeypadBackspaceBtn.h"
+#include "call-setting/view/KeypadEntry.h"
+#include "call-setting/view/KeypadNumberBtn.h"
+
+#include "AtspiHighlightHelper.h"
#include "call-setting/presenters/types.h"
@@ -94,10 +97,22 @@ namespace call_setting {
/**
* @brief Gets widget
- * @return Widget object. @see ucl::Widget
+ * @return Reference to Widget object
*/
ucl::Widget &getWidget();
+ /**
+ * @brief Gets access object by accessibility flow direction to/from
+ * current object
+ * @remark This function can be used for external object request when
+ * external object handles Atspi event on change
+ * Screen Reader highlight on next/previous object.
+ * @param[in] isFlowsTo Defines whether external object handles
+ * flows to or from highlight change event
+ * @return Access object on success, otherwise NULL
+ */
+ Elm_Interface_Atspi_Accessible *getAccessObject(bool isFlowsTo);
+
private:
KeypadPresenter(ucl::IRefCountObj &rc,
NotiHandler handler,
@@ -113,6 +128,8 @@ namespace call_setting {
ucl::Result createBackspaceButton();
ucl::Result createNumberButtons();
ucl::Result createEntry(const std::string &number);
+ ucl::Result createEntryAo();
+ ucl::Result createAtspiHighlightHelper();
void onNumberBtnClicked(ucl::Widget &widget, void *eventInfo);
void onNumberBtnLongPressed(ucl::Widget &widget, void *eventInfo);
@@ -121,11 +138,23 @@ namespace call_setting {
void onEntryChanged(ucl::Widget &widget, void *eventInfo);
void onConfirmBtnClicked(ucl::Widget &widget, void *eventInfo);
+ ucl::CString onAtspiEntryNameCb(ucl::Atspi &atspi);
+ ucl::CString onAtspiEntryDescriptionCb(ucl::Atspi &atspi);
+
+ const Elm_Interface_Atspi_Accessible *onAtspiHighlight(
+ const Elm_Interface_Atspi_Accessible *current,
+ Elm_Atspi_Relation_Type flowRelation);
+
private:
const NotiHandler m_completeHandler;
ucl::LayoutSRef m_widget;
+ AtspiHighlightHelperSRef m_atspiHelper;
+ std::vector<KeypadNumberBtnSRef> m_numberBtns;
+ KeypadBackspaceBtnSRef m_backspaceBtn;
+ ucl::StyledWidgetSRef m_confirmBtn;
KeypadEntrySRef m_entry;
+ ucl::ElmWidgetSRef m_aoEntry;
friend class ucl::ReffedObj<KeypadPresenter>;
};
diff --git a/call-setting/presenters/misc/MoreOptionsPresenter.cpp b/call-setting/presenters/misc/MoreOptionsPresenter.cpp
index 7a5fe69..f04c304 100644
--- a/call-setting/presenters/misc/MoreOptionsPresenter.cpp
+++ b/call-setting/presenters/misc/MoreOptionsPresenter.cpp
@@ -123,7 +123,7 @@ namespace call_setting {
FAIL_RETURN(GuiPresenter::prepare(parent, PF_DEACTIVATOR),
"GuiPresenter::prepare() failed!");
- Evas_Object *const more = eext_more_option_add(parentWidget);
+ Evas_Object *const more = eext_more_option_add(as_eo(parentWidget));
if (!more) {
LOG_RETURN(RES_FAIL, "eext_more_option_add() failed!");
}
@@ -154,7 +154,7 @@ namespace call_setting {
Result MoreOptionsPresenter::addItem(const Option &option)
{
- const auto item = eext_more_option_item_append(*m_widget);
+ const auto item = eext_more_option_item_append(as_eo(*m_widget));
if (!item) {
LOG_RETURN(RES_FAIL, "eext_more_option_item_append() failed!");
}
@@ -168,7 +168,7 @@ namespace call_setting {
LOG_RETURN(RES_FAIL, "Layout::build() failed!");
}
eext_more_option_item_part_content_set(item,
- impl::PART_ICON.name, *icon);
+ impl::PART_ICON.name, as_eo(*icon));
}
impl::setText(item, option.text, impl::PART_MAIN_TEXT);
@@ -258,12 +258,12 @@ namespace call_setting {
void MoreOptionsPresenter::setOpened(const bool isOpened)
{
m_timeout.reset();
- eext_more_option_opened_set(*m_widget, toEina(isOpened));
+ eext_more_option_opened_set(as_eo(*m_widget), toEina(isOpened));
}
bool MoreOptionsPresenter::isOpened() const
{
- return eext_more_option_opened_get(*m_widget);
+ return eext_more_option_opened_get(as_eo(*m_widget));
}
void MoreOptionsPresenter::setOpenedDelayed(
diff --git a/call-setting/presenters/misc/ProcessingPresenter.cpp b/call-setting/presenters/misc/ProcessingPresenter.cpp
index 0dbe9e8..767ec1e 100644
--- a/call-setting/presenters/misc/ProcessingPresenter.cpp
+++ b/call-setting/presenters/misc/ProcessingPresenter.cpp
@@ -29,6 +29,7 @@ namespace call_setting { namespace { namespace impl {
{"layout", "callsetting", "proccessing"};
constexpr EdjePart PART_PROGRESS {"callsetting.swallow.progress"};
+ constexpr EdjePart PART_TEXT_AO {"elm.text"};
constexpr EdjeSignal SIGNAL_SHOW {"callsetting,show"};
constexpr EdjeSignal SIGNAL_SHOW_BG {"callsetting,show,bg"};
@@ -39,7 +40,7 @@ namespace call_setting { namespace { namespace impl {
constexpr EdjeSignal SIGNAL_ANIMATE_CHECK {"callsetting,animate,check"};
- constexpr ElmStyle PROGRESS_STYLE {"process"};
+ constexpr ElmStyle PROGRESS_STYLE {"process/small"};
}}}
namespace call_setting {
@@ -47,8 +48,6 @@ namespace call_setting {
using ucl::Layout;
using ucl::Timeout;
- using ucl::PART_TEXT;
-
// ProcessingPresenter::Builder //
ProcessingPresenter::Builder::Builder() :
@@ -113,7 +112,7 @@ namespace call_setting {
ProcessingPresenter::~ProcessingPresenter()
{
if (m_widget) {
- eext_object_event_callback_del(*m_widget, EEXT_CALLBACK_BACK,
+ eext_object_event_callback_del(as_eo(*m_widget), EEXT_CALLBACK_BACK,
CALLBACK_A(ProcessingPresenter::onHWBackKey));
}
if (const auto window = getWindowRef()) {
@@ -133,9 +132,12 @@ namespace call_setting {
FAIL_RETURN(createWidget(parent, processingText),
"createWidget() failed!");
FAIL_RETURN(moveWidget(), "moveWidget() failed!");
-
FAIL_RETURN(createProgress(), "createProgress() failed!");
+ FAIL_RETURN(createTextAo(processingText), "createTextAo() failed!");
+ FAIL_RETURN(createAtspiHighlightHelper(),
+ "createAtspiHighlightHelper() failed!");
+
if (forceProgress) {
showProgress();
} else {
@@ -146,7 +148,7 @@ namespace call_setting {
LOG_RETURN(RES_FAIL, "resetTimer() failed!");
}
}
- eext_object_event_callback_add(*m_widget, EEXT_CALLBACK_BACK,
+ eext_object_event_callback_add(as_eo(*m_widget), EEXT_CALLBACK_BACK,
CALLBACK_A(ProcessingPresenter::onHWBackKey), this);
getWindow().addEventHandler(
@@ -167,11 +169,29 @@ namespace call_setting {
LOG_RETURN(RES_FAIL, "Layout::build() failed!");
}
+ setDeactivatorSink(m_widget);
+
m_widget->setText(processingText);
return RES_OK;
}
+ Result ProcessingPresenter::createTextAo(const TString &processingText)
+ {
+ m_textAo = util::createAccessObject(*m_widget.get(),
+ impl::PART_TEXT_AO);
+ if (!m_textAo) {
+ LOG_RETURN(RES_FAIL, "util::createAccessObject() failed!");
+ }
+
+ auto &atspi = m_textAo->getAtspi();
+ atspi.setTDomain(TEXT_DOMAIN);
+ atspi.setName(processingText.getCStr());
+ atspi.setReadingInfo(ELM_ACCESSIBLE_READING_INFO_TYPE_NAME);
+
+ return RES_OK;
+ }
+
Result ProcessingPresenter::moveWidget()
{
const auto win = m_widget->getWindow();
@@ -190,17 +210,19 @@ namespace call_setting {
Result ProcessingPresenter::createProgress()
{
- Evas_Object *const progressEo = elm_progressbar_add(*m_widget);
+ Evas_Object *const progressEo = elm_progressbar_add(as_eo(*m_widget));
if (!progressEo) {
LOG_RETURN(RES_FAIL, "elm_progressbar_add() failed!");
}
- StyledWidget progress{progressEo};
+ StyledWidget progress{progressEo, false};
progress.setStyle(impl::PROGRESS_STYLE);
m_widget->setContent(progress, impl::PART_PROGRESS);
- elm_progressbar_pulse(progress, EINA_TRUE);
+ elm_progressbar_pulse(progressEo, EINA_TRUE);
show(progress);
+ progress.getAtspi().setHighlightable(false);
+
return RES_OK;
}
@@ -218,6 +240,8 @@ namespace call_setting {
{
m_widget->emit(impl::SIGNAL_SHOW);
+ show(*m_textAo);
+
m_state = State::PROCESSING;
m_mayFinish = false;
@@ -234,6 +258,8 @@ namespace call_setting {
m_widget->emit(impl::SIGNAL_HIDE_PROGRESS);
+ hide(*m_textAo);
+
ToastDialog::Builder builder;
builder.setText(std::move(m_completeText));
if (m_iconType == IconType::CHECK) {
@@ -303,8 +329,28 @@ namespace call_setting {
m_iconType = iconType;
m_selfRef = asShared(*this);
+ tryFinish();
+ }
+
+ Result ProcessingPresenter::createAtspiHighlightHelper()
+ {
+ m_atspiHelper = AtspiHighlightHelper::newInstance(*this);
+ if (!m_atspiHelper) {
+ LOG_RETURN(RES_FAIL,
+ "AtspiHighlightHelper::newInstance() failed!");
+ }
+ m_atspiHelper->registerObject(getWindow());
+ m_atspiHelper->registerObject(*m_textAo);
+
+ m_atspiHelper->setEventHandler(WEAK_DELEGATE_THIS(onAtspiHighlight));
+ return RES_OK;
+ }
- tryFinish();
+ const Elm_Interface_Atspi_Accessible *ProcessingPresenter::onAtspiHighlight(
+ const Elm_Interface_Atspi_Accessible *ao,
+ Elm_Atspi_Relation_Type flowRelation)
+ {
+ return as_ao(m_textAo);
}
}
diff --git a/call-setting/presenters/misc/ProcessingPresenter.h b/call-setting/presenters/misc/ProcessingPresenter.h
index 1f1d3e1..27b769a 100644
--- a/call-setting/presenters/misc/ProcessingPresenter.h
+++ b/call-setting/presenters/misc/ProcessingPresenter.h
@@ -24,6 +24,8 @@
#include "ucl/mvp/GuiPresenter.h"
+#include "call-setting/presenters/misc/AtspiHighlightHelper.h"
+
#include "call-setting/presenters/types.h"
namespace call_setting {
@@ -118,6 +120,7 @@ namespace call_setting {
const ucl::TString &processingText);
ucl::Result moveWidget();
ucl::Result createProgress();
+ ucl::Result createTextAo(const ucl::TString &processingText);
bool resetTimeout(double timeout);
void showProgress();
@@ -128,6 +131,11 @@ namespace call_setting {
void onTimeout(ucl::Timeout *sender);
void onWindowDel(ucl::Widget &widget, void *eventInfo);
+ ucl::Result createAtspiHighlightHelper();
+ const Elm_Interface_Atspi_Accessible *onAtspiHighlight(
+ const Elm_Interface_Atspi_Accessible *ao,
+ Elm_Atspi_Relation_Type flowRelation);
+
private:
enum class State {
IDLING,
@@ -142,6 +150,8 @@ namespace call_setting {
ucl::TString m_completeText;
IconType m_iconType;
ProcessingPresenterSRef m_selfRef;
+ AtspiHighlightHelperSRef m_atspiHelper;
+ ucl::ElmWidgetSRef m_textAo;
ucl::TimeoutSRef m_timeout;
State m_state;
diff --git a/call-setting/presenters/misc/SelectModePresenter.cpp b/call-setting/presenters/misc/SelectModePresenter.cpp
index 00320a1..45a405f 100644
--- a/call-setting/presenters/misc/SelectModePresenter.cpp
+++ b/call-setting/presenters/misc/SelectModePresenter.cpp
@@ -103,7 +103,8 @@ namespace call_setting {
FAIL_RETURN(GuiPresenter::prepare(parent, PF_DEACTIVATOR),
"GuiPresenter::prepare() failed!");
- m_selectButton = makeShared<StyledWidget>(elm_button_add(*m_content));
+ m_selectButton = makeShared<StyledWidget>(
+ elm_button_add(as_eo(*m_content)));
m_selectButton->setStyle(impl::SELECT_BTN_STYLE);
m_content->set(*m_selectButton, PageContent::Part::SELECT_BUTTON);
m_content->setSelectButtonVisible(false);
@@ -114,7 +115,7 @@ namespace call_setting {
if ((m_flags & FLAG_NO_BOTTOM_BUTTON) == 0) {
m_bottomButton = makeShared<StyledWidget>(
- elm_button_add(*m_content));
+ elm_button_add(as_eo(*m_content)));
m_bottomButton->setStyle(impl::BOTTOM_BTN_STYLE);
hide(*m_bottomButton);
@@ -251,10 +252,10 @@ namespace call_setting {
{
m_isPopupDismissed = false;
- m_popup = makeShared<StyledWidget>(elm_ctxpopup_add(*m_content));
+ m_popup = makeShared<StyledWidget>(elm_ctxpopup_add(as_eo(*m_content)));
m_popup->setStyle(impl::SELECT_POPUP_STYLE);
- elm_ctxpopup_direction_priority_set(*m_popup,
+ elm_ctxpopup_direction_priority_set(as_eo(*m_popup),
ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_UP,
ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_UP);
@@ -262,13 +263,13 @@ namespace call_setting {
WidgetItem deselectItem;
if (m_selectCount < m_totalCount) {
- selectItem = WidgetItem{elm_ctxpopup_item_append(*m_popup,
+ selectItem = WidgetItem{elm_ctxpopup_item_append(as_eo(*m_popup),
STR_SELECT_ALL.translate(), nullptr, CALLBACK_A(
SelectModePresenter::onSelectAll), this)};
}
if (m_selectCount > 0) {
- deselectItem = WidgetItem{elm_ctxpopup_item_append(*m_popup,
+ deselectItem = WidgetItem{elm_ctxpopup_item_append(as_eo(*m_popup),
STR_DESELECT_ALL.translate(), nullptr, CALLBACK_A(
SelectModePresenter::onDeselectAll), this)};
}
@@ -285,7 +286,7 @@ namespace call_setting {
m_popup->addEventHandler(
POPUP_DISMISSED, WEAK_DELEGATE_THIS(onPopupDismissed));
- eext_object_event_callback_add(*m_popup, EEXT_CALLBACK_BACK,
+ eext_object_event_callback_add(as_eo(*m_popup), EEXT_CALLBACK_BACK,
CALLBACK_A(SelectModePresenter::onPopupHWBackKey), this);
broadcastDeactivate();
@@ -309,14 +310,14 @@ namespace call_setting {
{
if (m_popup && !m_isPopupDismissed) {
m_isPopupDismissed = true;
- elm_ctxpopup_dismiss(*m_popup);
+ elm_ctxpopup_dismiss(as_eo(*m_popup));
}
}
void SelectModePresenter::deletePopup()
{
if (m_popup) {
- eext_object_event_callback_del(*m_popup, EEXT_CALLBACK_BACK,
+ eext_object_event_callback_del(as_eo(*m_popup), EEXT_CALLBACK_BACK,
CALLBACK_A(SelectModePresenter::onPopupHWBackKey));
m_popup.reset();
@@ -349,7 +350,7 @@ namespace call_setting {
void SelectModePresenter::onSelectAll(
Evas_Object *obj, void *eventInfo)
{
- if (m_popup && (m_popup->getEo() == obj)) {
+ if (as_eo(m_popup) == obj) {
dismissPopup();
dispatchEvent(Event::SELECT_ALL);
}
@@ -358,7 +359,7 @@ namespace call_setting {
void SelectModePresenter::onDeselectAll(
Evas_Object *obj, void *eventInfo)
{
- if (m_popup && (m_popup->getEo() == obj)) {
+ if (as_eo(m_popup) == obj) {
dismissPopup();
dispatchEvent(Event::DESELECT_ALL);
}
diff --git a/call-setting/presenters/pages/BlockListPage.cpp b/call-setting/presenters/pages/BlockListPage.cpp
index 4e843da..d27744b 100644
--- a/call-setting/presenters/pages/BlockListPage.cpp
+++ b/call-setting/presenters/pages/BlockListPage.cpp
@@ -112,10 +112,11 @@ namespace call_setting {
makeListItems(std::move(blockUnknown));
- item = getNaviframe().push(getContent());
+ item = getNaviframe().push(STR_BLOCK_LIST_PAGE_TITLE, getContent());
if (!item) {
LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
}
+ item.setTitleEnabled(false);
return RES_OK;
}
diff --git a/call-setting/presenters/pages/BlockListPage.h b/call-setting/presenters/pages/BlockListPage.h
index f5a6d5c..08557b5 100644
--- a/call-setting/presenters/pages/BlockListPage.h
+++ b/call-setting/presenters/pages/BlockListPage.h
@@ -28,14 +28,50 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(BlockListPage);
+ /**
+ * @brief BlockList page
+ */
class BlockListPage final : public Page {
public:
+
+ /**
+ * @brief Provides set of instruments for creation of BlockListPage
+ * object with set of options
+ */
class Builder final {
public:
+
+ /**
+ * @brief Default constructor
+ */
Builder();
+
+ /**
+ * @brief Sets naviframe object
+ * @param[in] navi Shared reference to naviframe object
+ * @return BlockListPage::Builder object
+ */
Builder &setNaviframe(ucl::NaviframeSRef navi);
+
+ /**
+ * @brief Sets model object
+ * @param[in] model Shared reference to BlockUnknownCallers object
+ * @return BlockListPage::Builder object
+ */
Builder &setModel(BlockUnknownCallersSRef model);
+
+ /**
+ * @brief Sets model object
+ * @param[in] model Shared reference to BlockedNumbers object
+ * @return BlockListPage::Builder object
+ */
Builder &setModel(BlockedNumbersSRef model);
+
+ /**
+ * @brief Creates BlockListPage object
+ * @param[in] onExitRequest Exit request handler
+ * @return Weak reference to BlockListPage object
+ */
BlockListPageWRef build(ExitRequestHandler onExitRequest) const;
private:
diff --git a/call-setting/presenters/pages/BlockedNumbersPage.cpp b/call-setting/presenters/pages/BlockedNumbersPage.cpp
index e7ed4ae..f7792b1 100644
--- a/call-setting/presenters/pages/BlockedNumbersPage.cpp
+++ b/call-setting/presenters/pages/BlockedNumbersPage.cpp
@@ -16,6 +16,8 @@
#include "BlockedNumbersPage.h"
+#include "call-setting/view/AoSequencer.h"
+
#include "call-setting/presenters/misc/ProcessingPresenter.h"
#include "call-setting/resources.h"
@@ -32,6 +34,7 @@ namespace call_setting { namespace { namespace impl {
namespace call_setting {
using ucl::ListPresenter;
+ using ucl::ListItemPresenter;
using ucl::NaviItem;
using ucl::NaviframeSRef;
using ucl::IPickerHost;
@@ -58,6 +61,11 @@ namespace call_setting {
return *m_item;
}
+ const SimpleListItem &getItem() const
+ {
+ return *m_item;
+ }
+
private:
~Item() = default;
@@ -71,7 +79,7 @@ namespace call_setting {
BlockedNumbers::Item m_model;
SimpleListItemSRef m_item;
- friend class ucl::ReffedObj<Item>;
+ friend class ReffedObj<Item>;
};
// BlockedNumbersPage::Builder //
@@ -150,13 +158,19 @@ namespace call_setting {
FAIL_RETURN(makeList(), "makeList() failed!");
FAIL_RETURN(makeMoreOptions(), "makeMoreOptions() failed!");
FAIL_RETURN(makeSelectMode(), "makeSelectMode() failed!");
+ FAIL_RETURN(makeAtspiHighlightHelper(),
+ "makeAtspiHighlightHelper() failed!");
makeListItems();
- item = getNaviframe().push(getContent());
+ registerAccessObjects();
+
+ item = getNaviframe().push(STR_BLOCKED_NUMBERS_PAGE_TITLE,
+ getContent());
if (!item) {
LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
}
+ item.setTitleEnabled(false);
getWindow().addEventHandler(
INSTANCE_RESUMED, WEAK_DELEGATE_THIS(onInstanceResumed));
@@ -189,6 +203,7 @@ namespace call_setting {
STR_DELETE, nullptr,
getImageTheme(ICON_MORE_OPT_DELETE)}).
build(*this);
+
if (!m_more) {
LOG_RETURN(RES_FAIL, "MoreOptionsPresenter::build() failed!");
}
@@ -216,7 +231,8 @@ namespace call_setting {
void BlockedNumbersPage::makeListItems()
{
- m_list->append(*makeTitleListItem(STR_BLOCKED_NUMBERS_PAGE_TITLE));
+ m_titleItem = makeTitleListItem(STR_BLOCKED_NUMBERS_PAGE_TITLE);
+ m_list->append(*m_titleItem);
m_model->forEachItem(DELEGATE_THIS(onEachItem));
@@ -232,6 +248,8 @@ namespace call_setting {
void BlockedNumbersPage::remakeListItems()
{
+ m_titleItem.reset();
+
m_items.clear();
m_list->clear();
@@ -240,7 +258,7 @@ namespace call_setting {
void BlockedNumbersPage::updateListItems()
{
- elm_genlist_realized_items_update(m_list->getWidget());
+ m_list->getWidget().updateRealizedItems();
}
void BlockedNumbersPage::switchToSelectMode()
@@ -433,4 +451,55 @@ namespace call_setting {
break;
}
}
+
+ Result BlockedNumbersPage::makeAtspiHighlightHelper()
+ {
+ m_atspiHelper = AtspiHighlightHelper::newInstance(*this);
+ if (!m_atspiHelper) {
+ LOG_RETURN(RES_FAIL,
+ "AtspiHighlightHelper::newInstance() failed!");
+ }
+
+ m_atspiHelper->setEventHandler(WEAK_DELEGATE_THIS(onAtspiHighlight));
+
+ return RES_OK;
+ }
+
+ const Elm_Interface_Atspi_Accessible *BlockedNumbersPage::onAtspiHighlight(
+ const Elm_Interface_Atspi_Accessible *ao,
+ Elm_Atspi_Relation_Type flowRelation)
+ {
+ if (!m_isInSelectMode) {
+ return nullptr;
+ }
+
+ return AoSequencer(ao, flowRelation)
+ .process(*m_titleItem)
+ .process(m_smp->getSelectButton())
+ .process(*m_items.front())
+ .processDefault()
+ .process(*m_items.back())
+ .process(m_smp->getBottomButton())
+ .getNext();
+ }
+
+ void BlockedNumbersPage::registerAccessObjects()
+ {
+ m_atspiHelper->registerObject(getWindow());
+
+ m_atspiHelper->registerObject(m_smp->getBottomButton());
+ m_atspiHelper->registerObject(m_smp->getSelectButton());
+
+ m_atspiHelper->registerObject(*m_titleItem);
+ m_atspiHelper->registerObject(m_items.front()->getItem());
+ m_atspiHelper->registerObject(m_items.back()->getItem());
+ }
+
+ // Non-member functions //
+
+ const Elm_Interface_Atspi_Accessible *as_ao(
+ const BlockedNumbersPage::Item &item)
+ {
+ return as_ao(item.getItem());
+ }
}
diff --git a/call-setting/presenters/pages/BlockedNumbersPage.h b/call-setting/presenters/pages/BlockedNumbersPage.h
index bfccbef..73cf68e 100644
--- a/call-setting/presenters/pages/BlockedNumbersPage.h
+++ b/call-setting/presenters/pages/BlockedNumbersPage.h
@@ -23,6 +23,7 @@
#include "call-setting/model/BlockedNumbers.h"
+#include "call-setting/presenters/misc/AtspiHighlightHelper.h"
#include "call-setting/presenters/misc/MoreOptionsPresenter.h"
#include "call-setting/presenters/misc/SelectModePresenter.h"
@@ -30,16 +31,46 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(BlockedNumbersPage);
+ /**
+ * @brief Blocked numbers page
+ */
class BlockedNumbersPage final : public Page,
private ucl::IPickerHost,
private MoreOptionsPresenter::IListener,
private SelectModePresenter::IListener {
public:
+
+ /**
+ * @brief Provides set of instruments for creation of BlockedNumbersPage
+ * object with set of options
+ */
class Builder final {
public:
+
+ /**
+ * @brief Default constructor
+ */
Builder();
+
+ /**
+ * @brief Sets naviframe object
+ * @param[in] navi Shared reference to naviframe object
+ * @return BlockedNumbersPage::Builder object
+ */
Builder &setNaviframe(ucl::NaviframeSRef navi);
+
+ /**
+ * @brief Sets model object
+ * @param[in] model Shared reference to voicemail object
+ * @return BlockedNumbersPage::Builder object
+ */
Builder &setModel(BlockedNumbersSRef model);
+
+ /**
+ * @brief Creates BlockedNumbersPage object
+ * @param[in] handler Exit request handler
+ * @return Weak reference to BlockedNumbersPage object
+ */
BlockedNumbersPageWRef build(ExitRequestHandler handler) const;
private:
@@ -64,6 +95,7 @@ namespace call_setting {
ucl::Result makeList();
ucl::Result makeMoreOptions();
ucl::Result makeSelectMode();
+ ucl::Result makeAtspiHighlightHelper();
void makeListItems();
bool onEachItem(BlockedNumbers::Item modelItem);
@@ -83,6 +115,11 @@ namespace call_setting {
void onModelItemsChanged();
void onInstanceResumed(ucl::Widget &sender, void *eventInfo);
+ void registerAccessObjects();
+ const Elm_Interface_Atspi_Accessible *onAtspiHighlight(
+ const Elm_Interface_Atspi_Accessible *ao,
+ Elm_Atspi_Relation_Type flowRelation);
+
// GuiPresenter //
virtual void onActivateBy(const DeactivatorInfo &info) final override;
@@ -116,12 +153,17 @@ namespace call_setting {
MoreOptionsPresenterSRef m_more;
SelectModePresenterSRef m_smp;
+ AtspiHighlightHelperSRef m_atspiHelper;
+
+ ucl::ListItemPresenterSRef m_titleItem;
std::vector<ItemSRef> m_items;
int m_selectCount;
bool m_isInSelectMode;
friend class ucl::ReffedObj<BlockedNumbersPage>;
+
+ friend const Elm_Interface_Atspi_Accessible *as_ao(const Item &item);
};
}
diff --git a/call-setting/presenters/pages/KeypadPage.cpp b/call-setting/presenters/pages/KeypadPage.cpp
index 459ece2..4c75b41 100644
--- a/call-setting/presenters/pages/KeypadPage.cpp
+++ b/call-setting/presenters/pages/KeypadPage.cpp
@@ -16,6 +16,8 @@
#include "KeypadPage.h"
+#include "call-setting/resources.h"
+
#include "call-setting/presenters/common.h"
namespace call_setting {
@@ -81,6 +83,23 @@ namespace call_setting {
Result KeypadPage::doPrepare(NaviItem &item)
{
+ FAIL_RETURN(createKeypadPresenter(),
+ "createKeypadPresenter() failed!");
+
+ FAIL_RETURN(createAtspiHighlightHelper(),
+ "createAtspiHighlightHelper() failed!");
+
+ item = getNaviframe().push(STR_SR_KEYPAD, getContent());
+ if (!item) {
+ LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
+ }
+ item.setTitleEnabled(false);
+
+ return RES_OK;
+ }
+
+ Result KeypadPage::createKeypadPresenter()
+ {
m_keypadPrs = KeypadPresenter::Builder().
setNumber(m_model->getNumber()).
setCompleteHandler(WEAK_DELEGATE_THIS(onKeypadComplete)).
@@ -92,11 +111,6 @@ namespace call_setting {
}
getContent().set(m_keypadPrs->getWidget());
- item = getNaviframe().push(getContent());
- if (!item) {
- LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
- }
-
return RES_OK;
}
@@ -109,5 +123,25 @@ namespace call_setting {
requestExit();
}
+ Result KeypadPage::createAtspiHighlightHelper()
+ {
+ m_atspiHelper = AtspiHighlightHelper::newInstance(*this);
+ if (!m_atspiHelper) {
+ LOG_RETURN(RES_FAIL, "AtspiHighlightHelper::newInstance() failed!");
+ }
+ m_atspiHelper->registerObject(getWindow());
+
+ m_atspiHelper->setEventHandler(WEAK_DELEGATE_THIS(onAtspiHighlight));
+
+ return RES_OK;
+ }
+
+ const Elm_Interface_Atspi_Accessible *KeypadPage::onAtspiHighlight(
+ const Elm_Interface_Atspi_Accessible *ao,
+ Elm_Atspi_Relation_Type flowRelation)
+ {
+ return m_keypadPrs->getAccessObject(true);
+ }
+
}
diff --git a/call-setting/presenters/pages/KeypadPage.h b/call-setting/presenters/pages/KeypadPage.h
index 7c62581..25d8b60 100644
--- a/call-setting/presenters/pages/KeypadPage.h
+++ b/call-setting/presenters/pages/KeypadPage.h
@@ -19,6 +19,7 @@
#include "base/Page.h"
+#include "call-setting/presenters/misc/AtspiHighlightHelper.h"
#include "call-setting/presenters/misc/KeypadPresenter.h"
#include "call-setting/model/Voicemail.h"
@@ -27,14 +28,43 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(KeypadPage);
+ /**
+ * @brief Page with keypad
+ */
class KeypadPage final : public Page {
public:
+ /**
+ * @brief Provides set of instruments for creation of KeypadPage
+ * object with set of options
+ */
class Builder final {
public:
+
+ /**
+ * @brief Default constructor
+ */
Builder();
+
+ /**
+ * @brief Sets naviframe object
+ * @param[in] navi Shared reference to naviframe object
+ * @return KeypadPage::Builder object
+ */
Builder &setNaviframe(ucl::NaviframeSRef navi);
+
+ /**
+ * @brief Sets model object
+ * @param[in] model Shared reference to voicemail object
+ * @return KeypadPage::Builder object
+ */
Builder &setModel(VoicemailSRef model);
+
+ /**
+ * @brief Creates KeypadPage object
+ * @param[in] onExitRequest Exit request handler
+ * @return Weak reference to KeypadPage object
+ */
KeypadPageWRef build(ExitRequestHandler onExitRequest) const;
private:
@@ -51,11 +81,19 @@ namespace call_setting {
~KeypadPage() = default;
ucl::Result doPrepare(ucl::NaviItem &item);
+
+ ucl::Result createKeypadPresenter();
void onKeypadComplete();
+ ucl::Result createAtspiHighlightHelper();
+ const Elm_Interface_Atspi_Accessible *onAtspiHighlight(
+ const Elm_Interface_Atspi_Accessible *ao,
+ Elm_Atspi_Relation_Type flowRelation);
+
private:
const VoicemailSRef m_model;
KeypadPresenterSRef m_keypadPrs;
+ AtspiHighlightHelperSRef m_atspiHelper;
friend class ucl::ReffedObj<KeypadPage>;
};
diff --git a/call-setting/presenters/pages/MainPage.cpp b/call-setting/presenters/pages/MainPage.cpp
index a861486..17c6a01 100644
--- a/call-setting/presenters/pages/MainPage.cpp
+++ b/call-setting/presenters/pages/MainPage.cpp
@@ -28,6 +28,7 @@
namespace call_setting {
+ using ucl::Atspi;
using ucl::ListPresenter;
using ucl::NaviItem;
using ucl::NaviframeSRef;
@@ -88,7 +89,8 @@ namespace call_setting {
CallSettingSRef callSetting,
Private) :
Page(rc, std::move(navi), std::move(onExitRequest)),
- m_callSetting(std::move(callSetting))
+ m_callSetting(std::move(callSetting)),
+ m_isRefreshProcessing(false)
{
}
@@ -108,6 +110,8 @@ namespace call_setting {
LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
}
+ getItemAtspi().setNameCb(WEAK_DELEGATE_THIS(onAtspiNameCb));
+
tryRefreshCallWaiting();
return RES_OK;
@@ -161,7 +165,17 @@ namespace call_setting {
m_processing->complete(
STR_NETWORK_OR_SIM_ERROR_TOAST_MESSAGE);
m_processing.reset();
+ return;
}
+
+ m_isRefreshProcessing = true;
+ }
+
+ CString MainPage::onAtspiNameCb(Atspi &atspi)
+ {
+ return CString::dup(m_isRefreshProcessing ?
+ STR_OPENING_POPUP_MESSAGE.translate() :
+ STR_MAIN_PAGE_TITLE.translate());
}
void MainPage::onVoicemailItemSelected()
@@ -196,8 +210,11 @@ namespace call_setting {
void MainPage::onCallWaitingResult(Result result)
{
+ m_isRefreshProcessing = false;
+
if (isGood(result)) {
m_processing->complete();
+ util::resetAtspiHighlight(getWindow());
} else {
RESLOG(result, "Setting update failed");
m_processing->complete(
@@ -206,5 +223,4 @@ namespace call_setting {
m_processing.reset();
}
-
}
diff --git a/call-setting/presenters/pages/MainPage.h b/call-setting/presenters/pages/MainPage.h
index 5c4e416..c907090 100644
--- a/call-setting/presenters/pages/MainPage.h
+++ b/call-setting/presenters/pages/MainPage.h
@@ -29,13 +29,43 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(MainPage);
+ /**
+ * @brief Main page
+ */
class MainPage final : public Page {
public:
+
+ /**
+ * @brief Provides set of instruments for creation of MainPage
+ * object with set of options
+ */
class Builder final {
public:
+
+ /**
+ * @brief Default constructor
+ */
Builder();
+
+ /**
+ * @brief Sets naviframe object
+ * @param[in] navi Shared reference to naviframe object
+ * @return NoContenMainPagetPage::Builder object
+ */
Builder &setNaviframe(ucl::NaviframeSRef navi);
+
+ /**
+ * @brief Sets CallSetting object
+ * @param[in] callSetting Shared reference to CallSetting object
+ * @return NoContenMainPagetPage::Builder object
+ */
Builder &setCallSetting(CallSettingSRef callSetting);
+
+ /**
+ * @brief Creates MainPage object
+ * @param[in] onExitRequest Exit request handler
+ * @return Weak reference to MainPage object
+ */
MainPageWRef build(ExitRequestHandler onExitRequest) const;
private:
@@ -61,6 +91,7 @@ namespace call_setting {
void onBlockListItemSelected();
void onPageExitRequest(Page &page);
void onCallWaitingResult(ucl::Result result);
+ ucl::CString onAtspiNameCb(ucl::Atspi &atspi);
private:
CallSettingSRef m_callSetting;
@@ -69,6 +100,8 @@ namespace call_setting {
PageWRef m_page;
+ bool m_isRefreshProcessing;
+
friend class ucl::ReffedObj<MainPage>;
};
}
diff --git a/call-setting/presenters/pages/NoContentPage.cpp b/call-setting/presenters/pages/NoContentPage.cpp
index be9f9da..dfda60b 100644
--- a/call-setting/presenters/pages/NoContentPage.cpp
+++ b/call-setting/presenters/pages/NoContentPage.cpp
@@ -124,10 +124,16 @@ namespace call_setting {
layout->setText(title, PART_TITLE);
layout->setText(text);
- item = getNaviframe().push(getContent());
+ auto &atspi = layout->getAtspi();
+ atspi.setRole(ELM_ATSPI_ROLE_TEXT);
+ atspi.setReadingInfo(ELM_ACCESSIBLE_READING_INFO_TYPE_NAME);
+
+ item = getNaviframe().push(STR_BLOCKED_NUMBERS_PAGE_TITLE,
+ getContent());
if (!item) {
LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
}
+ item.setTitleEnabled(false);
return RES_OK;
}
diff --git a/call-setting/presenters/pages/NoContentPage.h b/call-setting/presenters/pages/NoContentPage.h
index 28c8c8a..c2ce8af 100644
--- a/call-setting/presenters/pages/NoContentPage.h
+++ b/call-setting/presenters/pages/NoContentPage.h
@@ -23,15 +23,57 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(NoContentPage);
+ /**
+ * @brief Page with no content
+ */
class NoContentPage final : public Page {
public:
+
+ /**
+ * @brief Provides set of instruments for creation of NoContentPage
+ * object with set of options
+ */
class Builder final {
public:
+
+ /**
+ * @brief Default constructor
+ */
Builder();
+
+ /**
+ * @brief Sets naviframe object
+ * @param[in] navi Shared reference to naviframe object
+ * @return NoContentPage::Builder object
+ */
Builder &setNaviframe(ucl::NaviframeSRef navi);
+
+ /**
+ * @brief Sets page title
+ * @param[in] title Page title
+ * @return NoContentPage::Builder object
+ */
Builder &setTitle(ucl::TString title);
+
+ /**
+ * @brief Sets page text
+ * @param[in] text Page text
+ * @return NoContentPage::Builder object
+ */
Builder &setText(ucl::TString text);
+
+ /**
+ * @brief Sets page icon theme
+ * @param[in] theme Icon theme
+ * @return NoContentPage::Builder object
+ */
Builder &setIconTheme(ucl::LayoutTheme theme);
+
+ /**
+ * @brief Creates NoContentPage object
+ * @param[in] onExitRequest Exit request handler
+ * @return Weak reference to NoContentPage object
+ */
NoContentPageWRef build(ExitRequestHandler onExitRequest) const;
private:
ucl::NaviframeSRef m_navi;
diff --git a/call-setting/presenters/pages/VoicemailPage.cpp b/call-setting/presenters/pages/VoicemailPage.cpp
index 1a5922e..4921fa1 100644
--- a/call-setting/presenters/pages/VoicemailPage.cpp
+++ b/call-setting/presenters/pages/VoicemailPage.cpp
@@ -138,10 +138,11 @@ namespace call_setting {
makeListItems();
- item = getNaviframe().push(getContent());
+ item = getNaviframe().push(STR_VOICEMAIL_PAGE_TITLE, getContent());
if (!item) {
LOG_RETURN(RES_FAIL, "Naviframe::push() failed!");
}
+ item.setTitleEnabled(false);
return RES_OK;
}
diff --git a/call-setting/presenters/pages/VoicemailPage.h b/call-setting/presenters/pages/VoicemailPage.h
index d670b9c..3fce276 100644
--- a/call-setting/presenters/pages/VoicemailPage.h
+++ b/call-setting/presenters/pages/VoicemailPage.h
@@ -27,14 +27,43 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(VoicemailPage);
+ /**
+ * @brief Voicemail page
+ */
class VoicemailPage final : public Page {
public:
+ /**
+ * @brief Provides set of instruments for creation of VoicemailPage
+ * object with set of options
+ */
class Builder final {
public:
+
+ /**
+ * @brief Default constructor
+ */
Builder();
+
+ /**
+ * @brief Sets naviframe object
+ * @param[in] navi Shared reference to naviframe object
+ * @return VoicemailPage::Builder object
+ */
Builder &setNaviframe(ucl::NaviframeSRef navi);
+
+ /**
+ * @brief Sets model object
+ * @param[in] model Shared reference to voicemail object
+ * @return VoicemailPage::Builder object
+ */
Builder &setModel(VoicemailSRef model);
+
+ /**
+ * @brief Creates VoicemailPage object
+ * @param[in] onExitRequest Exit request handler
+ * @return Weak reference to VoicemailPage object
+ */
VoicemailPageWRef build(ExitRequestHandler onExitRequest) const;
private:
diff --git a/call-setting/presenters/pages/base/Page.cpp b/call-setting/presenters/pages/base/Page.cpp
index a914426..0455f30 100644
--- a/call-setting/presenters/pages/base/Page.cpp
+++ b/call-setting/presenters/pages/base/Page.cpp
@@ -27,6 +27,7 @@ namespace call_setting { namespace { namespace impl {
namespace call_setting {
+ using ucl::Atspi;
using ucl::Layout;
using ucl::NaviItem;
using ucl::NaviframeSRef;
@@ -76,7 +77,7 @@ namespace call_setting {
}
Evas_Object *content = m_item.getContent();
- if (content != *m_content) {
+ if (content != as_eo(*m_content)) {
dispose();
LOG_RETURN(RES_FAIL, "content is not m_content");
}
@@ -172,7 +173,7 @@ namespace call_setting {
}
}
- void Page::createCircleObject(Evas_Object *const owner,
+ void Page::createCircleObject(ElmWidget &owner,
const Elm_Scroller_Policy hPolicy,
const Elm_Scroller_Policy vPolicy)
{
@@ -184,12 +185,13 @@ namespace call_setting {
}
m_content->set(*layout, PageContent::Part::CIRCLE_OBJECT);
- auto surface = eext_circle_surface_layout_add(*layout);
+ auto surface = eext_circle_surface_layout_add(as_eo(*layout));
- const auto type = evas_object_type_get(owner);
+ const auto type = evas_object_type_get(as_eo(owner));
if (ucl::strCmpSafe(type, impl::GENLIST_TYPE) == 0) {
- m_circleObject = eext_circle_object_genlist_add(owner, surface);
+ m_circleObject = eext_circle_object_genlist_add(as_eo(owner),
+ surface);
eext_circle_object_genlist_scroller_policy_set(
m_circleObject, hPolicy, vPolicy);
} else {
@@ -272,4 +274,17 @@ namespace call_setting {
{
updateRotaryActiveState();
}
+
+ Atspi &Page::getItemAtspi()
+ {
+ ensureItemAtspi();
+ return *m_itemAtspi;
+ }
+
+ void Page::ensureItemAtspi()
+ {
+ if (!m_itemAtspi) {
+ m_itemAtspi = makeShared<Atspi>(m_item);
+ }
+ }
}
diff --git a/call-setting/presenters/pages/base/Page.h b/call-setting/presenters/pages/base/Page.h
index 521a86d..4ae926d 100644
--- a/call-setting/presenters/pages/base/Page.h
+++ b/call-setting/presenters/pages/base/Page.h
@@ -29,58 +29,162 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(Page);
+ /**
+ * @brief Base class for Pages
+ */
class Page : public ucl::GuiPresenter,
public ucl::IDisposable {
public:
using ExitRequestHandler = ucl::WeakDelegate<void(Page &page)>;
public:
+ /**
+ * @brief Gets naviframe. @see ucl::Naviframe
+ * @return Naviframe object
+ */
ucl::Naviframe &getNaviframe();
+ /**
+ * @brief Checks if Page is at top of stack
+ * @return true if at top
+ */
bool isAtTop() const;
+
+ /**
+ * @brief Checks if Page is at bottom of stack
+ * @return true if at bottom
+ */
bool isAtBottom() const;
+ /**
+ * @brief Closes current page
+ */
void exit();
+ /**
+ * @brief Pops pages of the naviframe till this page
+ */
void popTo();
+
+ /**
+ * @brief Deletes pages of the naviframe till this page
+ */
void deleteTo();
+
+ /**
+ * @brief Set object higher in stack
+ */
void promote();
+ /**
+ * @brief Inserts NaviItem after this page. @see Naviframe::insertAfter
+ */
template <class ...ARGS>
ucl::NaviItem insertAfter(ARGS &&...args);
+ /**
+ * @brief Inserts NaviItem before this page.
+ * @see Naviframe::insertBefore
+ */
template <class ...ARGS>
ucl::NaviItem insertBefore(ARGS &&...args);
// ucl::IDisposable //
+ /**
+ * @brief Disposes object
+ */
virtual void dispose() override;
+
+ /**
+ * @brief Checks if object disposed
+ */
virtual bool isDisposed() const final override;
protected:
+
+ /**
+ * @brief Constructor
+ * @param[in] rc Pointer to IRefCountObj (passed automatically)
+ * @param[in] navi Shared reference to Naviframe object
+ * @param[in] onExitRequest Exit request handler
+ */
Page(ucl::IRefCountObj &rc, ucl::NaviframeSRef navi,
ExitRequestHandler onExitRequest);
+
+ /**
+ * @brief Default destructor
+ */
~Page();
+ /**
+ * @brief Prepares content
+ * @param[in] onPrepare Prepare callback
+ * @param[in] contentFlags Content flags
+ * @return RES_OK on success, otherwise an error code on failure
+ */
template <class ON_PREPARE>
ucl::Result prepare(ON_PREPARE &&onPrepare, int contentFlags = 0);
+ /**
+ * @brief Gets NaviItem
+ * @return NaviItem object
+ */
ucl::NaviItem getItem();
+
+ /**
+ * @brief Gets page content
+ * @return Page content
+ */
PageContent &getContent();
- void createCircleObject(Evas_Object *owner,
+ /**
+ * @brief Creates circler object
+ * @param[in] owner Owner widget
+ * @param[in] hPolicy Horizontal tracking policy
+ * @param[in] vPolicy Vertical tracking policy
+ */
+ void createCircleObject(ucl::ElmWidget &owner,
Elm_Scroller_Policy hPolicy = ELM_SCROLLER_POLICY_OFF,
Elm_Scroller_Policy vPolicy = ELM_SCROLLER_POLICY_AUTO);
+
+ /**
+ * @brief Updates rotary object state
+ */
void updateRotaryActiveState();
+ /**
+ * @brief Requests application exit
+ */
void requestExit();
+ /**
+ * @brief Back key callback
+ */
virtual void onBackKey();
+
+ /**
+ * @brief Checks if active rotary object needed
+ * @return true needed
+ */
virtual bool isNeedRotaryActivate() const;
+ /**
+ * @brief Gets Atspi of navi item of this page
+ * @return Reference to Atspi of navi item
+ */
+ ucl::Atspi &getItemAtspi();
+
// GuiPresenter //
+ /**
+ * @brief Activation callback
+ */
virtual void onActivate() override;
+
+ /**
+ * @brief Deactivation callback
+ */
virtual void onDeactivate() override;
private:
@@ -91,6 +195,8 @@ namespace call_setting {
void updateActiveState();
+ void ensureItemAtspi();
+
void onTransitionStarted(ucl::Widget &widget, void *eventInfo);
void onTransitionFinished(ucl::Widget &widget, void *eventInfo);
void onTopPageChanged(ucl::Widget &widget, void *eventInfo);
@@ -102,6 +208,7 @@ namespace call_setting {
const ucl::NaviframeSRef m_navi;
const ExitRequestHandler m_onExitRequest;
ucl::NaviItem m_item;
+ ucl::AtspiSRef m_itemAtspi;
PageContentSRef m_content;
PageSRef m_selfRef;
Evas_Object *m_circleObject;
diff --git a/call-setting/presenters/types.h b/call-setting/presenters/types.h
index 851f117..234cb2d 100644
--- a/call-setting/presenters/types.h
+++ b/call-setting/presenters/types.h
@@ -23,6 +23,9 @@
namespace call_setting {
+ /**
+ * @brief Map of text-containing edje parts
+ */
using PartTextMap = ucl::HashMap<ucl::EdjePart, ucl::TString>;
}
diff --git a/call-setting/resources.cpp b/call-setting/resources.cpp
index 76d5c85..5c1c774 100644
--- a/call-setting/resources.cpp
+++ b/call-setting/resources.cpp
@@ -78,4 +78,28 @@ namespace call_setting {
const TString STR_KEYPAD_GUIDE_TEXT {
"WDS_CST_BODY_VOICEMAIL_NUMBER", TEXT_DOMAIN};
+
+ const TString STR_SR_DOUBLE_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL {
+ "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL", TEXT_DOMAIN};
+ const TString STR_SR_DOUBLE_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL {
+ "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL", TEXT_DOMAIN};
+ const TString STR_SR_DOUBLE_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL {
+ "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL", TEXT_DOMAIN};
+ const TString STR_SR_CONFIRM {
+ "IDS_ST_BODY_CONFIRM", TEXT_DOMAIN};
+ const TString STR_SR_BACKSPACE {
+ "WDS_WMGR_TBOPT_BACKSPACE", TEXT_DOMAIN};
+ const TString STR_SR_EDIT_BOX {
+ "WDS_WMGR_TBOPT_EDIT_BOX", TEXT_DOMAIN};
+ const TString STR_SR_KEYPAD {
+ "WDS_WMGR_TBOPT_KEYPAD", TEXT_DOMAIN};
+ const TString STR_SR_EMPTY {
+ "WDS_ACCS_TBOPT_EMPTY", TEXT_DOMAIN};
+ const TString STR_SR_EDITING {
+ "WDS_WMGR_TBOPT_EDITING", TEXT_DOMAIN};
+
+ const TString STR_SR_SWITCH {
+ "WDS_ALM_TBOPT_SWITCH", TEXT_DOMAIN};
+ const TString STR_SR_RADIO_BUTTON {
+ "IDS_ACCS_TBOPT_RADIO_BUTTON", TEXT_DOMAIN};
}
diff --git a/call-setting/resources.h b/call-setting/resources.h
index 359e7d9..44a7f80 100644
--- a/call-setting/resources.h
+++ b/call-setting/resources.h
@@ -60,6 +60,20 @@ namespace call_setting {
extern const ucl::TString STR_NUMBER_SETTING_ITEM_SUB_TEXT;
extern const ucl::TString STR_KEYPAD_GUIDE_TEXT;
+
+ extern const ucl::TString STR_SR_DOUBLE_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL;
+ extern const ucl::TString STR_SR_DOUBLE_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL;
+ extern const ucl::TString STR_SR_DOUBLE_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL;
+ extern const ucl::TString STR_SR_CONFIRM;
+ extern const ucl::TString STR_SR_BACKSPACE;
+ extern const ucl::TString STR_SR_EDIT_BOX;
+ extern const ucl::TString STR_SR_KEYPAD;
+ extern const ucl::TString STR_SR_EMPTY;
+ extern const ucl::TString STR_SR_EDITING;
+
+ extern const ucl::TString STR_SR_SWITCH;
+ extern const ucl::TString STR_SR_RADIO_BUTTON;
+
}
#endif // __CALL_SETTING_RESOURCES_H__
diff --git a/call-setting/view/AoSequencer.cpp b/call-setting/view/AoSequencer.cpp
new file mode 100644
index 0000000..dfdca2f
--- /dev/null
+++ b/call-setting/view/AoSequencer.cpp
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * 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.
+ */
+
+#include "AoSequencer.h"
+
+#include "common.h"
+
+namespace call_setting {
+
+ AoSequencer::AoSequencer(
+ const Elm_Interface_Atspi_Accessible *const current,
+ const Elm_Atspi_Relation_Type flowRelation) :
+ m_current(current),
+ m_flowRelation(flowRelation),
+
+ m_last(nullptr),
+ m_next(nullptr),
+
+ m_isNextSet(false),
+ m_isCurrentFound(false),
+ m_isComplete(false)
+ {
+ }
+
+ void AoSequencer::doProcessAo(
+ const Elm_Interface_Atspi_Accessible *const itemAo)
+ {
+ switch (m_flowRelation) {
+ case ELM_ATSPI_RELATION_FLOWS_TO:
+
+ if (itemAo == m_current) {
+ setNext(itemAo);
+ m_isCurrentFound = true;
+ return;
+ }
+ if (m_isCurrentFound) {
+ setNext(itemAo);
+ m_isComplete = true;
+ return;
+ }
+ break;
+
+ case ELM_ATSPI_RELATION_FLOWS_FROM:
+
+ if (itemAo == m_current) {
+ setNext(m_isNextSet ? m_last : itemAo);
+ m_isComplete = true;
+ return;
+ }
+ m_last = itemAo;
+ break;
+
+ default:
+ WLOG("Unknown: %d;", m_flowRelation);
+ break;
+ }
+
+ if (!m_isNextSet) {
+ setNext(itemAo);
+ }
+ }
+
+ void AoSequencer::setNext(
+ const Elm_Interface_Atspi_Accessible *const itemAo)
+ {
+ m_next = itemAo;
+ m_isNextSet = true;
+ }
+}
diff --git a/call-setting/view/AoSequencer.h b/call-setting/view/AoSequencer.h
new file mode 100644
index 0000000..149096f
--- /dev/null
+++ b/call-setting/view/AoSequencer.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * 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.
+ */
+
+#ifndef __CALL_SETTING_VIEW_AO_SEQUENCER_H__
+#define __CALL_SETTING_VIEW_AO_SEQUENCER_H__
+
+#include "ucl/gui/Atspi.h"
+
+#include "types.h"
+
+namespace call_setting {
+
+ UCL_DECLARE_REF_ALIASES(KeypadNumberBtn);
+
+ /**
+ * @brief Finds next object in the Access objects highlight flow sequence
+ */
+ class AoSequencer final : private ucl::NonCopyable {
+ public:
+ /**
+ * @brief Constructor
+ * @param[in] current Currently focused Access object
+ * @param[in] flowRelation Flow relation for finding next Access object
+ */
+ AoSequencer(const Elm_Interface_Atspi_Accessible *current,
+ Elm_Atspi_Relation_Type flowRelation);
+
+ /**
+ * @brief Denotes break in sequence for allowing system default flow
+ */
+ AoSequencer &processDefault();
+
+ /**
+ * @brief Passes next object in flow sequence
+ * @param[in] item Item in highlight flow sequence. Any object for which
+ * as_ao() function may be called. NULL is ignored.
+ */
+ template <class ITEM>
+ AoSequencer &process(const ITEM &item);
+
+ /**
+ * @brief Passes next object list in flow sequence
+ * @param[in] items Item list in highlight flow sequence.
+ */
+ template <class ITEMS>
+ AoSequencer &processEach(const ITEMS &items);
+
+ /**
+ * @brief Passes next object range in flow sequence
+ * @param[in] begin Begin iterator of the range
+ * @param[in] end End iterator of the range
+ */
+ template <class ITERATOR>
+ AoSequencer &processEach(ITERATOR begin, ITERATOR end);
+
+ /**
+ * @brief Gets next Acces object in highlight flow sequence
+ * @details Result is base on constructor parameters and processed
+ * sequence. Result may change during processing.
+ * If current object was not found in the processed sequence
+ * first object from the sequence is returned. If it is not
+ * possible to get next object (current is already last) then
+ * current object is returned. NULL is returned for default
+ * processing.
+ * @return Next access object in highlight flow sequence
+ */
+ const Elm_Interface_Atspi_Accessible *getNext();
+
+ private:
+ template <class ITEM>
+ void doProcess(const ITEM &item);
+ void doProcessAo(const Elm_Interface_Atspi_Accessible *itemAo);
+ void setNext(const Elm_Interface_Atspi_Accessible *itemAo);
+
+ private:
+ const Elm_Interface_Atspi_Accessible *const m_current;
+ const Elm_Atspi_Relation_Type m_flowRelation;
+
+ const Elm_Interface_Atspi_Accessible *m_last;
+ const Elm_Interface_Atspi_Accessible *m_next;
+
+ bool m_isNextSet;
+ bool m_isCurrentFound;
+ bool m_isComplete;
+ };
+}
+
+#include "AoSequencer.hpp"
+
+#endif // __CALL_SETTING_VIEW_AO_SEQUENCER_H__
diff --git a/call-setting/view/AoSequencer.hpp b/call-setting/view/AoSequencer.hpp
new file mode 100644
index 0000000..eb6c0e3
--- /dev/null
+++ b/call-setting/view/AoSequencer.hpp
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * 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.
+ */
+
+namespace call_setting {
+
+ inline AoSequencer &AoSequencer::processDefault()
+ {
+ if (!m_isComplete) {
+ doProcessAo(nullptr);
+ }
+ return *this;
+ }
+
+ template <class ITEM>
+ inline AoSequencer &AoSequencer::process(const ITEM &item)
+ {
+ if (!m_isComplete) {
+ doProcess(item);
+ }
+ return *this;
+ }
+
+ template <class ITEMS>
+ inline AoSequencer &AoSequencer::processEach(const ITEMS &items)
+ {
+ if (!m_isComplete) {
+ for (const auto &item: items) {
+ doProcess(item);
+ if (m_isComplete) {
+ break;
+ }
+ }
+ }
+ return *this;
+ }
+
+ template <class ITERATOR>
+ inline AoSequencer &AoSequencer::processEach(
+ const ITERATOR begin, const ITERATOR end)
+ {
+ if (!m_isComplete) {
+ for (auto it = begin; it != end; ++it) {
+ doProcess(*it);
+ if (m_isComplete) {
+ break;
+ }
+ }
+ }
+ return *this;
+ }
+
+ inline const Elm_Interface_Atspi_Accessible *AoSequencer::getNext()
+ {
+ return m_next;
+ }
+
+ template <class ITEM>
+ inline void AoSequencer::doProcess(const ITEM &item)
+ {
+ using ucl::as_ao;
+ if (const auto itemAo = as_ao(item)) {
+ doProcessAo(itemAo);
+ }
+ }
+}
diff --git a/call-setting/view/KeypadBackspaceBtn.cpp b/call-setting/view/KeypadBackspaceBtn.cpp
index 064a240..ade2747 100644
--- a/call-setting/view/KeypadBackspaceBtn.cpp
+++ b/call-setting/view/KeypadBackspaceBtn.cpp
@@ -31,7 +31,7 @@ namespace call_setting {
KeypadBackspaceBtnSRef KeypadBackspaceBtn::newInstance(ElmWidget &parent)
{
- Evas_Object *eo = elm_button_add(parent);
+ Evas_Object *eo = elm_button_add(as_eo(parent));
if (!eo) {
LOG_RETURN_VALUE(RES_FAIL, {}, "eo is NULL");
}
diff --git a/call-setting/view/KeypadBackspaceBtn.h b/call-setting/view/KeypadBackspaceBtn.h
index 7805420..263ea7f 100644
--- a/call-setting/view/KeypadBackspaceBtn.h
+++ b/call-setting/view/KeypadBackspaceBtn.h
@@ -25,18 +25,45 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(KeypadBackspaceBtn);
- class KeypadBackspaceBtn final: public ucl::ElmWidget {
+ /**
+ * @brief Implements keypad backspace button
+ */
+ class KeypadBackspaceBtn final : public ucl::ElmWidget {
public:
+
+ /**
+ * @brief Creates KeypadBackspaceBtn object
+ * @param[in] parent Parent widget
+ * @return KeypadBackspaceBtn object
+ */
static KeypadBackspaceBtnSRef newInstance(ucl::ElmWidget &parent);
protected:
+
+ /**
+ * @brief Constructor
+ * @param[in] rc Pointer to IRefCountObj (passed automatically)
+ * @param[in] eo Pointer to Evas object
+ */
KeypadBackspaceBtn(ucl::IRefCountObj &rc,
Evas_Object *eo,
Private);
+
+ /**
+ * @brief Destructor
+ */
virtual ~KeypadBackspaceBtn() = default;
+ /**
+ * @brief Prepares data
+ */
void prepare();
+ /**
+ * @brief Tap-n-hold callback
+ * @param[in] x X tap coordinate
+ * @param[in] y Y tap coordinate
+ */
void onTapAndHold(int x, int y);
private:
diff --git a/call-setting/view/KeypadEntry.cpp b/call-setting/view/KeypadEntry.cpp
index 60acdb1..a425e1e 100644
--- a/call-setting/view/KeypadEntry.cpp
+++ b/call-setting/view/KeypadEntry.cpp
@@ -32,7 +32,7 @@ namespace call_setting {
KeypadEntrySRef KeypadEntry::newInstance(ucl::ElmWidget &parent)
{
- auto eo = elm_entry_add(parent);
+ auto eo = elm_entry_add(as_eo(parent));
if (!eo) {
LOG_RETURN_VALUE(RES_FAIL, {}, "eo is NULL");
}
@@ -59,10 +59,10 @@ namespace call_setting {
digitsFilterData.accepted = "0123456789*#+";
digitsFilterData.rejected = nullptr;
- elm_entry_single_line_set(*m_entry, EINA_TRUE);
- elm_entry_editable_set(*m_entry, EINA_FALSE);
- elm_entry_scrollable_set(*m_entry, EINA_TRUE);
- elm_entry_markup_filter_append(*m_entry,
+ elm_entry_single_line_set(as_eo(*m_entry), EINA_TRUE);
+ elm_entry_editable_set(as_eo(*m_entry), EINA_FALSE);
+ elm_entry_scrollable_set(as_eo(*m_entry), EINA_TRUE);
+ elm_entry_markup_filter_append(as_eo(*m_entry),
elm_entry_filter_accept_set, &digitsFilterData);
m_entry->addEventHandler(ENTRY_CHANGED,
@@ -76,41 +76,41 @@ namespace call_setting {
std::string KeypadEntry::getNumber() const
{
- return nz(elm_entry_entry_get(*m_entry));
+ return nz(elm_entry_entry_get(as_eo(*m_entry)));
}
void KeypadEntry::setNumber(const std::string &number)
{
- elm_entry_entry_set(*m_entry, number.c_str());
- elm_entry_cursor_line_end_set(*m_entry);
+ elm_entry_entry_set(as_eo(*m_entry), number.c_str());
+ elm_entry_cursor_line_end_set(as_eo(*m_entry));
}
void KeypadEntry::insert(const char *c)
{
- elm_entry_entry_insert(*m_entry, c);
+ elm_entry_entry_insert(as_eo(*m_entry), c);
}
void KeypadEntry::erase()
{
- if (!elm_entry_selection_get(*m_entry)) {
- int pos = elm_entry_cursor_pos_get(*m_entry);
+ if (!elm_entry_selection_get(as_eo(*m_entry))) {
+ int pos = elm_entry_cursor_pos_get(as_eo(*m_entry));
if (pos > 0) {
- elm_entry_select_region_set(*m_entry, pos - 1, pos);
+ elm_entry_select_region_set(as_eo(*m_entry), pos - 1, pos);
}
}
- elm_entry_entry_insert(*m_entry, "");
+ elm_entry_entry_insert(as_eo(*m_entry), "");
}
void KeypadEntry::clear()
{
- elm_entry_entry_set(*m_entry, "");
+ elm_entry_entry_set(as_eo(*m_entry), "");
}
int KeypadEntry::calcFontSize() const
{
int entryWidth = 0;
int textWidth = 0;
- auto textblock = elm_entry_textblock_get(*m_entry);
+ auto textblock = elm_entry_textblock_get(as_eo(*m_entry));
m_entry->getGeometry(nullptr, nullptr, &entryWidth, nullptr);
evas_object_textblock_size_native_get(textblock, &textWidth, nullptr);
@@ -133,13 +133,13 @@ namespace call_setting {
snprintf(buffer, sizeof(buffer),
"DEFAULT='font=Tizen:style=Regular"
" font_size=%d color=#ffffff align=center'", m_fontSize);
- elm_entry_text_style_user_pop(*m_entry);
- elm_entry_text_style_user_push(*m_entry, buffer);
+ elm_entry_text_style_user_pop(as_eo(*m_entry));
+ elm_entry_text_style_user_push(as_eo(*m_entry), buffer);
}
void KeypadEntry::onChanged(Widget &widget, void *eventInfo)
{
- std::string newText = nz(elm_entry_entry_get(*m_entry));
+ std::string newText = nz(elm_entry_entry_get(as_eo(*m_entry)));
// XXX This check is used to avoid recursive font
// size recalculation when entry text does not changed
diff --git a/call-setting/view/KeypadEntry.h b/call-setting/view/KeypadEntry.h
index ce362af..1c2f488 100644
--- a/call-setting/view/KeypadEntry.h
+++ b/call-setting/view/KeypadEntry.h
@@ -25,14 +25,45 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(KeypadEntry);
- class KeypadEntry final: public ucl::ElmWidget {
+ /**
+ * @brief Implements keypad entry
+ */
+ class KeypadEntry final : public ucl::ElmWidget {
public:
+
+ /**
+ * @brief Creates KeypadEntry object
+ * @param[in] parent Parent widget
+ * @return KeypadEntry object
+ */
static KeypadEntrySRef newInstance(ucl::ElmWidget &parent);
+ /**
+ * @brief Gets number
+ * @return Number string
+ */
std::string getNumber() const;
+
+ /**
+ * @brief Sets number
+ * @param[in] number Number string
+ */
void setNumber(const std::string &number);
+
+ /**
+ * @brief Inserts a character
+ * @param[in] c Character
+ */
void insert(const char *c);
+
+ /**
+ * @brief Erases character
+ */
void erase();
+
+ /**
+ * @brief Clears string
+ */
void clear();
private:
diff --git a/call-setting/view/KeypadNumberBtn.cpp b/call-setting/view/KeypadNumberBtn.cpp
index f82f6db..6b16314 100644
--- a/call-setting/view/KeypadNumberBtn.cpp
+++ b/call-setting/view/KeypadNumberBtn.cpp
@@ -35,7 +35,7 @@ namespace call_setting {
KeypadNumberBtnSRef KeypadNumberBtn::newInstance(ucl::ElmWidget &parent,
const Info &info)
{
- Evas_Object *eo = elm_button_add(parent);
+ Evas_Object *eo = elm_button_add(as_eo(parent));
if (!eo) {
LOG_RETURN_VALUE(RES_FAIL, {}, "eo is NULL");
}
diff --git a/call-setting/view/KeypadNumberBtn.h b/call-setting/view/KeypadNumberBtn.h
index b585384..8d13cd3 100644
--- a/call-setting/view/KeypadNumberBtn.h
+++ b/call-setting/view/KeypadNumberBtn.h
@@ -25,34 +25,71 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(KeypadNumberBtn);
- class KeypadNumberBtn final: public ucl::ElmWidget {
+ /**
+ * @brief Implements keypad number button
+ */
+ class KeypadNumberBtn final : public ucl::ElmWidget {
public:
+
+ /**
+ * @brief Enumeration of locations of additional symbols
+ */
enum class SymbolState {
- HIDDEN,
- BELOW,
- RIGHT
+ HIDDEN, /**< No symbols*/
+ BELOW, /**< Below letters*/
+ RIGHT /**< To the right of the letters*/
};
+ /**
+ * @brief Button data structure
+ */
struct Info {
- ucl::ElmStyle style;
- const char *digit;
- const char *letters;
- const char *symbol;
- SymbolState symbolState;
+ ucl::ElmStyle style; /**< Style*/
+ const char *digit; /**< Digit symbol*/
+ const char *letters; /**< Letters*/
+ const char *symbol; /**< Special symbols*/
+ SymbolState symbolState; /**< Symbol State*/
};
public:
+
+ /**
+ * @brief Creates instance of KeypadNumberBtn
+ * @param[in] parent Pointer to parent widget
+ * @param[in] info Key info
+ * @return Shared reference to KeypadNumberBtn
+ */
static KeypadNumberBtnSRef newInstance(ucl::ElmWidget &parent,
const Info &info);
protected:
+
+ /**
+ * @brief Constructor
+ * @param[in] rc Pointer to IRefCountObj (passed automatically)
+ * @param[in] eo Evas object pointer
+ * @param[in] info Key info
+ */
KeypadNumberBtn(ucl::IRefCountObj &rc,
Evas_Object *eo,
const Info &info,
Private);
+
+ /**
+ * @brief Default destructor
+ */
virtual ~KeypadNumberBtn() = default;
+ /**
+ * @brief Prepares key data
+ */
void prepare(const Info &info);
+
+ /**
+ * @brief Tap-n-hold callback
+ * @param[in] x X tap coordinate
+ * @param[in] y Y tap coordinate
+ */
void onTapAndHold(int x, int y);
private:
diff --git a/call-setting/view/PageContent.cpp b/call-setting/view/PageContent.cpp
index 19b90bb..92ffa43 100644
--- a/call-setting/view/PageContent.cpp
+++ b/call-setting/view/PageContent.cpp
@@ -92,7 +92,7 @@ namespace call_setting {
PageContent::PageContent(IRefCountObj &rc,
Layout *const layout, const int flags, Private) :
- ElmWidget(&rc, *layout),
+ ElmWidget(&rc, as_eo(*layout)),
m_mainLayout(layout)
{
prepare(flags);
@@ -129,12 +129,12 @@ namespace call_setting {
}
}
- Result PageContent::set(Evas_Object *const eo, const Part part)
+ Result PageContent::set(Widget &widget, const Part part)
{
return doWithPart(part,
- [eo](Layout &layout, const EdjePart part)
+ [&widget](Layout &layout, const EdjePart part)
{
- layout.setContent(eo, part);
+ layout.setContent(widget, part);
});
}
diff --git a/call-setting/view/PageContent.h b/call-setting/view/PageContent.h
index cf3b518..6c4b097 100644
--- a/call-setting/view/PageContent.h
+++ b/call-setting/view/PageContent.h
@@ -25,40 +25,98 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(PageContent);
+ /**
+ * @brief Provides set of instruments to manipulate page contents
+ */
class PageContent final : public ucl::ElmWidget {
public:
+ /**
+ * @brief Provides set of instruments for creation of PageContent
+ * object with set of options
+ */
class Builder final {
public:
+ /**
+ * @brief Default constructor
+ */
Builder();
+
+ /**
+ * @brief Sets flags
+ * @param[in] flags Flags
+ * @return SelectModePresenter::Builder object
+ */
Builder &setFlags(int flags);
+
+ /**
+ * @brief Creates PageContent object
+ * @param[in] parent Parent presenter
+ * @return Shared reference to PageContent object
+ */
PageContentSRef build(ucl::ElmWidget &parent) const;
private:
int m_flags;
};
+ /**
+ * @brief Enumeration of flags
+ */
enum {
- FLAG_SELECT_BUTTON = 1,
- FLAG_BOTTOM_BUTTON = 2,
+ FLAG_SELECT_BUTTON = 1, /**< Select button flag*/
+ FLAG_BOTTOM_BUTTON = 2, /**< Bottom button flag*/
- FLAGS_SELECT_MODE = (FLAG_SELECT_BUTTON | FLAG_BOTTOM_BUTTON),
- FLAGS_ALL = FLAGS_SELECT_MODE
+ FLAGS_SELECT_MODE =
+ (FLAG_SELECT_BUTTON | FLAG_BOTTOM_BUTTON), /**< Select mode flag*/
+ FLAGS_ALL = FLAGS_SELECT_MODE /**< All flags*/
};
+ /**
+ * @brief Enumeration of parts
+ */
enum class Part {
- DEFAULT,
- CIRCLE_OBJECT,
- MORE_OPTIONS,
- SELECT_BUTTON,
- BOTTOM_BUTTON
+ DEFAULT, /**< Default*/
+ CIRCLE_OBJECT, /**< Circle object*/
+ MORE_OPTIONS, /**< More option button*/
+ SELECT_BUTTON, /**< Selector button*/
+ BOTTOM_BUTTON /**< Bottom button*/
};
public:
- ucl::Result set(Evas_Object *eo, Part part = Part::DEFAULT);
+
+ /**
+ * @brief Sets Evas object to part
+ * @param[in] widget Widget. @see ucl::Widget
+ * @param[in] part Part
+ * @return ListOptionDialog::Builder object
+ */
+ ucl::Result set(ucl::Widget &widget, Part part = Part::DEFAULT);
+
+ /**
+ * @brief Clears part
+ * @param[in] part Part
+ * @return Evas object pointer
+ */
Evas_Object *unset(Part part = Part::DEFAULT);
+ /**
+ * @brief Gets part
+ * @param[in] part Part
+ * @return Evas object pointer
+ */
Evas_Object *get(Part part = Part::DEFAULT) const;
+ /**
+ * @brief Sets select button visible
+ * @param[in] visible Value
+ * @return RES_OK on success, otherwise an error code on failure
+ */
ucl::Result setSelectButtonVisible(bool visible);
+
+ /**
+ * @brief Sets More options part visible
+ * @param[in] visible Value
+ * @return RES_OK on success, otherwise an error code on failure
+ */
ucl::Result setMoreOptionsVisible(bool visible);
private:
diff --git a/call-setting/view/TouchParser.cpp b/call-setting/view/TouchParser.cpp
index 68b8aad..6501e3c 100644
--- a/call-setting/view/TouchParser.cpp
+++ b/call-setting/view/TouchParser.cpp
@@ -32,11 +32,12 @@ namespace call_setting {
RefCountAware(&rc),
m_holdTimer(nullptr),
m_downTime(0),
- m_downX(0),
- m_downY(0),
+ m_baseX(0),
+ m_baseY(0),
m_tapCounter(0),
m_isMouseDown(false),
- m_isTapPossible(false)
+ m_isTapPossible(false),
+ m_isBaseCoordinatesSet(false)
{
eventSource.addEventHandler(WidgetEvent::MOUSE_DOWN,
WEAK_DELEGATE_THIS(onMouseDown));
@@ -82,16 +83,24 @@ namespace call_setting {
restartHoldTimer();
} else if (m_tapCounter == 1) {
if (const auto handler = m_doubleTapHandler.lock()) {
- handler(m_downX, m_downY);
+ handler(m_baseX, m_baseY);
}
}
m_downTime = e->timestamp;
- m_downX = e->canvas.x;
- m_downY = e->canvas.y;
+ m_isBaseCoordinatesSet = false;
m_isTapPossible = true;
}
+ void TouchParser::tryUpdateBaseCoordinates(int x, int y)
+ {
+ if (!m_isBaseCoordinatesSet) {
+ m_isBaseCoordinatesSet = true;
+ m_baseX = x;
+ m_baseY = y;
+ }
+ }
+
void TouchParser::onMouseUp(Widget &widget, void *eventInfo)
{
if (!m_isMouseDown) {
@@ -99,9 +108,11 @@ namespace call_setting {
}
m_isMouseDown = false;
+ stopHoldTimer();
+
const auto e = static_cast<Evas_Event_Mouse_Up *>(eventInfo);
+ tryUpdateBaseCoordinates(e->canvas.x, e->canvas.y);
- stopHoldTimer();
updateIsTapPossible(e->event_flags, e->canvas.x, e->canvas.y);
if (!m_isTapPossible) {
@@ -123,6 +134,7 @@ namespace call_setting {
}
const auto e = static_cast<Evas_Event_Mouse_Move *>(eventInfo);
+ tryUpdateBaseCoordinates(e->cur.canvas.x, e->cur.canvas.y);
updateIsTapPossible(e->event_flags, e->cur.canvas.x, e->cur.canvas.y);
@@ -153,8 +165,8 @@ namespace call_setting {
double TouchParser::calcDownDistance(int curX, int curY) const
{
- const auto dx = (curX - m_downX);
- const auto dy = (curY - m_downY);
+ const auto dx = (curX - m_baseX);
+ const auto dy = (curY - m_baseY);
return sqrt(1.0 * dx * dx + 1.0 * dy * dy);
}
@@ -178,7 +190,7 @@ namespace call_setting {
{
m_holdTimer = nullptr;
if (const auto handler = m_tapAndHoldHandler.lock()) {
- handler(m_downX, m_downY);
+ handler(m_baseX, m_baseY);
}
return ECORE_CALLBACK_CANCEL;
}
diff --git a/call-setting/view/TouchParser.h b/call-setting/view/TouchParser.h
index 4904aeb..fd96a6b 100644
--- a/call-setting/view/TouchParser.h
+++ b/call-setting/view/TouchParser.h
@@ -25,15 +25,42 @@ namespace call_setting {
UCL_DECLARE_REF_ALIASES(TouchParser);
+ /**
+ * @brief Provides set of instruments to handle Tap events on widgets
+ */
class TouchParser final : public ucl::RefCountAware {
public:
+
+ /**
+ * @brief Tap event handler
+ */
using TapHandler = ucl::WeakDelegate<void(int x, int y)>;
public:
+
+ /**
+ * @brief Constructor
+ * @param[in] rc Pointer to IRefCountObj (passed automatically)
+ * @param[in] eventSource Source widget for handling Tap events
+ */
TouchParser(ucl::IRefCountObj &rc, ucl::Widget &eventSource);
+ /**
+ * @brief Sets single Tap event handler
+ * @param[in] handler Tap event handler
+ */
void setTapHandler(TapHandler handler);
+
+ /**
+ * @brief Sets double Tap event handler
+ * @param[in] handler Double Tap event handler
+ */
void setDoubleTapHandler(TapHandler handler);
+
+ /**
+ * @brief Sets 'Tap and Hold' event handler
+ * @param[in] handler 'Tap and hold' event handler
+ */
void setTapAndHoldHandler(TapHandler handler);
private:
@@ -51,17 +78,20 @@ namespace call_setting {
void stopHoldTimer();
Eina_Bool onHoldTimer();
+ void tryUpdateBaseCoordinates(int x, int y);
+
private:
TapHandler m_tapHandler;
TapHandler m_doubleTapHandler;
TapHandler m_tapAndHoldHandler;
Ecore_Timer *m_holdTimer;
ucl::UInt m_downTime;
- int m_downX;
- int m_downY;
+ int m_baseX;
+ int m_baseY;
int m_tapCounter;
bool m_isMouseDown;
bool m_isTapPossible;
+ bool m_isBaseCoordinatesSet;
friend class ucl::ReffedObj<TouchParser>;
};
diff --git a/call-setting/view/helpers.cpp b/call-setting/view/helpers.cpp
index 78a8d12..ce24600 100644
--- a/call-setting/view/helpers.cpp
+++ b/call-setting/view/helpers.cpp
@@ -25,14 +25,63 @@
namespace call_setting { namespace { namespace impl {
+ using ucl::Layout;
+ using ucl::Timeout;
+
constexpr EoDataKey CIRCLE_SURFACE {"callsetting,eext,circle,surface"};
constexpr LayoutTheme LAYOUT_FAKE_ACCESS_OBJECT
{"layout", "callsetting", "fake_access_object"};
+
+ const auto ATSPI_HIGHLIGHT_RESET_TIMEOUT = 0.1;
+
+ UCL_DECLARE_REF_ALIASES(AtspiHighlightResetter);
+
+ static AtspiHighlightResetterSRef ATSPI_HIGHLIGHT_RESETTER;
+
+ class AtspiHighlightResetter final : public ucl::RefCountAware {
+ public:
+ AtspiHighlightResetter(ucl::IRefCountObj &rc, ucl::Window &win) :
+ RefCountAware(&rc)
+ {
+ m_fakeObj = util::createFakeAccessObject(win);
+
+ win.addEventHandler(WidgetEvent::DEL,
+ WEAK_DELEGATE_THIS(onWindowDel));
+
+ m_fakeObj->getAtspi().highlight();
+
+ resetTimeout();
+ }
+
+ void resetTimeout()
+ {
+ m_timeout = Timeout::create(ATSPI_HIGHLIGHT_RESET_TIMEOUT,
+ WEAK_DELEGATE_THIS(onResetTimeout));
+ }
+
+ private:
+ void onResetTimeout(Timeout *sender)
+ {
+ ATSPI_HIGHLIGHT_RESETTER.reset();
+ }
+
+ void onWindowDel(Widget &widget, void *eventInfo)
+ {
+ ATSPI_HIGHLIGHT_RESETTER.reset();
+ }
+
+ private:
+ ucl::ElmWidgetSRef m_fakeObj;
+ ucl::TimeoutSRef m_timeout;
+
+ };
}}}
namespace call_setting { namespace util {
+ using ucl::Atspi;
+ using ucl::AtspiGestureEventInfo;
using ucl::Layout;
using ucl::Naviframe;
@@ -48,7 +97,7 @@ namespace call_setting { namespace util {
"Circle Surface data already set!");
}
- const auto sfc = eext_circle_surface_naviframe_add(navi);
+ const auto sfc = eext_circle_surface_naviframe_add(as_eo(navi));
if (!sfc) {
LOG_RETURN(RES_FAIL,
"eext_circle_surface_conformant_add() failed!");
@@ -90,17 +139,66 @@ namespace call_setting { namespace util {
result->setGeometry(0, 0, 1, 1);
show(*result);
- elm_atspi_accessible_reading_info_type_set(*result, 0);
+ struct FakeHandler {
+ SharedRef<FakeHandler> selfRef;
- elm_atspi_accessible_gesture_cb_set(*result,
- [](void *, Elm_Atspi_Gesture_Info, Evas_Object *) -> Eina_Bool
+ void onGestureCb(Atspi &atspi,
+ AtspiGestureEventInfo &eventInfo)
{
- return EINA_TRUE;
- },
- nullptr);
+ eventInfo.preventDefault = true;
+ }
+ };
+
+ auto fh = makeShared<FakeHandler>();
+ fh->selfRef = fh;
+
+ evas_object_event_callback_add(as_eo(*result), EVAS_CALLBACK_DEL,
+ [](void *data, Evas *e, Evas_Object *obj, void *event_info)
+ {
+ static_cast<FakeHandler *>(data)->selfRef.reset();
+ }, fh.get());
+
+ auto &atspi = result->getAtspi();
+ atspi.setReadingInfo(0);
+ atspi.addGestureHandler(WEAK_DELEGATE(FakeHandler::onGestureCb, fh));
return result;
}
+
+ ElmWidgetSRef createAccessObject(EdjeWidget &widget, EdjePart part)
+ {
+ auto edjeLy = elm_layout_edje_get(as_eo(widget));
+ if (!edjeLy) {
+ LOG_RETURN_VALUE(RES_FAIL, {},
+ "elm_layout_edje_get() failed!");
+ }
+
+ auto edjeObj = const_cast<Evas_Object *>(
+ edje_object_part_object_get(edjeLy, part.name));
+ if (!edjeObj) {
+ LOG_RETURN_VALUE(RES_FAIL, {},
+ "edje_object_part_object_get() failed!");
+ }
+
+ auto ao = elm_access_object_register(edjeObj, as_eo(widget));
+ if (!ao) {
+ LOG_RETURN_VALUE(RES_FAIL, {},
+ "elm_access_object_register() failed!");
+ }
+
+ return makeShared<ElmWidget>(ao);
+ }
+
+ void resetAtspiHighlight(ucl::Window &window)
+ {
+ if (impl::ATSPI_HIGHLIGHT_RESETTER) {
+ impl::ATSPI_HIGHLIGHT_RESETTER->resetTimeout();
+ return;
+ }
+
+ impl::ATSPI_HIGHLIGHT_RESETTER =
+ makeShared<impl::AtspiHighlightResetter>(window);
+ }
}}
namespace call_setting {
diff --git a/call-setting/view/helpers.h b/call-setting/view/helpers.h
index 378abad..e43ef25 100644
--- a/call-setting/view/helpers.h
+++ b/call-setting/view/helpers.h
@@ -23,19 +23,71 @@
namespace call_setting { namespace util {
+ /**
+ * @brief Creates circle surface
+ * @param[in] navi Naviframe object. @see ucl::Naviframe
+ * @return RES_OK on success, otherwise an error code on failure
+ */
ucl::Result createCircleSurface(ucl::Naviframe &navi);
+
+ /**
+ * @brief Gets circle surface
+ * @param[in] widget ElmWidget object. @see ucl::ElmWidget
+ * @return Pointer to circle surface
+ */
Eext_Circle_Surface *getCircleSurface(const ucl::ElmWidget &widget);
+ /**
+ * @brief Creates inert invisible object
+ * @param[in] parent Parent widget. @see ucl::ElmWidget
+ * @return Shared reference to ElmWidget object
+ */
ucl::ElmWidgetSRef createFakeAccessObject(ucl::ElmWidget &parent);
+
+ /**
+ * @brief Creates access object based on widget edje part
+ * @param[in] widget Widget. @see ucl::EdjeWidget
+ * @param[in] part Edje part
+ * @return Shared reference to ElmWidget object
+ */
+ ucl::ElmWidgetSRef createAccessObject(ucl::EdjeWidget &widget,
+ ucl::EdjePart part);
+
+ /**
+ * @brief Resets ATSPI highlight from current highlighted object
+ * @param[in] window Application window instance
+ */
+ void resetAtspiHighlight(ucl::Window &window);
}}
namespace call_setting {
+ /**
+ * @brief Adds rotary event handler
+ * @param[in] func Callback function
+ * @param[in] data Pointer to data
+ */
void addRotaryEventHandler(Eext_Rotary_Handler_Cb func, void *data);
+
+ /**
+ * @brief Deletes rotary event handler
+ * @param[in] func Callback function
+ * @param[in] data Pointer to data
+ */
void delRotaryEventHandler(Eext_Rotary_Handler_Cb func, void *data);
+ /**
+ * @brief Gets image theme
+ * @param[in] fileName Input file
+ * @return Layout theme. @see ucl::LayoutTheme
+ */
ucl::LayoutTheme getImageTheme(const char *fileName);
+ /**
+ * @brief Gets relation type
+ * @param[in] gestureInfo Gesture info
+ * @return ATSPI objects relation type
+ */
Elm_Atspi_Relation_Type getFlowRelation(Elm_Atspi_Gesture_Info gestureInfo);
}
diff --git a/edc/buttons.edc b/edc/buttons.edc
index 120c054..a7c31d6 100644
--- a/edc/buttons.edc
+++ b/edc/buttons.edc
@@ -339,7 +339,7 @@ group { "elm/button/base/callsetting/backspace";
}
}
-#define CS_BTN_KEYPAD_NUMBER_IMPL(_name, _icon, _digit_x, _digit_y, _effect_x, _effect_y) \
+#define CS_BTN_KEYPAD_NUMBER_IMPL(_name, _icon, _width, _height, _digit_x, _digit_y, _effect_x, _effect_y) \
group { "elm/button/base/callsetting/"_name; \
data.item: "access_highlight" "on"; \
images { \
@@ -353,8 +353,8 @@ group { "elm/button/base/callsetting/"_name; \
scale; \
desc { "default"; \
fixed: 1 1; \
- rel1.relative: CS_REL_X(_effect_x) CS_REL_Y(_effect_y); \
- rel2.relative: CS_REL_X(_effect_x) CS_REL_Y(_effect_y); \
+ rel1.relative: (_effect_x/_width) (_effect_y/_height); \
+ rel2.relative: (_effect_x/_width) (_effect_y/_height); \
} \
} \
image { "image.effect"; \
@@ -382,9 +382,9 @@ group { "elm/button/base/callsetting/"_name; \
scale; \
desc { "default"; \
fixed: 1 1; \
- rel1.relative: CS_REL_X(_digit_x) CS_REL_Y(_digit_y); \
- rel2.relative: CS_REL_X((_digit_x+CS_KEYPAD_NUMBER_BTN_DIGIT_W)) \
- CS_REL_Y((_digit_y+CS_KEYPAD_NUMBER_BTN_DIGIT_H)); \
+ rel1.relative: (_digit_x/_width) (_digit_y/_height); \
+ rel2.relative: ((_digit_x+CS_KEYPAD_NUMBER_BTN_DIGIT_W)/_width) \
+ ((_digit_y+CS_KEYPAD_NUMBER_BTN_DIGIT_H)/_height); \
text.style: "keypad_btn_digit"; \
} \
} \
@@ -594,13 +594,13 @@ group { "elm/button/base/callsetting/"_name; \
} \
}
-CS_BTN_KEYPAD_NUMBER_IMPL("keypad_00", "keypad_0.png", 155, 12, 180, 35)
-CS_BTN_KEYPAD_NUMBER_IMPL("keypad_01", "keypad_1.png", 240, 41, 265, 63)
-CS_BTN_KEYPAD_NUMBER_IMPL("keypad_02", "keypad_2.png", 292, 106, 318, 135)
-CS_BTN_KEYPAD_NUMBER_IMPL("keypad_03", "keypad_3.png", 292, 196, 318, 225)
-CS_BTN_KEYPAD_NUMBER_IMPL("keypad_04", "keypad_4.png", 240, 265, 265, 297)
-CS_BTN_KEYPAD_NUMBER_IMPL("keypad_05", "keypad_5.png", 155, 292, 180, 325)
-CS_BTN_KEYPAD_NUMBER_IMPL("keypad_06", "keypad_6.png", 70, 264, 95, 297)
-CS_BTN_KEYPAD_NUMBER_IMPL("keypad_07", "keypad_7.png", 18, 194, 42, 225)
-CS_BTN_KEYPAD_NUMBER_IMPL("keypad_08", "keypad_8.png", 18, 104, 42, 135)
-CS_BTN_KEYPAD_NUMBER_IMPL("keypad_09", "keypad_9.png", 70, 30, 95, 63)
+CS_BTN_KEYPAD_NUMBER_IMPL("keypad_00", "keypad_0.png", 110, 102, 30, 12, 55, 35)
+CS_BTN_KEYPAD_NUMBER_IMPL("keypad_01", "keypad_1.png", 119, 122, 34, 32, 59, 54)
+CS_BTN_KEYPAD_NUMBER_IMPL("keypad_02", "keypad_2.png", 113, 104, 45, 31, 71, 60)
+CS_BTN_KEYPAD_NUMBER_IMPL("keypad_03", "keypad_3.png", 113, 104, 45, 15, 71, 44)
+CS_BTN_KEYPAD_NUMBER_IMPL("keypad_04", "keypad_4.png", 119, 122, 34, 36, 59, 68)
+CS_BTN_KEYPAD_NUMBER_IMPL("keypad_05", "keypad_5.png", 110, 102, 30, 34, 55, 67)
+CS_BTN_KEYPAD_NUMBER_IMPL("keypad_06", "keypad_6.png", 119, 122, 35, 35, 60, 68)
+CS_BTN_KEYPAD_NUMBER_IMPL("keypad_07", "keypad_7.png", 113, 104, 18, 13, 42, 44)
+CS_BTN_KEYPAD_NUMBER_IMPL("keypad_08", "keypad_8.png", 113, 104, 18, 29, 42, 60)
+CS_BTN_KEYPAD_NUMBER_IMPL("keypad_09", "keypad_9.png", 119, 122, 35, 21, 60, 54)
diff --git a/edc/images/keypad_0.png b/edc/images/keypad_0.png
index 606ce7b..eba3ff1 100644
--- a/edc/images/keypad_0.png
+++ b/edc/images/keypad_0.png
Binary files differ
diff --git a/edc/images/keypad_1.png b/edc/images/keypad_1.png
index d1f352d..3e6ae74 100644
--- a/edc/images/keypad_1.png
+++ b/edc/images/keypad_1.png
Binary files differ
diff --git a/edc/images/keypad_2.png b/edc/images/keypad_2.png
index 9ab8699..a9f7b70 100644
--- a/edc/images/keypad_2.png
+++ b/edc/images/keypad_2.png
Binary files differ
diff --git a/edc/images/keypad_3.png b/edc/images/keypad_3.png
index 76116d8..4f7dd05 100644
--- a/edc/images/keypad_3.png
+++ b/edc/images/keypad_3.png
Binary files differ
diff --git a/edc/images/keypad_4.png b/edc/images/keypad_4.png
index c2f26a6..66183d2 100644
--- a/edc/images/keypad_4.png
+++ b/edc/images/keypad_4.png
Binary files differ
diff --git a/edc/images/keypad_5.png b/edc/images/keypad_5.png
index 2aa1b78..e832f0c 100644
--- a/edc/images/keypad_5.png
+++ b/edc/images/keypad_5.png
Binary files differ
diff --git a/edc/images/keypad_6.png b/edc/images/keypad_6.png
index 8afe43e..2046d27 100644
--- a/edc/images/keypad_6.png
+++ b/edc/images/keypad_6.png
Binary files differ
diff --git a/edc/images/keypad_7.png b/edc/images/keypad_7.png
index 7820b5e..4c2dd29 100644
--- a/edc/images/keypad_7.png
+++ b/edc/images/keypad_7.png
Binary files differ
diff --git a/edc/images/keypad_8.png b/edc/images/keypad_8.png
index d7edefe..b124bff 100644
--- a/edc/images/keypad_8.png
+++ b/edc/images/keypad_8.png
Binary files differ
diff --git a/edc/images/keypad_9.png b/edc/images/keypad_9.png
index 06e0c05..e6f8401 100644
--- a/edc/images/keypad_9.png
+++ b/edc/images/keypad_9.png
Binary files differ
diff --git a/edc/layouts.edc b/edc/layouts.edc
index dd0b47e..8550e59 100644
--- a/edc/layouts.edc
+++ b/edc/layouts.edc
@@ -14,10 +14,12 @@
* limitations under the License.
*/
-#define CS_SWL_NUMBER_BUTTON(_name) \
+#define CS_SWL_NUMBER_BUTTON(_name, _x1, _y1, _x2, _y2) \
swallow { _name; \
scale; \
desc { "default"; \
+ rel1 { relative: CS_REL_X(_x1) CS_REL_Y(_y1); } \
+ rel2 { relative: CS_REL_X(_x2) CS_REL_Y(_y2); } \
} \
} \
@@ -59,22 +61,46 @@ group { "elm/layout/callsetting/proccessing";
color: CS_COLOR_BLACK;
}
}
- swallow { "callsetting.swallow.progress";
+ spacer { "pad.bottom";
+ scale;
+ desc { "default";
+ align: 0.5 1.0;
+ min: 0 131;
+ rel1 { relative: 0.0 1.0; }
+ }
+ }
+ textblock { "elm.text";
+ scale;
desc { "default";
hid;
+ text.style: "popup_graphic_toast_style";
+ text.min: 1 1;
+ max: 300 84;
+ rel1 { relative: 0.5 0.0; to_y: "pad.bottom"; }
+ rel2 { relative: 0.5 0.0; to_y: "pad.bottom"; }
}
desc { "visible";
inherit: "default";
vis;
}
}
- textblock { name: "elm.text";
- scale: 1;
+ spacer { "elm.text.pad.top";
+ scale;
+ desc { "default";
+ min: 0 16;
+ align: 0.5 1.0;
+ rel1 { relative: 0.0 0.0; to: "elm.text"; }
+ rel2 { relative: 1.0 0.0; to: "elm.text"; }
+ }
+ }
+ swallow { "callsetting.swallow.progress";
desc { "default";
hid;
- text.style: "popup_graphic_toast_style";
- text.min: 0 1;
- text.max: 0 1;
+ min: 82 82;
+ max: 82 82;
+ align: 0.5 1.0;
+ rel1 { relative: 0.5 0.0; to_y: "elm.text.pad.top"; }
+ rel2 { relative: 0.5 0.0; to_y: "elm.text.pad.top"; }
}
desc { "visible";
inherit: "default";
@@ -87,9 +113,7 @@ group { "elm/layout/callsetting/proccessing";
signal: "callsetting,show";
source: "";
action: STATE_SET "visible";
- target: "bg";
- target: "callsetting.swallow.progress";
- target: "elm.text";
+ targets: "bg" "callsetting.swallow.progress" "elm.text";
}
program { "callsetting,show,bg";
signal: "callsetting,show,bg";
@@ -101,8 +125,7 @@ group { "elm/layout/callsetting/proccessing";
signal: "callsetting,hide,progress";
source: "";
action: STATE_SET "default";
- target: "callsetting.swallow.progress";
- target: "elm.text";
+ targets: "callsetting.swallow.progress" "elm.text";
}
}
}
@@ -231,9 +254,8 @@ group { "elm/layout/callsetting/keypad";
clip: "clipper.number";
desc { "default";
fixed: 0 1;
- min: 0 66;
- rel1 { relative: 1.0 0.5; to_x: "spacer.number.left"; }
- rel2 { relative: 0.0 0.5; to_x: "spacer.number.right"; }
+ min: 208 39;
+ max: 208 39;
hid;
}
desc { "visible";
@@ -270,32 +292,64 @@ group { "elm/layout/callsetting/keypad";
hid;
}
}
- CS_SWL_NUMBER_BUTTON("swl.btn.0")
- CS_SWL_NUMBER_BUTTON("swl.btn.1")
- CS_SWL_NUMBER_BUTTON("swl.btn.2")
- CS_SWL_NUMBER_BUTTON("swl.btn.3")
- CS_SWL_NUMBER_BUTTON("swl.btn.4")
- CS_SWL_NUMBER_BUTTON("swl.btn.5")
- CS_SWL_NUMBER_BUTTON("swl.btn.6")
- CS_SWL_NUMBER_BUTTON("swl.btn.7")
- CS_SWL_NUMBER_BUTTON("swl.btn.8")
- CS_SWL_NUMBER_BUTTON("swl.btn.9")
+ CS_SWL_NUMBER_BUTTON("swl.btn.0", 125, 0, 235, 102)
+ CS_SWL_NUMBER_BUTTON("swl.btn.1", 206, 9, 325, 131)
+ CS_SWL_NUMBER_BUTTON("swl.btn.2", 247, 75, 360, 179)
+ CS_SWL_NUMBER_BUTTON("swl.btn.3", 247, 181, 360, 285)
+ CS_SWL_NUMBER_BUTTON("swl.btn.4", 206, 229, 325, 351)
+ CS_SWL_NUMBER_BUTTON("swl.btn.5", 125, 258, 235, 360)
+ CS_SWL_NUMBER_BUTTON("swl.btn.6", 35, 229, 154, 351)
+ CS_SWL_NUMBER_BUTTON("swl.btn.7", 0, 181, 113, 285)
+ CS_SWL_NUMBER_BUTTON("swl.btn.8", 0, 75, 113, 179)
+ CS_SWL_NUMBER_BUTTON("swl.btn.9", 35, 9, 154, 131)
+ spacer { "swl.confirm.pad.top";
+ scale;
+ desc { "default";
+ fixed: 0 1;
+ align: 0.5 0.0;
+ rel2 { relative: 1.0 0.0; }
+ min: 0 82;
+ }
+ }
swallow { "swl.confirm";
scale;
desc { "default";
fixed: 1 1;
+ align: 0.5 0.0;
+ rel1 { relative: 0.5 1.0; to_y: "swl.confirm.pad.top"; }
+ rel2 { relative: 0.5 1.0; to_y: "swl.confirm.pad.top"; }
+ }
+ }
+ spacer { "swl.backspace.pad.bottom";
+ scale;
+ desc { "default";
+ fixed: 0 1;
align: 0.5 1.0;
- rel1 { relative: 0.5 0.0; to_y: "swl.entry"; }
- rel2 { relative: 0.5 0.0; to_y: "swl.entry"; }
+ rel1 { relative: 0.0 1.0; }
+ min: 0 83;
}
}
swallow { "swl.backspace";
scale;
desc { "default";
fixed: 1 1;
- align: 0.5 0.0;
- rel1 { relative: 0.5 1.0; to_y: "swl.entry"; }
- rel2 { relative: 0.5 1.0; to_y: "swl.entry"; }
+ align: 0.5 1.0;
+ rel1 { relative: 0.5 0.0; to_y: "swl.backspace.pad.bottom"; }
+ rel2 { relative: 0.5 0.0; to_y: "swl.backspace.pad.bottom"; }
+ }
+ }
+ rect { "ao.entry";
+ scale;
+ mouse;
+ desc { "default";
+ fixed: 1 1;
+ rel.to: "txt.guide";
+ color: CS_COLOR_TRANSPARENT;
+ }
+ desc { "entry_size";
+ inherit: "default";
+ rel.to: "swl.entry";
+ color: CS_COLOR_TRANSPARENT;
}
}
}
@@ -308,6 +362,8 @@ group { "elm/layout/callsetting/keypad";
target: "txt.guide";
action: STATE_SET "default";
targets: "swl.entry" "clipper.number";
+ action: STATE_SET "default";
+ target: "ao.entry";
}
}
program {
@@ -318,6 +374,8 @@ group { "elm/layout/callsetting/keypad";
target: "txt.guide";
action: STATE_SET "visible";
targets: "swl.entry" "clipper.number";
+ action: STATE_SET "entry_size";
+ target: "ao.entry";
}
}
}
diff --git a/project_def.prop b/project_def.prop
index be59953..11c90ef 100644
--- a/project_def.prop
+++ b/project_def.prop
@@ -9,7 +9,7 @@ type = app
profile = wearable-4.0
# C/CPP Sources
-USER_SRCS = ucl/source/gui/Genlist.cpp call-setting/model/impl/BlockedNumbersImpl.cpp call-setting/presenters/misc/KeypadPresenter.cpp ucl/source/gui/Window.cpp call-setting/model/impl/BlockUnknownCallersImpl.cpp call-setting/view/TouchParser.cpp call-setting/model/impl/telephony/BaseTelRequestListener.cpp ucl/source/gui/Layout.cpp call-setting/resources.cpp call-setting/presenters/misc/ProcessingPresenter.cpp call-setting/presenters/misc/helpers.cpp ucl/source/appfw/UIApp.cpp call-setting/model/impl/CallWaitingImpl.cpp ucl/source/gui/WidgetItem.cpp call-setting/presenters/pages/NoContentPage.cpp call-setting/presenters/pages/VoicemailPage.cpp call-setting/presenters/pages/BlockedNumbersPage.cpp call-setting/model/BlockUnknownCallers.cpp ucl/source/util/types/Result.cpp call-setting/model/CallSetting.cpp call-setting/presenters/pages/KeypadPage.cpp call-setting/presenters/pages/MainPage.cpp call-setting/view/KeypadEntry.cpp call-setting/presenters/misc/SelectModePresenter.cpp call-setting/model/impl/misc/ContactNameProvider.cpp call-setting/presenters/items/BlockUnknownCallersItem.cpp ucl/source/appfw/InstanceManagerBase.cpp call-setting/model/BlockedNumbers.cpp call-setting/model/impl/misc/BlockListManager.cpp ucl/source/gui/NaviItem.cpp ucl/source/appfw/helpers.cpp call-setting/presenters/dialogs/ListOptionDialog.cpp call-setting/model/impl/settings/SettingsManager.cpp call-setting/presenters/items/CallWaitingItem.cpp call-setting/presenters/InstanceManager.cpp ucl/source/gui/Widget.cpp call-setting/model/impl/telephony/TelRequestListener.cpp call-setting/model/Voicemail.cpp call-setting/presenters/items/SimpleListItem.cpp ucl/source/misc/Timeout.cpp call-setting/presenters/pages/BlockListPage.cpp call-setting/presenters/items/base/ListOptionItem.cpp ucl/source/mvp/GuiPresenter.cpp call-setting/presenters/dialogs/base/Dialog.cpp call-setting/view/KeypadNumberBtn.cpp call-setting/view/helpers.cpp call-setting/model/StateManager.cpp ucl/source/util/logging.cpp ucl/source/gui/Naviframe.cpp ucl/source/gui/RadioBox.cpp ucl/source/util/types/classTypes.cpp call-setting/main.cpp call-setting/presenters/items/base/CheckOptionItem.cpp call-setting/model/CallWaiting.cpp call-setting/types.cpp ucl/source/appfw/SysEventProvider.cpp ucl/source/mvp/ListPresenter.cpp ucl/source/misc/Variant.cpp call-setting/presenters/items/RadioOptionItem.cpp call-setting/presenters/misc/MoreOptionsPresenter.cpp call-setting/model/impl/VoicemailImpl.cpp call-setting/presenters/items/CallerIdItem.cpp call-setting/model/CallerId.cpp call-setting/view/PageContent.cpp call-setting/model/impl/CallSettingImpl.cpp call-setting/presenters/pages/base/Page.cpp call-setting/model/impl/telephony/TelephonyManager.cpp call-setting/presenters/dialogs/ToastDialog.cpp ucl/source/mvp/ListItemPresenter.cpp ucl/source/gui/ElmWidget.cpp call-setting/model/impl/CallerIdImpl.cpp ucl/source/gui/EdjeWidget.cpp call-setting/view/KeypadBackspaceBtn.cpp call-setting/presenters/Instance.cpp call-setting/presenters/items/VoicemailNumberItem.cpp
+USER_SRCS = ucl/source/gui/Genlist.cpp call-setting/model/impl/BlockedNumbersImpl.cpp call-setting/presenters/misc/KeypadPresenter.cpp ucl/source/gui/Window.cpp call-setting/model/impl/BlockUnknownCallersImpl.cpp call-setting/view/TouchParser.cpp call-setting/model/impl/telephony/BaseTelRequestListener.cpp ucl/source/gui/Layout.cpp call-setting/resources.cpp call-setting/presenters/misc/ProcessingPresenter.cpp call-setting/presenters/misc/helpers.cpp ucl/source/appfw/UIApp.cpp call-setting/model/impl/CallWaitingImpl.cpp ucl/source/gui/WidgetItem.cpp call-setting/presenters/pages/NoContentPage.cpp call-setting/presenters/pages/VoicemailPage.cpp call-setting/presenters/pages/BlockedNumbersPage.cpp call-setting/model/BlockUnknownCallers.cpp ucl/source/util/types/Result.cpp call-setting/model/CallSetting.cpp call-setting/presenters/pages/KeypadPage.cpp call-setting/presenters/pages/MainPage.cpp call-setting/view/KeypadEntry.cpp call-setting/presenters/misc/SelectModePresenter.cpp call-setting/model/impl/misc/ContactNameProvider.cpp call-setting/presenters/items/BlockUnknownCallersItem.cpp ucl/source/appfw/InstanceManagerBase.cpp call-setting/model/BlockedNumbers.cpp call-setting/model/impl/misc/BlockListManager.cpp ucl/source/gui/NaviItem.cpp ucl/source/appfw/helpers.cpp call-setting/presenters/dialogs/ListOptionDialog.cpp call-setting/model/impl/settings/SettingsManager.cpp call-setting/presenters/items/CallWaitingItem.cpp call-setting/presenters/InstanceManager.cpp ucl/source/gui/Widget.cpp call-setting/model/impl/telephony/TelRequestListener.cpp call-setting/model/Voicemail.cpp call-setting/presenters/items/SimpleListItem.cpp ucl/source/misc/Timeout.cpp call-setting/presenters/pages/BlockListPage.cpp call-setting/presenters/items/base/ListOptionItem.cpp ucl/source/mvp/GuiPresenter.cpp call-setting/presenters/dialogs/base/Dialog.cpp call-setting/view/KeypadNumberBtn.cpp call-setting/view/helpers.cpp call-setting/model/StateManager.cpp ucl/source/util/logging.cpp ucl/source/gui/Naviframe.cpp ucl/source/gui/RadioBox.cpp ucl/source/util/types/classTypes.cpp call-setting/main.cpp call-setting/presenters/items/base/CheckOptionItem.cpp call-setting/model/CallWaiting.cpp call-setting/types.cpp ucl/source/appfw/SysEventProvider.cpp ucl/source/mvp/ListPresenter.cpp ucl/source/misc/Variant.cpp call-setting/presenters/items/RadioOptionItem.cpp call-setting/presenters/misc/MoreOptionsPresenter.cpp call-setting/presenters/misc/AtspiHighlightHelper.cpp call-setting/model/impl/VoicemailImpl.cpp call-setting/presenters/items/CallerIdItem.cpp call-setting/model/CallerId.cpp call-setting/view/PageContent.cpp call-setting/model/impl/CallSettingImpl.cpp call-setting/presenters/pages/base/Page.cpp call-setting/model/impl/telephony/TelephonyManager.cpp call-setting/presenters/dialogs/ToastDialog.cpp ucl/source/mvp/ListItemPresenter.cpp ucl/source/gui/ElmWidget.cpp call-setting/model/impl/CallerIdImpl.cpp ucl/source/gui/EdjeWidget.cpp call-setting/view/KeypadBackspaceBtn.cpp call-setting/presenters/Instance.cpp call-setting/presenters/items/VoicemailNumberItem.cpp
# EDC Sources
USER_EDCS =
diff --git a/res/po/ar.po b/res/po/ar.po
index 2fd7bd1..8020ddc 100644
--- a/res/po/ar.po
+++ b/res/po/ar.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "تأكيد"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "جاري تحديث الإعدادات..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "زر الراديو"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "فارغ"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "حذف"
@@ -13,9 +22,33 @@ msgstr "إلغاء تحديد الكل"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "تحديد الكل"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "تبديل"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "تم الحذف."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "انقر مع الاستمرار لإدخال رمز الجمع."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "انقر مع الاستمرار لإدخال رمز #."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "انقر مع الاستمرار لإدخال رمز النجمة."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "تعديل المربع"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "لوحة المفاتيح"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "التعديل"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "مسافة للخلف"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "البريد الصوتي"
diff --git a/res/po/az.po b/res/po/az.po
index b2dd9a3..001e449 100644
--- a/res/po/az.po
+++ b/res/po/az.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Təsdiq et"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Parametrlər yenilənir..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Radio düyməsi"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Boş"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "SİL"
@@ -13,9 +22,33 @@ msgstr "Hamısını sil"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Hamısını seç"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Keçir"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Silindi."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Üstəgəl simvolunu daxil etmək üçün vurub saxlayın."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "# simvolunu daxil etmək üçün vurub saxlayın."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Ulduz simvolunu daxil etmək üçün vurub saxlayın."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Redaktə xanası"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Klaviatura"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Redaktə"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Geri silmə"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Səsli poçt"
diff --git a/res/po/bg.po b/res/po/bg.po
index dea18ad..e6fdec4 100644
--- a/res/po/bg.po
+++ b/res/po/bg.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Потвърждение"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Актуализиране на настройките..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Бутон за избор"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Празно"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ИЗТРИВ."
@@ -13,9 +22,33 @@ msgstr "Размарк. вс."
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Изб. всички"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Превключване"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Изтрито."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Докоснете и задръжте, за да въведете символа плюс."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Докоснете и задръжте, за да въведете символа диез."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Докоснете и задръжте, за да въведете символа звезда."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Поле за редактиране"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Клавиатура"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Редактиране"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Връщане"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Гласова поща"
diff --git a/res/po/ca.po b/res/po/ca.po
index 5e89fd3..c5f5bb4 100644
--- a/res/po/ca.po
+++ b/res/po/ca.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Confirmar"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "S'estan actualitzant els ajustaments..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Botó de ràdio"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Buit"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ESBORRAR"
@@ -13,9 +22,33 @@ msgstr "Anul sel tot"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Selecc tot"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Canviar"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Esborrat."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Mantingui tocat per introduir el símbol més."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Mantingui tocat per introduir el símbol coixinet."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Mantingui tocat per introduir el símbol asterisc."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Quadre d'edició"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Teclat"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Editant"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Retrocés"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Bústia de veu"
diff --git a/res/po/cs.po b/res/po/cs.po
index 8e6bfb4..8e4bb34 100644
--- a/res/po/cs.po
+++ b/res/po/cs.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Potvrdit"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Probíhá aktualizace nastavení..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Přepínač"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Vysypat koš"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ODSTRANIT"
@@ -13,9 +22,33 @@ msgstr "Zrušit výběr"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Vybrat vše"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Přepnout"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Odstraněno."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Klepnutím a přidržením zadáte symbol plus."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Klepnutím a přidržením zadáte symbol #."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Klepnutím a přidržením zadáte symbol hvězdička."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Upravit pole"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Klávesnice"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Úpravy"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Hlasová pošta"
diff --git a/res/po/da.po b/res/po/da.po
index f93b091..0bbe1f8 100644
--- a/res/po/da.po
+++ b/res/po/da.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Bekræft"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Opdaterer indstillinger ..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Alternativknap"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Tom"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "SLET"
@@ -13,9 +22,33 @@ msgstr "Fravælg alle"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Vælg alle"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Skift"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Slettet."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Tryk og hold for at indtaste plustegn."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Tryk og hold for at indtaste nummertegn."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Tryk og hold for at indtaste stjernesymbol."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Redigeringsboks"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Tastatur"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Redigering"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Tilbagetast"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Telefonsvarer"
diff --git a/res/po/de.po b/res/po/de.po
index 9ef192b..8adcb55 100644
--- a/res/po/de.po
+++ b/res/po/de.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Bestätigen"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Einstellungen werden aktualisiert..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Optionsfeld"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Leer"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "LÖSCHEN"
@@ -13,9 +22,33 @@ msgstr "Alle abwählen"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Alle auswählen"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Wechseln"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Gelöscht."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Tippen und halten, um ein Plussymbol einzugeben."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Tippen und halten, um ein Rautensymbol einzugeben."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Tippen und halten, um ein Asterisksymbol einzugeben."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Bearbeitungsfeld"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Tastatur"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Bearbeiten"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Zurück"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Mailbox"
diff --git a/res/po/el_GR.po b/res/po/el_GR.po
index 0b707bb..2f3ba60 100644
--- a/res/po/el_GR.po
+++ b/res/po/el_GR.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Επιβεβαίωση"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Ενημέρωση ρυθμίσεων..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Κουμπί επιλογής"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Κενό"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ΔΙΑΓΡΑΦΗ"
@@ -13,9 +22,33 @@ msgstr "Αποεπ. όλων"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Επιλογή όλων"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Εναλλαγή"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Διαγράφηκε."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Πατήστε παρατεταμένα για να εισαγάγετε το σύμβολο συν."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Πατήστε παρατεταμένα για να εισαγάγετε το σύμβολο δίεσης."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Πατήστε παρατεταμένα για να εισαγάγετε το σύμβολο αστεριού."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Πλαίσιο επεξεργασίας"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Πληκτρολόγιο"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Επεξεργασία"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Πλήκτρο backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Τηλεφωνητής"
diff --git a/res/po/en.po b/res/po/en.po
index 267dad6..87ccada 100644
--- a/res/po/en.po
+++ b/res/po/en.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Confirm"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Updating settings..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Radio button"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Empty"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "DELETE"
@@ -13,9 +22,33 @@ msgstr "Deselect all"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Select all"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Switch"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Deleted."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Tap and hold to enter plus symbol."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Tap and hold to enter # symbol."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Tap and hold to enter star symbol."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Edit box"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Keypad"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Editing"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Voice Mail"
diff --git a/res/po/en_PH.po b/res/po/en_PH.po
index 0baa097..94292ea 100644
--- a/res/po/en_PH.po
+++ b/res/po/en_PH.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Confirm"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Updating settings..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Radio button"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Empty"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "DELETE"
@@ -13,9 +22,33 @@ msgstr "Deselect all"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Select all"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Switch"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Deleted."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Tap and hold to enter plus symbol."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Tap and hold to enter # symbol."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Tap and hold to enter star symbol."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Edit box"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Keypad"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Editing"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Voicemail"
diff --git a/res/po/en_US.po b/res/po/en_US.po
index 0baa097..4ac63c4 100644
--- a/res/po/en_US.po
+++ b/res/po/en_US.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Confirm"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Updating settings..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Radio button"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Empty"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "DELETE"
@@ -13,9 +22,33 @@ msgstr "Deselect all"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Select all"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Switch"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Deleted."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Touch and hold to enter plus symbol."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Touch and hold to enter hash symbol."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Touch and hold to enter star symbol."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Edit box"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Keypad"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Editing"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Voicemail"
diff --git a/res/po/es_ES.po b/res/po/es_ES.po
index 2b5e153..78430ad 100644
--- a/res/po/es_ES.po
+++ b/res/po/es_ES.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Confirmar"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Actualizando ajustes..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Botón de radio"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Vacío"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ELIMINAR"
@@ -13,9 +22,33 @@ msgstr "Cancelar todo"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Todo"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Cambiar"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Eliminados."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Mantén pulsado para introducir el símbolo más."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Mantén pulsado para introducir el símbolo almohadilla."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Mantén pulsado para introducir el símbolo asterisco."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Cuadro de edición"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Teclado"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Edición"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Retroceso"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Buzón de voz"
diff --git a/res/po/es_US.po b/res/po/es_US.po
index f500974..bbf8eff 100644
--- a/res/po/es_US.po
+++ b/res/po/es_US.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Confirmar"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Actualizando configuración..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Botón de opción"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Vaciar"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ELIMINAR"
@@ -13,9 +22,33 @@ msgstr "Cancelar todo"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Todo"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Cambiar"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Eliminados."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Mantenga pulsado para introducir el símbolo más."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Mantenga pulsado para introducir el símbolo numeral."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Mantenga pulsado para introducir el símbolo asterisco."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Cuadro de edición"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Teclado"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Edición"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Retroceso"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Correo de voz"
diff --git a/res/po/et.po b/res/po/et.po
index 608f5f4..eada5b7 100644
--- a/res/po/et.po
+++ b/res/po/et.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Kinnita"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Seadete värskendamine..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Raadio nupp"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Tühi"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "KUSTUTA"
@@ -13,9 +22,33 @@ msgstr "Tühista kõik"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Vali kõik"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Lüliti"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Kustutatud."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Toksake ja hoidke, et sisestada plussi sümbol."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Toksake ja hoidke, et sisestada trellide sümbol."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Toksake ja hoidke, et sisestada tärni sümbol."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Redigeerimiskast"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Klahvistik"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Redigeerimine"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Tagasilüke"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Kõnepost"
diff --git a/res/po/eu.po b/res/po/eu.po
index 6a76b17..dec7832 100644
--- a/res/po/eu.po
+++ b/res/po/eu.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Baieztatu"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Ezarpenak egokitzen..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Irratiaren botoia"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Hutsik"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "EZABATU"
@@ -13,9 +22,33 @@ msgstr "Desaut. denak"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Hautatu denak"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Aldatu"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Ezabatuta."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Ukitu eta eutsi gehi sinboloa idazteko."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Ukitu eta eutsi traola idazteko."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Ukitu eta eutsi izar sinboloa idazteko."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Editatzeko koadroa"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Teklatua"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Editatzen"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Atzera"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Ahots posta"
diff --git a/res/po/fi.po b/res/po/fi.po
index 083e7b0..76fe66e 100644
--- a/res/po/fi.po
+++ b/res/po/fi.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Vahvista"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Päivitetään asetuksia..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Valintanappi"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Tyhjä"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "POISTA"
@@ -13,9 +22,33 @@ msgstr "Poista val."
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Val. kaikki"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Vaihda"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Poistettu."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Kirjoita plusmerkki painamalla painiketta jonkin aikaa."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Kirjoita ristikkomerkki painamalla painiketta jonkin aikaa."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Kirjoita tähtimerkki painamalla painiketta jonkin aikaa."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Muokkausruutu"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Näppäimistö"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Muokkaus"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Askelpalautin"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Vastaajaviesti"
diff --git a/res/po/fr.po b/res/po/fr.po
index 2664cb6..577d007 100644
--- a/res/po/fr.po
+++ b/res/po/fr.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Confirmer"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Mise à jour des paramètres..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Bouton radio"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Vide"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "SUPPRIMER"
@@ -13,9 +22,33 @@ msgstr "Tout désélect."
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Tout sélect."
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Activer ou désactiver"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Supprimé(s)."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Maintenez un doigt appuyé pour entrer le symbole Plus."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Maintenez un doigt appuyé pour entrer le symbole Dièse."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Maintenez un doigt appuyé pour entrer le symbole Étoile."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Zone d'édition"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Clavier"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Modification"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Retour arrière"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Messagerie"
diff --git a/res/po/fr_CA.po b/res/po/fr_CA.po
index 3e58c0f..28f8f1a 100644
--- a/res/po/fr_CA.po
+++ b/res/po/fr_CA.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Confirmer"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Mise à jour des paramètres..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Bouton radio"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Vide"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "SUPPRIMER"
@@ -13,9 +22,33 @@ msgstr "Tout désélect."
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Tout sélect."
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Activer ou désactiver"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Supprimé(s)."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Touchez longuement pour entrer le symbole Plus."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Touchez longuement pour entrer le symbole Dièse."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Touchez longuement pour entrer le symbole Étoile."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Zone d'édition"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Clavier"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Modification"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Retour arrière"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Messagerie vocale"
diff --git a/res/po/ga.po b/res/po/ga.po
index be88538..a9c988b 100644
--- a/res/po/ga.po
+++ b/res/po/ga.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Deimhnigh"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Socruithe á nuashonrú..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Cnaipe raidió"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Folamh"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "SCRIOS"
@@ -13,9 +22,33 @@ msgstr "Dírogh. gach"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Roghn. gach"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Lasc"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Scriosta."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Tapáil agus coinnigh le siombail móide a iontráil."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Tapáil agus coinnigh le siombail haise a iontráil."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Tapáil agus coinnigh le siombail réalta a iontráil."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Bosca cur in eagar"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Eochaircheap"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Cur in eagar"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Cúlspás"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Glórphost"
diff --git a/res/po/gl.po b/res/po/gl.po
index ce0eb07..9f32523 100644
--- a/res/po/gl.po
+++ b/res/po/gl.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Confirmar"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Actualizando axustes..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Botón de opción"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Baleiro"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ELIMINAR"
@@ -13,9 +22,33 @@ msgstr "Cancelar todo"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Selecc. todo"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Cambiar"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Eliminado."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Mantén tocado para introducir o símbolo máis."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Mantén tocado para introducir o símbolo grade."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Mantén tocado para introducir o símbolo da estrela."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Caixa de edición"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Teclado"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Edición"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Retroceso"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Caixa de voz"
diff --git a/res/po/hi.po b/res/po/hi.po
index 612c95f..97a7445 100644
--- a/res/po/hi.po
+++ b/res/po/hi.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "पुष्टि करें"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "सेटिंग्स अपडेट कर रहा है..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "रेडियो बटन"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "खाली करें"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "हटाएँ"
@@ -13,9 +22,33 @@ msgstr "सभी चयन हटाएँ"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "सभी चुनें"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "स्विच करें"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "हटाया गया।"
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "धन प्रतीक प्रविष्ट करने के लिए टैप और होल्‍ड करें।"
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "# प्रतीक प्रविष्ट करने के लिए टैप और होल्‍ड करें।"
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "तारा प्रतीक प्रविष्ट करने के लिए टैप और होल्‍ड करें।"
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "संपादन बॉक्स"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "कीपैड"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "संपादन"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "बैकस्‍पेस"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "वॉइस मेल"
diff --git a/res/po/hr.po b/res/po/hr.po
index 4627ee6..3782ffa 100644
--- a/res/po/hr.po
+++ b/res/po/hr.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Potvrdi"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Aktualiziranje postavki..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Izborni gumb"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Isprazni"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "IZBRIŠI"
@@ -13,9 +22,33 @@ msgstr "Odznači sve"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Odaberi sve"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Promijeni"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Izbrisano."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Dodirnite i držite za unos simbola plus."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Dodirnite i držite za unos simbola ljestvi."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Dodirnite i držite za unos simbola zvjezdice."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Okvir za uređivanje"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Tipkovnica"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Uređivanje"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Tipka za brisanje ulijevo"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Govorna pošta"
diff --git a/res/po/hu.po b/res/po/hu.po
index 9d43d05..4557b02 100644
--- a/res/po/hu.po
+++ b/res/po/hu.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Megerősít"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Beállítások frissítése..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Választógomb"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Üres"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "TÖRLÉS"
@@ -13,9 +22,33 @@ msgstr "Kijel. törl."
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Össz. kijel."
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Váltás"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Törölve."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Tartsa pluszjel beviteléhez."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Tartsa kettős kereszt beviteléhez."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Tartsa csillag beviteléhez."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Szerkesztőmező"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Billentyűzet"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Szerkesztés"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Visszatörlés"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Hangposta"
diff --git a/res/po/hy.po b/res/po/hy.po
index 1dcaf64..2ee98b2 100644
--- a/res/po/hy.po
+++ b/res/po/hy.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Հաստատել"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Կայվածքների նորացում..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Ռադիոկոճակ"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Դատարկ"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ՎԵՐԱՑՆԵԼ"
@@ -13,9 +22,33 @@ msgstr "Ապընտ. բոլոր"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Ընտրել բոլոր"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Փոխել"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Վերացվեց:"
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Թակեք և պահեք՝ պլյուս նշանը մուտքագրելու համար:"
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Թակեք և պահեք՝ # նշանը մուտքագրելու համար:"
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Թակեք և պահեք՝ աստղանիշը մուտքագրելու համար:"
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Խմբագրման պատուհան"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Ստեղնախումբ"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Խմբագրում"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Ետշարժ"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Ձայնային փոստ"
diff --git a/res/po/is.po b/res/po/is.po
index 4286980..89dc61d 100644
--- a/res/po/is.po
+++ b/res/po/is.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Staðfesta"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Uppfæri stillingar..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Valhnappur"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Tómt"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "EYÐA"
@@ -13,9 +22,33 @@ msgstr "Velja ekkert"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Velja allt"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Skipta"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Eytt."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Haltu fingri á skjánum til að slá inn plústáknið."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Haltu fingri á skjánum til að slá inn myllumerki."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Haltu fingri á skjánum til að slá inn stjörnu."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Innsláttarreitur"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Takkaborð"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Innsláttur"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Bakktakki"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Talhólf"
diff --git a/res/po/it_IT.po b/res/po/it_IT.po
index 7518676..d322d5a 100644
--- a/res/po/it_IT.po
+++ b/res/po/it_IT.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Conferma"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Aggiornamento impostazioni..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Pulsante di opzione"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Vuota"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ELIMINA"
@@ -13,9 +22,33 @@ msgstr "Desel. tutto"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Selez. tutto"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Attiva/disattiva"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Eliminati."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Tieni premuto per inserire il simbolo più."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Tieni premuto per inserire il simbolo cancelletto."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Tieni premuto per inserire il simbolo asterisco."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Casella di modifica"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Tastiera"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Modifica"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Segreteria"
diff --git a/res/po/ja_JP.po b/res/po/ja_JP.po
index e7ac515..9a00a07 100644
--- a/res/po/ja_JP.po
+++ b/res/po/ja_JP.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "確認"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "設定を更新中..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "ラジオボタン"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "空にする"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "削除"
@@ -13,9 +22,33 @@ msgstr "全て解除"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "全て選択"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "切替"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "削除しました。"
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "プラス記号を入力するには、長押ししてください。"
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "ハッシュを入力するには、長押ししてください。"
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "アスタリスクを入力するには、長押ししてください。"
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "エディットボックス"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "キーパッド"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "編集中"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "バックスペース"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "留守番電話"
diff --git a/res/po/ka.po b/res/po/ka.po
index 7a26654..46d8284 100644
--- a/res/po/ka.po
+++ b/res/po/ka.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "დადასტურება"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "სრულდება პარამეტრების განახლება..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "მოსანიშნი წრე"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "დაცლა"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "წაშლა"
@@ -13,9 +22,33 @@ msgstr "მონიშ. მოხს."
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "აირჩიე ყველა"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "გადართვა"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "წაიშალა."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "ხანგრძლივად შეეხეთ, რომ შეიყვანოთ პლუსის სიმბოლო."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "ხანგრძლივად შეეხეთ, რომ შეიყვანოთ # სიმბოლო."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "ხანგრძლივად შეეხეთ, რომ შეიყვანოთ ვარსკვლავის სიმბოლო."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "რედაქტირების ველი"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "კლავიატურა"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "რედაქტირდება"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "უკუშლა"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "ხმოვანი ფოსტა"
diff --git a/res/po/kk.po b/res/po/kk.po
index 9dfd12d..11c12a8 100644
--- a/res/po/kk.po
+++ b/res/po/kk.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Негіздеу"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Параметрлер жаңартылуда..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Радио түймесі"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Босату"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ЖОЮ"
@@ -13,9 +22,33 @@ msgstr "Барлығын алу"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Бәрін таңдау"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Ауыстыру"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Жойылды."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Қосу белгісін енгізу үшін, түртіп ұстап тұрыңыз."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "# белгісін енгізу үшін, түртіп ұстап тұрыңыз."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Жұлдызша белгісін енгізу үшін, түртіп ұстап тұрыңыз."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Өңдеу терезесі"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Пернетақта"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Өңдеу"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Дауыс поштасы"
diff --git a/res/po/ko_KR.po b/res/po/ko_KR.po
index b1a3f1c..cb0f5d4 100644
--- a/res/po/ko_KR.po
+++ b/res/po/ko_KR.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "확인"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "설정 업데이트 중..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "라디오 버튼"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "지정 안 됨"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "삭제"
@@ -13,9 +22,33 @@ msgstr "모두 해제"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "모두 선택"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "스위치"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "삭제했습니다."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "더하기 기호를 입력하려면 길게 누르세요."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "우물 정자를 입력하려면 길게 누르세요."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "별표를 입력하려면 길게 누르세요."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "입력창"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "키패드"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "입력 중입니다"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "지우기"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "음성사서함"
diff --git a/res/po/lt.po b/res/po/lt.po
index 0a74b7a..ad78416 100644
--- a/res/po/lt.po
+++ b/res/po/lt.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Patvirtinti"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Naujinami nustatymai..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Išrinkimo mygtukas"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Tuščia"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "TRINTI"
@@ -13,9 +22,33 @@ msgstr "Žymėti viską"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Rinkt. viską"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Perjungti"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Ištrinta."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Bakstelėję palaikykite, kad įvestumėte pliuso simbolį."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Bakstelėję palaikykite, kad įvestumėte # simbolį."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Bakstelėję palaikykite, kad įvestumėte žvaigždutės simbolį."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Redagavimo laukelis"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Klaviatūra"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Redagavimas"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Grįžties klavišas"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Balso pranešimas"
diff --git a/res/po/lv.po b/res/po/lv.po
index 9497721..c1373d2 100644
--- a/res/po/lv.po
+++ b/res/po/lv.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Apstiprināt"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Atjaunina iestatījumus..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Radiopoga"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Tukšs"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "DZĒST"
@@ -13,9 +22,33 @@ msgstr "Atc. izvēli"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Izvēl. visu"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Pārslēgt"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Izdzēsts."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Pieskarieties un turiet, lai ievadītu pluszīmes simbolu."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Pieskarieties un turiet, lai ievadītu simbolu #."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Pieskarieties un turiet, lai ievadītu zvaigznītes simbolu."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Rediģēšanas lodziņš"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Cipartastatūra"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Rediģēšana"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Atpakaļatkāpe"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Balss pasts"
diff --git a/res/po/mk.po b/res/po/mk.po
index e9763b8..f99cc5a 100644
--- a/res/po/mk.po
+++ b/res/po/mk.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Потврди"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Се ажурираат поставувањата..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Радио копче"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Празно"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ИЗБРИШИ"
@@ -13,9 +22,33 @@ msgstr "Поништи сѐ"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Избери сѐ"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Префрли"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Избришано."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Допрете и држете за да го внесете симболот за плус."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Допрете и држете за да го внесете симболот хаш."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Допрете и држете за да го внесете симболот ѕвезда."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Поле за менување"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Тастатура"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Менување"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Бришење назад"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Говорна пошта"
diff --git a/res/po/nb.po b/res/po/nb.po
index 0bb177f..afb702b 100644
--- a/res/po/nb.po
+++ b/res/po/nb.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Bekreft"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Oppdaterer innstillinger..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Radioknapp"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Tom"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "SLETT"
@@ -13,9 +22,33 @@ msgstr "Fj. alle mrk."
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Velg alle"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Bytt"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Slettet."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Trykk på og hold for å angi plussymbol."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Trykk på og hold for å angi firkanttastsymbol."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Trykk på og hold for å angi stjernesymbol."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Redigeringsboks"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Tastatur"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Redigering"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Mobilsvar"
diff --git a/res/po/nl.po b/res/po/nl.po
index c3116d5..f29e069 100644
--- a/res/po/nl.po
+++ b/res/po/nl.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Bevestigen"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Instellingen bijwerken..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Keuzerondje"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Leeg"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "VERWIJDEREN"
@@ -13,9 +22,33 @@ msgstr "Alles desel."
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Alles select."
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Overschakelen"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Verwijderd."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Tik en houd vast om plussymbool in te voeren."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Tik en houd vast om een hekjesymbool in te voeren."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Tik en houd vast om stersymbool in te voeren."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Bewerkvak"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Toetsen"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Bewerken"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Voicemail"
diff --git a/res/po/pl.po b/res/po/pl.po
index 9e268de..268a258 100644
--- a/res/po/pl.po
+++ b/res/po/pl.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Potwierdź"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Aktualizacja ustawień..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Przycisk radiowy"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Opróżnij"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "USUŃ"
@@ -13,9 +22,33 @@ msgstr "Odznacz wsz."
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Zaznacz wsz."
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Przełącz"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Usunięto."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Dotknij i przytrzymaj, aby wprowadzić symbol plusa."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Dotknij i przytrzymaj, aby wprowadzić symbol krzyżyka."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Dotknij i przytrzymaj, aby wprowadzić symbol gwiazdki."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Pole edycji"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Klawiatura"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Edytowanie"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Powrót"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Poczta głosowa"
diff --git a/res/po/pt_BR.po b/res/po/pt_BR.po
index cac98f8..82c054f 100644
--- a/res/po/pt_BR.po
+++ b/res/po/pt_BR.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Confirmar"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Atualizando configurações..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Botão de opção"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Vazio"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "EXCLUIR"
@@ -13,9 +22,33 @@ msgstr "Desmar. tudo"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Selec. tudo"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Alternar"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Excluído."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Mantenha pressionado para inserir o símbolo de mais."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Mantenha pressionado para inserir o símbolo de cerquilha."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Mantenha pressionado para inserir o símbolo de estrela."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Caixa de edição"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Teclado"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Editando"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Tecla de retorno"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Caixa Postal"
diff --git a/res/po/pt_PT.po b/res/po/pt_PT.po
index 7171a48..be801e3 100644
--- a/res/po/pt_PT.po
+++ b/res/po/pt_PT.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Confirmar"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "A actualizar definições..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Botão de opção"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Vazio"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ELIMINAR"
@@ -13,9 +22,33 @@ msgstr "Desselec. tudo"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Selec. tudo"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Mudar"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Eliminados."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Toque sem soltar para introduzir o símbolo de mais."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Toque sem soltar para introduzir o símbolo de cardinal."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Toque sem soltar para introduzir o símbolo de estrela."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Caixa de edição"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Teclado"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Editar"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Retrocesso"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Correio de voz"
diff --git a/res/po/ro.po b/res/po/ro.po
index 4d590e9..c96d8d6 100644
--- a/res/po/ro.po
+++ b/res/po/ro.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Confirmare"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Se actualizează setările..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Buton radio"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Gol"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ȘTERGERE"
@@ -13,9 +22,33 @@ msgstr "Desel. tot."
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Select. totală"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Comutare"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Șterse."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Mențineți apăsat pentru a introduce simbolul plus."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Mențineți apăsat pentru a introduce simbolul diez."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Mențineți apăsat pentru a introduce simbolul steluță."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Casetă de editare"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Tastatură"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Se editează"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Mesagerie vocală"
diff --git a/res/po/ru_RU.po b/res/po/ru_RU.po
index 990fe56..1ede873 100644
--- a/res/po/ru_RU.po
+++ b/res/po/ru_RU.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Подтвердить"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Обновление параметров..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Кнопка-переключатель"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Пусто"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "УДАЛИТЬ"
@@ -13,9 +22,33 @@ msgstr "Отмен. выбор"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Выбрать все"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Переключить"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Удалено."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Коснитесь и удерживайте для ввода символа “+”."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Коснитесь и удерживайте для ввода символа “#”."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Коснитесь и удерживайте для ввода символа “*”."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Поле редактирования"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Клавиатура"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Редактирование"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Голосовая почта"
diff --git a/res/po/sk.po b/res/po/sk.po
index a124205..aedbeab 100644
--- a/res/po/sk.po
+++ b/res/po/sk.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Potvrdiť"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Aktualizujú sa nastavenia..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Prepínač"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Prázdne"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ODSTRÁNIŤ"
@@ -13,9 +22,33 @@ msgstr "Zrušiť výber"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Vybrať všetko"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Prepnúť"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Odstránené."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Ťuknutím a podržaním zadáte symbol plus."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Ťuknutím a podržaním zadáte symbol mriežky."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Ťuknutím a podržaním zadáte symbol hviezdičky."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Textové pole"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Číselná klávesnica"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Úprava"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Hlasová pošta"
diff --git a/res/po/sl.po b/res/po/sl.po
index 266392e..9cc0c06 100644
--- a/res/po/sl.po
+++ b/res/po/sl.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Potrdi"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Posodabljam nastavitve ..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Gumb za radio"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Prazno"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "IZBRIŠI"
@@ -13,9 +22,33 @@ msgstr "Opusti vse"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Izberi vse"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Stikalo"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Izbrisano."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Pritisnite in pridržite, da vstavite simbol plus."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Pritisnite in pridržite, da vstavite simbol lojtra."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Pritisnite in pridržite, da vstavite simbol zvezdica."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Polje za urejanje"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Številčnica"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Urejanje"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Vračalka"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Glasovno sporočilo"
diff --git a/res/po/sr.po b/res/po/sr.po
index ee6d857..3231763 100644
--- a/res/po/sr.po
+++ b/res/po/sr.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Potvrdi"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Ažuriranje podešavanja..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Dugme Radio"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Prazno"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "IZBRIŠI"
@@ -13,9 +22,33 @@ msgstr "Poništi sve"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Izaberi sve"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Prekidač"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Izbrisano."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Kucnite i zadržite da biste uneli simbol za znak plus."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Kucnite i zadržite da biste uneli simbol za heš."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Kucnite i zadržite da biste uneli simbol za zvezdicu."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Polje za uređivanje"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Tastatura"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Izmena"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Taster za brisanje"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Govorna pošta"
diff --git a/res/po/sv.po b/res/po/sv.po
index ea3c6a6..835ce25 100644
--- a/res/po/sv.po
+++ b/res/po/sv.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Bekräfta"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Uppdaterar inställningar..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Alternativknapp"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Tomt"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "TA BORT"
@@ -13,9 +22,33 @@ msgstr "Avmark. allt"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Välj allt"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Växla"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Raderat."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Tryck och håll ned för att infoga ett plustecken."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Tryck och håll ned för att infoga fyrkant."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Tryck och håll ned för att infoga en asterisk."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Redigeringsruta"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Knappsats"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Redigering"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backsteg"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Röstbrevlåda"
diff --git a/res/po/tr_TR.po b/res/po/tr_TR.po
index f7edb10..0038668 100644
--- a/res/po/tr_TR.po
+++ b/res/po/tr_TR.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Onayla"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Ayarlar güncelleniyor..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Radyo tuşu"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Boş"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "SİL"
@@ -13,9 +22,33 @@ msgstr "Seçmlri kldr"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Tümünü seç"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Değiştir"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Silindi."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Artı simgesi girmek için dokunup basılı tutun."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "# simgesi girmek için dokunup basılı tutun."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Yıldız simgesi girmek için dokunup basılı tutun."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Düzenleme kutusu"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Klavye"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Düzenleniyor"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Sil"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Telesekreter"
@@ -74,5 +107,5 @@ msgid "WDS_CST_OPT_DELETE_ABB"
msgstr "Sil"
msgid "IDS_CST_BODY_NO_ITEMS"
-msgstr "Öğe yok"
+msgstr "Öge yok"
diff --git a/res/po/uk.po b/res/po/uk.po
index 39a8230..86b1cec 100644
--- a/res/po/uk.po
+++ b/res/po/uk.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Підтвердження"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Оновлення установок..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Перемикач"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Пусто"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "ВИДАЛИТИ"
@@ -13,9 +22,33 @@ msgstr "Скас. вибір"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Вибрати всі"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Перемкнути"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "Видалено."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Торкніться і утримуйте, щоб ввести символ «+»."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "Торкніться і утримуйте, щоб ввести символ «#»."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Торкніться і утримуйте, щоб ввести символ «*»."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Поле редагування"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Клавіатура"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Редагування"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Голосова пошта"
diff --git a/res/po/uz.po b/res/po/uz.po
index bdda14e..2764684 100644
--- a/res/po/uz.po
+++ b/res/po/uz.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "Tasdiqlash"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "Parametrlarni yangilash..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "Radio tugmasi"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "Bo‘sh"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "O‘CHIRISH"
@@ -13,9 +22,33 @@ msgstr "Bar. tan. ol"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "Bar. tanla"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "Almashtirish"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "O‘chirildi."
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "Plyus ishorasini kiritish uchun bosib turing."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "# belgisini kiritish uchun bosib turing."
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "Yulduzcha belgisini kiritish uchun bosib turing."
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "Tahrirlash maydoni"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "Klaviatura"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "Tahrirlash"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "Backspace"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "Ovozli pochta"
diff --git a/res/po/zh_CN.po b/res/po/zh_CN.po
index 24b12d9..c078cf3 100644
--- a/res/po/zh_CN.po
+++ b/res/po/zh_CN.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "确认"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "正在更新设置..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "单选按钮"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "空白"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "删除"
@@ -13,9 +22,33 @@ msgstr "取消全选"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "全选"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "切换"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "已删除"
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "长按以输入加号。"
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "长按以输入 # 号。"
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "长按以输入星号。"
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "编辑框"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "键盘"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "正在编辑"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "退格"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "语音邮件"
diff --git a/res/po/zh_HK.po b/res/po/zh_HK.po
index f75efeb..0d8ca8f 100644
--- a/res/po/zh_HK.po
+++ b/res/po/zh_HK.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "確認"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "正在更新設定..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "選項按鈕"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "空白"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "刪除"
@@ -13,9 +22,33 @@ msgstr "取消全選"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "全選"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "切換"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "已刪除。"
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "輕觸並按住以輸入加號。"
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "輕觸並按住以輸入 # 號。"
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "輕觸並按住以輸入星號。"
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "編輯方塊"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "鍵盤"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "正在編輯"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "退格鍵"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "留言信箱"
diff --git a/res/po/zh_TW.po b/res/po/zh_TW.po
index 6e157ba..296249d 100644
--- a/res/po/zh_TW.po
+++ b/res/po/zh_TW.po
@@ -1,6 +1,15 @@
+msgid "IDS_ST_BODY_CONFIRM"
+msgstr "確認"
+
msgid "IDS_CST_POP_UPDATING_SETTINGS_ING"
msgstr "正在更新設定..."
+msgid "IDS_ACCS_TBOPT_RADIO_BUTTON"
+msgstr "選項按鈕"
+
+msgid "WDS_ACCS_TBOPT_EMPTY"
+msgstr "空白"
+
msgid "WDS_HS_ACBUTTON_DELETE"
msgstr "刪除"
@@ -13,9 +22,33 @@ msgstr "取消全選"
msgid "WDS_HS_BUTTON_SELECT_ALL_ABB3"
msgstr "全選"
+msgid "WDS_ALM_TBOPT_SWITCH"
+msgstr "切換"
+
msgid "WDS_PB_TPOP_DELETED_ABB3"
msgstr "已刪除。"
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_PLUS_SYMBOL"
+msgstr "輕觸並按住以輸入加號。"
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_SSHARP_SYMBOL"
+msgstr "輕觸並按住以輸入 # 號。"
+
+msgid "WDS_WMGR_TBBODY_TAP_AND_HOLD_TO_ENTER_STAR_SYMBOL"
+msgstr "輕觸並按住以輸入星號。"
+
+msgid "WDS_WMGR_TBOPT_EDIT_BOX"
+msgstr "編輯方塊"
+
+msgid "WDS_WMGR_TBOPT_KEYPAD"
+msgstr "鍵盤"
+
+msgid "WDS_WMGR_TBOPT_EDITING"
+msgstr "正在編輯"
+
+msgid "WDS_WMGR_TBOPT_BACKSPACE"
+msgstr "退格鍵"
+
msgid "IDS_COM_HEADER_VOICE_MAIL_ORANGE"
msgstr "語音信箱"
diff --git a/ucl/include/ucl/gui/Atspi.h b/ucl/include/ucl/gui/Atspi.h
index 2657806..dcea2b1 100644
--- a/ucl/include/ucl/gui/Atspi.h
+++ b/ucl/include/ucl/gui/Atspi.h
@@ -31,41 +31,31 @@ namespace ucl {
class Atspi final : private NonCopyable {
public:
/**
- * @brief Constructor
- * @param[in] eo Underlying Access object of the Atspi
- */
- explicit Atspi(Elm_Interface_Atspi_Accessible *ao);
-
- /**
- * @brief Destructor
- * @details Unregisters all Access object callbacks
- */
- ~Atspi();
-
- /**
- * @brief Gets Access object pointer
- * @return Pointer to the Access object
+ * @brief Gets the underlying Access object
+ * @param[in] atspi Reference to target atspi
+ * @return Pointer to the underlying Access object
*/
- Elm_Interface_Atspi_Accessible *getAo();
+ friend Elm_Interface_Atspi_Accessible *as_ao(Atspi &atspi);
/**
- * @brief Gets pointer to constant Access object
- * @return Pointer to the constant Access object
+ * @brief Gets the underlying constant Access object
+ * @param[in] atspi Constant reference to target atspi
+ * @return Pointer to the underlying constant Access object
*/
- const Elm_Interface_Atspi_Accessible *getAo() const;
+ friend const Elm_Interface_Atspi_Accessible *as_ao(const Atspi &atspi);
+ public:
/**
- * @brief Implicitly casts to the underlying Access object
- * @return Pointer to the underlying Access object
+ * @brief Constructor
+ * @param[in] eo Underlying Access object of the Atspi
*/
- operator Elm_Interface_Atspi_Accessible *();
+ explicit Atspi(Elm_Interface_Atspi_Accessible *ao);
/**
- * @brief Implicitly casts to the underlying
- * Access object (constant version)
- * @return Pointer to the constant underlying Access object
+ * @brief Destructor
+ * @details Unregisters all Access object callbacks
*/
- operator const Elm_Interface_Atspi_Accessible *() const;
+ ~Atspi();
/**
* @brief Sets name
@@ -167,16 +157,16 @@ namespace ucl {
* @param[in] relation Pointer to relation Access object
*/
void addRelationship(Elm_Atspi_Relation_Type type,
- Elm_Interface_Atspi_Accessible *relation);
+ const Elm_Interface_Atspi_Accessible *relation);
/**
* @brief Deletes exiting relationship
* @param[in] type Type of the exiting relationship
* @param[in] relation Pointer to relation Access object,
- * or NULL for all relations of the type
+ * or NULL for all relations of the type (optional)
*/
void delRelationship(Elm_Atspi_Relation_Type type,
- Elm_Interface_Atspi_Accessible *relation);
+ const Elm_Interface_Atspi_Accessible *relation = nullptr);
/**
* @brief Deletes all exiting relationships
@@ -196,6 +186,9 @@ namespace ucl {
void delGestureHandler(const AtspiGestureHandler &handler);
private:
+ Elm_Interface_Atspi_Accessible *getAo();
+ const Elm_Interface_Atspi_Accessible *getAo() const;
+
void registerGestureCb();
void registerNameCb();
void registerDescriptionCb();
@@ -225,20 +218,43 @@ namespace ucl {
// Non-member functions //
/**
- * @brief Compares equals underlying Access objects of target objects
- * @param[in] lhs Left hand side operand
- * @param[in] rhs Right hand side operand
- * @return true - if equal, false - not equal
+ * @brief Gets Access object from pointed object
+ * @param[in] ptr Target object pointer
+ * @return Pointer to Access object or NULL
+ */
+ template <class T>
+ inline auto as_ao(const T &ptr) -> typename std::enable_if<
+ std::is_convertible<T, bool>::value, decltype(as_ao(*ptr))>::type
+ {
+ return (ptr ? as_ao(*ptr) : nullptr);
+ }
+
+ /**
+ * @brief Gets Access object from iterator
+ * @param[in] ptr Target object iterator
+ * @return Pointer to Access object or NULL
+ */
+ template <class T>
+ inline auto as_ao(const T &iter) -> typename std::enable_if<
+ !std::is_convertible<T, bool>::value, decltype(as_ao(*iter))>::type
+ {
+ return as_ao(*iter);
+ }
+
+ /**
+ * @brief Passes through original Access object pointer
+ * @param[in] ao Access object pointer
+ * @return Access object pointer
*/
- bool operator==(const Atspi &lhs, const Atspi &rhs);
+ Elm_Interface_Atspi_Accessible *as_ao(Elm_Interface_Atspi_Accessible *ao);
/**
- * @brief Compares unequals underlying Access objects of target objects
- * @param[in] lhs Left hand side operand
- * @param[in] rhs Right hand side operand
- * @return true - if not equal, false - equal
+ * @brief Passes through original constant Access object pointer
+ * @param[in] ao Constant Access object pointer
+ * @return Constant Access object pointer
*/
- bool operator!=(const Atspi &lhs, const Atspi &rhs);
+ const Elm_Interface_Atspi_Accessible *as_ao(
+ const Elm_Interface_Atspi_Accessible *ao);
}
#include "Atspi.hpp"
diff --git a/ucl/include/ucl/gui/Atspi.hpp b/ucl/include/ucl/gui/Atspi.hpp
index fcf1004..e1c53f6 100644
--- a/ucl/include/ucl/gui/Atspi.hpp
+++ b/ucl/include/ucl/gui/Atspi.hpp
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * 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.
+ */
+
#include "ucl/util/helpers.h"
#include "ucl/util/logging.h"
@@ -27,16 +43,6 @@ namespace ucl {
return m_ao;
}
- inline Atspi::operator Elm_Interface_Atspi_Accessible *()
- {
- return m_ao;
- }
-
- inline Atspi::operator const Elm_Interface_Atspi_Accessible *() const
- {
- return m_ao;
- }
-
inline void Atspi::setName(const std::string &name)
{
elm_atspi_accessible_name_set(getAo(), name.c_str());
@@ -125,13 +131,13 @@ namespace ucl {
}
inline void Atspi::addRelationship(const Elm_Atspi_Relation_Type type,
- Elm_Interface_Atspi_Accessible *const relation)
+ const Elm_Interface_Atspi_Accessible *const relation)
{
elm_atspi_accessible_relationship_append(getAo(), type, relation);
}
inline void Atspi::delRelationship(const Elm_Atspi_Relation_Type type,
- Elm_Interface_Atspi_Accessible *const relation)
+ const Elm_Interface_Atspi_Accessible *const relation)
{
elm_atspi_accessible_relationship_remove(getAo(), type, relation);
}
@@ -159,7 +165,7 @@ namespace ucl {
if (!m_isGestureCbRegistered) {
m_isGestureCbRegistered = true;
elm_atspi_accessible_gesture_cb_set(m_ao,
- CALLBACK_A(Atspi::onAtspiGesture), this);
+ UCL_CALLBACK_A(Atspi::onAtspiGesture), this);
}
}
@@ -168,7 +174,7 @@ namespace ucl {
if (!m_isNameCbRegistered) {
m_isNameCbRegistered = true;
elm_atspi_accessible_name_cb_set(m_ao,
- CALLBACK_A(Atspi::onAtspiNameCb), this);
+ UCL_CALLBACK_A(Atspi::onAtspiNameCb), this);
}
}
@@ -177,7 +183,7 @@ namespace ucl {
if (!m_isDescriptionCbRegistered) {
m_isDescriptionCbRegistered = true;
elm_atspi_accessible_description_cb_set(m_ao,
- CALLBACK_A(Atspi::onAtspiDescriptionCb), this);
+ UCL_CALLBACK_A(Atspi::onAtspiDescriptionCb), this);
}
}
@@ -240,13 +246,25 @@ namespace ucl {
// Non-member functions //
- inline bool operator==(const Atspi &lhs, const Atspi &rhs)
+ inline Elm_Interface_Atspi_Accessible *as_ao(Atspi &atspi)
+ {
+ return atspi.m_ao;
+ }
+
+ inline const Elm_Interface_Atspi_Accessible *as_ao(const Atspi &atspi)
+ {
+ return atspi.m_ao;
+ }
+
+ inline Elm_Interface_Atspi_Accessible *as_ao(
+ Elm_Interface_Atspi_Accessible *const ao)
{
- return (lhs.getAo() == rhs.getAo());
+ return ao;
}
- inline bool operator!=(const Atspi &lhs, const Atspi &rhs)
+ inline const Elm_Interface_Atspi_Accessible *as_ao(
+ const Elm_Interface_Atspi_Accessible *const ao)
{
- return (lhs.getAo() != rhs.getAo());
+ return ao;
}
}
diff --git a/ucl/include/ucl/gui/EdjeWidget.h b/ucl/include/ucl/gui/EdjeWidget.h
index d195a07..da32501 100644
--- a/ucl/include/ucl/gui/EdjeWidget.h
+++ b/ucl/include/ucl/gui/EdjeWidget.h
@@ -56,16 +56,16 @@ namespace ucl {
/**
* @brief Sets content to default part
- * @param[in] content Content Evas object
+ * @param[in] content Content widget
*/
- void setContent(Evas_Object *content);
+ void setContent(Widget &content);
/**
* @brief Sets content to specific part
- * @param[in] content Content Evas object
+ * @param[in] content Content widget
* @param[in] part Destination Edje part
*/
- void setContent(Evas_Object *content, EdjePart part);
+ void setContent(Widget &content, EdjePart part);
/**
* @brief Unsets content from default part
diff --git a/ucl/include/ucl/gui/EdjeWidget.hpp b/ucl/include/ucl/gui/EdjeWidget.hpp
index e08841f..763808e 100644
--- a/ucl/include/ucl/gui/EdjeWidget.hpp
+++ b/ucl/include/ucl/gui/EdjeWidget.hpp
@@ -32,15 +32,15 @@ namespace ucl {
return elm_object_part_text_get(getEo(), part.name);
}
- inline void EdjeWidget::setContent(Evas_Object *const content)
+ inline void EdjeWidget::setContent(Widget &content)
{
- elm_object_content_set(getEo(), content);
+ elm_object_content_set(getEo(), as_eo(content));
}
- inline void EdjeWidget::setContent(Evas_Object *const content,
+ inline void EdjeWidget::setContent(Widget &content,
const EdjePart part)
{
- elm_object_part_content_set(getEo(), part.name, content);
+ elm_object_part_content_set(getEo(), part.name, as_eo(content));
}
inline Evas_Object *EdjeWidget::unsetContent()
diff --git a/ucl/include/ucl/gui/ElmWidget.h b/ucl/include/ucl/gui/ElmWidget.h
index 4c4b547..a0e2d60 100644
--- a/ucl/include/ucl/gui/ElmWidget.h
+++ b/ucl/include/ucl/gui/ElmWidget.h
@@ -115,6 +115,20 @@ namespace ucl {
// Non-member functions //
/**
+ * @brief Gets corresponding Access object
+ * @param[in] widget Reference to target widget
+ * @return Pointer to the corresponding Access object
+ */
+ Elm_Interface_Atspi_Accessible *as_ao(ElmWidget &widget);
+
+ /**
+ * @brief Gets corresponding constant Access object
+ * @param[in] widget Constant reference to target widget
+ * @return Pointer to the corresponding constant Access object
+ */
+ const Elm_Interface_Atspi_Accessible *as_ao(const ElmWidget &widget);
+
+ /**
* @brief Sets widget to enabled state
* @details This is equivalent to: widget.setEnabled(true);
* @param[in] widget Reference to target widget
diff --git a/ucl/include/ucl/gui/ElmWidget.hpp b/ucl/include/ucl/gui/ElmWidget.hpp
index 2151cfd..6fe586d 100644
--- a/ucl/include/ucl/gui/ElmWidget.hpp
+++ b/ucl/include/ucl/gui/ElmWidget.hpp
@@ -73,6 +73,16 @@ namespace ucl {
// Non-member functions //
+ inline Elm_Interface_Atspi_Accessible *as_ao(ElmWidget &widget)
+ {
+ return as_ao(widget.getAtspi());
+ }
+
+ inline const Elm_Interface_Atspi_Accessible *as_ao(const ElmWidget &widget)
+ {
+ return as_ao(widget.getAtspi());
+ }
+
inline void enable(ElmWidget &widget)
{
widget.setEnabled(true);
diff --git a/ucl/include/ucl/gui/NaviItem.h b/ucl/include/ucl/gui/NaviItem.h
index 62a5e71..495d3d8 100644
--- a/ucl/include/ucl/gui/NaviItem.h
+++ b/ucl/include/ucl/gui/NaviItem.h
@@ -45,17 +45,17 @@ namespace ucl {
void setPopHandler(PopHandler handler) const;
/**
- * Pops all items of the naviframe state to this item
+ * @brief Pops all items of the naviframe state to this item
*/
void popTo() const;
/**
- * Moves this naviframe item to the top of the naviframe stack
+ * @brief Moves this naviframe item to the top of the naviframe stack
*/
void promote() const;
/**
- * Sets naviframe item tile visibility state
+ * @brief Sets naviframe item tile visibility state
* @param[in] value Visibility state. true - visible, false - invisible
* @param[in] useTransition Title show/hide transition animation flag.
* true - use transition animation, false - no transition.
@@ -63,13 +63,13 @@ namespace ucl {
void setTitleEnabled(bool value, bool useTransition = false) const;
/**
- * Gets naviframe item tile visibility state
+ * @brief Gets naviframe item tile visibility state
* @retrun Visibility state. true - visible, false - invisible
*/
bool isTitleEnabled() const;
/**
- * Sets naviframe item tile text
+ * @brief Sets naviframe item tile text
* @param[in] title Translatable text to use as a title
*/
void setTitle(const TString &title) const;
diff --git a/ucl/include/ucl/gui/NaviItem.hpp b/ucl/include/ucl/gui/NaviItem.hpp
index b4cba2b..8b4730d 100644
--- a/ucl/include/ucl/gui/NaviItem.hpp
+++ b/ucl/include/ucl/gui/NaviItem.hpp
@@ -36,11 +36,6 @@ namespace ucl {
inline void NaviItem::setTitle(const TString &title) const
{
- if (isEmpty(title)) {
- setTitleEnabled(false);
- } else {
- setText(title);
- setTitleEnabled(true);
- }
+ setText(title);
}
}
diff --git a/ucl/include/ucl/gui/Naviframe.h b/ucl/include/ucl/gui/Naviframe.h
index 4699474..cc7a94f 100644
--- a/ucl/include/ucl/gui/Naviframe.h
+++ b/ucl/include/ucl/gui/Naviframe.h
@@ -136,103 +136,126 @@ namespace ucl {
/**
* @brief Pushes new item to the naviframe stack
* @param[in] title Translatable item title (may be empty)
- * @param[in] backBtn Back button Evas object (may be NULL)
- * @param[in] moreBtn More button Evas object (may be NULL)
- * @param[in] content Content of the item (may be NULL)
+ * @param[in] content Content of the item
+ * @param[in] backBtn Back button widget pointer (may be NULL)
+ * @param[in] moreBtn More button widget pointer (may be NULL)
* @param[in] style Elm style of the item (optional)
* @return New item
*/
- NaviItem push(const TString &title,
- Evas_Object *backBtn, Evas_Object *moreBtn,
- Evas_Object *content, ElmStyle style = nullptr);
+ NaviItem push(const TString &title, Widget &content,
+ Widget *backBtn, Widget *moreBtn,
+ ElmStyle style = nullptr);
/**
* @brief Pushes new item to the naviframe stack
* @param[in] title Translatable item title (may be empty)
- * @param[in] content Content of the item (may be NULL)
+ * @param[in] content Content of the item
* @param[in] style Elm style of the item (optional)
* @return New item
*/
- NaviItem push(const TString &title,
- Evas_Object *content, ElmStyle style = nullptr);
+ NaviItem push(const TString &title, Widget &content,
+ ElmStyle style = nullptr);
+
+ /**
+ * @brief Pushes new item to the naviframe stack
+ * @param[in] content Content of the item
+ * @param[in] style Elm style of the item (optional)
+ * @return New item
+ */
+ NaviItem push(Widget &content, ElmStyle style = nullptr);
/**
* @brief Pushes new item to the naviframe stack
- * @param[in] content Content of the item (may be NULL)
* @param[in] style Elm style of the item (optional)
* @return New item
*/
- NaviItem push(Evas_Object *content, ElmStyle style = nullptr);
+ NaviItem push(ElmStyle style = nullptr);
/**
* @brief Inserts new item to the naviframe stack after specific item
* @param[in] after Item after which future item will be inserted
* @param[in] title Translatable item title (may be empty)
- * @param[in] backBtn Back button Evas object (may be NULL)
- * @param[in] moreBtn More button Evas object (may be NULL)
- * @param[in] content Content of the item (may be NULL)
+ * @param[in] content Content of the item
+ * @param[in] backBtn Back button widget pointer (may be NULL)
+ * @param[in] moreBtn More button widget pointer (may be NULL)
* @param[in] style Elm style of the item (optional)
* @return New item
*/
NaviItem insertAfter(NaviItem after, const TString &title,
- Evas_Object *backBtn, Evas_Object *moreBtn,
- Evas_Object *content, ElmStyle style = nullptr);
+ Widget &content, Widget *backBtn, Widget *moreBtn,
+ ElmStyle style = nullptr);
/**
* @brief Inserts new item to the naviframe stack after specific item
* @param[in] after Item after which future item will be inserted
* @param[in] title Translatable item title (may be empty)
- * @param[in] content Content of the item (may be NULL)
+ * @param[in] content Content of the item
* @param[in] style Elm style of the item (optional)
* @return New item
*/
NaviItem insertAfter(NaviItem after, const TString &title,
- Evas_Object *content, ElmStyle style = nullptr);
+ Widget &content, ElmStyle style = nullptr);
/**
* @brief Inserts new item to the naviframe stack after specific item
* @param[in] after Item after which future item will be inserted
- * @param[in] content Content of the item (may be NULL)
+ * @param[in] content Content of the item
* @param[in] style Elm style of the item (optional)
* @return New item
*/
NaviItem insertAfter(NaviItem after,
- Evas_Object *content, ElmStyle style = nullptr);
+ Widget &content, ElmStyle style = nullptr);
+
+ /**
+ * @brief Inserts new item to the naviframe stack after specific item
+ * @param[in] after Item after which future item will be inserted
+ * @param[in] style Elm style of the item (optional)
+ * @return New item
+ */
+ NaviItem insertAfter(NaviItem after, ElmStyle style = nullptr);
/**
* @brief Inserts new item to the naviframe stack before specific item
* @param[in] before Item before which future item will be inserted
* @param[in] title Translatable item title (may be empty)
- * @param[in] backBtn Back button Evas object (may be NULL)
- * @param[in] moreBtn More button Evas object (may be NULL)
- * @param[in] content Content of the item (may be NULL)
+ * @param[in] content Content of the item
+ * @param[in] backBtn Back button widget pointer (may be NULL)
+ * @param[in] moreBtn More button widget pointer (may be NULL)
* @param[in] style Elm style of the item (optional)
* @return New item
*/
NaviItem insertBefore(NaviItem before, const TString &title,
- Evas_Object *backBtn, Evas_Object *moreBtn,
- Evas_Object *content, ElmStyle style = nullptr);
+ Widget &content, Widget *backBtn, Widget *moreBtn,
+ ElmStyle style = nullptr);
/**
* @brief Inserts new item to the naviframe stack before specific item
* @param[in] before Item before which future item will be inserted
* @param[in] title Translatable item title (may be empty)
- * @param[in] content Content of the item (may be NULL)
+ * @param[in] content Content of the item
* @param[in] style Elm style of the item (optional)
* @return New item
*/
NaviItem insertBefore(NaviItem before, const TString &title,
- Evas_Object *content, ElmStyle style = nullptr);
+ Widget &content, ElmStyle style = nullptr);
/**
* @brief Inserts new item to the naviframe stack before specific item
* @param[in] before Item before which future item will be inserted
- * @param[in] content Content of the item (may be NULL)
+ * @param[in] content Content of the item
* @param[in] style Elm style of the item (optional)
* @return New item
*/
NaviItem insertBefore(NaviItem before,
- Evas_Object *content, ElmStyle style = nullptr);
+ Widget &content, ElmStyle style = nullptr);
+
+ /**
+ * @brief Inserts new item to the naviframe stack before specific item
+ * @param[in] before Item before which future item will be inserted
+ * @param[in] style Elm style of the item (optional)
+ * @return New item
+ */
+ NaviItem insertBefore(NaviItem before, ElmStyle style = nullptr);
/**
* @brief Gets top item of the naviframe stack
@@ -255,6 +278,18 @@ namespace ucl {
private:
Naviframe(IRefCountObj &rc, Evas_Object *eo, Private);
+ NaviItem push(const TString &title,
+ Widget *content, Widget *backBtn, Widget *moreBtn,
+ ElmStyle style);
+
+ NaviItem insertAfter(NaviItem after, const TString &title,
+ Widget *content, Widget *backBtn, Widget *moreBtn,
+ ElmStyle style);
+
+ NaviItem insertBefore(NaviItem before, const TString &title,
+ Widget *content, Widget *backBtn, Widget *moreBtn,
+ ElmStyle style);
+
void onTransitionFinished(Widget &widget, void *eventInfo);
private:
diff --git a/ucl/include/ucl/gui/Naviframe.hpp b/ucl/include/ucl/gui/Naviframe.hpp
index e8fdc19..c5dc4bf 100644
--- a/ucl/include/ucl/gui/Naviframe.hpp
+++ b/ucl/include/ucl/gui/Naviframe.hpp
@@ -14,6 +14,19 @@
* limitations under the License.
*/
+namespace ucl { namespace himpl {
+
+ inline void initItemTitle(const NaviItem item, const TString &title)
+ {
+ if (isEmpty(title)) {
+ item.setTitleEnabled(false);
+ } else {
+ item.setTitle(title);
+ item.setTitleEnabled(true);
+ }
+ }
+}}
+
namespace ucl {
// Naviframe::Builder //
@@ -83,77 +96,119 @@ namespace ucl {
return result;
}
- inline NaviItem Naviframe::push(const TString &title,
- Evas_Object *const backBtn, Evas_Object *const moreBtn,
- Evas_Object *const content, const ElmStyle style)
+ inline NaviItem Naviframe::push(const TString &title, Widget *const content,
+ Widget *const backBtn, Widget *const moreBtn,
+ const ElmStyle style)
{
auto result = NaviItem(elm_naviframe_item_push(getEo(),
- nullptr, backBtn, moreBtn, content, style.name));
- result.setTitle(title);
+ nullptr, as_eo(backBtn), as_eo(moreBtn),
+ as_eo(content), style.name));
+ himpl::initItemTitle(result, title);
if (result != getBottomItem()) {
setInTransition(true);
}
return result;
}
- inline NaviItem Naviframe::push(const TString &title,
- Evas_Object *const content, const ElmStyle style)
+ inline NaviItem Naviframe::push(const TString &title, Widget &content,
+ Widget *const backBtn, Widget *const moreBtn,
+ const ElmStyle style)
+ {
+ return push(title, &content, backBtn, moreBtn, style);
+ }
+
+ inline NaviItem Naviframe::push(const TString &title, Widget &content,
+ const ElmStyle style)
+ {
+ return push(title, &content, nullptr, nullptr, style);
+ }
+
+ inline NaviItem Naviframe::push(Widget &content, const ElmStyle style)
{
- return push(title, nullptr, nullptr, content, style);
+ return push(nullptr, &content, nullptr, nullptr, style);
}
- inline NaviItem Naviframe::push(
- Evas_Object *const content, const ElmStyle style)
+ inline NaviItem Naviframe::push(const ElmStyle style)
{
- return push(nullptr, nullptr, nullptr, content, style);
+ return push(nullptr, nullptr, nullptr, nullptr, style);
}
- inline NaviItem Naviframe::insertAfter(NaviItem after,
- const TString &title,
- Evas_Object *const backBtn, Evas_Object *const moreBtn,
- Evas_Object *const content, const ElmStyle style)
+ inline NaviItem Naviframe::insertAfter(const NaviItem after,
+ const TString &title, Widget *const content,
+ Widget *const backBtn, Widget *const moreBtn,
+ const ElmStyle style)
{
auto result = NaviItem(elm_naviframe_item_insert_after(getEo(),
- after, nullptr, backBtn, moreBtn, content, style.name));
- result.setTitle(title);
+ after, nullptr, as_eo(backBtn), as_eo(moreBtn),
+ as_eo(content), style.name));
+ himpl::initItemTitle(result, title);
return result;
}
- inline NaviItem Naviframe::insertAfter(NaviItem after,
- const TString &title,
- Evas_Object *const content, const ElmStyle style)
+ inline NaviItem Naviframe::insertAfter(const NaviItem after,
+ const TString &title, Widget &content,
+ Widget *const backBtn, Widget *const moreBtn,
+ const ElmStyle style)
{
- return insertAfter(after, title, nullptr, nullptr, content, style);
+ return insertAfter(after, title, &content, backBtn, moreBtn, style);
}
- inline NaviItem Naviframe::insertAfter(NaviItem after,
- Evas_Object *const content, const ElmStyle style)
+ inline NaviItem Naviframe::insertAfter(const NaviItem after,
+ const TString &title, Widget &content,
+ const ElmStyle style)
{
- return insertAfter(after, nullptr, nullptr, nullptr, content, style);
+ return insertAfter(after, title, &content, nullptr, nullptr, style);
}
- inline NaviItem Naviframe::insertBefore(NaviItem before,
- const TString &title,
- Evas_Object *const backBtn, Evas_Object *const moreBtn,
- Evas_Object *const content, const ElmStyle style)
+ inline NaviItem Naviframe::insertAfter(const NaviItem after,
+ Widget &content, const ElmStyle style)
+ {
+ return insertAfter(after, nullptr, &content, nullptr, nullptr, style);
+ }
+
+ inline NaviItem Naviframe::insertAfter(const NaviItem after,
+ const ElmStyle style)
+ {
+ return insertAfter(after, nullptr, nullptr, nullptr, nullptr, style);
+ }
+
+ inline NaviItem Naviframe::insertBefore(const NaviItem before,
+ const TString &title, Widget *const content,
+ Widget *const backBtn, Widget *const moreBtn,
+ const ElmStyle style)
{
auto result = NaviItem(elm_naviframe_item_insert_before(getEo(),
- before, nullptr, backBtn, moreBtn, content, style.name));
- result.setTitle(title);
+ before, nullptr, as_eo(backBtn), as_eo(moreBtn),
+ as_eo(content), style.name));
+ himpl::initItemTitle(result, title);
return result;
}
- inline NaviItem Naviframe::insertBefore(NaviItem before,
- const TString &title,
- Evas_Object *const content, const ElmStyle style)
+ inline NaviItem Naviframe::insertBefore(const NaviItem before,
+ const TString &title, Widget &content,
+ Widget *const backBtn, Widget *const moreBtn,
+ const ElmStyle style)
+ {
+ return insertAfter(before, title, &content, backBtn, moreBtn, style);
+ }
+
+ inline NaviItem Naviframe::insertBefore(const NaviItem before,
+ const TString &title, Widget &content,
+ const ElmStyle style)
+ {
+ return insertAfter(before, title, &content, nullptr, nullptr, style);
+ }
+
+ inline NaviItem Naviframe::insertBefore(const NaviItem before,
+ Widget &content, const ElmStyle style)
{
- return insertAfter(before, title, nullptr, nullptr, content, style);
+ return insertAfter(before, nullptr, &content, nullptr, nullptr, style);
}
- inline NaviItem Naviframe::insertBefore(NaviItem before,
- Evas_Object *const content, const ElmStyle style)
+ inline NaviItem Naviframe::insertBefore(const NaviItem before,
+ const ElmStyle style)
{
- return insertAfter(before, nullptr, nullptr, nullptr, content, style);
+ return insertAfter(before, nullptr, nullptr, nullptr, nullptr, style);
}
inline NaviItem Naviframe::getTopItem()const
diff --git a/ucl/include/ucl/gui/RadioBox.h b/ucl/include/ucl/gui/RadioBox.h
index a0e4b83..715b0bd 100644
--- a/ucl/include/ucl/gui/RadioBox.h
+++ b/ucl/include/ucl/gui/RadioBox.h
@@ -92,7 +92,7 @@ namespace ucl {
* @param[in] group Radio box to which group this radio box
* should be added
*/
- void addToGroup(Elm_Radio *group);
+ void addToGroup(RadioBox &group);
/**
* @brief Sets a value of the group in which this radio box is member
diff --git a/ucl/include/ucl/gui/RadioBox.hpp b/ucl/include/ucl/gui/RadioBox.hpp
index 8943278..3efe0e0 100644
--- a/ucl/include/ucl/gui/RadioBox.hpp
+++ b/ucl/include/ucl/gui/RadioBox.hpp
@@ -55,9 +55,9 @@ namespace ucl {
return elm_radio_state_value_get(getEo());
}
- inline void RadioBox::addToGroup(Elm_Radio *const group)
+ inline void RadioBox::addToGroup(RadioBox &group)
{
- elm_radio_group_add(getEo(), group);
+ elm_radio_group_add(getEo(), as_eo(group));
}
inline void RadioBox::setGroupValue(const int value)
diff --git a/ucl/include/ucl/gui/Widget.h b/ucl/include/ucl/gui/Widget.h
index 0232e36..e6506ab 100644
--- a/ucl/include/ucl/gui/Widget.h
+++ b/ucl/include/ucl/gui/Widget.h
@@ -47,6 +47,21 @@ namespace ucl {
public:
/**
+ * @brief Gets the underlying Evas object
+ * @param[in] widget Reference to target widget
+ * @return Pointer to the underlying Evas object
+ */
+ friend Evas_Object *as_eo(Widget &widget);
+
+ /**
+ * @brief Gets the underlying constant Evas object
+ * @param[in] widget Constant reference to target widget
+ * @return Pointer to the underlying constant Evas object
+ */
+ friend const Evas_Object *as_eo(const Widget &widget);
+
+ public:
+ /**
* @brief Constructor
* @param[in] eo Underlying Evas object of the widget
* @param[in] isOwner Evas object ownership flag (optional: true)
@@ -107,31 +122,6 @@ namespace ucl {
void setIsOwner(bool value);
/**
- * @brief Gets the underlying Evas object
- * @return Pointer to the underlying Evas object
- */
- Evas_Object *getEo();
-
- /**
- * @brief Gets the underlying Evas object (constant version)
- * @return Pointer to the constant underlying Evas object
- */
- const Evas_Object *getEo() const;
-
- /**
- * @brief Implicitly casts to the underlying Evas object
- * @return Pointer to the underlying Evas object
- */
- operator Evas_Object *();
-
- /**
- * @brief Implicitly casts to the underlying
- * Evas object (constant version)
- * @return Pointer to the constant underlying Evas object
- */
- operator const Evas_Object *() const;
-
- /**
* @brief Gets Evas canvas on which underlying Evas object resides
* @return Pointer to the Evas canvas
*/
@@ -368,6 +358,18 @@ namespace ucl {
protected:
/**
+ * @brief Gets the underlying Evas object
+ * @return Pointer to the underlying Evas object
+ */
+ Evas_Object *getEo();
+
+ /**
+ * @brief Gets the underlying Evas object (constant version)
+ * @return Pointer to the constant underlying Evas object
+ */
+ const Evas_Object *getEo() const;
+
+ /**
* @brief Actually sets key-input focus state to the widget
* @details May be overriden in subclasses to change behaviour
* @param[in] value New state. true - to set focus, false - to unset
@@ -433,6 +435,17 @@ namespace ucl {
// Non-member functions //
/**
+ * @brief Gets Evas object from pointed object
+ * @param[in] ptr Target object pointer
+ * @return Pointer to Evas object or NULL
+ */
+ template <class T>
+ inline auto as_eo(const T &ptr) -> decltype(as_eo(*ptr))
+ {
+ return (ptr ? as_eo(*ptr) : nullptr);
+ }
+
+ /**
* @brief Gets position of the widget
* @param[in] widget Reference to target widget
* @param[out] x Top-left X coordinate of the widget (may be NULL)
@@ -512,22 +525,6 @@ namespace ucl {
* @param[in] widget Reference to target widget
*/
void expandAndFill(Widget &widget);
-
- /**
- * @brief Compares equals underlying Evas objects of target widgets
- * @param[in] lhs Left hand side operand
- * @param[in] rhs Right hand side operand
- * @return true - if equal, false - not equal
- */
- bool operator==(const Widget &lhs, const Widget &rhs);
-
- /**
- * @brief Compares unequals underlying Evas objects of target widgets
- * @param[in] lhs Left hand side operand
- * @param[in] rhs Right hand side operand
- * @return true - if not equal, false - equal
- */
- bool operator!=(const Widget &lhs, const Widget &rhs);
}
#include "Widget.hpp"
diff --git a/ucl/include/ucl/gui/Widget.hpp b/ucl/include/ucl/gui/Widget.hpp
index d8c35c5..9e98bfd 100644
--- a/ucl/include/ucl/gui/Widget.hpp
+++ b/ucl/include/ucl/gui/Widget.hpp
@@ -44,16 +44,6 @@ namespace ucl {
return m_eo;
}
- inline Widget::operator Evas_Object *()
- {
- return getEo();
- }
-
- inline Widget::operator const Evas_Object *() const
- {
- return getEo();
- }
-
inline Evas *Widget::getEvas() const
{
return evas_object_evas_get(getEo());
@@ -206,6 +196,16 @@ namespace ucl {
// Non-member functions //
+ inline Evas_Object *as_eo(Widget &widget)
+ {
+ return widget.m_eo;
+ }
+
+ inline const Evas_Object *as_eo(const Widget &widget)
+ {
+ return widget.m_eo;
+ }
+
inline void getPosition(const Widget &widget, int *x, int *y)
{
widget.getGeometry(x, y, nullptr, nullptr);
@@ -261,14 +261,4 @@ namespace ucl {
expand(widget);
fill(widget);
}
-
- inline bool operator==(const Widget &lhs, const Widget &rhs)
- {
- return (lhs.getEo() == rhs.getEo());
- }
-
- inline bool operator!=(const Widget &lhs, const Widget &rhs)
- {
- return (lhs.getEo() != rhs.getEo());
- }
}
diff --git a/ucl/include/ucl/gui/WidgetItem.h b/ucl/include/ucl/gui/WidgetItem.h
index c272bc8..3ef57d4 100644
--- a/ucl/include/ucl/gui/WidgetItem.h
+++ b/ucl/include/ucl/gui/WidgetItem.h
@@ -145,16 +145,16 @@ namespace ucl {
/**
* @brief Sets content to default part of the widget item
- * @param[in] content Content Evas object
+ * @param[in] content Content widget
*/
- void setContent(Evas_Object *content) const;
+ void setContent(Widget &content) const;
/**
* @brief Sets content to specific part of the widget item
- * @param[in] content Content Evas object
+ * @param[in] content Content widget
* @param[in] part Destination Edje part
*/
- void setContent(Evas_Object *content, EdjePart part) const;
+ void setContent(Widget &content, EdjePart part) const;
/**
* @brief Unsets content from default part of the widget item
diff --git a/ucl/include/ucl/gui/WidgetItem.hpp b/ucl/include/ucl/gui/WidgetItem.hpp
index 2d53577..b36cfa4 100644
--- a/ucl/include/ucl/gui/WidgetItem.hpp
+++ b/ucl/include/ucl/gui/WidgetItem.hpp
@@ -97,15 +97,15 @@ namespace ucl {
return elm_object_item_part_text_get(getIt(), part.name);
}
- inline void WidgetItem::setContent(Evas_Object *const content) const
+ inline void WidgetItem::setContent(Widget &content) const
{
- elm_object_item_content_set(getIt(), content);
+ elm_object_item_content_set(getIt(), as_eo(content));
}
- inline void WidgetItem::setContent(Evas_Object *const content,
+ inline void WidgetItem::setContent(Widget &content,
const EdjePart part) const
{
- elm_object_item_part_content_set(getIt(), part.name, content);
+ elm_object_item_part_content_set(getIt(), part.name, as_eo(content));
}
inline Evas_Object *WidgetItem::unsetContent() const
diff --git a/ucl/include/ucl/mvp/ListItemPresenter.h b/ucl/include/ucl/mvp/ListItemPresenter.h
index 37175bd..690623e 100644
--- a/ucl/include/ucl/mvp/ListItemPresenter.h
+++ b/ucl/include/ucl/mvp/ListItemPresenter.h
@@ -36,6 +36,15 @@ namespace ucl {
protected IPicker {
public:
/**
+ * @brief Gets GUI item Access object of the item presenter
+ * @param[in] item List item presenter
+ * @return Pointer to Access object or NULL
+ */
+ friend const Elm_Interface_Atspi_Accessible *as_ao(
+ const ListItemPresenter &item);
+
+ public:
+ /**
* @brief Updates GUI item of this item
*/
Result updateItem();
@@ -62,12 +71,6 @@ namespace ucl {
*/
void setItemAtspiGestureHandler(AtspiGestureHandler handler);
- /**
- * @brief Gets GUI item Access object of this item
- * @return Pointer to Access object or NULL
- */
- Elm_Interface_Atspi_Accessible *getItemAo();
-
// IDisposable //
virtual void dispose() final override;
@@ -128,6 +131,22 @@ namespace ucl {
ElmStyle checkStyle;
/**
+ * @brief Enable/disable Atspi support state
+ */
+ bool enableAtspi;
+
+ /**
+ * @brief Constructor
+ * @param[in] checkPart Part in GUI item for check widget
+ * @param[in] checkStyle Style of the check widget
+ * @param[in] enableAtspi Enable/disable Atspi support state
+ */
+ ItemPickModeParams(EdjePart checkPart, ElmStyle checkStyle,
+ bool enableAtspi = false) :
+ checkPart(checkPart), checkStyle(checkStyle),
+ enableAtspi(enableAtspi) {}
+
+ /**
* @brief Checks validity of data in this structure
* @return true - if valid, false - if not valid
*/
@@ -268,7 +287,7 @@ namespace ucl {
const ItemPickModeParams &params);
/**
- * @brief Return GUI item insertion parameters
+ * @brief Gets GUI item insertion parameters
* @details Called just before item is added to list
* @return Item insertion params structure
*/
diff --git a/ucl/source/gui/Genlist.cpp b/ucl/source/gui/Genlist.cpp
index 6195bde..2b20d48 100644
--- a/ucl/source/gui/Genlist.cpp
+++ b/ucl/source/gui/Genlist.cpp
@@ -24,7 +24,7 @@ namespace ucl {
GenlistSRef Genlist::Builder::build(ElmWidget &parent) const
{
- Evas_Object *const eo = elm_genlist_add(parent);
+ Evas_Object *const eo = elm_genlist_add(as_eo(parent));
if (!eo) {
LOG_RETURN_VALUE(RES_FAIL, {}, "elm_genlist_add() failed!");
}
diff --git a/ucl/source/gui/Layout.cpp b/ucl/source/gui/Layout.cpp
index 1509fc5..f5fb2fd 100644
--- a/ucl/source/gui/Layout.cpp
+++ b/ucl/source/gui/Layout.cpp
@@ -26,7 +26,7 @@ namespace ucl {
LayoutSRef Layout::Builder::build(ElmWidget &parent) const
{
- Evas_Object *const eo = elm_layout_add(parent);
+ Evas_Object *const eo = elm_layout_add(as_eo(parent));
if (!eo) {
LOG_RETURN_VALUE(RES_FAIL, {}, "elm_layout_add() failed!");
}
diff --git a/ucl/source/gui/Naviframe.cpp b/ucl/source/gui/Naviframe.cpp
index 4cee1f8..7943607 100644
--- a/ucl/source/gui/Naviframe.cpp
+++ b/ucl/source/gui/Naviframe.cpp
@@ -24,7 +24,7 @@ namespace ucl {
NaviframeSRef Naviframe::Builder::build(ElmWidget &parent) const
{
- Evas_Object *const eo = elm_naviframe_add(parent);
+ Evas_Object *const eo = elm_naviframe_add(as_eo(parent));
if (!eo) {
ELOG("elm_naviframe_add() failed!");
return {};
diff --git a/ucl/source/gui/RadioBox.cpp b/ucl/source/gui/RadioBox.cpp
index 3065e0a..ce8ecc7 100644
--- a/ucl/source/gui/RadioBox.cpp
+++ b/ucl/source/gui/RadioBox.cpp
@@ -24,7 +24,7 @@ namespace ucl {
RadioBoxSRef RadioBox::Builder::build(ElmWidget &parent) const
{
- Evas_Object *const eo = elm_radio_add(parent);
+ Evas_Object *const eo = elm_radio_add(as_eo(parent));
if (!eo) {
LOG_RETURN_VALUE(RES_FAIL, {}, "elm_genlist_add() failed!");
}
diff --git a/ucl/source/gui/Widget.cpp b/ucl/source/gui/Widget.cpp
index bc7d6e8..7da5d29 100644
--- a/ucl/source/gui/Widget.cpp
+++ b/ucl/source/gui/Widget.cpp
@@ -35,7 +35,7 @@ namespace ucl {
m_handler(std::move(handler)),
m_type(static_cast<Evas_Callback_Type>(event))
{
- evas_object_event_callback_add(m_widget.getEo(),
+ evas_object_event_callback_add(as_eo(m_widget),
m_type, event_cb, this);
}
@@ -46,17 +46,17 @@ namespace ucl {
m_handler(std::move(handler)),
m_type(impl::WIDGET_EVENT_SMART)
{
- evas_object_smart_callback_add(m_widget.getEo(),
+ evas_object_smart_callback_add(as_eo(m_widget),
m_smartEvent.c_str(), smart_cb, this);
}
~EventProxy()
{
if (m_type == impl::WIDGET_EVENT_SMART) {
- evas_object_smart_callback_del_full(m_widget.getEo(),
+ evas_object_smart_callback_del_full(as_eo(m_widget),
m_smartEvent.c_str(), smart_cb, this);
} else {
- evas_object_event_callback_del_full(m_widget.getEo(),
+ evas_object_event_callback_del_full(as_eo(m_widget),
m_type, event_cb, this);
}
}
diff --git a/ucl/source/gui/Window.cpp b/ucl/source/gui/Window.cpp
index 9235513..78addf3 100644
--- a/ucl/source/gui/Window.cpp
+++ b/ucl/source/gui/Window.cpp
@@ -45,21 +45,22 @@ namespace ucl {
}
}
- StyledWidget bg(elm_bg_add(winEo));
+ StyledWidget bg(elm_bg_add(winEo), false);
expand(bg);
show(bg);
- StyledWidget conform(elm_conformant_add(winEo));
+ StyledWidget conform(elm_conformant_add(winEo), false);
expand(conform);
show(conform);
- elm_win_resize_object_add(winEo, bg);
- elm_win_resize_object_add(winEo, conform);
+ elm_win_resize_object_add(winEo, as_eo(bg));
+ elm_win_resize_object_add(winEo, as_eo(conform));
elm_win_indicator_opacity_set(winEo, ELM_WIN_INDICATOR_OPAQUE);
elm_win_conformant_set(winEo, EINA_TRUE);
- auto result = makeShared<Window>(winEo, isOwner, conform, PRIVATE);
+ auto result = makeShared<Window>(winEo, isOwner,
+ as_eo(conform), PRIVATE);
if (m_needBindToEo) {
result->bindToEo();
diff --git a/ucl/source/mvp/ListItemPresenter.cpp b/ucl/source/mvp/ListItemPresenter.cpp
index a2087d7..bb8d719 100644
--- a/ucl/source/mvp/ListItemPresenter.cpp
+++ b/ucl/source/mvp/ListItemPresenter.cpp
@@ -69,7 +69,7 @@ namespace ucl {
if (const auto widget = item.getItemPartContent(
EdjePart(part), *item.m_parent)) {
widget->setIsOwner(false);
- return widget->getEo();
+ return as_eo(*widget);
}
return nullptr;
};
@@ -314,27 +314,41 @@ namespace ucl {
return nullptr;
}
- auto check = makeShared<StyledWidget>(elm_check_add(parent));
+ auto check = makeShared<StyledWidget>(elm_check_add(as_eo(parent)));
check->setStyle(params.checkStyle);
- elm_check_state_set(*check, toEina(m_isItemPicked));
- evas_object_repeat_events_set(*check, EINA_FALSE);
- evas_object_propagate_events_set(*check, EINA_FALSE);
+ elm_check_state_set(as_eo(*check), toEina(m_isItemPicked));
+ evas_object_repeat_events_set(as_eo(*check), EINA_FALSE);
+ evas_object_propagate_events_set(as_eo(*check), EINA_FALSE);
check->addEventHandler(
impl::CHECK_CHANGED, WEAK_DELEGATE_THIS(onPickCheckChanged));
+ if (params.enableAtspi) {
+ auto itemAtspi = getItemAtspi();
+ if (itemAtspi) {
+ auto &checkAtspi = check->getAtspi();
+
+ checkAtspi.addRelationship(ELM_ATSPI_RELATION_CONTROLLED_BY,
+ as_ao(*itemAtspi));
+ itemAtspi->addRelationship(ELM_ATSPI_RELATION_CONTROLLER_FOR,
+ as_ao(checkAtspi));
+ itemAtspi->addRelationship(ELM_ATSPI_RELATION_DESCRIBED_BY,
+ as_ao(checkAtspi));
+ }
+ }
+
return check;
}
void ListItemPresenter::onPickCheckChanged(Widget &widget, void *eventInfo)
{
if (!isActive()) {
- elm_check_state_set(widget, toEina(m_isItemPicked));
+ elm_check_state_set(as_eo(widget), toEina(m_isItemPicked));
return;
}
- handleItemPick(elm_check_state_get(widget));
+ handleItemPick(elm_check_state_get(as_eo(widget)));
if (m_item) {
elm_genlist_item_bring_in(m_item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
@@ -408,14 +422,6 @@ namespace ucl {
m_itemAtspiGestureHandler = std::move(handler);
}
- Elm_Interface_Atspi_Accessible *ListItemPresenter::getItemAo()
- {
- if (const auto atspi = getItemAtspi()) {
- return atspi->getAo();
- }
- return nullptr;
- }
-
Result ListItemPresenter::updateItemStyle(const ElmStyle newItemStyle)
{
if (!m_item) {
@@ -503,4 +509,12 @@ namespace ucl {
void ListItemPresenter::onItemLongpressed()
{
}
+
+ // Non-member functions //
+
+ const Elm_Interface_Atspi_Accessible *as_ao(
+ const ListItemPresenter &item)
+ {
+ return as_ao(item.getItemAtspi());
+ }
}
diff --git a/ucl/source/mvp/ListPresenter.cpp b/ucl/source/mvp/ListPresenter.cpp
index 407cb5c..242928e 100644
--- a/ucl/source/mvp/ListPresenter.cpp
+++ b/ucl/source/mvp/ListPresenter.cpp
@@ -123,7 +123,7 @@ namespace ucl {
expandAndFill(*m_genlist);
// TODO Add Scroller widget.
- elm_scroller_content_min_limit(*m_genlist,
+ elm_scroller_content_min_limit(as_eo(*m_genlist),
toEina((flags & FLAG_CALC_X_MIN) != 0),
toEina((flags & FLAG_CALC_Y_MIN) != 0));
@@ -262,7 +262,7 @@ namespace ucl {
if (!relItem) {
LOG_RETURN(RES_FAIL, "relItem is NULL!");
}
- if (relItem.getWidget() != m_genlist->getEo()) {
+ if (relItem.getWidget() != as_eo(*m_genlist)) {
LOG_RETURN(RES_FAIL, "relItem has wrong genlist!");
}
return insert(itemPresenter, parent,