From a4b2782a5d107afe37332580bf0a2ed1eb873eec Mon Sep 17 00:00:00 2001 From: Dmytro Dragan Date: Wed, 11 Nov 2015 16:06:06 +0200 Subject: [PATCH] TizenRefApp-4984 Implement Navibar-class Change-Id: I1d345cfb0d1d6bc2e151fd1e9e1ec5c7bcc8ae27 Signed-off-by: Dmytro Dragan --- edje/images/core_icon_back.png | Bin 0 -> 1316 bytes edje/images/core_icon_expand_close.png | Bin 0 -> 3174 bytes edje/images/core_icon_expand_open.png | Bin 0 -> 3130 bytes res/edje/button_theme.edc | 638 ++++++++++++++++++++++- src/Common/Controller/inc/FrameController.h | 3 + src/Common/Controller/src/FrameController.cpp | 5 +- src/Common/Utils/inc/TextDecorator.h | 5 +- src/Common/Utils/src/TextDecorator.cpp | 14 +- src/Common/View/inc/NaviFrameItem.h | 41 +- src/Common/View/inc/View.h | 2 +- src/Common/View/src/NaviFrameItem.cpp | 254 +++++++-- src/Common/View/src/NaviFrameView.cpp | 6 + src/Conversation/Controller/src/Conversation.cpp | 2 + src/MsgThread/Controller/src/MsgThread.cpp | 2 + src/MsgThread/Controller/src/MsgThreadSearch.cpp | 2 +- src/Settings/Controller/src/MsgOnSimCard.cpp | 2 + src/Settings/Controller/src/Settings.cpp | 2 + src/Viewer/Controller/src/Viewer.cpp | 2 + test/TC/TestTextDecorator.cpp | 2 +- 19 files changed, 917 insertions(+), 65 deletions(-) create mode 100644 edje/images/core_icon_back.png create mode 100644 edje/images/core_icon_expand_close.png create mode 100644 edje/images/core_icon_expand_open.png diff --git a/edje/images/core_icon_back.png b/edje/images/core_icon_back.png new file mode 100644 index 0000000000000000000000000000000000000000..1dad23a4b00cd08dd0516bcc64f047869f00bb7b GIT binary patch literal 1316 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`8==WN2pO=Hg^x zY+-B+)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GSvT}5&R}3*oZ;!>7*cWT z&8>}I%#I?h509)^B5*M1W91YPr%N2yniR4ga{mx<y_Q$m=#TnWj%dQk=IQ&trlH2##TH3n6{c1<`v%8rFSG;uq$-`dcinZ_mo(uePWhm}eDk z-m5c3s&M%h-8-ANT=uGFyLNu3_tiri3a{ln)QIf;arFHa)33X>GTB{O`0LF>RiWRy zHH+tM4@-)#4f@W=VtCW@h;GuU%^SRrT)8Y!-eLKyah*W1?~=O;&-Mtf6g=4Y`$K58Ajqm=eslQH& z#o0;E-S7ErPWpn+AH?H~6@vd$@? F2>_!@!hrw) literal 0 HcmV?d00001 diff --git a/edje/images/core_icon_expand_close.png b/edje/images/core_icon_expand_close.png new file mode 100644 index 0000000000000000000000000000000000000000..125f43645912a8c37036ec622e98f2e84636c4df GIT binary patch literal 3174 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 I4Rw9;Uqt1)ssI20 literal 0 HcmV?d00001 diff --git a/res/edje/button_theme.edc b/res/edje/button_theme.edc index 1985772..0ace281 100755 --- a/res/edje/button_theme.edc +++ b/res/edje/button_theme.edc @@ -35,7 +35,7 @@ collections { - base_scale: 1.8; + base_scale: 2.6; externals { external: "elm"; @@ -2877,4 +2877,640 @@ group { \ MSG_BUBBLE_BUTTON_STYLE_TRANSLATE("translate_button", "M01_circle_button.png", "M01_circle_button_press.png", "M01_circle_button_dim.png", "M01_btn_translate.png") +#define BUTTON_NAVIFRAME_BACK_BUTTON_SIZE_INC 80 80 +#define BUTTON_NAVIFRAME_BACK_BUTTON_EFFECT_MAX_SIZE_INC 80 80 +#define BUTTON_NAVIFRAME_BACK_CORNER_RADIUS "10" +#define GLIDE_EASE_OUT(duration) CUBIC_BEZIER (duration) 0.25 0.46 0.45 1.0 +#define BUTTON_NAVIFRAME_BACK_BUTTON_COLOR_WHITE 250 250 250 255 +#define BUTTON_NAVIFRAME_BACK_BUTTON_COLOR_BLUE 61 185 204 255 + group { + name: "elm/button/base/naviframe/arrow_back"; + data.item: "vector_ux" "no_bg"; + data.item: "corner_radius" BUTTON_NAVIFRAME_BACK_CORNER_RADIUS; + images { + image: "core_icon_back.png" COMP; + } + script { + public mouse_down = 0; + public multi_down = 0; + public animate = 0; + public disabled = 0; + } + parts { + part { + name: "button_bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: BUTTON_NAVIFRAME_BACK_BUTTON_SIZE_INC; + max: BUTTON_NAVIFRAME_BACK_BUTTON_SIZE_INC; + fixed: 1 1; + } + } + part { + name: "effect_spacer"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + rel1.relative: 0.5 0.5; + rel2.relative: 0.5 0.5; + min: BUTTON_NAVIFRAME_BACK_BUTTON_EFFECT_MAX_SIZE_INC; + max: BUTTON_NAVIFRAME_BACK_BUTTON_EFFECT_MAX_SIZE_INC; + } + } + part { + name: "tizen_vg_shape"; + type: SWALLOW; + clip_to: "tizen_vg_shape_clipper"; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + rel1.relative: 0.5 0.5; + rel2.relative: 0.5 0.5; + } + description { + state: "ready" 0.0; + rel1.to: "effect_spacer"; + rel2.to: "effect_spacer"; + rel1.relative: 0.15 0.15; + rel2.relative: 0.85 0.85; + } + description { + state: "pressed" 0.0; + inherit: "ready" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "tizen_vg_shape_clipper"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + visible: 0; + fixed: 1 1; + rel1.to: "tizen_vg_shape"; + rel2.to: "tizen_vg_shape"; + } + description { + state: "ready" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color: 0 0 0 77; + visible: 1; + } + } + part { + name: "button_icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: BUTTON_NAVIFRAME_BACK_BUTTON_SIZE_INC; + max: BUTTON_NAVIFRAME_BACK_BUTTON_SIZE_INC; + fixed: 1 1; + color: BUTTON_NAVIFRAME_BACK_BUTTON_COLOR_WHITE; + image.normal: "core_icon_back.png"; + } + description { + state: "blue" 0.0; + inherit: "default" 0.0; + color: BUTTON_NAVIFRAME_BACK_BUTTON_COLOR_BLUE; + } + } + part { + name: "event"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "button_bg"; + rel2.to: "button_bg"; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "pressed_effect"; + action: STATE_SET "ready" 0.0; + target: "tizen_vg_shape_clipper"; + target: "tizen_vg_shape"; + after: "pressed_effect2"; + } + program { + name: "pressed_effect2"; + action: STATE_SET "pressed" 0.0; + target: "tizen_vg_shape_clipper"; + target: "tizen_vg_shape"; + transition: GLIDE_EASE_OUT(0.15); + after: "pressed_effect3"; + } + program { + name: "pressed_effect3"; + script { + set_int(animate, 0); + } + } + program { + name: "delay_unpressed_effect"; + in: 0.1 0.0; + after: "unpressed_effect"; + } + program { + name: "unpressed_effect"; + script { + run_program(PROGRAM:"unpressed_effect2"); + } + } + program { + name: "unpressed_effect2"; + action: STATE_SET "ready" 0.0; + target: "tizen_vg_shape_clipper"; + transition: GLIDE_EASE_OUT(0.45); + after: "unpressed_effect3"; + } + program { + name: "unpressed_effect3"; + action: STATE_SET "default" 0.0; + target: "tizen_vg_shape"; + target: "tizen_vg_shape_clipper"; + } + program { + name: "pressed"; + signal: "mouse,down,1*"; + source: "event"; + script { + if (get_int(multi_down) == 0) { + set_int(mouse_down, 1); + set_int(animate, 1); + emit("elm,action,press", ""); + run_program(PROGRAM:"pressed_effect"); + } + } + } + program { + name: "unpressed"; + signal: "mouse,up,1"; + source: "event"; + script { + if (get_int(mouse_down) == 1) { + set_int(mouse_down, 0); + if (get_int(disabled) == 0) { + if (get_int(animate) == 0) { + run_program(PROGRAM:"unpressed_effect"); + } + else { + set_state(PART:"tizen_vg_shape", "pressed", 0.0); + set_state(PART:"tizen_vg_shape_clipper", "pressed", 0.0); + set_int(animate, 0); + run_program(PROGRAM:"delay_unpressed_effect"); + } + emit("elm,action,unpress", ""); + } + } + } + } + program { + name: "button_click"; + signal: "mouse,clicked,1"; + source: "event"; + script { + if (get_int(multi_down) == 0) { + run_program(PROGRAM:"clicked_signal"); + } + } + } + program { + name: "play_sound"; + action: RUN_PLUGIN "touch_sound"; + } + program { + name: "clicked_signal"; + in: 0.001 0.0; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { + name: "enable"; + signal: "elm,state,enabled"; + source: "elm"; + script { + set_int(disabled, 0); + } + } + program { + name: "disable"; + signal: "elm,state,disabled"; + source: "elm"; + script { + set_int(disabled, 1); + } + } + program { + name: "multi_down"; + signal: "elm,action,multi,down"; + source: "elm"; + script { + set_int(multi_down, 1); + } + } + program { + name: "multi_up"; + signal: "elm,action,multi,up"; + source: "elm"; + script { + set_int(multi_down, 0); + } + } + program { + name: "pass_event_enable"; + signal: "elm,event,pass,enabled"; + source: "elm"; + script { + set_mouse_events(PART:"event", 0); + } + } + program { + name: "pass_event_disable"; + signal: "elm,event,pass,disabled"; + source:"elm"; + script { + set_mouse_events(PART:"event", 1); + } + } + program { + name: "repeat_event_enable"; + signal: "elm,event,repeat,enabled"; + source: "elm"; + script { + set_repeat_events(PART:"event", 1); + } + } + program { + name: "repeat_event_disable"; + signal: "elm,event,repeat,disabled"; + source:"elm"; + script { + set_repeat_events(PART:"event", 0); + } + } + program { + name: "make_blue"; + signal: "button,color,blue"; + source: "*"; + action: STATE_SET "blue" 0.0; + target: "button_icon"; + } + program { + name: "make_white"; + signal: "button,color,white"; + source: "*"; + action: STATE_SET "default" 0.0; + target: "button_icon"; + } + } + } + + group { + name: "elm/button/base/naviframe/arrow_down"; + data.item: "vector_ux" "no_bg"; + data.item: "corner_radius" BUTTON_NAVIFRAME_BACK_CORNER_RADIUS; + images { + image: "core_icon_expand_close.png" COMP; + image: "core_icon_expand_open.png" COMP; + } + script { + public mouse_down = 0; + public multi_down = 0; + public animate = 0; + public disabled = 0; + } + parts { + part { + name: "button_bg"; + type: SPACER; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: BUTTON_NAVIFRAME_BACK_BUTTON_SIZE_INC; + max: BUTTON_NAVIFRAME_BACK_BUTTON_SIZE_INC; + fixed: 1 1; + } + } + part { + name: "effect_spacer"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + rel1.relative: 0.5 0.5; + rel2.relative: 0.5 0.5; + min: BUTTON_NAVIFRAME_BACK_BUTTON_EFFECT_MAX_SIZE_INC; + max: BUTTON_NAVIFRAME_BACK_BUTTON_EFFECT_MAX_SIZE_INC; + } + } + part { + name: "tizen_vg_shape"; + type: SWALLOW; + clip_to: "tizen_vg_shape_clipper"; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + rel1.relative: 0.5 0.5; + rel2.relative: 0.5 0.5; + } + description { + state: "ready" 0.0; + rel1.to: "effect_spacer"; + rel2.to: "effect_spacer"; + rel1.relative: 0.15 0.15; + rel2.relative: 0.85 0.85; + } + description { + state: "pressed" 0.0; + inherit: "ready" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { + name: "tizen_vg_shape_clipper"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + visible: 0; + fixed: 1 1; + rel1.to: "tizen_vg_shape"; + rel2.to: "tizen_vg_shape"; + } + description { + state: "ready" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "pressed" 0.0; + inherit: "default" 0.0; + color: 0 0 0 77; + visible: 1; + } + } + part { + name: "button_icon"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: BUTTON_NAVIFRAME_BACK_BUTTON_SIZE_INC; + max: BUTTON_NAVIFRAME_BACK_BUTTON_SIZE_INC; + fixed: 1 1; + image.normal: "core_icon_expand_close.png"; + } + description { + state: "expanded" 0.0; + inherit: "default" 0.0; + image.normal: "core_icon_expand_open.png"; + } + } + part { + name: "color_rect"; + type: RECT; + scale: 1; + clip_to: "button_icon"; + description { + state: "default" 0.0; + rel1.to: "button_icon"; + rel2.to: "button_icon"; + color: BUTTON_NAVIFRAME_BACK_BUTTON_COLOR_WHITE; + } + description { + state: "blue" 0.0; + inherit: "default" 0.0; + color: BUTTON_NAVIFRAME_BACK_BUTTON_COLOR_BLUE; + } + } + part { + name: "event"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "button_bg"; + rel2.to: "button_bg"; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "pressed_effect"; + action: STATE_SET "ready" 0.0; + target: "tizen_vg_shape_clipper"; + target: "tizen_vg_shape"; + after: "pressed_effect2"; + } + program { + name: "pressed_effect2"; + action: STATE_SET "pressed" 0.0; + target: "tizen_vg_shape_clipper"; + target: "tizen_vg_shape"; + transition: GLIDE_EASE_OUT(0.15); + after: "pressed_effect3"; + } + program { + name: "pressed_effect3"; + script { + set_int(animate, 0); + } + } + program { + name: "delay_unpressed_effect"; + in: 0.1 0.0; + after: "unpressed_effect"; + } + program { + name: "unpressed_effect"; + script { + run_program(PROGRAM:"unpressed_effect2"); + } + } + program { + name: "unpressed_effect2"; + action: STATE_SET "ready" 0.0; + target: "tizen_vg_shape_clipper"; + transition: GLIDE_EASE_OUT(0.45); + after: "unpressed_effect3"; + } + program { + name: "unpressed_effect3"; + action: STATE_SET "default" 0.0; + target: "tizen_vg_shape"; + target: "tizen_vg_shape_clipper"; + } + program { + name: "pressed"; + signal: "mouse,down,1*"; + source: "event"; + script { + if (get_int(multi_down) == 0) { + set_int(mouse_down, 1); + set_int(animate, 1); + emit("elm,action,press", ""); + run_program(PROGRAM:"pressed_effect"); + } + } + } + program { + name: "unpressed"; + signal: "mouse,up,1"; + source: "event"; + script { + if (get_int(mouse_down) == 1) { + set_int(mouse_down, 0); + if (get_int(disabled) == 0) { + if (get_int(animate) == 0) { + run_program(PROGRAM:"unpressed_effect"); + } + else { + set_state(PART:"tizen_vg_shape", "pressed", 0.0); + set_state(PART:"tizen_vg_shape_clipper", "pressed", 0.0); + set_int(animate, 0); + run_program(PROGRAM:"delay_unpressed_effect"); + } + emit("elm,action,unpress", ""); + } + } + } + } + program { + name: "button_click"; + signal: "mouse,clicked,1"; + source: "event"; + script { + if (get_int(multi_down) == 0) { + run_program(PROGRAM:"clicked_signal"); + } + } + } + program { + name: "play_sound"; + action: RUN_PLUGIN "touch_sound"; + } + program { + name: "clicked_signal"; + in: 0.001 0.0; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { + name: "enable"; + signal: "elm,state,enabled"; + source: "elm"; + script { + set_int(disabled, 0); + } + } + program { + name: "disable"; + signal: "elm,state,disabled"; + source: "elm"; + script { + set_int(disabled, 1); + } + } + program { + name: "multi_down"; + signal: "elm,action,multi,down"; + source: "elm"; + script { + set_int(multi_down, 1); + } + } + program { + name: "multi_up"; + signal: "elm,action,multi,up"; + source: "elm"; + script { + set_int(multi_down, 0); + } + } + program { + name: "pass_event_enable"; + signal: "elm,event,pass,enabled"; + source: "elm"; + script { + set_mouse_events(PART:"event", 0); + } + } + program { + name: "pass_event_disable"; + signal: "elm,event,pass,disabled"; + source:"elm"; + script { + set_mouse_events(PART:"event", 1); + } + } + program { + name: "repeat_event_enable"; + signal: "elm,event,repeat,enabled"; + source: "elm"; + script { + set_repeat_events(PART:"event", 1); + } + } + program { + name: "repeat_event_disable"; + signal: "elm,event,repeat,disabled"; + source:"elm"; + script { + set_repeat_events(PART:"event", 0); + } + } + program { + name: "make_blue"; + signal: "button,color,blue"; + source: "*"; + action: STATE_SET "blue" 0.0; + target: "color_rect"; + } + program { + name: "make_white"; + signal: "button,color,white"; + source: "*"; + action: STATE_SET "default" 0.0; + target: "color_rect"; + } + program { + name: "make_expand"; + signal: "button,expand"; + source: "*"; + action: STATE_SET "expanded" 0.0; + target: "button_icon"; + } + program { + name: "make_collapse"; + signal: "button,collapse"; + source: "*"; + action: STATE_SET "default" 0.0; + target: "button_icon"; + } + } + } } diff --git a/src/Common/Controller/inc/FrameController.h b/src/Common/Controller/inc/FrameController.h index 71c511d..d1d1f99 100644 --- a/src/Common/Controller/inc/FrameController.h +++ b/src/Common/Controller/inc/FrameController.h @@ -49,6 +49,9 @@ namespace Msg ContextPopup &getCtxPopup(); void resetCtxPopup(); + // NaviFrameItem + virtual void onViewItemCreated(); + private: Popup *m_pPopup; ContextPopup *m_pCtxPopup; diff --git a/src/Common/Controller/src/FrameController.cpp b/src/Common/Controller/src/FrameController.cpp index 4f0a28c..b8c7a0f 100644 --- a/src/Common/Controller/src/FrameController.cpp +++ b/src/Common/Controller/src/FrameController.cpp @@ -90,5 +90,8 @@ void FrameController::resetCtxPopup() } } - +void FrameController::onViewItemCreated() +{ + NaviFrameItem::onViewItemCreated(); +} diff --git a/src/Common/Utils/inc/TextDecorator.h b/src/Common/Utils/inc/TextDecorator.h index 394a074..a162206 100644 --- a/src/Common/Utils/inc/TextDecorator.h +++ b/src/Common/Utils/inc/TextDecorator.h @@ -24,6 +24,7 @@ namespace Msg { enum class TextAlign { + None, Left, Center, Right @@ -37,7 +38,7 @@ namespace Msg public: TextStyle(); - TextStyle(int size, const std::string &color, TextAlign align = TextAlign::Left); + TextStyle(int size, const std::string &color, TextAlign align = TextAlign::None); ~TextStyle(); void setColor(const std::string &color); @@ -61,7 +62,7 @@ namespace Msg static std::string make(const std::string &text, int size = TextStyle::defaultFontSize, const std::string &color = TextStyle::defaultColor, - TextAlign align = TextAlign::Left); + TextAlign align = TextAlign::None); }; } diff --git a/src/Common/Utils/src/TextDecorator.cpp b/src/Common/Utils/src/TextDecorator.cpp index d0d5bad..c8878ad 100644 --- a/src/Common/Utils/src/TextDecorator.cpp +++ b/src/Common/Utils/src/TextDecorator.cpp @@ -48,7 +48,7 @@ namespace TextStyle::TextStyle() : m_Color(defaultColor) - , m_Align(TextAlign::Left) + , m_Align(TextAlign::None) , m_Size(defaultFontSize) { } @@ -106,8 +106,16 @@ std::string TextDecorator::make(const std::string &text, TextAlign align) { std::ostringstream ss; - ss << OPEN_TAG("font_size", size) << OPEN_TAG("color", color) << OPEN_TAG("align", alignAsString(align)); + ss << OPEN_TAG("font_size", size) << OPEN_TAG("color", color); + if (align != TextAlign::None) + { + ss << OPEN_TAG("align", alignAsString(align)); + } ss << text; - ss << CLOSE_TAG("color") << CLOSE_TAG("font_size") << CLOSE_TAG("align"); + if (align != TextAlign::None) + { + ss << CLOSE_TAG("align"); + } + ss << CLOSE_TAG("color") << CLOSE_TAG("font_size"); return ss.str(); } diff --git a/src/Common/View/inc/NaviFrameItem.h b/src/Common/View/inc/NaviFrameItem.h index 2a2646c..7c982f0 100644 --- a/src/Common/View/inc/NaviFrameItem.h +++ b/src/Common/View/inc/NaviFrameItem.h @@ -19,6 +19,7 @@ #define NaviFrameItem_h_ #include "ViewItem.h" +#include "View.h" #include #include @@ -38,7 +39,9 @@ namespace Msg { NaviCancelButtonId = 0, NaviOkButtonId, + NaviCenterButtonId, NaviPrevButtonId, + NaviDownButtonId, NaviButtonMax }; @@ -57,59 +60,81 @@ namespace Msg protected: virtual void onButtonClicked(NaviFrameItem &item, NaviButtonId buttonId) {}; + //ViewItem + virtual void onViewItemCreated(); + private: NaviFrameView &m_Owner; NaviBar *m_pNaviBar; }; class NaviFrameItem::NaviBar + :public View { friend class NaviFrameItem; public: + enum NaviColorId + { + NaviBlueColorId = 0, + NaviWhiteColorId, + NaviColorMax + }; + + public: NaviFrameItem &getOwner(); const NaviFrameItem &getOwner() const; - void show(bool value, bool transition = false); - bool isVisible(); + void setVisible(bool visible); void setTitle(const std::string &title); void setTitle(const TText &title); std::string getTitle() const; - void setBadge(const std::string &badge); - void showBadge(bool value); - std::string getBadge() const; void showButton(NaviButtonId id, bool value); void disabledButton(NaviButtonId id, bool value); + void setButtonText(NaviButtonId id, const std::string &text); + void setButtonText(NaviButtonId id, const TText &text); + void clearBar(); + void switchToSearch(Evas_Object *searchPanel); + void setColor(NaviColorId id); + void expandDownButton(bool value); private: NaviBar(NaviFrameItem &onwer); - ~NaviBar(); + virtual ~NaviBar(); void getButton(NaviButtonId id); + void setButtonColor(NaviButtonId id, NaviColorId titleColor); void showCancelButtonPart(bool value); void showOkButtonPart(bool value); - void setContent(Evas_Object * obj, const char *part); + void showCenterButtonPart(bool value, bool expand = false); + void showPrevButtonPart(bool value); + void showDownButtonPart(bool value); + void initNaviBar(); static void on_button_clicked(void *data, Evas_Object *obj, void *event_info); + static void on_button_delete(void *data, Evas *e, Evas_Object *obj, void *event_info); private: struct ButtonStruct { - ButtonStruct(Evas_Object *b = nullptr, const char *p = nullptr, const char *s = nullptr) + ButtonStruct(Evas_Object *b = nullptr, const char *p = nullptr, const char *s = nullptr, const char *d = "IDS_MSG_OPT_DEFAULT") : button(b) , part(p) , style(s) + , default_text_id(d) { } Evas_Object *button; const char *part; const char *style; + const char *default_text_id; }; private: NaviFrameItem &m_Owner; std::string m_Badge; ButtonStruct ButtonList[NaviButtonMax]; + NaviColorId m_CurrentColor; }; } diff --git a/src/Common/View/inc/View.h b/src/Common/View/inc/View.h index e83b778..578e16b 100644 --- a/src/Common/View/inc/View.h +++ b/src/Common/View/inc/View.h @@ -166,7 +166,7 @@ namespace Msg inline void View::setText(const std::string &text, const char *part) { - setText(part, text.c_str()); + setText(text.c_str(), part); } inline void View::setText(const TText &text, const char *part) diff --git a/src/Common/View/src/NaviFrameItem.cpp b/src/Common/View/src/NaviFrameItem.cpp index 7156e83..35b74fb 100644 --- a/src/Common/View/src/NaviFrameItem.cpp +++ b/src/Common/View/src/NaviFrameItem.cpp @@ -17,20 +17,33 @@ #include "NaviFrameItem.h" +#include "NaviFrameView.h" #include "Logger.h" +#include "TextDecorator.h" using namespace Msg; namespace { - const char *okButtonPart = "title_right_btn"; - const char *cancelButtonPart = "title_left_btn"; - const char *prevButtonPart = "elm.swallow.prev_btn"; - const char *okButtonStyle = "naviframe/title_done"; - const char *cancelButtonStyle = "naviframe/title_cancel"; - const char *prevButtonStyle = "naviframe/back_btn/default"; + const char *titleStyleName = "title"; + const char *naviTitlePart = "title"; + const char *titleTextPart = "text.center"; + const char *okButtonPart = "swallow.right"; + const char *cancelButtonPart = "swallow.left"; + const char *prevButtonPart = "swallow.left"; + const char *downButtonPart = "swallow.right"; + const char *centerButtonPart = "swallow.center"; + const char *okButtonStyle = "naviframe/title_right"; + const char *cancelButtonStyle = "naviframe/title_left"; + const char *prevButtonStyle = "naviframe/arrow_back"; + const char *downButtonStyle = "naviframe/arrow_down"; + const char *cancelButtonDefTextId = "IDS_MSG_ACBUTTON_CANCEL_ABB"; + const char *okButtonDefTextId = "IDS_MSG_ACBUTTON_DONE_ABB"; const char *badgePart = "title_badge"; const char *buttonTypeKey = "BTkey"; + const char *textColorWhiteTitleButtons = "#3db9cc"; + const char *textColorBlueTitleButtons = "#fafafa"; + const int textSizeTitleButtons = 32; } NaviFrameItem::NaviFrameItem(NaviFrameView &owner) @@ -42,7 +55,6 @@ NaviFrameItem::NaviFrameItem(NaviFrameView &owner) NaviFrameItem::~NaviFrameItem() { - delete m_pNaviBar; } const NaviFrameItem::NaviBar &NaviFrameItem::getNaviBar() const @@ -68,14 +80,22 @@ const NaviFrameView &NaviFrameItem::getOwner() const NaviFrameItem::NaviBar::NaviBar(NaviFrameItem &onwer) : m_Owner(onwer) , ButtonList() + , m_CurrentColor(NaviBlueColorId) { - ButtonList[NaviCancelButtonId] = ButtonStruct(nullptr, cancelButtonPart, cancelButtonStyle); - ButtonList[NaviOkButtonId] = ButtonStruct(nullptr, okButtonPart, okButtonStyle); + ButtonList[NaviCancelButtonId] = ButtonStruct(nullptr, cancelButtonPart, cancelButtonStyle, cancelButtonDefTextId); + ButtonList[NaviOkButtonId] = ButtonStruct(nullptr, okButtonPart, okButtonStyle, okButtonDefTextId); + //TODO: implement style for center button + ButtonList[NaviCenterButtonId] = ButtonStruct(nullptr, centerButtonPart, prevButtonStyle); ButtonList[NaviPrevButtonId] = ButtonStruct(nullptr, prevButtonPart, prevButtonStyle); + ButtonList[NaviDownButtonId] = ButtonStruct(nullptr, downButtonPart, downButtonStyle); } NaviFrameItem::NaviBar::~NaviBar() { + for (int iter = NaviCancelButtonId; iter < NaviButtonMax; iter++) + { + evas_object_del(ButtonList[iter].button); + } } NaviFrameItem &NaviFrameItem::NaviBar::getOwner() @@ -88,58 +108,41 @@ const NaviFrameItem &NaviFrameItem::NaviBar::getOwner() const return m_Owner; } -void NaviFrameItem::NaviBar::show(bool value, bool transition) -{ - elm_naviframe_item_title_enabled_set(m_Owner.getElmObjItem(), value, transition); -} - -bool NaviFrameItem::NaviBar::isVisible() +//TODO: fix show (update title part in naviframe item manually) +void NaviFrameItem::NaviBar::setVisible(bool visible) { - return elm_naviframe_item_title_enabled_get(m_Owner.getElmObjItem()); + const char *sig = visible ? "title,state,show" :"title,state,hide"; + emitSignal(sig, "*"); + elm_naviframe_item_title_visible_set(getOwner(), visible); } void NaviFrameItem::NaviBar::setTitle(const std::string &title) { - m_Owner.setText(title); + setText(title, titleTextPart); } void NaviFrameItem::NaviBar::setTitle(const TText &title) { - m_Owner.setText(title); + setText(title, titleTextPart); } std::string NaviFrameItem::NaviBar::getTitle() const { - return m_Owner.getText(); -} - -void NaviFrameItem::NaviBar::setBadge(const std::string &badge) -{ - elm_object_item_part_text_set(m_Owner.getElmObjItem(), badgePart, badge.c_str()); -} - -void NaviFrameItem::NaviBar::showBadge(bool value) -{ - const char *sig = value ? "elm,state,title_badge,show" :"elm,state,title_badge,hide"; - m_Owner.emitSignal(sig); -} - -std::string NaviFrameItem::NaviBar::getBadge() const -{ - const char *text = elm_object_item_part_text_get(m_Owner.getElmObjItem(), badgePart); - return text ? text : std::string(); + return getText(titleTextPart); } void NaviFrameItem::NaviBar::getButton(NaviButtonId id) { if(!ButtonList[id].button) { - Evas_Object *parent = getOwner().getWidget(); + Evas_Object *parent = getEo(); Evas_Object *btn = elm_button_add(parent); ButtonList[id].button = btn; elm_object_style_set(btn, ButtonList[id].style); + setButtonText(id, msgt(ButtonList[id].default_text_id)); evas_object_data_set(btn, buttonTypeKey, (void*)id); evas_object_smart_callback_add(btn, "clicked", on_button_clicked, this); + evas_object_event_callback_add(btn, EVAS_CALLBACK_DEL, on_button_delete, this); } } @@ -149,24 +152,40 @@ void NaviFrameItem::NaviBar::showButton(NaviButtonId id, bool value) { getButton(id); - if(!getOwner().getContent(ButtonList[id].part)) - getOwner().setContent(ButtonList[id].button, ButtonList[id].part); - + if(!getContent(ButtonList[id].part) != ButtonList[id].button) + setContent(ButtonList[id].button, ButtonList[id].part); + setButtonColor(id, m_CurrentColor); evas_object_show(ButtonList[id].button); } else { - evas_object_hide(ButtonList[id].button); + if (getContent(ButtonList[id].part) == ButtonList[id].button) + { + elm_object_part_content_unset(getEo(),ButtonList[id].part); + evas_object_hide(ButtonList[id].button); + } } switch(id) { case NaviCancelButtonId: - showOkButtonPart(value); + showCancelButtonPart(value); break; case NaviOkButtonId: - showCancelButtonPart(value); + showOkButtonPart(value); + break; + + case NaviCenterButtonId: + showCenterButtonPart(value); + break; + + case NaviPrevButtonId: + showPrevButtonPart(value); + break; + + case NaviDownButtonId: + showDownButtonPart(value); break; default: @@ -181,14 +200,34 @@ void NaviFrameItem::NaviBar::disabledButton(NaviButtonId id, bool value) void NaviFrameItem::NaviBar::showCancelButtonPart(bool value) { - const char *sig = value ? "elm,state,title_left_btn,show" : "elm,state,title_left_btn,hide"; - m_Owner.emitSignal(sig); + const char *sig = value ? "cancel,show,btn" : "left,clear"; + emitSignal(sig, "*"); } void NaviFrameItem::NaviBar::showOkButtonPart(bool value) { - const char *sig = value ? "elm,state,title_right_btn,show" : "elm,state,title_right_btn,hide"; - m_Owner.emitSignal(sig); + const char *sig = value ? "done,show,btn" : "right,clear"; + emitSignal(sig, "*"); +} + +void NaviFrameItem::NaviBar::showCenterButtonPart(bool value, bool expand) +{ + const char *sig = value ? "center,show,btn" : "center,hide,btn"; + emitSignal(sig, "*"); +} + +void NaviFrameItem::NaviBar::showPrevButtonPart(bool value) +{ + const char *sig1 = value ? "back,show,btn" : "left,clear"; + const char *sig2 = value ? "empty,right,show" : "right,clear"; + emitSignal(sig1, "*"); + emitSignal(sig2, "*"); +} + +void NaviFrameItem::NaviBar::showDownButtonPart(bool value) +{ + const char *sig = value ? "down,show,btn" : "right,clear"; + emitSignal(sig, "*"); } void NaviFrameItem::NaviBar::on_button_clicked(void *data, Evas_Object *obj, void *event_info) @@ -197,3 +236,124 @@ void NaviFrameItem::NaviBar::on_button_clicked(void *data, Evas_Object *obj, voi int type = (int)evas_object_data_get(obj, buttonTypeKey); naviBar->getOwner().onButtonClicked(naviBar->getOwner(), (NaviButtonId)type); } + +void NaviFrameItem::NaviBar::on_button_delete(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + NaviFrameItem::NaviBar *naviBar = static_cast(data); + int type = (int)evas_object_data_get(obj, buttonTypeKey); + naviBar->ButtonList[type] = nullptr; +} + +void NaviFrameItem::onViewItemCreated() +{ + ViewItem::onViewItemCreated(); + m_pNaviBar->initNaviBar(); + setContent(*m_pNaviBar, naviTitlePart); +} + +void NaviFrameItem::NaviBar::initNaviBar() +{ + setEo(elm_layout_add(m_Owner.getOwner())); + std::string edjPath = ResourceUtils::getResourcePath(MSG_TITLE_EDJ_PATH); + elm_layout_file_set(getEo(), edjPath.c_str(), titleStyleName); +} + +void NaviFrameItem::NaviBar::setColor(NaviColorId id) +{ + switch(id) + { + case NaviBlueColorId: + emitSignal("title,color,blue", "*"); + m_CurrentColor = NaviBlueColorId; + break; + + case NaviWhiteColorId: + emitSignal("title,color,white", "*"); + m_CurrentColor = NaviWhiteColorId; + break; + + default: + break; + } +} + +void NaviFrameItem::NaviBar::setButtonText(NaviButtonId id, const std::string &text) +{ + elm_object_text_set(ButtonList[id].button, text.c_str()); +} + +void NaviFrameItem::NaviBar::setButtonText(NaviButtonId id, const TText &text) +{ + elm_object_domain_translatable_text_set(ButtonList[id].button, text.getDomain(), text.getMsg()); +} + +void NaviFrameItem::NaviBar::setButtonColor(NaviButtonId id, NaviColorId titleColor) +{ + // Note that, button's color is opposite to title's color + if (id == NaviPrevButtonId || id == NaviDownButtonId) + { + switch(titleColor) + { + case NaviBlueColorId: + elm_object_signal_emit(ButtonList[id].button, "button,color,white", "*"); + break; + + case NaviWhiteColorId: + elm_object_signal_emit(ButtonList[id].button, "button,color,blue", "*"); + break; + + default: + break; + } + } + else + { + TextStyle style; + + switch(titleColor) + { + case NaviBlueColorId: + style.setColor(textColorBlueTitleButtons); + break; + + case NaviWhiteColorId: + style.setColor(textColorWhiteTitleButtons); + break; + + default: + break; + } + style.setSize(textSizeTitleButtons); + const char *buttonText = elm_object_text_get(ButtonList[id].button); + if (buttonText != nullptr) + { + setButtonText(id, TextDecorator::make(buttonText, style).c_str()); + } + } +} + +void NaviFrameItem::NaviBar::clearBar() +{ + emitSignal("sides,clear", "*"); + for (int iter = NaviCancelButtonId; iter < NaviButtonMax; iter++) + { + evas_object_hide(elm_object_part_content_unset(getEo(), ButtonList[iter].part)); + } +} + +void NaviFrameItem::NaviBar::switchToSearch(Evas_Object *searchPanel) +{ + //TODO: implement switchToSearch +} + +void NaviFrameItem::NaviBar::expandDownButton(bool value) +{ + if (!value) + { + elm_object_signal_emit(ButtonList[NaviDownButtonId].button, "button,expand", "*"); + } + else + { + elm_object_signal_emit(ButtonList[NaviDownButtonId].button, "button,collapse", "*"); + } +} diff --git a/src/Common/View/src/NaviFrameView.cpp b/src/Common/View/src/NaviFrameView.cpp index 0d42907..ec962ca 100644 --- a/src/Common/View/src/NaviFrameView.cpp +++ b/src/Common/View/src/NaviFrameView.cpp @@ -22,6 +22,11 @@ using namespace Msg; +namespace +{ + const char *naviTitleStyleEmpty = "empty"; +} + NaviFrameView::NaviFrameView(Evas_Object *parent) : View() { @@ -53,6 +58,7 @@ bool NaviFrameView::isLastFrame() const void NaviFrameView::push(NaviFrameItem &item, Evas_Object *content) { Elm_Object_Item *it = elm_naviframe_item_push(getEo(), NULL, NULL, NULL, content, NULL); + elm_naviframe_item_style_set(it, naviTitleStyleEmpty); item.setElmObjItem(it); } diff --git a/src/Conversation/Controller/src/Conversation.cpp b/src/Conversation/Controller/src/Conversation.cpp index f7439c6..336b7e4 100644 --- a/src/Conversation/Controller/src/Conversation.cpp +++ b/src/Conversation/Controller/src/Conversation.cpp @@ -224,7 +224,9 @@ void Conversation::onMsgStorageChange() void Conversation::onViewItemCreated() { + FrameController::onViewItemCreated(); getNaviBar().setTitle("Conversation"); + getNaviBar().setColor(NaviBar::NaviWhiteColorId); setHwButtonListener(getContent(), this); } diff --git a/src/MsgThread/Controller/src/MsgThread.cpp b/src/MsgThread/Controller/src/MsgThread.cpp index c159305..8fc6331 100644 --- a/src/MsgThread/Controller/src/MsgThread.cpp +++ b/src/MsgThread/Controller/src/MsgThread.cpp @@ -77,7 +77,9 @@ MsgThread::~MsgThread() void MsgThread::onViewItemCreated() { + FrameController::onViewItemCreated(); getNaviBar().setTitle(msgt("IDS_MSG_HEADER_MESSAGES")); + getNaviBar().setColor(NaviBar::NaviBlueColorId); setHwButtonListener(getContent(), this); } diff --git a/src/MsgThread/Controller/src/MsgThreadSearch.cpp b/src/MsgThread/Controller/src/MsgThreadSearch.cpp index 2e7da13..f86d40e 100644 --- a/src/MsgThread/Controller/src/MsgThreadSearch.cpp +++ b/src/MsgThread/Controller/src/MsgThreadSearch.cpp @@ -40,7 +40,7 @@ void MsgThread::setSearchMode(bool value) m_pLayout->showSearchPanel(value); m_pSearchPanel->setEntryFocus(value); - getNaviBar().show(!value); + getNaviBar().setVisible(!value); } void MsgThread::onSearchButtonClicked(MsgThreadSearchPanel &obj) diff --git a/src/Settings/Controller/src/MsgOnSimCard.cpp b/src/Settings/Controller/src/MsgOnSimCard.cpp index 44d925b..f9083b5 100644 --- a/src/Settings/Controller/src/MsgOnSimCard.cpp +++ b/src/Settings/Controller/src/MsgOnSimCard.cpp @@ -64,7 +64,9 @@ void MsgOnSimCard::create() void MsgOnSimCard::onViewItemCreated() { + FrameController::onViewItemCreated(); setTitleTranslatable(); + getNaviBar().setColor(NaviBar::NaviWhiteColorId); setHwButtonListener(getContent(), this); /* auto list = getMsgEngine().getStorage().getSimMsgList(); diff --git a/src/Settings/Controller/src/Settings.cpp b/src/Settings/Controller/src/Settings.cpp index af8a72e..a3075d8 100644 --- a/src/Settings/Controller/src/Settings.cpp +++ b/src/Settings/Controller/src/Settings.cpp @@ -364,7 +364,9 @@ void Settings::autoRetRoamingItemHandler(SettingsListItem &item) void Settings::onViewItemCreated() { + FrameController::onViewItemCreated(); getNaviBar().setTitle("Settings"); + getNaviBar().setColor(NaviBar::NaviWhiteColorId); } Evas_Object *Settings::getContent() diff --git a/src/Viewer/Controller/src/Viewer.cpp b/src/Viewer/Controller/src/Viewer.cpp index b7aa163..0dae0d9 100644 --- a/src/Viewer/Controller/src/Viewer.cpp +++ b/src/Viewer/Controller/src/Viewer.cpp @@ -36,7 +36,9 @@ Viewer::~Viewer() void Viewer::onViewItemCreated() { + FrameController::onViewItemCreated(); getNaviBar().setTitle("Viewer"); + getNaviBar().setColor(NaviBar::NaviBlueColorId); setHwButtonListener(getContent(), this); } diff --git a/test/TC/TestTextDecorator.cpp b/test/TC/TestTextDecorator.cpp index 61a07b5..38da18c 100644 --- a/test/TC/TestTextDecorator.cpp +++ b/test/TC/TestTextDecorator.cpp @@ -55,5 +55,5 @@ TEST( TestTextDecorator, defaultFormatTest ) ASSERT_NE(foundPos, std::string::npos); foundPos = result.find("