using namespace ucl;
constexpr SmartEvent WIN_POWER_KEY_UP_EVENT {"callui,powerkey,up"};
+ constexpr SmartEvent WIN_LANGUAGE_CHANGED {"callui,language,changed"};
namespace util {
#include "call-ui/resources.h"
#include "call-ui/presenters/types.h"
+#include "call-ui/view/helpers.h"
#include "common.h"
namespace callui { namespace { namespace impl {
m_context->exitApp();
}
}
+
+ updateAppLanguage(false);
}
Result Instance::setupTheme()
m_context->exitApp();
}
+
void Instance::onSysEvent(const SysEvent sysEvent)
{
switch(sysEvent) {
case SysEvent::LANGUAGE_CHANGED:
+ {
ILOG("SysEvent::LANGUAGE_CHANGED");
- {
- char *locale = NULL;
- system_settings_get_value_string(
- SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
- elm_language_set(locale);
- free(locale);
- }
+ FAIL_RETURN_VOID(updateAppLanguage(),
+ "updateAppLanguage() failed!");
break;
+ }
default:
ILOG("sysEvent: %d", sysEvent);
break;
}
}
+ Result Instance::updateAppLanguage(bool needNotify)
+ {
+ char *locale = NULL;
+ system_settings_get_value_string(
+ SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE,
+ &locale);
+ elm_language_set(locale);
+
+ Result res = isLTRCharacterOrientation(locale);
+ if (res == RES_FAIL) {
+ ELOG("isLTRCharacterOrientation() failed!");
+ } else {
+ utils::setMirroredMode(res == RES_OK ? false : true);
+ }
+ free(locale);
+
+ if (needNotify) {
+ m_win->callEvent(WIN_LANGUAGE_CHANGED, nullptr);
+ }
+
+ return res;
+ }
+
}
Eina_Bool processPowerKeyUpEvent();
void onPowerKeyHoldTimeout(ucl::Timeout *sender);
+ ucl::Result updateAppLanguage(bool needNotify = true);
+
private:
ucl::SysEventProvider &m_sysEventProvider;
ucl::IInstanceContext *m_context;
AcceptDialog::~AcceptDialog()
{
+ unsetLanguageChangeCallback();
}
Result AcceptDialog::prepare(ElmWidget &parent)
m_selfRef = asShared(*this);
+ setLanguageChangeCallback();
+
addDeactivatorException(this);
broadcastDeactivate();
return RES_OK;
}
+ void AcceptDialog::setLanguageChangeCallback()
+ {
+ getWindow().addEventHandler(WIN_LANGUAGE_CHANGED, WEAK_DELEGATE(
+ AcceptDialog::onLanguageChanged, asWeak(*this)));
+ }
+
+ void AcceptDialog::unsetLanguageChangeCallback()
+ {
+ getWindow().delEventHandler(WIN_LANGUAGE_CHANGED, WEAK_DELEGATE(
+ AcceptDialog::onLanguageChanged, asWeak(*this)));
+ }
+
+ void AcceptDialog::onLanguageChanged(Widget &widget, void *eventInfo)
+ {
+ if (m_genlist) {
+ elm_genlist_realized_items_update(*m_genlist);
+ }
+ }
+
void AcceptDialog::handleEvent(Event event)
{
const auto keepAliver = asShared(*this);
ucl::Result addGenlistTextItem(Event event);
ucl::Result addGenlistBottomItem();
+ void setLanguageChangeCallback();
+ void unsetLanguageChangeCallback();
+ void onLanguageChanged(ucl::Widget &widget, void *eventInfo);
+
void handleEvent(Event event);
bool dispatchEvent(Event event);
CallInfoPresenter::~CallInfoPresenter()
{
+ unsetLanguageChangeCallback();
}
Result CallInfoPresenter::prepare(GuiPresenter &parent,
FAIL_RETURN(update(), "update() failed!");
+ setLanguageChangeCallback();
+
return RES_OK;
}
+ void CallInfoPresenter::setLanguageChangeCallback()
+ {
+ getWindow().addEventHandler(WIN_LANGUAGE_CHANGED, WEAK_DELEGATE(
+ CallInfoPresenter::onLanguageChanged, asWeak(*this)));
+ }
+
+ void CallInfoPresenter::unsetLanguageChangeCallback()
+ {
+ getWindow().delEventHandler(WIN_LANGUAGE_CHANGED, WEAK_DELEGATE(
+ CallInfoPresenter::onLanguageChanged, asWeak(*this)));
+ }
+
+ void CallInfoPresenter::onLanguageChanged(Widget &widget, void *eventInfo)
+ {
+ update();
+ }
+
Result CallInfoPresenter::createWidget(ElmWidget &parent)
{
m_widget = Layout::Builder().
IContactInfoSCRef contactInfo = callInfo->getContactInfo();
if (contactInfo) {
- return callInfo->getPhoneNumber();
+ return encloseBidirectionalText(std::move(
+ callInfo->getPhoneNumber()),
+ BidiTextEncoseType::LRM);
}
return "";
}
}
if (m_activeCallInfo && m_heldCallInfo) {
auto displStr = m_activeCallInfo->getPhoneNumber();
+ if (displStr.empty()) {
+ displStr = encloseBidirectionalText(std::move(displStr),
+ BidiTextEncoseType::LRM);
+ }
auto contactInfo = m_activeCallInfo->getContactInfo();
if (contactInfo) {
const auto contName = contactInfo->getName();
if (!contName.empty()) {
displStr = contName;
+ if (contactInfo->getNameSourceType() ==
+ ContactNameSourceType::NUMBER) {
+ displStr = encloseBidirectionalText(std::move(displStr),
+ BidiTextEncoseType::LRM);
+ }
}
}
if (displStr.empty()) {
auto contactInfo = callInfo->getContactInfo();
if (contactInfo) {
mainTxt = contactInfo->getName();
+ if (contactInfo->getNameSourceType() ==
+ ContactNameSourceType::NUMBER) {
+ mainTxt = encloseBidirectionalText(std::move(mainTxt),
+ BidiTextEncoseType::LRM);
+ }
}
if (mainTxt.empty()) {
FAIL_RETURN(updateMainTxt(), "diplayMainTxt() failed!");
if (m_needModifyCallStatus) {
- if (const auto parent = m_parent.lock())
- return createCallStatus(*parent);
+ m_needModifyCallStatus = false;
+ if (const auto parent = m_parent.lock()) {
+ return createCallStatus(*parent);
+ }
}
return RES_OK;
void displayMainTxt(const ICallInfoSCRef &info, const std::string &text);
+ void setLanguageChangeCallback();
+ void unsetLanguageChangeCallback();
+ void onLanguageChanged(ucl::Widget &widget, void *eventInfo);
+
// Screen Reader
ucl::Result setMainTxtAccessObject(const std::string &text);
ucl::Result setSubTxtAccessObject(const std::string &text);
constexpr EdjePart PART_TXT_TEXT_INFO {"text_info"};
- constexpr EdjeSignal SIGN_DOT_RTL {"default:RTL"};
- constexpr EdjeSignal SIGN_DOT_LTR {"default:LTR"};
+ constexpr EdjeSignal SIGN_DOT_ANIMATE {"animate"};
constexpr EdjeSignal SIGN_RESET {"reset"};
constexpr EdjePart PART_AO_STATUS {"ao_text_info"};
CallStatusPresenter::~CallStatusPresenter()
{
+ unsetLanguageChangeCallback();
+
m_ly.reset();
if (m_timer) {
ecore_timer_del(m_timer);
FAIL_RETURN(GuiPresenter::prepare(parent, PF_PASSIVE),
"Presenter::prepare() failed!");
+ setLanguageChangeCallback();
+
m_ly->emit(impl::SIGN_RESET, impl::SIGN_SRC_DOT);
m_ly->setText("", impl::PART_TXT_TEXT_INFO);
createStatusTxtAo();
return RES_OK;
}
+ void CallStatusPresenter::setLanguageChangeCallback()
+ {
+ getWindow().addEventHandler(WIN_LANGUAGE_CHANGED, WEAK_DELEGATE(
+ CallStatusPresenter::onLanguageChanged, asWeak(*this)));
+ }
+
+ void CallStatusPresenter::unsetLanguageChangeCallback()
+ {
+ getWindow().delEventHandler(WIN_LANGUAGE_CHANGED, WEAK_DELEGATE(
+ CallStatusPresenter::onLanguageChanged, asWeak(*this)));
+ }
+
+ void CallStatusPresenter::onLanguageChanged(Widget &widget, void *eventInfo)
+ {
+ Result res = RES_FAIL;
+ switch (m_mode) {
+ case CallMode::INCOMING:
+ res = processIncomingMode();
+ break;
+ case CallMode::OUTGOING:
+ res = processOutgoingMode();
+ break;
+ case CallMode::DURING:
+ res = processDuringMode();
+ break;
+ case CallMode::END:
+ res = processEndMode();
+ break;
+ default:
+ ELOG("Unknown mode");
+ break;
+ }
+ LOG_RETURN_VOID(res, "Failed");
+
+ }
+
Result CallStatusPresenter::processIncomingMode()
{
m_ly->setText(STR_INCOMING_CALL, impl::PART_TXT_TEXT_INFO);
-
- // TODO: need add logic for RTL mode in the future
- m_ly->emit(impl::SIGN_DOT_LTR, impl::SIGN_SRC_DOT);
+ m_ly->emit(impl::SIGN_DOT_ANIMATE, impl::SIGN_SRC_DOT);
return RES_OK;
}
Result CallStatusPresenter::processOutgoingMode()
{
m_ly->setText(STR_DIALING_CALL, impl::PART_TXT_TEXT_INFO);
-
- // TODO: need add logic for RTL mode in the future
- m_ly->emit(impl::SIGN_DOT_LTR, impl::SIGN_SRC_DOT);
+ m_ly->emit(impl::SIGN_DOT_ANIMATE, impl::SIGN_SRC_DOT);
return RES_OK;
}
Eina_Bool onCallDurationTimerCb();
Eina_Bool onBlinkingTimerCb();
+ void setLanguageChangeCallback();
+ void unsetLanguageChangeCallback();
+ void onLanguageChanged(ucl::Widget &widget, void *eventInfo);
+
// Screen Reader
ucl::Result createStatusTxtAo();
RejectMsgPresenter::~RejectMsgPresenter()
{
+ unsetLanguageChangeCallback();
+
if (m_widget) {
sendActivate(*m_widget);
}
FAIL_RETURN(createAtspiHighlightHelper(),
"createScreenReaderRoute() failed!");
+ setLanguageChangeCallback();
+
deactivateBy(m_widget.get());
parent.addDeactivatorSource(*m_widget);
return RES_OK;
}
+ void RejectMsgPresenter::setLanguageChangeCallback()
+ {
+ getWindow().addEventHandler(WIN_LANGUAGE_CHANGED, WEAK_DELEGATE(
+ RejectMsgPresenter::onLanguageChanged, asWeak(*this)));
+ }
+
+ void RejectMsgPresenter::unsetLanguageChangeCallback()
+ {
+ getWindow().delEventHandler(WIN_LANGUAGE_CHANGED, WEAK_DELEGATE(
+ RejectMsgPresenter::onLanguageChanged, asWeak(*this)));
+ }
+
+ void RejectMsgPresenter::onLanguageChanged(Widget &widget, void *eventInfo)
+ {
+ if (m_genlist) {
+ elm_genlist_realized_items_update(*m_genlist);
+ }
+ }
+
Result RejectMsgPresenter::createGenlist()
{
// Genlist scroller Layout
void onBackKey(Evas_Object *obj, void *eventInfo);
+ void setLanguageChangeCallback();
+ void unsetLanguageChangeCallback();
+ void onLanguageChanged(ucl::Widget &widget, void *eventInfo);
+
// Screen Reader
ucl::Result createAtspiHighlightHelper();
void registerGenlistAtspiGestureCallbacks();
* limitations under the License.
*/
+#include <utils_i18n_ulocale.h>
+
#include "ucl/gui/Window.h"
#include "common.h"
const TString STR_HH_MM_SS_TIME{"%02d:%02d:%02d"};
const TString STR_MM_SS_TIME{"%02d:%02d"};
+ constexpr const char *BIDI_TXT_LRM = "\u200E";
+ constexpr const char *BIDI_TXT_RLM = "\u200F";
+ constexpr const char *BIDI_TXT_LRM_RLM = "\u200E\u200F";
+ constexpr const char *BIDI_TXT_RLM_LRM = "\u200F\u200E";
+
}}}
namespace callui {
}
}
+ std::string encloseBidirectionalText(const std::string &txt, BidiTextEncoseType type)
+ {
+ switch (type) {
+ case BidiTextEncoseType::LRM:
+ return himpl::BIDI_TXT_LRM + txt + himpl::BIDI_TXT_LRM;
+ case BidiTextEncoseType::RLM:
+ return himpl::BIDI_TXT_RLM + txt + himpl::BIDI_TXT_RLM;
+ case BidiTextEncoseType::LRM_RLM:
+ return himpl::BIDI_TXT_LRM_RLM + txt + himpl::BIDI_TXT_RLM_LRM;
+ case BidiTextEncoseType::RLM_LRM:
+ return himpl::BIDI_TXT_RLM_LRM + txt + himpl::BIDI_TXT_LRM_RLM;
+ default:
+ ELOG("Invalid type");
+ return txt;
+ }
+ return txt;
+ }
+
+ std::string encloseBidirectionalText(std::string &&txt, BidiTextEncoseType type)
+ {
+ switch (type) {
+ case BidiTextEncoseType::LRM:
+ txt.insert(0, himpl::BIDI_TXT_LRM);
+ txt.append(himpl::BIDI_TXT_LRM);
+ break;
+ case BidiTextEncoseType::RLM:
+ txt.insert(0, himpl::BIDI_TXT_RLM);
+ txt.append(himpl::BIDI_TXT_RLM);
+ break;
+ case BidiTextEncoseType::LRM_RLM:
+ txt.insert(0, himpl::BIDI_TXT_LRM_RLM);
+ txt.append(himpl::BIDI_TXT_RLM_LRM);
+ break;
+ case BidiTextEncoseType::RLM_LRM:
+ txt.insert(0, himpl::BIDI_TXT_RLM_LRM);
+ txt.append(himpl::BIDI_TXT_LRM_RLM);
+ break;
+ default:
+ ELOG("Invalid type");
+ break;
+ }
+ return std::move(txt);
+ }
+
+ Result isLTRCharacterOrientation(const std::string &lang)
+ {
+ if (lang.empty()) {
+ LOG_RETURN(RES_INVALID_ARGUMENTS, "lang is empty");
+ }
+
+ i18n_ulocale_layout_type_e layout = I18N_ULOCALE_LAYOUT_UNKNOWN;
+ int ret = i18n_ulocale_get_character_orientation(lang.c_str(),
+ &layout);
+ if (ret != I18N_ERROR_NONE) {
+ LOG_RETURN(RES_FAIL,
+ "i18n_ulocale_get_character_orientation() failed!");
+ }
+
+ switch (layout) {
+ case I18N_ULOCALE_LAYOUT_LTR:
+ return RES_OK;
+ case I18N_ULOCALE_LAYOUT_RTL:
+ return RES_FALSE;
+ default:
+ LOG_RETURN(RES_FAIL,
+ "Unsupported character orientation type [%d]",
+ layout);
+ }
+ return RES_OK;
+ }
}
+
namespace callui {
+ enum class BidiTextEncoseType {
+ LRM,
+ RLM,
+ LRM_RLM,
+ RLM_LRM
+ };
+
constexpr ucl::SmartEvent INSTANCE_PAUSED {"callui,instance,paused"};
constexpr ucl::SmartEvent INSTANCE_RESUMED {"callui,instance,resumed"};
void setInstancePaused(ucl::Window &win, bool value);
bool isInstancePaused(const ucl::Window &win);
- void replaceSubstringInString(std::string &str,
- const std::string &from, const std::string &to);
-
ucl::TString getCallDuration(const struct tm &time);
void tryUpdateCallDurationTime(
struct tm &curTime, struct tm &compTime,
ucl::EdjeWidget &widget, const ucl::EdjePart &part);
+ void replaceSubstringInString(std::string &str,
+ const std::string &from, const std::string &to);
+
+ ucl::Result isLTRCharacterOrientation(const std::string &lang);
+
+ std::string encloseBidirectionalText(const std::string &txt, BidiTextEncoseType type);
+
+ std::string encloseBidirectionalText(std::string &&txt, BidiTextEncoseType type);
}
#endif // __CALL_UI_PRESENTERS_MISC_HELPERS_H__
LOG_RETURN(RES_FAIL, "Layout::build() failed!");
}
+ // RTL support
+ elm_object_mirrored_automatic_set(*m_widget, EINA_FALSE);
+ elm_object_mirrored_set(*m_widget, false);
+
setDeactivatorSink(m_widget);
return RES_OK;
buttonSRef->addEventHandler(BTN_CLICKED,
WEAK_DELEGATE(KeypadPage::onBtnClicked,
asWeak(*this)));
+
+ // RTL support
+ elm_object_mirrored_automatic_set(*buttonSRef, EINA_FALSE);
+ elm_object_mirrored_set(*buttonSRef, false);
}
// Screen Reader
#include "call-ui/view/AcceptRejectWidget.h"
-#include "common.h"
#include "call-ui/resources.h"
+#include "helpers.h"
+#include "common.h"
#define CU_COL_TRANSPARENT 0, 0, 0, 0
#define CU_COL_WHITE 255, 255, 255, 255
Evas_Coord x;
m_rejIcon->getGeometry(&x, nullptr, nullptr, nullptr);
- int dx = x - impl::REJ_ICON_RIGHT_PAD_X;
- int animTrace = impl::ACC_REJ_ICON_HIDE_THRESHOLD_W - dx;
- if (animTrace <= 0) {
- DLOG("No need to add transition");
- return;
+ // RTL support
+ int dx = 0;
+ int animTrace = 0;
+ if (utils::getMirroredMode()) {
+ dx = impl::ACC_ICON_RIGHT_PAD_X - x;
+ animTrace = dx - impl::ACC_REJ_ICON_HIDE_THRESHOLD_W;
+ if (animTrace >= 0) {
+ DLOG("No need to add transition");
+ return;
+ }
+ } else {
+ dx = x - impl::REJ_ICON_RIGHT_PAD_X;
+ animTrace = impl::ACC_REJ_ICON_HIDE_THRESHOLD_W - dx;
+ if (animTrace <= 0) {
+ DLOG("No need to add transition");
+ return;
+ }
}
m_rejIconTr = elm_transit_add();
Evas_Coord x;
m_rejIcon->getGeometry(&x, nullptr, nullptr, nullptr);
- int dx = impl::REJ_ICON_RIGHT_PAD_X - x;
- if (dx >= 0) {
- DLOG("No need to add transition");
- return;
+
+ // RTL support
+ int dx = 0;
+ if (utils::getMirroredMode()) {
+ dx = impl::ACC_ICON_RIGHT_PAD_X - x;
+ if (dx <= 0) {
+ DLOG("No need to add transition");
+ return;
+ }
+ } else {
+ dx = impl::REJ_ICON_RIGHT_PAD_X - x;
+ if (dx >= 0) {
+ DLOG("No need to add transition");
+ return;
+ }
}
m_rejIconTr = elm_transit_add();
Evas_Coord x;
m_accIcon->getGeometry(&x, nullptr, nullptr, nullptr);
- int dx = impl::ACC_ICON_RIGHT_PAD_X - x;
- int animTrace = dx - impl::ACC_REJ_ICON_HIDE_THRESHOLD_W;
- if (animTrace >= 0) {
- DLOG("No need to add transition");
- return;
+ // RTL support
+ int dx = 0;
+ int animTrace = 0;
+ if (utils::getMirroredMode()) {
+ dx = x - impl::REJ_ICON_RIGHT_PAD_X;
+ animTrace = impl::ACC_REJ_ICON_HIDE_THRESHOLD_W - dx;
+ if (animTrace <= 0) {
+ DLOG("No need to add transition");
+ return;
+ }
+ } else {
+ dx = impl::ACC_ICON_RIGHT_PAD_X - x;
+ animTrace = dx - impl::ACC_REJ_ICON_HIDE_THRESHOLD_W;
+ if (animTrace >= 0) {
+ DLOG("No need to add transition");
+ return;
+ }
}
+
m_accIconTr = elm_transit_add();
elm_transit_effect_translation_add(m_accIconTr, 0, 0, animTrace, 0);
elm_transit_object_add(m_accIconTr, *m_accIcon);
Evas_Coord x;
m_accIcon->getGeometry(&x, nullptr, nullptr, nullptr);
- int dx = impl::ACC_ICON_RIGHT_PAD_X - x;
- if (dx <= 0) {
- DLOG("No need to add transition");
- return;
+ // RTL support
+ int dx = 0;
+ if (utils::getMirroredMode()) {
+ dx = impl::REJ_ICON_RIGHT_PAD_X - x;
+ if (dx >= 0) {
+ DLOG("No need to add transition");
+ return;
+ }
+ } else {
+ dx = impl::ACC_ICON_RIGHT_PAD_X - x;
+ if (dx <= 0) {
+ DLOG("No need to add transition");
+ return;
+ }
}
m_accIconTr = elm_transit_add();
elm_access_object_unregister(ao);
}
+ void setMirroredMode(bool isMirroredMode)
+ {
+ elm_config_mirrored_set(isMirroredMode);
+ }
+
+ bool getMirroredMode()
+ {
+ return elm_config_mirrored_get();
+ }
+
}}
namespace callui {
void destroyAccessObject(ucl::ElmWidget &ao);
+ void setMirroredMode(bool isMirroredMode);
+
+ bool getMirroredMode();
+
}}
namespace callui {
}
-#define CU_DOT(_name, _ltr_offset, _rtl_offset) \
+#define CU_DOT(_name, _ltr_offset) \
image { _name; \
scale; \
desc { "default"; \
color_class: AO0311D; \
visible: 1; \
} \
- desc { "default_rtl"; \
- inherit: "default"; \
- align: 1.0 0.5; \
- rel1 { relative: 0.0 0.0; offset: _rtl_offset 0; to: "text_info"; } \
- rel2 { relative: 0.0 1.0; offset: _rtl_offset 0; to: "text_info"; } \
- } \
- desc { "rtl_on"; \
- inherit: "default_rtl"; \
- color_class: AO031; \
- visible: 1; \
- } \
- desc { "rtl_off"; \
- inherit: "default_rtl"; \
- color_class: AO031D; \
- visible: 1; \
- } \
- desc { "rtl_on_photo"; \
- inherit: "default_rtl"; \
- color_class: AO0311; \
- visible: 1; \
- } \
- desc { "rtl_off_photo"; \
- inherit: "default_rtl"; \
- color_class: AO0311D; \
- visible: 1; \
- } \
}
group { "elm/layout/callui/call_info";
max: 191 32;
rel2 { relative: 0.0 1.0; offset: -17 0; to_x: "right.pad"; to_y: "top.pad"; }
}
- desc { "incom_rtl";
- inherit: "default";
- min: 191 32;
- max: 191 32;
- rel1 { relative: 1.0 1.0; offset: 17 0; to_x: "left.pad"; to_y: "top.pad"; }
- }
}
textblock { "text_info";
nomouse;
}
}
}
- CU_DOT("dot.first", 3, -3)
- CU_DOT("dot.second", 9, -9)
- CU_DOT("dot.third", 15, -15)
+ CU_DOT("dot.first", 3)
+ CU_DOT("dot.second", 9)
+ CU_DOT("dot.third", 15)
rect { "ao_text_info";
mouse;
set_int(blink_dot_timer, timer(0.5, "do_blinking", count+1));
}
}
- public do_blinking_rtl(count, part_state) {
- if (count%6 == 0) {
- if (get_int(b_set_photo) == 1) {
- set_state(PART:"dot.first", "rtl_on_photo", 0.0);
- set_state(PART:"dot.second", "rtl_off_photo", 0.0);
- set_state(PART:"dot.third", "rtl_off_photo", 0.0);
- } else {
- set_state(PART:"dot.first", "rtl_on", 0.0);
- set_state(PART:"dot.second", "rtl_off", 0.0);
- set_state(PART:"dot.third", "rtl_off", 0.0);
- }
- set_int(blink_dot_timer, timer(0.5, "do_blinking_rtl", count+1));
- }
- else if (count%6 == 1) {
- if (get_int(b_set_photo) == 1) {
- set_state(PART:"dot.first", "rtl_on_photo", 0.0);
- set_state(PART:"dot.second", "rtl_on_photo", 0.0);
- set_state(PART:"dot.third", "rtl_off_photo", 0.0);
- } else {
- set_state(PART:"dot.first", "rtl_on", 0.0);
- set_state(PART:"dot.second", "rtl_on", 0.0);
- set_state(PART:"dot.third", "rtl_off", 0.0);
- }
- set_int(blink_dot_timer, timer(0.5, "do_blinking_rtl", count+1));
- }
- else if (count%6 == 2) {
- if (get_int(b_set_photo) == 1) {
- set_state(PART:"dot.first", "rtl_on_photo", 0.0);
- set_state(PART:"dot.second", "rtl_on_photo", 0.0);
- set_state(PART:"dot.third", "rtl_on_photo", 0.0);
- } else {
- set_state(PART:"dot.first", "rtl_on", 0.0);
- set_state(PART:"dot.second", "rtl_on", 0.0);
- set_state(PART:"dot.third", "rtl_on", 0.0);
- }
- set_int(blink_dot_timer, timer(0.5, "do_blinking_rtl", count+1));
- }
- else if (count%6 == 3) {
- if (get_int(b_set_photo) == 1) {
- set_state(PART:"dot.first", "rtl_off_photo", 0.0);
- set_state(PART:"dot.second", "rtl_on_photo", 0.0);
- set_state(PART:"dot.third", "rtl_on_photo", 0.0);
- } else {
- set_state(PART:"dot.first", "rtl_off", 0.0);
- set_state(PART:"dot.second", "rtl_on", 0.0);
- set_state(PART:"dot.third", "rtl_on", 0.0);
- }
- set_int(blink_dot_timer, timer(0.5, "do_blinking_rtl", count+1));
- }
- else if (count%6 == 4) {
- if (get_int(b_set_photo) == 1) {
- set_state(PART:"dot.first", "rtl_off_photo", 0.0);
- set_state(PART:"dot.second", "rtl_off_photo", 0.0);
- set_state(PART:"dot.third", "rtl_on_photo", 0.0);
- } else {
- set_state(PART:"dot.first", "rtl_off", 0.0);
- set_state(PART:"dot.second", "rtl_off", 0.0);
- set_state(PART:"dot.third", "rtl_on", 0.0);
- }
- set_int(blink_dot_timer, timer(0.5, "do_blinking_rtl", count+1));
- }
- else if (count%6 == 5) {
- if (get_int(b_set_photo) == 1) {
- set_state(PART:"dot.first", "rtl_off_photo", 0.0);
- set_state(PART:"dot.second", "rtl_off_photo", 0.0);
- set_state(PART:"dot.third", "rtl_off_photo", 0.0);
- } else {
- set_state(PART:"dot.first", "rtl_off", 0.0);
- set_state(PART:"dot.second", "rtl_off", 0.0);
- set_state(PART:"dot.third", "rtl_off", 0.0);
- }
- set_int(blink_dot_timer, timer(0.5, "do_blinking_rtl", count+1));
- }
- }
}
program {
signal: "reset";
}
}
program {
- signal: "default:RTL";
- source: "dot";
- script {
- set_state(PART:"zone.text_info", "incom_rtl", 0.0);
- set_int(blink_dot_timer, timer(0.1, "do_blinking_rtl", 0));
- }
- }
- program {
- signal: "default:LTR";
+ signal: "animate";
source: "dot";
script {
set_state(PART:"zone.text_info", "incom", 0.0);