Create new default theme and adds night theme files 02/8502/1
authorJimmy Huang <jimmy.huang@intel.com>
Wed, 21 Aug 2013 23:07:19 +0000 (16:07 -0700)
committerJimmy Huang <jimmy.huang@intel.com>
Wed, 21 Aug 2013 23:07:19 +0000 (16:07 -0700)
Change-Id: Ia133a25bd31df5ea0977ca1b63335d607a347197
Signed-off-by: Jimmy Huang <jimmy.huang@intel.com>
43 files changed:
Makefile.am
data/themes/default-sd.edc [deleted file]
data/themes/default.edc
data/themes/default/action_answer.edc [moved from data/themes/includes/action_answer.edc with 100% similarity]
data/themes/default/answer_screen.edc [moved from data/themes/includes/answer_screen.edc with 97% similarity]
data/themes/default/buttons.edc [moved from data/themes/includes/buttons.edc with 97% similarity]
data/themes/default/call.edc [new file with mode: 0644]
data/themes/default/colors.edc [new file with mode: 0644]
data/themes/default/compose.edc [new file with mode: 0644]
data/themes/default/contacts-bg.edc [moved from data/themes/includes/contacts-bg.edc with 91% similarity]
data/themes/default/contacts.edc [new file with mode: 0644]
data/themes/default/dialer.edc [new file with mode: 0644]
data/themes/default/history-bg.edc [new file with mode: 0644]
data/themes/default/history.edc [moved from data/themes/includes/history.edc with 100% similarity]
data/themes/default/include.edc [new file with mode: 0644]
data/themes/default/keypad.edc [new file with mode: 0644]
data/themes/default/messages-overview-list.edc [moved from data/themes/includes/messages-overview-list.edc with 100% similarity]
data/themes/default/messages-overview.edc [new file with mode: 0644]
data/themes/default/messages.edc [new file with mode: 0644]
data/themes/default/multiparty-list.edc [moved from data/themes/includes/multiparty-list.edc with 98% similarity]
data/themes/default/popup.edc [new file with mode: 0644]
data/themes/default/scroller.edc [moved from data/themes/includes/scroller.edc with 99% similarity]
data/themes/night.edc [moved from data/themes/default-hd.edc with 89% similarity]
data/themes/night/action_answer.edc [new file with mode: 0644]
data/themes/night/answer_screen.edc [new file with mode: 0644]
data/themes/night/buttons.edc [new file with mode: 0644]
data/themes/night/call.edc [moved from data/themes/includes/call.edc with 98% similarity]
data/themes/night/colors.edc [moved from data/themes/includes/colors.edc with 84% similarity]
data/themes/night/compose.edc [moved from data/themes/includes/compose.edc with 98% similarity]
data/themes/night/contacts-bg.edc [new file with mode: 0644]
data/themes/night/contacts.edc [moved from data/themes/includes/contacts.edc with 98% similarity]
data/themes/night/dialer.edc [moved from data/themes/includes/dialer.edc with 100% similarity]
data/themes/night/history-bg.edc [moved from data/themes/includes/history-bg.edc with 98% similarity]
data/themes/night/history.edc [new file with mode: 0644]
data/themes/night/include.edc [new file with mode: 0644]
data/themes/night/keypad.edc [moved from data/themes/includes/keypad.edc with 97% similarity]
data/themes/night/messages-overview-list.edc [new file with mode: 0644]
data/themes/night/messages-overview.edc [moved from data/themes/includes/messages-overview.edc with 99% similarity]
data/themes/night/messages.edc [moved from data/themes/includes/messages.edc with 100% similarity]
data/themes/night/multiparty-list.edc [new file with mode: 0644]
data/themes/night/popup.edc [moved from data/themes/includes/popup.edc with 99% similarity]
data/themes/night/scroller.edc [new file with mode: 0644]
packaging/lemolo.spec

index 279c7e7..7665eb2 100644 (file)
@@ -163,7 +163,7 @@ endif
 filesdir = $(pkgdatadir)/themes
 files_DATA = \
 data/themes/default.edj \
-data/themes/default-sd.edj
+data/themes/night.edj
 
 AM_V_EDJ = $(am__v_EDJ_$(V))
 am__v_EDJ_ = $(am__v_EDJ_$(AM_DEFAULT_VERBOSITY))
@@ -208,48 +208,70 @@ data/themes/images/loading_6.png \
 data/themes/images/loading_7.png
 
 THEME_INCLUDES = \
-data/themes/includes/action_answer.edc \
-data/themes/includes/answer_screen.edc \
-data/themes/includes/buttons.edc \
-data/themes/includes/call.edc \
-data/themes/includes/colors.edc \
-data/themes/includes/compose.edc \
-data/themes/includes/contacts-bg.edc \
-data/themes/includes/contacts.edc \
-data/themes/includes/dialer.edc \
-data/themes/includes/history-bg.edc \
-data/themes/includes/history.edc \
-data/themes/includes/keypad.edc \
-data/themes/includes/messages-overview-list.edc \
-data/themes/includes/messages-overview.edc \
-data/themes/includes/messages.edc \
-data/themes/includes/multiparty-list.edc \
-data/themes/includes/popup.edc \
-data/themes/includes/scroller.edc
-
+data/themes/default/action_answer.edc \
+data/themes/default/answer_screen.edc \
+data/themes/default/buttons.edc \
+data/themes/default/call.edc \
+data/themes/default/colors.edc \
+data/themes/default/compose.edc \
+data/themes/default/contacts-bg.edc \
+data/themes/default/contacts.edc \
+data/themes/default/dialer.edc \
+data/themes/default/history-bg.edc \
+data/themes/default/history.edc \
+data/themes/default/include.edc \
+data/themes/default/keypad.edc \
+data/themes/default/messages-overview-list.edc \
+data/themes/default/messages-overview.edc \
+data/themes/default/messages.edc \
+data/themes/default/multiparty-list.edc \
+data/themes/default/popup.edc \
+data/themes/default/scroller.edc
+
+NIGHT_THEME_INCLUDES = \
+data/themes/night/action_answer.edc \
+data/themes/night/answer_screen.edc \
+data/themes/night/buttons.edc \
+data/themes/night/call.edc \
+data/themes/night/colors.edc \
+data/themes/night/compose.edc \
+data/themes/night/contacts-bg.edc \
+data/themes/night/contacts.edc \
+data/themes/night/dialer.edc \
+data/themes/night/history-bg.edc \
+data/themes/night/history.edc \
+data/themes/night/include.edc \
+data/themes/night/keypad.edc \
+data/themes/night/messages-overview-list.edc \
+data/themes/night/messages-overview.edc \
+data/themes/night/messages.edc \
+data/themes/night/multiparty-list.edc \
+data/themes/night/popup.edc \
+data/themes/night/scroller.edc
 
 EXTRA_DIST += \
-data/themes/default-hd.edc \
-data/themes/default-sd.edc \
 data/themes/default.edc \
-$(THEME_INCLUDES) $(THEME_IMAGES)
+data/themes/night.edc \
+$(THEME_INCLUDES) \
+$(NIGHT_THEME_INCLUDES) \
+$(THEME_IMAGES)
 
 
-data/themes/default.edj: $(top_builddir)/Makefile $(top_srcdir)/data/themes/default.edc $(top_srcdir)/data/themes/default-hd.edc $(THEME_INCLUDES) $(THEME_IMAGES)
+data/themes/default.edj: $(top_builddir)/Makefile $(top_srcdir)/data/themes/default.edc $(THEME_INCLUDES) $(THEME_IMAGES)
        $(MKDIR_P) $(top_builddir)/data/themes
        $(AM_V_EDJ)$(EDJE_CC) $(EDJE_FLAGS) \
-       $(top_srcdir)/data/themes/default-hd.edc \
+       $(top_srcdir)/data/themes/default.edc \
        $(top_builddir)/data/themes/default.edj
 
-data/themes/default-sd.edj: $(top_builddir)/Makefile $(top_srcdir)/data/themes/default.edc $(top_srcdir)/data/themes/default-sd.edc $(THEME_INCLUDES) $(THEME_IMAGES)
+data/themes/night.edj: $(top_builddir)/Makefile $(top_srcdir)/data/themes/night.edc $(NIGHT_THEME_INCLUDES) $(THEME_IMAGES)
        $(MKDIR_P) $(top_builddir)/data/themes
        $(AM_V_EDJ)$(EDJE_CC) $(EDJE_FLAGS) \
-       $(top_srcdir)/data/themes/default-sd.edc \
-       $(top_builddir)/data/themes/default-sd.edj
+       $(top_srcdir)/data/themes/night.edc \
+       $(top_builddir)/data/themes/night.edj
 
 clean-local:
        rm -f $(top_builddir)/data/themes/default.edj
-       rm -f $(top_builddir)/data/themes/default-sd.edj
+       rm -f $(top_builddir)/data/themes/night.edj
 
 examplesdir = $(pkgdatadir)/examples
 examples_DATA = \
diff --git a/data/themes/default-sd.edc b/data/themes/default-sd.edc
deleted file mode 100644 (file)
index 68c7299..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-#define WIDTH 360
-#define HEIGHT 640
-
-#define ACTION_WIDTH 120
-#define ACTION_HEIGHT 40
-
-#define CALL_HEIGHT 100
-
-#define BORDER_PADDING 23
-#define ITEM_PADDING 8
-
-#define SEPARATOR_HEIGHT 4
-
-#define SCROLLBAR_WIDTH 8
-#define SCROLLBAR_HEIGHT 8
-
-#define LIST_ICON_SIZE 28
-#define LIST_ITEM_HEIGHT 60
-
-#define FONT_NORMAL "Verdana"
-#define FONT_BOLD "Verdana:style=Bold"
-#define SIZE_HUGE 42
-#define SIZE_LARGE 24
-#define SIZE_MEDIUM 18
-#define SIZE_SMALL 10
-#define SIZE_TINY 8
-
-#define CONTACT_PHOTO_SIZE 64
-#define LIST_CONTACT_HEIGHT 90
-
-#define GROUP_HEIGHT 20
-
-#define LOADING_SIZE 64
-
-#ifdef HAVE_TIZEN
-#define NOTIFICATION_BAR_HEIGHT 25
-#else
-#define NOTIFICATION_BAR_HEIGHT 0
-#endif
-
-#define CALL_TEXT_OFFSET 16
-#define CALL_PHOTO_SIZE 90
-
-#define MESSAGE_IMG_SENT_SIZE 16
-
-#define MESSAGE_IMG_SENT_Y_OFFSET 0
-
-#define MESSAGE_SEPARATOR_WIDTH 172
-#define MESSAGE_SEPARATOR_HEIGHT 16
-
-#define MULTI_BUTTON_ENTRY_MAX_SIZE 150
-
-#include "default.edc"
index ec38bf8..56e069f 100644 (file)
@@ -1,22 +1,53 @@
-collections {
-
-#include "includes/colors.edc"
-#include "includes/dialer.edc"
-#include "includes/keypad.edc"
-#include "includes/call.edc"
-#include "includes/contacts-bg.edc"
-#include "includes/contacts.edc"
-#include "includes/multiparty-list.edc"
-#include "includes/history.edc"
-#include "includes/history-bg.edc"
-#include "includes/scroller.edc"
-#include "includes/popup.edc"
-#include "includes/buttons.edc"
-#include "includes/answer_screen.edc"
-#include "includes/action_answer.edc"
-
-#include "includes/messages.edc"
-#include "includes/compose.edc"
-#include "includes/messages-overview.edc"
-#include "includes/messages-overview-list.edc"
-}
+#define WIDTH 600
+#define HEIGHT 720
+
+#define ACTION_WIDTH 240
+#define ACTION_HEIGHT 80
+
+#define CALL_HEIGHT 130
+
+#define BORDER_PADDING 46
+#define ITEM_PADDING 16
+
+#define SEPARATOR_HEIGHT 2
+
+#define SCROLLBAR_WIDTH 16
+#define SCROLLBAR_HEIGHT 16
+
+#define LIST_ICON_SIZE 36
+#define LIST_ITEM_HEIGHT 120
+
+#define FONT_NORMAL "Verdana"
+#define FONT_BOLD "Verdana:style=Bold"
+#define SIZE_HUGE 99
+#define SIZE_LARGE 58
+#define SIZE_MEDIUM 43
+#define SIZE_SMALL 30
+#define SIZE_TINY 16
+
+#define CONTACT_PHOTO_SIZE 64
+#define LIST_CONTACT_HEIGHT 90
+
+#define GROUP_HEIGHT 30
+
+#define LOADING_SIZE 128
+
+#ifdef HAVE_TIZEN
+#define NOTIFICATION_BAR_HEIGHT 50
+#else
+#define NOTIFICATION_BAR_HEIGHT 0
+#endif
+
+#define CALL_TEXT_OFFSET 16
+#define CALL_PHOTO_SIZE 90
+
+#define MESSAGE_IMG_SENT_SIZE 40
+
+#define MESSAGE_IMG_SENT_Y_OFFSET 0
+
+#define MESSAGE_SEPARATOR_WIDTH 344
+#define MESSAGE_SEPARATOR_HEIGHT 32
+
+#define MULTI_BUTTON_ENTRY_MAX_SIZE 300
+
+#include "default/include.edc"
similarity index 97%
rename from data/themes/includes/answer_screen.edc
rename to data/themes/default/answer_screen.edc
index decf02c..271cc87 100644 (file)
@@ -14,7 +14,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "dark";
+            color_class: "primary";
             min: WIDTH HEIGHT;
             image {
                normal: "bg_call.jpg";
@@ -54,7 +54,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "dark";
+            color_class: "primary";
             rel1 {
                to: "elm.swallow.photo";
                relative: 0.0 0.0;
@@ -120,7 +120,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             fixed: 1 1;
             align: 0.0 0.0;
             rel1 {
similarity index 97%
rename from data/themes/includes/buttons.edc
rename to data/themes/default/buttons.edc
index 3fe7b73..2e6df8f 100644 (file)
@@ -58,13 +58,13 @@ group {
 
 #define SEPARATOR(id, rely, offy, relto)                                \
       part {                                                            \
-         name: "separator.dark."##id;                                   \
+         name: "separator.primary."##id;                                \
          type: RECT;                                                    \
          mouse_events: 0;                                               \
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "dark";                                        \
+            color_class: "primary";                                     \
             rel1 {                                                      \
                relative: 0.0 rely;                                      \
                offset: 0 offy;                                          \
@@ -189,13 +189,13 @@ group {
 
 #define SEPARATOR(id, rely, offy, relto)                                \
       part {                                                            \
-         name: "separator.dark."##id;                                   \
+         name: "separator.primary."##id;                                \
          type: RECT;                                                    \
          mouse_events: 0;                                               \
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "dark";                                        \
+            color_class: "primary";                                     \
             rel1 {                                                      \
                relative: 0.0 rely;                                      \
                offset: 0 offy;                                          \
diff --git a/data/themes/default/call.edc b/data/themes/default/call.edc
new file mode 100644 (file)
index 0000000..ba94176
--- /dev/null
@@ -0,0 +1,2435 @@
+group {
+   name: "elm/layout/ofono-efl/call";
+
+   /*
+    * Represents the dialer ongoing voice call(s) screen.
+    *
+    * Parts:
+    *   TEXT: elm.text.<CALL>.name
+    *   TEXT: elm.text.<CALL>.status
+    *   TEXT: elm.text.<CALL>.elapsed
+    *   TEXT: elm.text.<CALL>.phone.type
+    *   TEXT: elm.text.waiting
+    *   SWALLOW: elm.swallow.multiparty-details
+    *
+    * Signals:
+    *   Emit (source is "call"):
+    *     pressed,<ID>:  key <ID> was pressed
+    *     released,<ID>: key <ID> was released
+    *     clicked,<ID>:  key <ID> was clicked (press and release in the key)
+    *   Listen (source is "call"):
+    *     show,answer:            show "answer" action
+    *     hide,answer:            hide "answer" action
+    *     show,waiting:           show call waiting popup (hold+answer...)
+    *     hide,waiting:           hide call waiting popup
+    *     show,<CALL>,elapsed:    have elapsed (elm.text.<CALL>.elapsed)
+    *     hide,<CALL>,elapsed:    don't have elapsed and it should be hidden
+    *     show,<CALL>,multiparty: call is multiparty
+    *     hide,<CALL>,multiparty: call is not multiparty
+    *     state,<CALL>,<STATE>:   state changed to <STATE>
+    *     disable,<ID>:           disable action <ID>
+    *     enable,<ID>:            enable action <ID>
+    *     toggle,on,<ID>:         mark toggle action <ID> as selected
+    *     toggle,off,<ID>:        mark toggle action <ID> as unselected
+    *     show,multiparty-details: ask the multiparty details to be visible
+    *     hide,multiparty-details: ask the multiparty details to be hidden
+    *     calls,1                  single call mode
+    *     calls,2                  two calls mode
+    *
+    * Messages:
+    *     1 - FLOAT: speaker volume 0.0-1.0
+    *     2 - FLOAT: microphone volume 0.0-1.0
+    *     11 - FLOAT: elapsed time in seconds (> 0.0) for call #1
+    *     12 - FLOAT: elapsed time in seconds (> 0.0) for call #2
+    *
+    * Where <ID> is: numbers 0 to 9, star, hash, mute, keypad,
+    * speaker, add-call, merge, swap, contacts, answer, hangup,
+    * waiting-hangup, hold-answer, hangup-answer, <CALL>,multiparty,
+    * multiparty-details, actions.
+    *
+    * Where <STATE> is: disconnected, active, held, dialing, alerting,
+    * incoming, waiting.
+    *
+    * Where <CALL> is: 1 or 2.
+    */
+
+   min: WIDTH HEIGHT;
+
+   images {
+      image: "bg_call.jpg" COMP;
+      image: "ico_mute.png" COMP;
+      image: "ico_keypad.png" COMP;
+      image: "ico_speaker.png" COMP;
+      image: "ico_add_call.png" COMP;
+      image: "ico_merge.png" COMP;
+      image: "ico_swap.png" COMP;
+      image: "ico_contacts.png" COMP;
+      image: "ico_arrow_right.png" COMP;
+   }
+
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+            min: WIDTH HEIGHT;
+         }
+      }
+
+      part {
+         name: "notification.bar";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            rel1.relative: 0.0 0.0;
+            rel2 {
+               relative: 1.0 0.0;
+               offset: -1 NOTIFICATION_BAR_HEIGHT;
+            }
+         }
+      }
+
+#define SEPARATOR(id, clip, rely, offy, relto)                          \
+      part {                                                            \
+         name: "separator.primary."##id;                                \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "primary";                                     \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 offy;                                          \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT / 2);                \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "separator.bg."##id;                                     \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "bg";                                          \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 (offy + SEPARATOR_HEIGHT / 2);                 \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT);                    \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }
+
+#define CALL(id, offy)                                                  \
+      part {                                                            \
+         name: "call."##id;                                             \
+         type: RECT;                                                    \
+         clip_to: "clipper.multiparty-details-hidden";                  \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            rel1 {                                                      \
+               to: "notification.bar";                                  \
+               relative: 0.0 1.0;                                       \
+               offset: 0 (-SEPARATOR_HEIGHT + offy);                    \
+            }                                                           \
+            rel2 {                                                      \
+               to: "notification.bar";                                  \
+               relative: 1.0 1.0;                                       \
+               offset: -1 (CALL_HEIGHT + offy);                         \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "hidden" 0.0;                                        \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 0;                                       \
+            visible: 0;                                                 \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      SEPARATOR("call."##id, "call."##id, 0.0, 0, "call."##id);         \
+                                                                        \
+      part {                                                            \
+         name: "clipper."##id".multiparty";                             \
+         type: RECT;                                                    \
+         clip_to: "call."##id;                                          \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            visible: 0;                                                 \
+         }                                                              \
+         description {                                                  \
+            state: "multiparty" 0.0;                                    \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+            visible: 1;                                                 \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button."##id".multiparty";                              \
+         type: IMAGE;                                                   \
+         mouse_events: 1;                                               \
+         clip_to: "clipper."##id".multiparty";                          \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "action";                                      \
+            min: LIST_ICON_SIZE LIST_ICON_SIZE;                                \
+            max: LIST_ICON_SIZE LIST_ICON_SIZE;                         \
+            rel1 {                                                      \
+               to: "call."##id;                                         \
+               relative: 1.0 0.0;                                       \
+               offset: (-LIST_ICON_SIZE - BORDER_PADDING) 0;            \
+            }                                                           \
+            rel2 {                                                      \
+               to: "call."##id;                                         \
+               relative: 1.0 1.0;                                       \
+               offset: (-BORDER_PADDING -1) -1;                         \
+            }                                                           \
+            image.normal: "ico_arrow_right.png";                        \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color_class: "secondary";                                   \
+         }                                                              \
+      }                                                                 \
+      programs {                                                        \
+         program {                                                      \
+            signal: "mouse,up,1";                                       \
+            source: "button."##id".multiparty";                         \
+            action: SIGNAL_EMIT "released,"##id",multiparty" "call";    \
+            after: "show_up_"##id"_multiparty";                         \
+            api: ""##id"_multiparty_released"                           \
+               "call #"##id" multiparty was released";                  \
+         }                                                              \
+         program {                                                      \
+            name: "show_up_"##id"_multiparty";                          \
+            action: STATE_SET "default" 0.0;                            \
+            transition: DECELERATE 0.1;                                 \
+            target: "button."##id".multiparty";                         \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1";                                     \
+            source: "button."##id".multiparty";                         \
+            after: "show_down_"##id"_multiparty";                       \
+            action: SIGNAL_EMIT "pressed,"##id",multiparty" "call";     \
+            api: ""##id"_multiparty_pressed"                            \
+               "call #"##id" multiparty was pressed";                   \
+         }                                                              \
+         program {                                                      \
+            name: "show_down_"##id"_multiparty";                        \
+            action: STATE_SET "pressed" 0.0;                            \
+            transition: ACCELERATE 0.1;                                 \
+            target: "button."##id".multiparty";                         \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id".multiparty";                         \
+            action: SIGNAL_EMIT "clicked,"##id",multiparty" "call";     \
+            api: ""##id"_multiparty_clicked"                            \
+               "call #"##id" multiparty was clicked";                   \
+         }                                                              \
+                                                                        \
+         program {                                                      \
+            signal: "show,"##id",multiparty";                           \
+            source: "call";                                             \
+            action: STATE_SET "multiparty" 0.0;                         \
+            target: "clipper."##id".multiparty";                        \
+            target: "area."##id".name";                                 \
+            api: ""##id"_multiparty_show"                               \
+               "call #"##id" make multiparty visible";                  \
+         }                                                              \
+         program {                                                      \
+            signal: "hide,"##id",multiparty";                           \
+            source: "call";                                             \
+            action: STATE_SET "default" 0.0;                            \
+            target: "clipper."##id".multiparty";                        \
+            target: "area."##id".name";                                 \
+            api: ""##id"_multiparty_hide"                               \
+               "call #"##id" make multiparty hidden";                   \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      part {                                                           \
+         name: "area."##id".name";                                      \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         scale: 1;                                                      \
+         clip_to: "call."##id;                                          \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 0 0 0 0;                                             \
+            rel1 {                                                      \
+               to: "call."##id;                                         \
+               offset: BORDER_PADDING SEPARATOR_HEIGHT;                 \
+            }                                                           \
+            rel2 {                                                      \
+               to: "call."##id;                                         \
+               relative: 1.0 0.0;                                       \
+               offset: (-BORDER_PADDING - 1) (ACTION_HEIGHT - 1);       \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "multiparty" 0.0;                                    \
+            inherit: "default" 0.0;                                     \
+            rel2.offset: (-BORDER_PADDING - ITEM_PADDING -LIST_ICON_SIZE - 1) (ACTION_HEIGHT - 1); \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "elm.text."##id".name";                                  \
+         type: TEXT;                                                    \
+         mouse_events: 0;                                               \
+         scale: 1;                                                      \
+         clip_to: "call."##id;                                          \
+         api: ""##id"_name" "remote party call name (call #"##id")";    \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "action";                                      \
+            rel1 {                                                      \
+               to: "elm.swallow.img."##id;                              \
+               relative: 1.0 0.0;                                       \
+               offset: ITEM_PADDING 0;                                  \
+            }                                                           \
+            rel2 {                                                      \
+               to: "area."##id".name";                                  \
+               relative: 1.0 1.0;                                       \
+               offset: -1 -CALL_TEXT_OFFSET;                            \
+            }                                                           \
+            text {                                                      \
+               text: "Gustavo Barbieri";                                \
+               font: FONT_NORMAL;                                       \
+               size: SIZE_MEDIUM;                                       \
+               size_range: SIZE_MEDIUM SIZE_MEDIUM;                     \
+               fit: 1 1;                                                \
+               max: 0 1;                                                \
+               align: 0.0 1.0;                                          \
+               ellipsis: 0.0;                                           \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "held" 0.0;                                          \
+            inherit: "default" 0.0;                                     \
+            color_class: "secondary";                                   \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      part {                                                            \
+         name: "elm.text."##id".status";                                \
+         type: TEXT;                                                    \
+         mouse_events: 0;                                               \
+         scale: 1;                                                      \
+         clip_to: "call."##id;                                          \
+         api: ""##id"_status" "call status (call #"##id")";             \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "secondary";                                   \
+            fixed: 1 1;                                                 \
+            align: 0.0 0.0;                                             \
+            rel1 {                                                      \
+               to_x: "elm.swallow.img."##id;                            \
+               to_y: "elm.text."##id".name";                            \
+               relative: 1.0 1.0;                                       \
+               offset: ITEM_PADDING -SEPARATOR_HEIGHT;                  \
+            }                                                           \
+            rel2 {                                                      \
+               to: "elm.swallow.img."##id;                              \
+               relative: 1.0 1.0;                                       \
+               offset: ITEM_PADDING -1;                                 \
+            }                                                           \
+            text {                                                      \
+               text: "calling...";                                      \
+               font: FONT_NORMAL;                                       \
+               size: SIZE_MEDIUM;                                       \
+               min: 1 1;                                                \
+               align: 0.0 0.0;                                          \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      part {                                                            \
+         name: "elm.text."##id".elapsed";                               \
+         type: TEXT;                                                    \
+         mouse_events: 0;                                               \
+         scale: 1;                                                      \
+         clip_to: "call."##id;                                          \
+         api: "1_elapsed" "call elapsed formatted time (call #"##id")"; \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "secondary";                                       \
+            fixed: 1 1;                                                 \
+            align: 0.0 0.0;                                             \
+            rel1 {                                                      \
+               to: "elm.text."##id".status";                            \
+               relative: 1.0 0.0;                                       \
+               offset: ITEM_PADDING 0;                                  \
+            }                                                           \
+            rel2 {                                                      \
+               to: "elm.text."##id".status";                            \
+               relative: 1.0 1.0;                                       \
+               offset: ITEM_PADDING -1;                                 \
+            }                                                           \
+            text {                                                      \
+               text: "01:23";                                           \
+               font: FONT_NORMAL;                                       \
+               size: SIZE_MEDIUM;                                       \
+               min: 1 1;                                                \
+               align: 0.0 0.0;                                          \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      part {                                                            \
+         name: "elm.swallow.border."##id;                               \
+         type: RECT;                                                    \
+         scale: 1;                                                      \
+         mouse_events: 0;                                               \
+         clip_to: "call."##id;                                          \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "action";                                      \
+            rel1 {                                                      \
+               to: "elm.swallow.img."##id;                              \
+               relative: 0.0 0.0;                                       \
+               offset: -1 -1;                                           \
+            }                                                           \
+            rel2 {                                                      \
+               to: "elm.swallow.img."##id;                              \
+               relative: 1.0 1.0;                                       \
+               offset: 0 0;                                             \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      part {                                                            \
+         name: "elm.swallow.img.bg".#id;                                \
+         type: RECT;                                                    \
+         scale: 1;                                                      \
+         mouse_events: 0;                                               \
+         clip_to: "call."##id;                                          \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "primary";                                     \
+            rel1 {                                                      \
+               to: "elm.swallow.img."##id;                              \
+               relative: 0.0 0.0;                                       \
+               offset: 0 0;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               to: "elm.swallow.img."##id;                              \
+               relative: 1.0 1.0;                                       \
+               offset: -1 -1;                                           \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      part {                                                            \
+         name: "elm.swallow.img."##id;                                  \
+         type: SWALLOW;                                                 \
+         scale: 1;                                                      \
+         clip_to: "call."##id;                                          \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            visible: 1;                                                 \
+            min: CALL_PHOTO_SIZE CALL_PHOTO_SIZE;                       \
+            max: CALL_PHOTO_SIZE CALL_PHOTO_SIZE;                       \
+            rel1 {                                                      \
+               to: "area."##id."name";                                  \
+               relative: 0.0 0.0;                                       \
+               offset: 0 ITEM_PADDING;                                  \
+            }                                                           \
+            rel2 {                                                      \
+               to: "area."##id."name";                                  \
+               relative: 0.0 0.0;                                       \
+               offset: CALL_PHOTO_SIZE (CALL_PHOTO_SIZE + ITEM_PADDING); \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      programs {                                                        \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "area."##id".name";                                 \
+            action: SIGNAL_EMIT "clicked,swap" "call";                  \
+         }                                                              \
+         program {                                                      \
+            signal: "state,"##id",held";                                \
+            source: "call";                                             \
+            action: STATE_SET "held" 0.0;                               \
+            transition: ACCELERATE 0.1;                                 \
+            target: "elm.text."##id".name";                             \
+         }                                                              \
+         program {                                                      \
+            signal: "state,"##id",active";                              \
+            source: "call";                                             \
+            action: STATE_SET "default" 0.0;                            \
+            transition: ACCELERATE 0.1;                                 \
+            target: "elm.text."##id".name";                             \
+         }                                                              \
+                                                                        \
+      }
+
+      CALL("1", 0);
+      CALL("2", CALL_HEIGHT + SEPARATOR_HEIGHT);
+
+      programs {
+         program {
+            signal: "calls,1";
+            source: "call";
+            action: STATE_SET "hidden" 0.0;
+            transition: ACCELERATE 0.1;
+            target: "call.2";
+         }
+         program {
+            signal: "calls,2";
+            source: "call";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.1;
+            target: "call.2";
+         }
+      }
+
+      SEPARATOR("actions", "clipper.actions", 0.0, -SEPARATOR_HEIGHT, "bg.actions");
+
+      part {
+         name: "bg.actions";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "clipper.keypad-hidden";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: WIDTH ACTION_HEIGHT;
+            max: WIDTH 99999; /* keep it tight centered */
+            fixed: 1 1;
+            rel1 {
+               to: "bg.buttons";
+               relative: 0.0 0.0;
+               offset: 0 (-ACTION_HEIGHT - SEPARATOR_HEIGHT);
+            }
+            rel2 {
+               to: "bg.buttons";
+               relative: 1.0 0.0;
+               offset: -1 -SEPARATOR_HEIGHT;
+            }
+         }
+      }
+      part {
+         name: "clipper.actions";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "clipper.keypad-hidden";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+      }
+      programs {
+         program {
+            name: "enable,actions1";
+            signal: "enable,actions";
+            source: "call";
+            action: ACTION_STOP;
+            target: "disable,actions1";
+            target: "disable,actions2";
+            after: "enable,actions2";
+         }
+         program {
+            name: "enable,actions2";
+            action: STATE_SET "visible" 0.0;
+            transition: DECELERATE 0.3;
+            target: "clipper.actions";
+         }
+
+         program {
+            name: "disable,actions1";
+            signal: "disable,actions";
+            source: "call";
+            action: ACTION_STOP;
+            target: "enable,actions1";
+            target: "enable,actions2";
+            after: "disable,actions2";
+         }
+         program {
+            name: "disable,actions2";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "clipper.actions";
+         }
+      }
+
+#define ACTION_BUTTON(id, img, r1, r2)                                  \
+      part {                                                            \
+         name: "clipper."##id;                                          \
+         type: RECT;                                                    \
+         clip_to: "clipper.actions";                                    \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            rel1.to: "button."##id;                                     \
+            rel2.to: "button."##id;                                     \
+         }                                                              \
+         description {                                                  \
+            state: "disabled" 0.0;                                      \
+            inherit: "default" 0.0;                                     \
+            color_class: "disabled";                                    \
+         }                                                              \
+         description {                                                  \
+            state: "hidden" 0.0;                                        \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 0;                                       \
+            visible: 0;                                                 \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: "clipper."##id;                                       \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            min: ACTION_HEIGHT ACTION_HEIGHT;                          \
+            max: ACTION_HEIGHT ACTION_HEIGHT;                          \
+            fixed: 1 1;                                                 \
+            rel1 {                                                      \
+               to: "bg.actions";                                        \
+               relative: r1;                                            \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.actions";                                        \
+               relative: r2;                                            \
+               offset: -1 -1;                                           \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button.ico."##id;                                       \
+         type: IMAGE;                                                   \
+         mouse_events: 0;                                               \
+         clip_to: "clipper."##id;                                       \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "action";                                      \
+            min: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            max: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            fixed: 1 1;                                                 \
+            rel1.to: "button."##id;                                     \
+            rel2.to: "button."##id;                                     \
+            image.normal: "ico_"##img".png";                            \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color_class: "bg";                                          \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "blocker."##id;                                          \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: "clipper."##id;                                       \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 0 0 0 0;                                             \
+            visible: 0;                                                 \
+            rel1.to: "button."##id;                                     \
+            rel2.to: "button."##id;                                     \
+         }                                                              \
+         description {                                                  \
+            state: "disabled" 0.0;                                      \
+            inherit: "default" 0.0;                                     \
+            visible: 1;                                                 \
+         }                                                              \
+      }                                                                 \
+      programs {                                                        \
+         program {                                                      \
+            signal: "mouse,up,1";                                       \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "released,"##id "call";                 \
+            after: "show_up_"##id;                                      \
+            api: id"_released" id" was released";                       \
+         }                                                              \
+         program {                                                      \
+            name: "show_up_"##id;                                       \
+            action: STATE_SET "default" 0.0;                            \
+            transition: DECELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "button.ico."##id;                                  \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1";                                     \
+            source: "button."##id;                                      \
+            after: "show_down_"##id;                                    \
+            action: SIGNAL_EMIT "pressed,"##id "call";                  \
+            api: id"_pressed" id" was pressed";                         \
+         }                                                              \
+         program {                                                      \
+            name: "show_down_"##id;                                     \
+            action: STATE_SET "pressed" 0.0;                            \
+            transition: ACCELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "button.ico."##id;                                  \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "call";                  \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+         program {                                                      \
+            signal: "disable,"##id;                                     \
+            source: "call";                                             \
+            action: STATE_SET "disabled" 0.0;                           \
+            target: "blocker."##id;                                     \
+            target: "clipper."##id;                                     \
+            api: id"_disable" "disable "##id;                           \
+         }                                                              \
+         program {                                                      \
+            signal: "enable,"##id;                                      \
+            source: "call";                                             \
+            action: STATE_SET "default" 0.0;                            \
+            target: "blocker."##id;                                     \
+            target: "clipper."##id;                                     \
+            api: id"_enable" "enable "##id;                             \
+         }                                                              \
+      }
+
+#define ACTION_HIDEABLE(id, img, r1, r2)                                \
+      part {                                                            \
+         name: "clipper."##id;                                          \
+         type: RECT;                                                    \
+         clip_to: "clipper.actions";                                    \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            rel1.to: "button."##id;                                     \
+            rel2.to: "button."##id;                                     \
+         }                                                              \
+         description {                                                  \
+            state: "hidden" 0.0;                                        \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 0;                                       \
+            visible: 0;                                                 \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: "clipper."##id;                                       \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            min: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            max: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            fixed: 1 1;                                                 \
+            rel1 {                                                      \
+               to: "bg.actions";                                        \
+               relative: r1;                                            \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.actions";                                        \
+               relative: r2;                                            \
+               offset: -1 -1;                                           \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button.ico."##id;                                       \
+         type: IMAGE;                                                   \
+         mouse_events: 0;                                               \
+         clip_to: "clipper."##id;                                       \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "action";                                      \
+            min: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            max: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            fixed: 1 1;                                                 \
+            rel1.to: "button."##id;                                     \
+            rel2.to: "button."##id;                                     \
+            image.normal: "ico_"##img".png";                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color_class: "bg";                                          \
+         }                                                              \
+      }                                                                 \
+      programs {                                                        \
+         program {                                                      \
+            signal: "mouse,up,1";                                       \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "released,"##id "call";                 \
+            after: "show_up_"##id;                                      \
+            api: id"_released" id" was released";                       \
+         }                                                              \
+         program {                                                      \
+            name: "show_up_"##id;                                       \
+            action: STATE_SET "default" 0.0;                            \
+            transition: DECELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "button.ico."##id;                                  \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1";                                     \
+            source: "button."##id;                                      \
+            after: "show_down_"##id;                                    \
+            action: SIGNAL_EMIT "pressed,"##id "call";                  \
+            api: id"_pressed" id" was pressed";                         \
+         }                                                              \
+         program {                                                      \
+            name: "show_down_"##id;                                     \
+            action: STATE_SET "pressed" 0.0;                            \
+            transition: ACCELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "button.ico."##id;                                  \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "call";                  \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+         program {                                                      \
+            name: "hide_"##id;                                          \
+            signal: "hide,"##id;                                        \
+            source: "call";                                             \
+            action: STATE_SET "hidden" 0.0;                             \
+            target: "clipper."##id;                                     \
+            api: id"_hide" "hide "##id;                                 \
+         }                                                              \
+         program {                                                      \
+            name: "show_"##id;                                          \
+            signal: "show,"##id;                                        \
+            source: "call";                                             \
+            action: STATE_SET "default" 0.0;                            \
+            target: "clipper."##id;                                     \
+            api: id"_show" "show "##id;                                 \
+         }                                                              \
+      }
+
+#define ACTION_TOGGLE(id, img, r1, r2)                                  \
+      part {                                                            \
+         name: "clipper."##id;                                          \
+         type: RECT;                                                    \
+         clip_to: "clipper.actions";                                    \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            rel1.to: "button."##id;                                     \
+            rel2.to: "button."##id;                                     \
+         }                                                              \
+         description {                                                  \
+            state: "disabled" 0.0;                                      \
+            inherit: "default" 0.0;                                     \
+            color_class: "disabled";                                    \
+         }                                                              \
+         description {                                                  \
+            state: "hidden" 0.0;                                        \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 0;                                       \
+            visible: 0;                                                 \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: "clipper.toggle."##id;                                \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            min: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            max: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            fixed: 1 1;                                                 \
+            rel1 {                                                      \
+               to: "bg.actions";                                        \
+               relative: r1;                                            \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.actions";                                        \
+               relative: r2;                                            \
+               offset: -1 -1;                                           \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button.ico."##id;                                       \
+         type: IMAGE;                                                   \
+         mouse_events: 0;                                               \
+         clip_to: "clipper.toggle."##id;                                \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "action";                                      \
+            min: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            max: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            fixed: 1 1;                                                 \
+            rel1.to: "button."##id;                                     \
+            rel2.to: "button."##id;                                     \
+            image.normal: "ico_"##img".png";                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color_class: "bg";                                          \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "clipper.toggle."##id;                                   \
+         type: RECT;                                                    \
+         clip_to: "clipper."##id;                                       \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            visible: 1;                                                 \
+         }                                                              \
+         description {                                                  \
+            state: "on" 0.0;                                            \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 0;                                       \
+            visible: 0;                                                 \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button.toggle."##id;                                    \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            min: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            max: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            fixed: 1 1;                                                 \
+            visible: 0;                                                 \
+            rel1 {                                                      \
+               to: "bg.actions";                                        \
+               relative: r1;                                            \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.actions";                                        \
+               relative: r2;                                            \
+               offset: -1 -1;                                           \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "on" 0.0;                                            \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+            visible: 1;                                                 \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button.toggle.ico."##id;                                \
+         type: IMAGE;                                                   \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "action";                                      \
+            min: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            max: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            fixed: 1 1;                                                 \
+            visible: 0;                                                 \
+            rel1.to: "button.toggle."##id;                              \
+            rel2.to: "button.toggle."##id;                              \
+            image.normal: "ico_"##img".png";                           \
+         }                                                              \
+         description {                                                  \
+            state: "on" 0.0;                                            \
+            inherit: "default" 0.0;                                     \
+            color_class: "bg";                                          \
+            visible: 1;                                                 \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "blocker."##id;                                          \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: "clipper."##id;                                       \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 0 0 0 0;                                             \
+            visible: 0;                                                 \
+            rel1.to: "button."##id;                                     \
+            rel2.to: "button."##id;                                     \
+         }                                                              \
+         description {                                                  \
+            state: "disabled" 0.0;                                      \
+            inherit: "default" 0.0;                                     \
+            visible: 1;                                                 \
+         }                                                              \
+      }                                                                 \
+      programs {                                                        \
+         program {                                                      \
+            signal: "mouse,up,1";                                       \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "released,"##id "call";                 \
+            api: id"_released" id" was released";                       \
+            after: "show_up_"##id;                                      \
+         }                                                              \
+         program {                                                      \
+            name: "show_up_"##id;                                       \
+            action: STATE_SET "default" 0.0;                            \
+            transition: DECELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "button.ico."##id;                                  \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1";                                     \
+            source: "button."##id;                                      \
+            after: "show_down_"##id;                                    \
+            action: SIGNAL_EMIT "pressed,"##id "call";                  \
+            api: id"_pressed" id" was pressed";                         \
+         }                                                              \
+         program {                                                      \
+            name: "show_down_"##id;                                     \
+            action: STATE_SET "pressed" 0.0;                            \
+            transition: ACCELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "button.ico."##id;                                  \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "call";                  \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button.toggle."##id;                               \
+            action: SIGNAL_EMIT "clicked,"##id "call";                  \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+         program {                                                      \
+            signal: "disable,"##id;                                     \
+            source: "call";                                             \
+            action: STATE_SET "disabled" 0.0;                           \
+            target: "blocker."##id;                                     \
+            target: "clipper."##id;                                     \
+            api: id"_disable" "disable "##id;                           \
+         }                                                              \
+         program {                                                      \
+            signal: "enable,"##id;                                      \
+            source: "call";                                             \
+            action: STATE_SET "default" 0.0;                            \
+            target: "blocker."##id;                                     \
+            target: "clipper."##id;                                     \
+            api: id"_enable" "enable "##id;                             \
+         }                                                              \
+         program {                                                      \
+            signal: "toggle,on,"##id;                                   \
+            source: "call";                                             \
+            action: STATE_SET "on" 0.0;                                 \
+            target: "clipper.toggle."##id;                              \
+            target: "button.toggle."##id;                               \
+            target: "button.toggle.ico."##id;                           \
+            api: id"_toggle_on" "toggle on "##id;                       \
+         }                                                              \
+         program {                                                      \
+            signal: "toggle,off,"##id;                                  \
+            source: "call";                                             \
+            action: STATE_SET "default" 0.0;                            \
+            target: "clipper.toggle."##id;                              \
+            target: "button.toggle."##id;                               \
+            target: "button.toggle.ico."##id;                           \
+            api: id"_toggle_off" "toggle off "##id;                     \
+         }                                                              \
+      }
+
+      ACTION_TOGGLE("mute",    "mute",    0.00 0.0, 0.25 1.0);
+      ACTION_TOGGLE("speaker", "speaker", 0.25 0.0, 0.50 1.0);
+      ACTION_BUTTON("keypad",  "keypad",  0.50 0.0, 0.75 1.0);
+
+      ACTION_HIDEABLE("merge",    "merge",  0.75 0.0, 1.0 1.0);
+      ACTION_HIDEABLE("add-call", "add_call", 0.75 0.0, 1.0 1.0);
+
+#undef ACTION_BUTTON
+#undef ACTION_TOGGLE
+
+      SEPARATOR("answer", "clipper.answer", 0.0, -SEPARATOR_HEIGHT, "button.answer");
+      SEPARATOR("hangup", "clipper.multiparty-details-hidden", 0.0, -SEPARATOR_HEIGHT, "button.hangup");
+
+      programs {
+         program {
+            signal: "enable,merge";
+            source: "call";
+            after: "hide_add-call";
+            after: "show_merge";
+         }
+         program {
+            signal: "disable,merge";
+            source: "call";
+            after: "show_add-call";
+            after: "hide_merge";
+         }
+      }
+
+      part {
+         name: "clipper.keypad-hidden";
+         type: RECT;
+         clip_to: "clipper.multiparty-details-hidden";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "clipper.keypad-visible";
+         type: RECT;
+         clip_to: "clipper.multiparty-details-hidden";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+            rel2.offset: -1 (-ACTION_HEIGHT - SEPARATOR_HEIGHT);
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+      }
+
+
+      /* keypad */
+      SEPARATOR("hide-keypad", "clipper.keypad-visible", 0.0, -SEPARATOR_HEIGHT, "button.hide-keypad");
+      SEPARATOR("keypad", "clipper.keypad-visible", 0.0, -SEPARATOR_HEIGHT, "bg.keypad");
+
+      part {
+         name: "bg.keypad";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "clipper.keypad-visible";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: WIDTH (HEIGHT - 2 * CALL_HEIGHT - 2 * ACTION_HEIGHT - 4 * SEPARATOR_HEIGHT);
+            max: WIDTH (HEIGHT - 2 * CALL_HEIGHT - 2 * ACTION_HEIGHT - 4 * SEPARATOR_HEIGHT); /* keep it tight centered */
+            rel1 {
+               relative: 0.0 0.0;
+               offset: 0 (-HEIGHT + 2 * CALL_HEIGHT + 2 * ACTION_HEIGHT + 3 * SEPARATOR_HEIGHT);
+               to_y: "button.hide-keypad";
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               offset: 0 (-SEPARATOR_HEIGHT - 1);
+               to_y: "button.hide-keypad";
+            }
+         }
+      }
+#define BUTTON(id, label, sub, ccls, r1, r2)                            \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: "clipper.keypad-visible";                             \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            rel1 {                                                      \
+               to: "bg.keypad";                                         \
+               relative: r1;                                            \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.keypad";                                         \
+               relative: r2;                                            \
+               offset: -2 -2;                                           \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "label."##id;                                            \
+         type: TEXT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: "clipper.keypad-visible";                             \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: ccls;                                          \
+            rel1.to: "button."##id;                                     \
+            rel2 {                                                      \
+               to: "button."##id;                                       \
+               relative: 1.0 0.8;                                       \
+            }                                                           \
+            text {                                                      \
+               text: label;                                             \
+               font: FONT_NORMAL;                                       \
+               size: SIZE_MEDIUM;                                       \
+               align: 0.5 0.5;                                          \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 240 240 240 255;                                     \
+            color_class: "bg";                                          \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "sub."##id;                                              \
+         type: TEXT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: "clipper.keypad-visible";                             \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "secondary";                                   \
+            rel1 {                                                      \
+               to: "button."##id;                                       \
+               relative: 0.0 0.5;                                       \
+               offset: 0 2;                                             \
+            }                                                           \
+            rel2.to: "button."##id;                                     \
+            text {                                                      \
+               text: sub;                                               \
+               font: FONT_BOLD;                                         \
+               size: SIZE_TINY;                                         \
+               align: 0.5 0.5;                                          \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 240 240 240 255;                                     \
+            color_class: "bg";                                          \
+         }                                                              \
+      }                                                                 \
+      programs {                                                        \
+         program {                                                      \
+            signal: "mouse,up,1";                                       \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "released,"##id "call";                 \
+            after: "show_up_"##id;                                      \
+            api: id"_released" id" was released";                       \
+         }                                                              \
+         program {                                                      \
+            name: "show_up_"##id;                                       \
+            action: STATE_SET "default" 0.0;                            \
+            transition: DECELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+            target: "sub."##id;                                         \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1";                                     \
+            source: "button."##id;                                      \
+            after: "show_down_"##id;                                    \
+            action: SIGNAL_EMIT "pressed,"##id "call";                  \
+            api: id"_pressed" id" was pressed";                         \
+         }                                                              \
+         program {                                                      \
+            name: "show_down_"##id;                                     \
+            action: STATE_SET "pressed" 0.0;                            \
+            transition: ACCELERATE 0.3;                                 \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+            target: "sub."##id;                                         \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "call";                  \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+      }
+
+      BUTTON("1",    "1",     "", "action", 0.000 0.0, 0.333 0.25);
+      BUTTON("2",    "2",  "ABC", "action", 0.333 0.0, 0.666 0.25);
+      BUTTON("3",    "3",  "DEF", "action", 0.666 0.0, 1.000 0.25);
+
+      BUTTON("4",    "4",  "GHI", "action", 0.000 0.25, 0.333 0.50);
+      BUTTON("5",    "5",  "JKL", "action", 0.333 0.25, 0.666 0.50);
+      BUTTON("6",    "6",  "MNO", "action", 0.666 0.25, 1.000 0.50);
+
+      BUTTON("7",    "7", "PQRS", "action", 0.000 0.50, 0.333 0.75);
+      BUTTON("8",    "8",  "TUV", "action", 0.333 0.50, 0.666 0.75);
+      BUTTON("9",    "9", "WXYZ", "action", 0.666 0.50, 1.000 0.75);
+
+      BUTTON("star", "*",     "", "secondary",  0.000 0.75, 0.333 1.00);
+      BUTTON("0",    "0",    "+", "action", 0.333 0.75, 0.666 1.00);
+      BUTTON("hash", "#",     "", "secondary",  0.666 0.75, 1.000 1.00);
+#undef BUTTON
+
+      part {
+         name: "area.hide-keypad";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "clipper.keypad-visible";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            visible: 0;
+            rel1 {
+               to_y: "button.hangup";
+               relative: 0.0 -1.0;
+               offset: 0 (HEIGHT - 2 * CALL_HEIGHT - 2 * ACTION_HEIGHT - 4 * SEPARATOR_HEIGHT);
+            }
+            rel2 {
+               to_y: "button.hangup";
+               relative: 1.0 0.0;
+               offset: -1 (HEIGHT - 2 * CALL_HEIGHT - 2 * ACTION_HEIGHT - 4 * SEPARATOR_HEIGHT - 1);
+            }
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            rel1 {
+               to_y: "button.hangup";
+               relative: 0.0 -1.0;
+               offset: 0 -SEPARATOR_HEIGHT;
+            }
+            rel2 {
+               to_y: "button.hangup";
+               relative: 1.0 0.0;
+               offset: -1 (-SEPARATOR_HEIGHT - 1);
+            }
+         }
+      }
+      part {
+         name: "button.hide-keypad";
+         type: RECT;
+         mouse_events: 1;
+         clip_to: "clipper.keypad-visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "action";
+            rel1.to_y: "area.hide-keypad";
+            rel2.to_y: "area.hide-keypad";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part {
+         name: "label.hide-keypad";
+         type: TEXT;
+         mouse_events: 0;
+         clip_to: "clipper.keypad-visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1.to: "button.hide-keypad";
+            rel2.to: "button.hide-keypad";
+            text {
+               text: "Hide Keypad";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 0.5 0.5;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+      programs {
+         program {
+            signal: "active,disconnected";
+            source: "call";
+            after: "hide_keypad";
+         }
+         program {
+            name: "hide_keypad";
+            signal: "clicked,hangup";
+            source: "call";
+            action: STATE_SET "default" 0.0;
+            target: "clipper.keypad-visible";
+            target: "clipper.keypad-hidden";
+            target: "area.hide-keypad";
+         }
+
+         program {
+            signal: "mouse,up,1";
+            source: "button.hide-keypad";
+            action: STATE_SET "default" 0.0;
+            transition: DECELERATE 0.1;
+            target: "button.hide-keypad";
+            target: "label.hide-keypad";
+         }
+         program {
+            signal: "mouse,down,1";
+            source: "button.hide-keypad";
+            action: STATE_SET "pressed" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "button.hide-keypad";
+            target: "label.hide-keypad";
+         }
+
+         program {
+            name: "hide-keypad-phase1";
+            signal: "mouse,clicked,1";
+            source: "button.hide-keypad";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "clipper.keypad-visible";
+            target: "area.hide-keypad";
+            after: "hide-keypad-phase2";
+         }
+         program {
+            name: "hide-keypad-phase2";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "clipper.keypad-hidden";
+         }
+
+         program {
+            name: "show-keypad-phase1";
+            signal: "mouse,clicked,1";
+            source: "button.keypad";
+            action: STATE_SET "alternate" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "clipper.keypad-hidden";
+            after: "show-keypad-phase2";
+         }
+         program {
+            name: "show-keypad-phase2";
+            action: STATE_SET "alternate" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "area.hide-keypad";
+            target: "clipper.keypad-visible";
+         }
+      }
+
+      /* buttons */
+      part {
+         name: "bg.buttons";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "clipper.keypad-hidden";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            rel1.to: "area.answer";
+            rel2.to: "button.hangup";
+         }
+      }
+
+      part {
+         name: "clipper.answer";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "clipper.keypad-hidden";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+      }
+      part {
+         name: "area.answer";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "clipper.answer";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            visible: 0;
+            rel1.to_y: "button.hangup";
+            rel2.to_y: "button.hangup";
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            rel1 {
+               to_y: "button.hangup";
+               relative: 0.0 -1.0;
+               offset: 0 -SEPARATOR_HEIGHT;
+            }
+            rel2 {
+               to_y: "button.hangup";
+               relative: 1.0 0.0;
+               offset: -1 (-SEPARATOR_HEIGHT - 1);
+            }
+         }
+      }
+      part {
+         name: "button.answer";
+         type: RECT;
+         mouse_events: 1;
+         clip_to: "clipper.answer";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "action";
+            rel1.to_y: "area.answer";
+            rel2.to_y: "area.answer";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part {
+         name: "label.answer";
+         type: TEXT;
+         mouse_events: 0;
+         clip_to: "clipper.answer";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1.to: "button.answer";
+            rel2.to: "button.answer";
+            text {
+               text: "Answer";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 0.5 0.5;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+      programs {
+         program {
+            signal: "mouse,up,1";
+            source: "button.answer";
+            action: SIGNAL_EMIT "released,answer" "call";
+            after: "show_up_answer";
+            api: "answer_released" "answer was released";
+         }
+         program {
+            name: "show_up_answer";
+            action: STATE_SET "default" 0.0;
+            transition: DECELERATE 0.1;
+            target: "button.answer";
+            target: "label.answer";
+         }
+         program {
+            signal: "mouse,down,1";
+            source: "button.answer";
+            after: "show_down_answer";
+            action: SIGNAL_EMIT "pressed,answer" "call";
+            api: "answer_pressed" "answer was pressed";
+         }
+         program {
+            name: "show_down_answer";
+            action: STATE_SET "pressed" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "button.answer";
+            target: "label.answer";
+         }
+         program {
+            signal: "mouse,clicked,1";
+            source: "button.answer";
+            action: SIGNAL_EMIT "clicked,answer" "call";
+            api: "answer_clicked" "answer was clicked";
+         }
+
+         program {
+            signal: "show,answer";
+            source: "call";
+            action: STATE_SET "visible" 0.0;
+            target: "area.answer";
+            target: "clipper.answer";
+            api: "answer_show" "make answer button visible";
+         }
+         program {
+            signal: "hide,answer";
+            source: "call";
+            action: STATE_SET "default" 0.0;
+            target: "area.answer";
+            target: "clipper.answer";
+            api: "answer_hide" "make answer button hidden";
+         }
+      }
+
+      part {
+         name: "button.hangup";
+         type: RECT;
+         mouse_events: 1;
+         clip_to: "clipper.multiparty-details-hidden";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "caution";
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 -ACTION_HEIGHT;
+            }
+            rel2 {
+               relative: 1 1.0;
+               offset: -1 -1;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part {
+         name: "label.hangup";
+         type: TEXT;
+         mouse_events: 0;
+         clip_to: "clipper.multiparty-details-hidden";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "caution";
+            rel1.to: "button.hangup";
+            rel2.to: "button.hangup";
+            text {
+               text: "Hangup";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 0.5 0.5;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+      programs {
+         program {
+            signal: "mouse,up,1";
+            source: "button.hangup";
+            action: SIGNAL_EMIT "released,hangup" "call";
+            api: "hangup_released" "hangup was released";
+            after: "show_up_hangup";
+         }
+         program {
+            name: "show_up_hangup";
+            action: STATE_SET "default" 0.0;
+            transition: DECELERATE 0.1;
+            target: "button.hangup";
+            target: "label.hangup";
+         }
+         program {
+            signal: "mouse,down,1";
+            source: "button.hangup";
+            after: "show_down_hangup";
+            action: SIGNAL_EMIT "pressed,hangup" "call";
+            api: "hangup_pressed" "hangup was pressed";
+         }
+         program {
+            name: "show_down_hangup";
+            action: STATE_SET "pressed" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "button.hangup";
+            target: "label.hangup";
+         }
+         program {
+            signal: "mouse,clicked,1";
+            source: "button.hangup";
+            action: SIGNAL_EMIT "clicked,hangup" "call";
+            api: "hangup_clicked" "hangup was clicked";
+         }
+      }
+
+      /* multiparty options */
+      part {
+         name: "clipper.multiparty-details-hidden";
+         type: RECT;
+         clip_to: "clipper.waiting-hidden";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "clipper.multiparty-details-visible";
+         type: RECT;
+         clip_to: "clipper.waiting-hidden";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+      }
+      part {
+         name: "label.multiparty";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         clip_to: "clipper.multiparty-details-visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            align: 0.0 0.5;
+            rel1.offset: BORDER_PADDING 0;
+            rel2 {
+               relative: 1.0 0.0;
+               offset: (-BORDER_PADDING - 1) ACTION_HEIGHT;
+            }
+            text {
+               text: "Conference";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               size_range: SIZE_TINY SIZE_MEDIUM;
+               fit: 1 1;
+               align: 0.5 0.5;
+               ellipsis: 0.0;
+            }
+         }
+      }
+      SEPARATOR("multiparty-details", "clipper.multiparty-details-visible", 0.0, -SEPARATOR_HEIGHT, "elm.swallow.multiparty-details");
+
+      part {
+         name: "elm.swallow.multiparty-details";
+         type: SWALLOW;
+         mouse_events: 1;
+         clip_to: "clipper.multiparty-details-visible";
+         api: "multiparty_details" "swallow to hold the multiparty details";
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 (ACTION_HEIGHT + SEPARATOR_HEIGHT);
+            }
+            rel2 {
+               relative: 1.0 2.0;
+               offset: -1 (-ACTION_HEIGHT - SEPARATOR_HEIGHT);
+            }
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            rel1 {
+               relative: 0.0 0.0;
+               offset: 0 (ACTION_HEIGHT + SEPARATOR_HEIGHT);
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -1 (-ACTION_HEIGHT - SEPARATOR_HEIGHT);
+            }
+         }
+      }
+
+      SEPARATOR("multiparty-details-back", "clipper.multiparty-details-visible", 0.0, -SEPARATOR_HEIGHT, "button.multiparty-details-back");
+      part {
+         name: "button.multiparty-details-back";
+         type: RECT;
+         mouse_events: 1;
+         clip_to: "clipper.multiparty-details-visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "bg";
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 -ACTION_HEIGHT;
+            }
+            rel2 {
+               relative: 1 1.0;
+               offset: -1 -1;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "action";
+         }
+      }
+      part {
+         name: "label.multiparty-details-back";
+         type: TEXT;
+         mouse_events: 0;
+         clip_to: "clipper.multiparty-details-visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1.to: "button.multiparty-details-back";
+            rel2.to: "button.multiparty-details-back";
+            text {
+               text: "Back";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 0.5 0.5;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+      programs {
+         program {
+            signal: "mouse,up,1";
+            source: "button.multiparty-details-back";
+            action: STATE_SET "default" 0.0;
+            transition: DECELERATE 0.1;
+            target: "button.multiparty-details-back";
+            target: "label.multiparty-details-back";
+         }
+         program {
+            signal: "mouse,down,1";
+            source: "button.multiparty-details-back";
+            action: STATE_SET "pressed" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "button.multiparty-details-back";
+            target: "label.multiparty-details-back";
+         }
+         program {
+            signal: "mouse,clicked,1";
+            source: "button.multiparty-details-back";
+            action: SIGNAL_EMIT "hide,multiparty-details" "call";
+         }
+        program {
+            signal: "multiparty,private";
+            source: "call";
+            action: SIGNAL_EMIT "hide,multiparty-details" "call";
+        }
+      }
+
+      programs {
+         program {
+            name: "hide-multiparty-details-phase1";
+            signal: "hide,multiparty-details";
+            source: "call";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "clipper.multiparty-details-visible";
+            target: "elm.swallow.multiparty-details";
+            after: "hide-multiparty-details-phase2";
+            api: "multiparty_details_hide" "make multiparty-details popup hidden";
+         }
+         program {
+            name: "hide-multiparty-details-phase2";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "clipper.multiparty-details-hidden";
+         }
+
+        program {
+            signal: "clicked,2,multiparty";
+            source: "call";
+            after: "show-multiparty-details-phase1";
+         }
+
+         program {
+            name: "show-multiparty-details-phase1";
+            signal: "clicked,1,multiparty"; /* just show on user request */
+            source: "call";
+            action: STATE_SET "alternate" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "clipper.multiparty-details-hidden";
+            after: "show-multiparty-details-phase2";
+            api: "multiparty_details_show" "make multiparty-details popup visible";
+         }
+         program {
+            name: "show-multiparty-details-phase2";
+            action: STATE_SET "alternate" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "elm.swallow.multiparty-details";
+            target: "clipper.multiparty-details-visible";
+         }
+      }
+
+      /* waiting popup */
+      part {
+         name: "clipper.waiting-hidden";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "clipper.waiting-visible";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+      }
+      part {
+         name: "area.waiting";
+         type: RECT;
+         mouse_events: 1; /* block events going to the call screen below it */
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            visible: 0;
+            rel1.relative: 0.0 1.0;
+            rel2.relative: 1.0 2.0;
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            rel1.relative: 0.0 0.0;
+            rel2.relative: 1.0 1.0;
+         }
+      }
+
+#define BUTTON(id, label, colcls, prev)                                 \
+      SEPARATOR(id, "clipper."##id, 0.0, -SEPARATOR_HEIGHT, "button."##id); \
+      part {                                                            \
+         name: "clipper."##id;                                          \
+         type: RECT;                                                    \
+         clip_to: "clipper.waiting-visible";                            \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+         description {                                                  \
+            state: "hidden" 0.0;                                        \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 0;                                       \
+            visible: 0;                                                 \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: "clipper."##id;                                       \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: colcls;                                        \
+            rel1 {                                                      \
+               to: prev;                                                \
+               relative: 0.0 0.0;                                       \
+               offset: 0 -ACTION_HEIGHT;                                \
+            }                                                           \
+            rel2 {                                                      \
+               to: prev;                                                \
+               relative: 1.0 0.0;                                       \
+               offset: -1 -1;                                           \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+         description {                                                  \
+            state: "hidden" 0.0;                                        \
+            inherit: "default" 0.0;                                     \
+            rel1 {                                                      \
+               to: prev;                                                \
+               relative: 0.0 0.0;                                       \
+               offset: 0 SEPARATOR_HEIGHT;                              \
+            }                                                           \
+            rel2 {                                                      \
+               to: prev;                                                \
+               relative: 1.0 0.0;                                       \
+               offset: -1 (ACTION_HEIGHT + SEPARATOR_HEIGHT - 1);       \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "label."##id;                                            \
+         type: TEXT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: "clipper."##id;                                       \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: colcls;                                        \
+            rel1 {                                                      \
+               to: "button."##id;                                       \
+               offset: BORDER_PADDING 0;                                \
+            }                                                           \
+            rel2 {                                                      \
+               to: "button."##id;                                       \
+               offset: (-BORDER_PADDING - 1) -1;                        \
+            }                                                           \
+            text {                                                      \
+               text: label;                                             \
+               font: FONT_NORMAL;                                       \
+               size: SIZE_LARGE;                                        \
+               align: 0.5 0.5;                                          \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color_class: "bg";                                          \
+         }                                                              \
+      }                                                                 \
+      programs {                                                        \
+         program {                                                      \
+            signal: "mouse,up,1";                                       \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "released,"##id "call";                 \
+            api: id"_released" id" was released";                       \
+            after: "show_up_"##id;                                      \
+         }                                                              \
+         program {                                                      \
+            name: "show_up_"##id;                                       \
+            action: STATE_SET "default" 0.0;                            \
+            transition: DECELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1";                                     \
+            source: "button."##id;                                      \
+            after: "show_down_"##id;                                    \
+            action: SIGNAL_EMIT "pressed,"##id "call";                  \
+            api: id"_pressed" id" was pressed";                         \
+         }                                                              \
+         program {                                                      \
+            name: "show_down_"##id;                                     \
+            action: STATE_SET "pressed" 0.0;                            \
+            transition: ACCELERATE 0.3;                                 \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "call";                  \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+      }
+
+      BUTTON("waiting-hangup", "Decline", "action", "separator.primary.hold-answer");
+      BUTTON("hold-answer", "Hold + Answer", "action", "separator.primary.hangup-answer");
+      BUTTON("hangup-answer", "Hangup + Answer", "caution", "separator.primary.waiting-last");
+#undef BUTTON
+
+      SEPARATOR("waiting-last", "clipper.waiting-visible", 1.0, 0, "");
+      SEPARATOR("waiting", "clipper.waiting-visible", 0.0, 0, "area.waiting");
+      part {
+         name: "elm.text.waiting";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         clip_to: "clipper.waiting-visible";
+         api: "waiting" "waiting call name";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               to: "elm.swallow.waiting.photo";
+               relative: 1.0 0.0;
+               offset: ITEM_PADDING 0;
+            }
+            rel2 {
+               to: "notification.bar";
+               relative: 1.0 1.0;
+               offset: -BORDER_PADDING ACTION_HEIGHT;
+            }
+            text {
+               text: "Someone";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               size_range: SIZE_TINY SIZE_MEDIUM;
+               fit: 1 1;
+               align: 0.0 0.5;
+               ellipsis: 0.0;
+            }
+         }
+      }
+
+      part {
+         name: "waiting.img.border";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         clip_to: "clipper.waiting-visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               to: "elm.swallow.waiting.photo";
+               relative: 0.0 0.0;
+               offset: -1 -1;
+            }
+            rel2 {
+               to: "elm.swallow.waiting.photo";
+               relative: 1.0 1.0;
+               offset: 0 0;
+            }
+         }
+      }
+
+      part {
+         name: "waiting.img.bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         clip_to: "clipper.waiting-visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+            rel1 {
+               to: "elm.swallow.waiting.photo";
+               relative: 0.0 0.0;
+               offset: 0 0;
+            }
+            rel2 {
+               to: "elm.swallow.waiting.photo";
+               relative: 1.0 1.0;
+               offset: -1 -1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.swallow.waiting.photo";
+         type: SWALLOW;
+         scale: 1;
+         clip_to: "clipper.waiting-visible";
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            min: CALL_PHOTO_SIZE CALL_PHOTO_SIZE;
+            max: CALL_PHOTO_SIZE CALL_PHOTO_SIZE;
+            rel1 {
+               to: "notification.bar";
+               relative: 0.0 1.0;
+               offset: BORDER_PADDING ITEM_PADDING;
+            }
+            rel2 {
+               to: "notification.bar";
+               relative: 0.0 1.0;
+               offset: (CALL_PHOTO_SIZE + BORDER_PADDING) (CALL_PHOTO_SIZE + ITEM_PADDING);
+            }
+         }
+      }
+
+      part {
+         name: "label.waiting";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         clip_to: "clipper.waiting-visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "secondary";
+            fixed: 1 1;
+            align: 0.0 0.0;
+            rel1 {
+               to: "elm.text.waiting";
+               relative: 0.0 1.0;
+               offset: 0 -20;
+            }
+            rel2 {
+               to: "elm.text.waiting";
+               relative: 0.0 1.0;
+               offset: 0 -1;
+            }
+            text {
+               text: "Waiting...";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               min: 1 1;
+               align: 0.0 0.0;
+            }
+         }
+      }
+
+      programs {
+         program {
+            name: "hide-waiting-phase1";
+            signal: "hide,waiting";
+            source: "call";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "clipper.waiting-visible";
+            after: "hide-waiting-phase2";
+            api: "waiting_hide" "make waiting popup hidden";
+         }
+         program {
+            name: "hide-waiting-phase2";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "area.waiting";
+            after: "hide-waiting-phase3";
+         }
+         program {
+            name: "hide-waiting-phase3";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "clipper.waiting-hidden";
+         }
+
+         program {
+            name: "show-waiting-phase1";
+            signal: "show,waiting";
+            source: "call";
+            action: STATE_SET "alternate" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "clipper.waiting-hidden";
+            after: "show-waiting-phase2";
+            api: "waiting_show" "make waiting popup visible";
+         }
+         program {
+            name: "show-waiting-phase2";
+            action: STATE_SET "alternate" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "area.waiting";
+            after: "show-waiting-phase3";
+         }
+         program {
+            name: "show-waiting-phase3";
+            action: STATE_SET "alternate" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "clipper.waiting-visible";
+         }
+
+         program {
+            signal: "enable,merge";
+            source: "call";
+            action: STATE_SET "hidden" 0.0;
+            target: "button.hold-answer";
+            target: "clipper.hold-answer";
+         }
+         program {
+            signal: "disable,merge";
+            source: "call";
+            action: STATE_SET "default" 0.0;
+            target: "button.hold-answer";
+            target: "clipper.hold-answer";
+         }
+      }
+
+#undef SEPARATOR
+   }
+
+}
+
+group {
+   name: "elm/layout/ofono-efl/activecall";
+
+   /*
+    * Represents the active call in the other screens (not callscreen)
+    *
+    * Parts:
+    *   TEXT: elm.text.name
+    *   TEXT: elm.text.phone.type
+    *   TEXT: elm.text.status
+    *   TEXT: elm.text.elapsed
+    * Signals:
+    *   Emit (source is "call"):
+    *     clicked:
+    * Listen (source is "call"):
+    *     show,multiparty: active call is multiparty
+    *     hide,multiparty: active call is not multiparty
+    *     state,<STATE>:   state changed to <STATE>
+    *
+    * Where <STATE> is: disconnected, active, held, dialing, alerting,
+    * incoming, waiting.
+    */
+
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            max: 99999 (ACTION_HEIGHT / 2);
+            min: 0 (ACTION_HEIGHT / 2);
+            align: 0.5 0.0;
+         }
+      }
+
+      programs {
+         program {
+            signal: "mouse,clicked,1";
+            source: "bg";
+            action: SIGNAL_EMIT "clicked" "call";
+         }
+      }
+
+      part {
+         name: "elm.text.name";
+         type: TEXT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+            rel1 {
+               offset: BORDER_PADDING 0;
+            }
+            rel2 {
+               to_y: "bg";
+               to_x: "elm.text.elapsed";
+               relative: 0.0 1.0;
+               offset: (-ITEM_PADDING - 1) -1;
+            }
+            text {
+               text: "Gustavo Barbieri";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 0.0 0.5;
+               ellipsis: 0.0;
+            }
+         }
+      }
+
+      part {
+         name: "elm.text.elapsed";
+         type: TEXT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+            align: 1.0 0.5;
+            fixed: 1 1;
+            rel1 {
+               relative: 1.0 0.0;
+               offset: (-BORDER_PADDING - 1) 0;
+            }
+            rel2 {
+               to: "bg";
+               offset: (-BORDER_PADDING - 1) -1;
+            }
+            text {
+               text: "12:34";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               min: 1 0;
+               align: 1.0 0.5;
+            }
+         }
+      }
+   }
+}
+
+group {
+
+   name: "elm/icon/multiparty/default";
+
+   images{
+      image: "ico_multiparty.png" COMP;
+   }
+
+   parts {
+      part {
+         name : "base";
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            aspect: 1.0 1.0;
+            color_class: "action";
+            aspect_preference: BOTH;
+            image.normal: "ico_multiparty.png";
+         }
+      }
+   }
+}
diff --git a/data/themes/default/colors.edc b/data/themes/default/colors.edc
new file mode 100644 (file)
index 0000000..fcd63ec
--- /dev/null
@@ -0,0 +1,34 @@
+color_classes {
+   color_class {
+      name: "bg";
+      color: 255 255 255 255;
+   }
+
+   color_class {
+      name: "primary";
+      color: 225 225 225 255;
+   }
+
+   color_class {
+      name: "secondary";
+      color: 120 120 120 255;
+   }
+#define TEXTBLOCK_COLOR_SECONDARY "#787878"
+
+   color_class {
+      name: "action";
+      color: 36 36 36 255;
+   }
+#define TEXTBLOCK_COLOR_ACTION "#242424"
+
+   color_class {
+      name: "caution";
+      color: 193 39 44 255;
+   }
+#define TEXTBLOCK_COLOR_CAUTION "#c1272c"
+
+   color_class {
+      name: "disabled";
+      color: 255 255 255 64;
+   }
+}
diff --git a/data/themes/default/compose.edc b/data/themes/default/compose.edc
new file mode 100644 (file)
index 0000000..9a214e7
--- /dev/null
@@ -0,0 +1,2232 @@
+group {
+   name: "elm/layout/ofono-efl/compose";
+
+   /*
+    * Represents the messages compose layout with actions and swallows.
+    *
+    * Parts:
+    *
+    * TEXT: elm.text.name - Name of the contact/number.
+    * TEXT: elm.text.size - Size of the message (number of characters)
+    * SWALLOW: elm.swallow.destination - Text Entry - Contacts that the message will be sent
+    * SWALLOW: elm.swallow.message - Text Entry - Content of the message
+    * SWALLOW: elm.swallow.genlist - Where the message thread is going to appear
+    * IMAGE: elm.img.btn.send - A Button to send the message
+    *
+    * Signals:
+    *   Emit (source is "gui"):
+    *   clicked,<ID>:  key <ID> was clicked (press and release in the key)
+    *   clicked,edit - When the edit button is cliked
+    *   clicked,edit,done - When The Button "Done" while editing is clicked
+    *   clicked,send_msg - When elm.img.btn.send is clicked
+    *
+    *   Listens (source is "gui"):
+    *   show,genlist  - Show the genlist with the current message thread
+    *   hidden,genlist - Hide the genlist
+    *   toggle,on,edit - User is editing
+    *   toggle,off,edit - User finished the editing
+    *
+    * Messages:
+    *   1 - INT_SET: tuple of message size and maximum size.
+    *
+    * Where <ID> is the name of the button
+    *
+    */
+
+   images {
+      image: "bg_keypad.jpg" COMP;
+      image: "ico_arrow_right.png" COMP;
+      image: "ico_ball.png" COMP;
+   }
+
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+         }
+      }
+
+      part {
+         name: "notification.bar";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            rel1.relative: 0.0 0.0;
+            rel2 {
+               relative: 1.0 0.0;
+               offset: -1 NOTIFICATION_BAR_HEIGHT;
+            }
+         }
+      }
+
+      part {
+         name: "button.area.clipper";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            rel1.to: "bg.buttons";
+            rel2 {
+               to: "bg.buttons";
+               offset: -1 SEPARATOR_HEIGHT;
+            }
+         }
+      }
+
+      part {
+         name: "button.clipper";
+         type: RECT;
+         clip_to: "button.area.clipper";
+         description {
+            state: "default" 0.0;
+            rel1.to: "button.area.clipper";
+            rel2.to: "button.area.clipper";
+         }
+         description {
+            state: "alternate" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "edit-button.clipper";
+         type: RECT;
+         clip_to: "button.area.clipper";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+            rel1.to: "button.area.clipper";
+            rel2.to: "button.area.clipper";
+         }
+         description {
+            state: "alternate" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+      }
+
+      part {
+         name: "edit.clipper";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            rel1.to: "bg.edit";
+            rel2 {
+               to: "bg.edit";
+               offset: -1 SEPARATOR_HEIGHT;
+            }
+         }
+      }
+
+      part {
+         name: "bg.buttons";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "button.clipper";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            fixed: 1 1;
+            min: 0 (ACTION_HEIGHT / 2);
+            rel1 {
+               to: "notification.bar";
+               relative: 0.0 1.0;
+            }
+            rel2 {
+               to_x: "bg.edit";
+               to_y: "notification.bar";
+               relative: 0.0 1.0;
+               offset: (-ITEM_PADDING - 1) (ACTION_HEIGHT / 2 - 1);
+            }
+         }
+         description {
+            state: "compose" 0.0;
+            inherit: "default" 0.0;
+            rel2 {
+               to: "notification.bar";
+               relative: 1.0 1.0;
+               offset: -1 (ACTION_HEIGHT / 2 - 1);
+            }
+         }
+      }
+
+      part {
+         name: "header.name.bg";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "button.clipper";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1.to: "bg.buttons";
+            rel2.to: "bg.buttons";
+         }
+      }
+
+      part {
+         name: "elm.text.name";
+         type: TEXT;
+         mouse_events: 0;
+         clip_to: "button.clipper";
+         api: "name" "message destination name";
+         description {
+            state: "default" 0.0;
+            color: 240 240 240 255;
+            color_class: "action";
+            rel1 {
+               to: "bg.buttons";
+               offset: ITEM_PADDING 0;
+            }
+            rel2 {
+               to: "bg.buttons";
+               offset: (-ITEM_PADDING - 1) -1;
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_LARGE;
+               align: 0.5 0.5;
+               ellipsis: 0.0;
+            }
+         }
+      }
+
+      part {
+         name: "bg.edit";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "edit.clipper";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: 0 (ACTION_HEIGHT / 2);
+            rel1 {
+               to: "notification.bar";
+               relative: 1.0 1.0;
+               offset: (-LIST_ICON_SIZE - ITEM_PADDING - BORDER_PADDING) 0;
+            }
+            rel2 {
+               to: "notification.bar";
+               relative: 1.0 1.0;
+               offset: -1 (ACTION_HEIGHT / 2 - 1);
+            }
+         }
+      }
+
+#define SEPARATOR(id, clip, rely, offy, relto)                          \
+      part {                                                            \
+         name: "separator.primary."##id;                                \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "primary";                                     \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 offy;                                          \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT / 2);                \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "separator.bg."##id;                                     \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "bg";                                          \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 (offy + SEPARATOR_HEIGHT / 2);                 \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT);                    \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }
+
+      SEPARATOR("button", "button.area.clipper", 1.0, 0, "bg.buttons");
+      SEPARATOR("edit-button", "button.area.clipper", 1.0, 0, "bg.buttons");
+      SEPARATOR("edit", "edit.clipper", 1.0, 0, "bg.edit");
+#undef SEPARATOR
+
+
+#define BUTTON(id, label, ccls, clip, r1, r2)                           \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            rel1 {                                                      \
+               to: "bg.buttons";                                        \
+               relative: r1;                                            \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.buttons";                                        \
+               relative: r2;                                            \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "label."##id;                                            \
+         type: TEXT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: ccls;                                          \
+            rel1.to: "button."##id;                                     \
+            rel2 {                                                      \
+               to: "button."##id;                                       \
+            }                                                           \
+            text {                                                      \
+               text: label;                                             \
+               font: FONT_NORMAL;                                       \
+               size: SIZE_MEDIUM;                                       \
+               align: 0.5 0.5;                                          \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 240 240 240 255;                                     \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      programs {                                                        \
+         program {                                                      \
+            signal: "toggle,on,"##id;                                   \
+            source: "gui";                                              \
+            action: STATE_SET "pressed" 0.0;                            \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+         }                                                              \
+         program {                                                      \
+            signal: "toggle,off,"##id;                                  \
+            source: "gui";                                              \
+            action: STATE_SET "default" 0.0;                            \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "gui";                   \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+      }
+
+      BUTTON("clear",     "Clear", "caution", "edit-button.clipper", 0.0 0.0, 0.5 1.0);
+      BUTTON("edit,done", "Done",  "action", "edit-button.clipper", 0.5 0.0, 1.0 1.0);
+#undef BUTTON
+
+      part {
+         name: "button.edit";
+         type: RECT;
+         mouse_events: 1;
+         clip_to: "edit.clipper";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "caution";
+            rel1.to: "bg.edit";
+            rel2.to: "bg.edit";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+         description {
+            state: "compose" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "ico.edit";
+         type: IMAGE;
+         mouse_events: 0;
+         clip_to: "edit.clipper";
+         description {
+            state: "default" 0.0;
+            min: LIST_ICON_SIZE LIST_ICON_SIZE;
+            max: LIST_ICON_SIZE LIST_ICON_SIZE;
+            align: 0.0 0.5;
+            color: 255 255 255 255;
+            color_class: "caution";
+            rel1 {
+               to: "button.edit";
+               offset: ITEM_PADDING 0;
+            }
+            rel2 {
+               to: "button.edit";
+               offset: (-BORDER_PADDING - 1) -1;
+            }
+            image {
+               normal: "ico_del.png";
+               scale_hint: STATIC;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 240 240 240 255;
+         }
+         description {
+            state: "compose" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "button.over.edit";
+         type: RECT;
+         mouse_events: 1;
+         clip_to: "edit.clipper";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            visible: 0;
+            rel1.to: "bg.edit";
+            rel2.to: "bg.edit";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description {
+            state: "compose" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "ico.ball";
+         type: IMAGE;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1.to: "bg.edit";
+            rel2.to: "bg.edit";
+            min: LIST_ICON_SIZE LIST_ICON_SIZE;
+            max: LIST_ICON_SIZE LIST_ICON_SIZE;
+            image {
+               normal: "ico_ball.png";
+               scale_hint: STATIC;
+            }
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+
+      part {
+         name: "elm.text.names_count";
+         type: TEXT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 0;
+            rel1.to: "ico.ball";
+            rel2.to: "ico.ball";
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_LARGE;
+               size_range: SIZE_SMALL SIZE_LARGE;
+               fit: 1 1;
+               align: 0.5 0.5;
+            }
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+
+      part {
+         name: "elm.swallow.destination";
+         type: SWALLOW;
+         api: "destination" "where to swallow destination field";
+         description {
+            state: "default" 0.0;
+            visible: 1;
+            rel1 {
+               to_y: "separator.bg.button";
+               relative: 0.0 1.0;
+               offset: BORDER_PADDING 0;
+            }
+            rel2 {
+               to: "separator.bg.button";
+               relative: 0.0 1.0;
+               offset: (WIDTH -2 * BORDER_PADDING) ACTION_HEIGHT;
+            }
+         }
+         description {
+            state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "clipper.contacts.visible";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+
+      part {
+         name: "elm.swallow.genlist";
+         type: SWALLOW;
+         api: "genlist" "where to swallow list of messages";
+         clip_to: "clipper.contacts.visible";
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            rel1 {
+               to_y: "separator.bg.button";
+               relative: 0.0 1.0;
+            }
+            rel2 {
+               to: "bg.entry.msg";
+               relative: 1.0 0.0;
+               offset: -1 -1;
+            }
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+
+      part {
+         name: "bg.entry.msg";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "clipper.contacts.visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            rel1 {
+               to: "separator.primary.back";
+               relative: 0.0 0.0;
+               offset: 0 (-ACTION_HEIGHT);
+            }
+            rel2 {
+               to: "separator.primary.back";
+               relative: 1.0 0.0;
+               offset: 0 -1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.swallow.message";
+         type: SWALLOW;
+         api: "message" "where to swallow the message editor";
+         clip_to: "clipper.contacts.visible";
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to: "bg.entry.msg";
+               relative: 0.0 0.0;
+            }
+            rel2 {
+               to_x: "elm.img.btn.send";
+               to_y: "bg.entry.msg";
+               relative: 0.0 0.6;
+               offset: -ITEM_PADDING -1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.img.btn.send";
+         type: IMAGE;
+         clip_to: "clipper.contacts.visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            min: LIST_ICON_SIZE LIST_ICON_SIZE;
+            max: LIST_ICON_SIZE LIST_ICON_SIZE;
+            align: 1.0 0.5;
+            fixed: 1 1;
+            rel1 {
+               to: "bg.entry.msg";
+               relative: 1.0 0.0;
+               offset: -BORDER_PADDING 0;
+            }
+            rel2 {
+               to: "bg.entry.msg";
+               relative: 1.0 1.0;
+               offset: -BORDER_PADDING -1;
+            }
+            image {
+               normal: "ico_arrow_right.png";
+            }
+         }
+      }
+
+      part {
+         name: "elm.text.size";
+         type: TEXT;
+         mouse_events: 0;
+         api: "size" "message size (in characters)";
+         clip_to: "clipper.contacts.visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "secondary";
+            fixed: 1 1;
+            rel1 {
+               to: "elm.text.separator_size";
+               relative: 0.0 0.0;
+               offset: (-ITEM_PADDING - 1 - ITEM_PADDING) 0;
+            }
+            rel2 {
+               to: "elm.text.separator_size";
+               relative: 0.0 1.0;
+               offset: 0 -1;
+            }
+            text {
+               text: "999";
+               font: FONT_NORMAL;
+               size: SIZE_SMALL;
+               min: 1 0;
+            }
+         }
+      }
+
+      part {
+         name: "elm.text.separator_size";
+         type: TEXT;
+         mouse_events: 0;
+         clip_to: "clipper.contacts.visible";
+         api: "separator" "A separator for size and max size";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "secondary";
+            fixed: 1 1;
+            rel1 {
+               to: "elm.img.btn.send";
+               relative: 0.5 1.0;
+               offset: 0 ITEM_PADDING;
+            }
+            rel2 {
+               to_x: "elm.img.btn.send";
+               to_y: "bg.entry.msg";
+               relative: 0.5 1.0;
+            }
+            text {
+               text: "/";
+               font: FONT_NORMAL;
+               size: SIZE_SMALL;
+               min: 1 0;
+            }
+         }
+      }
+
+      part {
+         name: "elm.text.max_size";
+         type: TEXT;
+         mouse_events: 0;
+         api: "max size" "max size of the SMS";
+         clip_to: "clipper.contacts.visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "secondary";
+            rel1 {
+               to: "elm.text.separator_size";
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               to: "bg.entry.msg";
+               relative: 1.0 1.0;
+            }
+            text {
+               text: "160";
+               font: FONT_NORMAL;
+               size: SIZE_SMALL;
+               align: 0.0 0.5;
+            }
+         }
+      }
+
+#define SEPARATOR(id, rely, offy, relto)                                               \
+      part {                                                            \
+         name: "separator.primary."##id;                                \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: "clipper.contacts.visible";                           \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "primary";                                     \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 offy;                                          \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT / 2);                \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "separator.bg."##id;                                     \
+         type: RECT;                                                    \
+         clip_to: "clipper.contacts.visible";                           \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "bg";                                          \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 (offy + SEPARATOR_HEIGHT / 2);                 \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT);                    \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }
+
+      SEPARATOR("back", 0.0, -SEPARATOR_HEIGHT, "bg.buttons.back");
+#undef SEPARATOR
+
+      part {
+         name: "bg.buttons.back";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "clipper.contacts.visible";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: WIDTH ACTION_HEIGHT;
+            max: 99999 99999; /* keep it tight centered */
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 -ACTION_HEIGHT;
+            }
+         }
+      }
+#define BUTTON(id, label, ccls, r1, r2)                                 \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         clip_to: "clipper.contacts.visible";                           \
+         mouse_events: 1;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            rel1 {                                                      \
+           to: "bg.buttons.back";                                                              \
+               relative: r1;                                            \
+            }                                                           \
+            rel2 {                                                      \
+           to: "bg.buttons.back";                                          \
+               relative: r2;                                            \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "label."##id;                                            \
+         type: TEXT;                                                    \
+         clip_to: "clipper.contacts.visible";                           \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: ccls;                                          \
+            rel1.to: "button."##id;                                     \
+            rel2 {                                                      \
+               to: "button."##id;                                       \
+            }                                                           \
+            text {                                                      \
+               text: label;                                             \
+               font: FONT_NORMAL;                                       \
+               size: SIZE_HUGE;                                         \
+               align: 0.5 0.5;                                          \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 240 240 240 255;                                     \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      programs {                                                        \
+         program {                                                      \
+            signal: "mouse,up,1";                                       \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "released,"##id "keypad";               \
+            after: "show_up_"##id;                                      \
+            api: id"_released" id" was released";                       \
+         }                                                              \
+         program {                                                      \
+            name: "show_up_"##id;                                       \
+            action: STATE_SET "default" 0.0;                            \
+            transition: DECELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1";                                     \
+            source: "button."##id;                                      \
+            after: "show_down_"##id;                                    \
+            action: SIGNAL_EMIT "pressed,"##id "keypad";                \
+            api: id"_pressed" id" was pressed";                         \
+         }                                                              \
+         program {                                                      \
+            name: "show_down_"##id;                                     \
+            action: STATE_SET "pressed" 0.0;                            \
+            transition: ACCELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "gui";                   \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+      }
+
+      BUTTON("back",    "Back",    "action", 0.0 0.0, 1.0 1.0);
+#undef BUTTON
+
+      part {
+         name: "elm.swallow.genlist.contacts";
+         type: SWALLOW;
+         api: "contacts genlist" "A genlist to be filled with contacts";
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            rel1 {
+               to_y: "elm.swallow.destination";
+               relative: 0.0 1.0;
+               offset: 0 ITEM_PADDING;
+            }
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+   }
+   programs {
+
+      program {
+         signal: "contacts,hidden";
+         source: "gui";
+         action: STATE_SET "default" 0.0;
+         target: "elm.swallow.genlist.contacts";
+         target: "clipper.contacts.visible";
+      }
+      program {
+         signal: "contacts,show";
+         source: "gui";
+         action: STATE_SET "alternate" 0.0;
+         target: "elm.swallow.genlist.contacts";
+         target: "clipper.contacts.visible";
+      }
+      program {
+         signal: "show,genlist";
+         source: "gui";
+         after: "hide,entry,to";
+         after: "show,genlist";
+      }
+      program {
+         signal: "hidden,genlist";
+         source: "gui";
+         after: "show,entry,to";
+         after: "hide,genlist";
+      }
+      program {
+         name: "hide,entry,to";
+         action: STATE_SET "hidden" 0.0;
+         target: "elm.swallow.destination";
+      }
+      program {
+         name: "show,entry,to";
+         action: STATE_SET "default" 0.0;
+         target: "elm.swallow.destination";
+      }
+      program {
+         name: "hide,genlist";
+         action: STATE_SET "default" 0.0;
+         target: "elm.swallow.genlist";
+      }
+      program {
+         name: "show,genlist";
+         action: STATE_SET "visible" 0.0;
+         target: "elm.swallow.genlist";
+      }
+      program {
+         signal: "mouse,clicked,1";
+         source: "elm.img.btn.send";
+         action: SIGNAL_EMIT "clicked,send_msg" "gui";
+      }
+      program {
+         signal: "toggle,on,edit";
+         source: "gui";
+         action: STATE_SET "pressed" 0.0;
+         target: "button.edit";
+         target: "button.over.edit";
+         target: "ico.edit";
+         after: "show_edit_buttons";
+      }
+      program {
+         name: "show_edit_buttons";
+         action: STATE_SET "alternate" 0.0;
+         transition: ACCELERATE 0.3;
+         target: "button.clipper";
+         target: "edit-button.clipper";
+      }
+
+      program {
+         signal: "toggle,off,edit";
+         source: "gui";
+         action: STATE_SET "default" 0.0;
+         target: "button.edit";
+         target: "button.over.edit";
+         target: "ico.edit";
+         after: "hide_edit_buttons";
+      }
+      program {
+         name: "hide_edit_buttons";
+         action: STATE_SET "default" 0.0;
+         transition: ACCELERATE 0.3;
+         target: "button.clipper";
+         target: "edit-button.clipper";
+      }
+
+      program {
+         signal: "mouse,clicked,1";
+         source: "button.edit";
+         action: SIGNAL_EMIT "clicked,edit" "gui";
+         api: "edit was clicked";
+      }
+      program {
+         signal: "mouse,clicked,1";
+         source: "button.over.edit";
+         action: SIGNAL_EMIT "clicked,edit,done" "gui";
+         api: "edit_done was clicked";
+      }
+      program {
+         signal: "composing";
+         source: "gui";
+         action: STATE_SET "compose" 0.0;
+         target: "bg.buttons";
+         target: "button.edit";
+         target: "ico.edit";
+         target: "button.over.edit";
+      }
+      program {
+         signal: "viewing";
+         source: "gui";
+         action: STATE_SET "default" 0.0;
+         target: "bg.buttons";
+         target: "button.edit";
+         target: "ico.edit";
+         target: "button.over.edit";
+      }
+      program {
+         signal: "names_count,show";
+         source: "gui";
+         action: STATE_SET "default" 0.0;
+         target: "bg.buttons";
+         after: "names_count.visible";
+      }
+      program {
+         name: "names_count.visible";
+         action: STATE_SET "visible" 0.0;
+         target: "elm.text.names_count";
+         target: "ico.ball";
+      }
+      program {
+         signal: "names_count,hidden";
+         source: "gui";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text.names_count";
+         target: "ico.ball";
+      }
+
+   }
+}
+
+group {
+   name: "elm/genlist/item_compress/messages-outgoing/default";
+
+    data {
+       item: "texts" "text.msg.content text.msg.time";
+       item: "states" "sent failed";
+       item: "contents" "swallow.btn.resend";
+    }
+
+    images {
+       image: "bg_chat_outgoing.png" COMP;
+       image: "ico_msg_delivered.png" COMP;
+    }
+
+    styles {
+       style {
+          name: "entry_textblock_style_outgoing";
+          base: "font="FONT_NORMAL" font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_SECONDARY" wrap=mixed valign=top align=right";
+          tag: "br" "\n";
+       }
+       style {
+          name: "entry_textblock_style_outgoing_failed";
+          base: "font="FONT_NORMAL" font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_CAUTION" wrap=mixed valign=top align=right";
+          tag: "br" "\n";
+       }
+    }
+
+    parts {
+       part {
+          name: "bg";
+          type: RECT;
+          mouse_events: 1;
+          description {
+             state: "default" 0.0;
+             color: 255 255 255 0;
+             color_class: "action";
+          }
+          description {
+             state: "selected" 0.0;
+             inherit: "default" 0.0;
+             color: 255 255 255 255;
+          }
+       }
+
+       part {
+          name: "text.msg.content";
+          type: TEXTBLOCK;
+          mouse_events: 0;
+          description {
+             state: "default" 0.0;
+             align: 0.0 0.0;
+             rel1 {
+                relative: 0.25 0.0;
+                offset: 0 ITEM_PADDING;
+             }
+             rel2 {
+                offset: (-BORDER_PADDING - ITEM_PADDING - 1) (-MESSAGE_IMG_SENT_SIZE -MESSAGE_SEPARATOR_HEIGHT -ITEM_PADDING -1);
+             }
+             text {
+                style: "entry_textblock_style_outgoing";
+                min: 0 1;
+             }
+          }
+          description {
+             state: "failed" 0.0;
+             inherit: "default" 0.0;
+             text {
+                min: 0 1;
+                style: "entry_textblock_style_outgoing_failed";
+             }
+          }
+       }
+
+       part {
+          name: "img.msg.separator";
+          type: IMAGE;
+          mouse_events: 0;
+          description {
+             state: "default" 0.0;
+             color: 255 255 255 255;
+             color_class: "secondary";
+             min: MESSAGE_SEPARATOR_WIDTH MESSAGE_SEPARATOR_HEIGHT;
+             max: MESSAGE_SEPARATOR_WIDTH MESSAGE_SEPARATOR_HEIGHT;
+             align: 1.0 1.0;
+             rel1 {
+                relative: 1.0 1.0;
+                offset: (-ITEM_PADDING -ITEM_PADDING - 1) (-MESSAGE_IMG_SENT_SIZE - ITEM_PADDING - 1);
+             }
+             rel2 {
+                relative: 1.0 1.0;
+                offset: (-ITEM_PADDING -ITEM_PADDING - 1) (-MESSAGE_IMG_SENT_SIZE - ITEM_PADDING - 1);
+             }
+             image.normal: "bg_chat_outgoing.png";
+          }
+          description {
+             state: "failed" 0.0;
+             inherit: "default" 0.0;
+             color_class: "caution";
+          }
+       }
+
+       part {
+          name: "text.msg.time";
+          type: TEXT;
+          mouse_events: 0;
+          description {
+             state: "default" 0.0;
+             color: 255 255 255 128;
+             color_class: "secondary";
+             align: 0.0 0.0;
+             fixed: 1 1;
+             rel1 {
+                to_x: "img.msg.separator";
+                to_y: "text.msg.content";
+                relative: 0.0 1.0;
+                offset: 0 SEPARATOR_HEIGHT;
+             }
+             rel2 {
+                relative: 1.0 1.0;
+                offset: (-MESSAGE_IMG_SENT_SIZE - 2 * BORDER_PADDING - ITEM_PADDING - 1) (-ITEM_PADDING -1);
+             }
+             text {
+                text: "time";
+                font: FONT_NORMAL;
+                size: SIZE_MEDIUM;
+                align: 0.0 0.0;
+                max: 1 0;
+             }
+          }
+          description {
+             state: "failed" 0.0;
+             inherit: "default" 0.0;
+             visible: 0;
+          }
+       }
+
+       part {
+          name: "swallow.btn.resend";
+          type: SWALLOW;
+          description {
+             state: "default" 0.0;
+             color: 255 255 255 128;
+             color_class: "caution";
+             align: 0.0 0.0;
+             fixed: 1 1;
+             visible: 0;
+             rel1 {
+                to_x: "img.msg.separator";
+                to_y: "text.msg.content";
+                relative: 0.0 1.0;
+                offset: 0 SEPARATOR_HEIGHT;
+             }
+             rel2 {
+                to: "img.msg.separator";
+                relative: 1.0 1.0;
+                offset: -ITEM_PADDING ITEM_PADDING;
+             }
+          }
+          description {
+             state: "failed" 0.0;
+             inherit: "default" 0.0;
+             visible: 1;
+          }
+       }
+
+       part {
+          name: "img.sent";
+          type: IMAGE;
+          description {
+             color: 255 255 255 255;
+             color_class: "secondary";
+             min: MESSAGE_IMG_SENT_SIZE MESSAGE_IMG_SENT_SIZE;
+             max: MESSAGE_IMG_SENT_SIZE MESSAGE_IMG_SENT_SIZE;
+             visible: 0;
+             align: 0.0 0.0;
+             rel1 {
+                to: "text.msg.time";
+                relative: 1.0 0.0;
+                offset: ITEM_PADDING -MESSAGE_IMG_SENT_Y_OFFSET;
+             }
+             image.normal: "ico_msg_delivered.png";
+          }
+          description {
+             state: "visible" 0.0;
+             inherit: "default" 0.0;
+             visible: 1;
+          }
+       }
+    }
+
+    programs {
+       program {
+          signal: "elm,state,sent,active";
+          source: "elm";
+          action: STATE_SET "visible" 0.0;
+          target: "img.sent";
+       }
+       program {
+          signal: "elm,state,sent,passive";
+          source: "elm";
+          action: STATE_SET "default" 0.0;
+          target: "img.sent";
+       }
+       program {
+          signal: "elm,state,failed,active";
+          source: "elm";
+          action: STATE_SET "failed" 0.0;
+          target: "img.msg.separator";
+          target: "text.msg.content";
+          target: "swallow.btn.resend";
+          target: "text.msg.time";
+       }
+       program {
+          signal: "elm,state,failed,passive";
+          source: "elm";
+          action: STATE_SET "default" 0.0;
+          target: "img.msg.separator";
+          target: "text.msg.content";
+          target: "swallow.btn.resend";
+          target: "text.msg.time";
+       }
+    }
+}
+
+group {
+   name: "elm/genlist/item_compress/messages-incoming/default";
+    data {
+       item: "texts" "text.msg.content text.msg.time";
+    }
+    images {
+       image: "bg_chat_incoming.png" COMP;
+    }
+
+    styles {
+       style {
+          name: "entry_textblock_style_incoming";
+          base: "font="FONT_NORMAL" font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_ACTION" wrap=mixed valign=top align=left";
+          tag: "br" "\n";
+       }
+    }
+
+    parts {
+       part {
+          name: "bg";
+          type: RECT;
+          mouse_events: 1;
+          description {
+             state: "default" 0.0;
+             color: 255 255 255 0;
+             color_class: "action";
+          }
+          description {
+             state: "selected" 0.0;
+             inherit: "default" 0.0;
+             color: 255 255 255 255;
+          }
+       }
+
+       part {
+          name: "text.msg.content";
+          type: TEXTBLOCK;
+          mouse_events: 0;
+          description {
+             state: "default" 0.0;
+             align: 0.0 0.0;
+             rel1.offset: BORDER_PADDING ITEM_PADDING;
+             rel2 {
+                relative: 0.75 1.0;
+                offset: 0 (-MESSAGE_IMG_SENT_SIZE -MESSAGE_SEPARATOR_HEIGHT -ITEM_PADDING -1);
+             }
+             text {
+                style: "entry_textblock_style_incoming";
+                min: 0 1;
+             }
+          }
+       }
+
+       part {
+          name: "img.msg.separator";
+          type: IMAGE;
+          mouse_events: 0;
+          description {
+             state: "default" 0.0;
+             color: 255 255 255 255;
+             color_class: "action";
+             min: MESSAGE_SEPARATOR_WIDTH MESSAGE_SEPARATOR_HEIGHT;
+             max: MESSAGE_SEPARATOR_WIDTH MESSAGE_SEPARATOR_HEIGHT;
+             align: 0.0 0.0;
+             rel1 {
+                to_y: "text.msg.content";
+                relative: 0.0 1.0;
+                offset: ITEM_PADDING 0;
+             }
+             rel2 {
+                relative: 0.0 1.0;
+                offset: (ITEM_PADDING + MESSAGE_SEPARATOR_WIDTH) -1;
+             }
+             image.normal: "bg_chat_incoming.png";
+          }
+       }
+
+       part {
+          name: "text.msg.time";
+          type: TEXT;
+          mouse_events: 0;
+          description {
+             state: "default" 0.0;
+             color: 255 255 255 128;
+             color_class: "action";
+             align: 1.0 0.0;
+             fixed: 1 1;
+             rel1 {
+                to_x: "img.msg.separator";
+                to_y: "text.msg.content";
+                relative: 0.0 1.0;
+                offset: BORDER_PADDING SEPARATOR_HEIGHT;
+             }
+             rel2.to_x: "img.msg.separator";
+             text {
+                text: "time";
+                font: FONT_NORMAL;
+                size: SIZE_MEDIUM;
+                align: 1.0 0.0;
+                max: 1 0;
+             }
+          }
+       }
+    }
+}
+
+group {
+   name: "elm/genlist/item/contacts-compose/default";
+   data.item: "texts" "text.contact.name text.contact.number text.contact.type";
+
+   parts {
+      part {
+          name: "bg";
+          type: RECT;
+          mouse_events: 1;
+          description {
+             state: "default" 0.0;
+             color: 255 255 255 0;
+             color_class: "action";
+             min: ACTION_WIDTH LIST_ITEM_HEIGHT;
+          }
+          description {
+             state: "selected" 0.0;
+             inherit: "default" 0.0;
+             color: 255 255 255 255;
+          }
+       }
+
+      part{
+         name: "text.contact.name";
+         type: TEXT;
+         mouse_events: 0;
+         description {
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               relative: 0.0 0.0;
+               offset: BORDER_PADDING ITEM_PADDING;
+            }
+            rel2 {
+               relative: 1.0 0.5;
+               offset: (-BORDER_PADDING - 1) 0;
+            }
+            text {
+               text: "James Bond";
+               font: FONT_NORMAL;
+               size: SIZE_LARGE;
+               align: 0.0 0.5;
+            }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part{
+         name: "text.contact.number";
+         type: TEXT;
+         mouse_events: 0;
+         description {
+            color: 255 255 255 255;
+            color_class: "secondary";
+            rel1 {
+               to: "text.contact.name";
+               relative: 0.0 1.0;
+               offset: 0 (ITEM_PADDING + 1);
+            }
+            rel2 {
+               to_y: "bg";
+               to_x: "text.contact.type";
+               relative: 0.0 1.0;
+               offset: (-ITEM_PADDING - 1) (-ITEM_PADDING - 1);
+            }
+            text {
+               text: "0000007";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 0.0 0.5;
+            }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part{
+         name: "text.contact.type";
+         type: TEXT;
+         mouse_events: 0;
+         description {
+            color: 255 255 255 255;
+            color_class: "secondary";
+            align: 1.0 0.5;
+            fixed: 1 1;
+            rel1 {
+               to_y: "text.contact.name";
+               to_x: "bg";
+               relative: 1.0 1.0;
+               offset: (-BORDER_PADDING - 1) ITEM_PADDING;
+            }
+            rel2 {
+               to: "bg";
+               relative: 1.0 1.0;
+               offset: (-BORDER_PADDING - 1) (-ITEM_PADDING - 1);
+            }
+            text {
+               text: "0000007";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               min: 1 0;
+               align: 1.0 0.5;
+            }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+   }
+
+   programs {
+      program {
+         signal:  "elm,state,selected";
+         source:  "elm";
+         after: "show_selected";
+      }
+      program {
+         signal:  "elm,state,unselected";
+         source:  "elm";
+         after: "show_default";
+      }
+      program {
+         name: "show_selected";
+         action: STATE_SET "selected" 0.0;
+         target: "text.contact.number";
+         target: "text.contact.name";
+         target: "text.contact.type";
+         target: "bg";
+      }
+      program {
+         name: "show_default";
+         action: STATE_SET "default" 0.0;
+         target: "text.contact.number";
+         target: "text.contact.name";
+         target: "text.contact.type";
+         target: "bg";
+      }
+   }
+}
+
+group {
+   name: "elm/genlist/item_compress/outgoing-delete/default";
+   alias: "elm/genlist/item_compress_odd/outoing-delete/default";
+
+   data {
+      item: "contents" "msg.swallow.delete";
+      item: "mode_part" "elm.swallow.decorate.content";
+   }
+
+   parts {
+      part {
+         name: "content.clipper";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+         }
+         description {
+            state: "decorated" 0.0;
+            inherit: "default" 0.0;
+            rel1 {
+               offset: (-BORDER_PADDING - LIST_ICON_SIZE - ITEM_PADDING - 1) -1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.swallow.decorate.content";
+         type: SWALLOW;
+         mouse_events: 1;
+         scale: 1;
+         clip_to: "content.clipper";
+         description {
+            state: "default" 0.0;
+         }
+      }
+
+      part {
+         name: "msg.swallow.delete";
+         type: SWALLOW;
+         mouse_events: 1;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            fixed: 1 0;
+            align: 1.0 0.0;
+            rel1 {
+               relative: 0.0 0.0;
+               offset: 0 0;
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               offset: 0 0;
+            }
+         }
+         description {
+            state: "decorated" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            align: 0.0 0.0;
+            rel1 {
+               relative: 0.0 0.0;
+               offset: BORDER_PADDING 0;
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               offset: BORDER_PADDING 0;
+            }
+         }
+      }
+
+      programs {
+         program {
+            name: "animate_decorated";
+            signal: "elm,state,decorate,enabled,effect";
+            source: "elm";
+            action: STATE_SET "decorated" 0.0;
+            target: "content.clipper";
+            after: "animate_decorated2";
+         }
+         program {
+            name: "animate_decorated2";
+            action: STATE_SET "decorated" 0.0;
+            transition: ACCELERATE 0.15;
+            target: "msg.swallow.delete";
+         }
+
+         program {
+            name: "animate_default";
+            signal: "elm,state,decorate,disabled,effect";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.15;
+            target: "msg.swallow.delete";
+            after: "animate_default2";
+         }
+         program {
+            name: "animate_default2";
+            action: STATE_SET "default" 0.0;
+            target: "content.clipper";
+         }
+
+         program {
+            signal: "elm,state,decorate,enabled";
+            source: "elm";
+            action: STATE_SET "decorated" 0.0;
+            target: "content.clipper";
+            target: "msg.swallow.delete";
+         }
+         program {
+            signal: "elm,state,decorate,disabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "content.clipper";
+            target: "msg.swallow.delete";
+         }
+
+         program {
+            signal: "elm,state,slide,active";
+            source: "elm";
+            after: "animate_decorated";
+         }
+         program {
+            signal: "elm,state,slide,passive";
+            source: "elm";
+            after: "animate_default";
+         }
+      }
+   }
+}
+
+group {
+   name: "elm/genlist/item_compress/incoming-delete/default";
+   alias: "elm/genlist/item_compress_odd/incoming-delete/default";
+
+   data {
+      item: "contents" "msg.swallow.delete";
+      item: "mode_part" "elm.swallow.decorate.content";
+   }
+
+   parts {
+      part {
+         name: "content.clipper";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+         }
+         description {
+            state: "decorated" 0.0;
+            inherit: "default" 0.0;
+            rel2 {
+               offset: (-BORDER_PADDING - LIST_ICON_SIZE - ITEM_PADDING - 1) -1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.swallow.decorate.content";
+         type: SWALLOW;
+         mouse_events: 1;
+         scale: 1;
+         clip_to: "content.clipper";
+         description {
+            state: "default" 0.0;
+         }
+      }
+
+      part {
+         name: "msg.swallow.delete";
+         type: SWALLOW;
+         mouse_events: 1;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            fixed: 1 0;
+            align: 0.0 0.5;
+            rel1 {
+               relative: 1.0 0.0;
+            }
+         }
+         description {
+            state: "decorated" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            align: 1.0 0.5;
+            rel1 {
+               relative: 1.0 0.0;
+               offset: -BORDER_PADDING 0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -BORDER_PADDING -1;
+            }
+         }
+      }
+
+      programs {
+         program {
+            name: "animate_decorated";
+            signal: "elm,state,decorate,enabled,effect";
+            source: "elm";
+            action: STATE_SET "decorated" 0.0;
+            target: "content.clipper";
+            after: "animate_decorated2";
+         }
+         program {
+            name: "animate_decorated2";
+            action: STATE_SET "decorated" 0.0;
+            transition: ACCELERATE 0.15;
+            target: "msg.swallow.delete";
+         }
+
+         program {
+            name: "animate_default";
+            signal: "elm,state,decorate,disabled,effect";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.15;
+            target: "msg.swallow.delete";
+            after: "animate_default2";
+         }
+         program {
+            name: "animate_default2";
+            action: STATE_SET "default" 0.0;
+            target: "content.clipper";
+         }
+
+         program {
+            signal: "elm,state,decorate,enabled";
+            source: "elm";
+            action: STATE_SET "decorated" 0.0;
+            target: "content.clipper";
+            target: "msg.swallow.delete";
+         }
+         program {
+            signal: "elm,state,decorate,disabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "content.clipper";
+            target: "msg.swallow.delete";
+         }
+
+         program {
+            signal: "elm,state,slide,active";
+            source: "elm";
+            after: "animate_decorated";
+         }
+         program {
+            signal: "elm,state,slide,passive";
+            source: "elm";
+            after: "animate_default";
+         }
+      }
+   }
+}
+
+group {
+   name: "elm/entry/base/compose";
+
+   styles {
+      style {
+         name: "compose_textblock_style";
+         base: "font="FONT_NORMAL" font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_ACTION" wrap=mixed valign=top align=auto";
+         tag: "br" "\n";
+      }
+      style {
+         name: "compose_textblock_disabled_style";
+         base: "font="FONT_NORMAL" font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_ACTION" wrap=mixed valign=top align=auto";
+         tag: "br" "\n";
+      }
+   }
+
+   parts {
+      part {
+         name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: EXPLICIT;
+         source: "elm/entry/selection/dialer";
+         source4: "elm/entry/cursor/dialer";
+         multiline: 1;
+         description {
+            state: "default" 0.0;
+            align: 0.0 0.0;
+            rel1.offset: BORDER_PADDING 0;
+            text {
+               style: "compose_textblock_style";
+               min: 0 1;
+               max: 1 1;
+               align: -1.0 0.0;
+            }
+         }
+         description {
+            state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "compose_textblock_disabled_style";
+            }
+         }
+      }
+   }
+
+   programs {
+      program {
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program {
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program {
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group {
+   name: "elm/button/base/compose-resend";
+
+   parts {
+      part {
+         name: "elm.text";
+         type: TEXT;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "caution";
+            text {
+               text: "A Label";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               size_range: SIZE_MEDIUM SIZE_HUGE;
+               fit: 1 1;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 128;
+         }
+      }
+   }
+   programs {
+      program {
+         signal: "mouse,down,1";
+         source: "elm.text";
+         action: SIGNAL_EMIT "elm,action,press" "";
+      }
+      program {
+         signal: "mouse,up,1";
+         source: "elm.text";
+         action: SIGNAL_EMIT "elm,action,unpress" "";
+      }
+      program {
+         signal: "mouse,clicked,1";
+         source: "elm.text";
+         action: SIGNAL_EMIT "elm,action,click" "";
+      }
+
+      program {
+         signal: "mouse,up,1";
+         source: "elm.text";
+         action: STATE_SET "default" 0.0;
+         transition: ACCELERATE 0.1;
+         target: "elm.text";
+      }
+
+      program {
+         signal: "mouse,down,1";
+         source: "elm.text";
+         action: STATE_SET "pressed" 0.0;
+         transition: ACCELERATE 0.1;
+         target: "elm.text";
+      }
+   }
+}
+
+group {
+   name: "elm/entry/base-single/default";
+   inherit: "elm/entry/base/compose";
+   styles
+   {
+      style {
+         name: "entry_single_textblock_compose_guide_style";
+         base: "font="FONT_NORMAL" font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_ACTION" wrap=mixed text_class=entry left_margin=2 right_margin=2 ellipsis=0.0";
+      }
+   }
+   parts {
+      part {
+         name: "elm.guide";
+         type: TEXTBLOCK;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            rel1.to: "elm.text";
+            rel2.to: "elm.text";
+            text {
+               style: "entry_single_textblock_compose_guide_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description {
+            state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "elm.text";
+         multiline: 0;
+         description {
+            state: "default" 0.0;
+            text {
+               style: "compose_textblock_style";
+               min: 1 1;
+               max: 0 0;
+               align: 0.0 0.5;
+            }
+         }
+         description {
+            state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "compose_textblock_disabled_style";
+            }
+         }
+      }
+   }
+}
+
+group {
+   name: "elm/multibuttonentry/base/compose";
+   data.item: "closed_button_type" "image"; /* image, label, default : label */
+   data.item: "closed_height" 46;
+   parts {
+      part {
+         name: "box.swallow";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            align: 0.0 0.0;
+         }
+      }
+   }
+}
+
+
+group {
+   name: "elm/multibuttonentry/guidetext/compose";
+   parts {
+      part {
+         name: "elm.text.bg";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            visible: 0;
+            rel1.to: "elm.text";
+            rel2.to: "elm.text";
+         }
+      }
+      part {
+         name: "elm.text";
+         type: TEXT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "secondary";
+            rel1.offset: BORDER_PADDING 0;
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               min: 0 1;
+               align: 0.0 0.5;
+            }
+         }
+      }
+   }
+}
+
+
+group {
+   name: "elm/multibuttonentry/btn/compose";
+   data.item: "button_max_size" MULTI_BUTTON_ENTRY_MAX_SIZE;
+   styles {
+      style { name: "multibuttonentry_textblock_style";
+         base: "font="FONT_NORMAL" align=0.5 font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_ACTION" text_class=label ellipsis=1.0";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "hilight" "+ font="FONT_BOLD"";
+         tag:  "b" "+ font="FONT_BOLD"";
+         tag:  "tab" "\t";
+      }
+   }
+
+   parts {
+      part {
+         name: "elm.base";
+         type: RECT;
+         mouse_events: 1;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 0 LIST_ICON_SIZE;
+            max: 5000 LIST_ICON_SIZE;
+            fixed: 1 1;
+            color: 0 0 0 0;
+         }
+      }
+      part {
+         name: "right.padding";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min : ITEM_PADDING 0;
+            rel1.relative: 1.0 0.0;
+            rel2.relative: 1.0 1.0;
+            color: 0 0 0 0;
+            align: 1 1;
+         }
+      }
+      part {
+         name: "elm.btn.bg";
+         type: RECT;
+         mouse_events: 1;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min : ITEM_PADDING LIST_ICON_SIZE;
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "right.padding";
+            }
+            color: 255 255 255 0;
+            color_class: "secondary";
+         }
+         description {
+            state: "focused" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part {
+         name: "elm.btn.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: ITEM_PADDING LIST_ICON_SIZE;
+            max: (MULTI_BUTTON_ENTRY_MAX_SIZE -2 * ITEM_PADDING) LIST_ICON_SIZE;
+            fixed: 0 1;
+            text {
+               text: "Auto Resized textblock";
+               style: "multibuttonentry_textblock_style";
+               min: 1 0;
+               align: 0.5 0.5;
+            }
+            rel1 {
+               to: "elm.btn.bg";
+               offset: ITEM_PADDING 0;
+            }
+            rel2 {
+               to: "elm.btn.bg";
+               offset: (-ITEM_PADDING -1) -1;
+            }
+
+         }
+      }
+   }
+   programs {
+      program {
+         name: "clicked";
+         signal: "mouse,clicked,1";
+         source: "elm.btn.bg";
+         action: SIGNAL_EMIT "clicked" "elm";
+      }
+      program {
+         name: "default";
+         signal: "default";
+         action: STATE_SET "default" 0.0;
+         target: "elm.btn.bg";
+      }
+      program {
+         name: "focused";
+         signal: "focused";
+         action: STATE_SET "focused" 0.0;
+         target: "elm.btn.bg";
+      }
+   }
+}
+
+
+group {
+   name: "elm/multibuttonentry/label/default";
+   parts {
+      part {
+         name: "mbe.label.bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: 0 0;
+            fixed: 1 1;
+         }
+         description {
+            state: "no_text" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "mbe.label.left.padding";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: 3 0;
+            fixed: 1 1;
+            rel1.to: "mbe.label.bg";
+            rel2 {
+               to: "mbe.label.bg";
+               relative: 0.0 1.0;
+            }
+            align: 0 0.5;
+         }
+         description {
+            state: "no_text" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "mbe.label.right.padding";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: 3 0;
+            fixed: 1 1;
+            rel1 {
+               to: "mbe.label.bg";
+               relative: 1.0 0.0;
+            }
+            rel2.to: "mbe.label.bg";
+            align: 1 1.0;
+         }
+         description {
+            state: "no_text" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "mbe.label";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            min: 0 33;
+            fixed: 1 1;
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               min: 1 1;
+               align: 0.0 0.428;
+            }
+            rel1 { relative: 1.0 1.0; to: "mbe.label.left.padding"; }
+            rel2 { relative: 0.0 0.0; to: "mbe.label.right.padding"; }
+         }
+         description {
+            state: "no_text" 0.0;
+            inherit: "default" 0.0;
+            min: 6 33;
+         }
+      }
+   }
+   programs {
+      program {
+         name: "has_text";
+         signal: "elm,mbe,set_text";
+         source: "";
+         action: STATE_SET "default" 0.0;
+         target: "mbe.label.bg";
+         target: "mbe.label.left.padding";
+         target: "mbe.label.right.padding";
+         target: "mbe.label";
+      }
+      program {
+         name: "no_text";
+         signal: "elm,mbe,clear_text";
+         source: "";
+         action: STATE_SET "no_text" 0.0;
+         target: "mbe.label.bg";
+         target: "mbe.label.left.padding";
+         target: "mbe.label.right.padding";
+         target: "mbe.label";
+      }
+   }
+}
+
+
similarity index 91%
rename from data/themes/includes/contacts-bg.edc
rename to data/themes/default/contacts-bg.edc
index 4ac8122..bc3c790 100644 (file)
@@ -9,19 +9,14 @@ group {
 
       part {
          name: "bg";
-         type: IMAGE;
+         type: RECT;
          mouse_events: 0;
          description {
             state: "default" 0.0;
             rel1.relative: 0.0 0.0;
             rel2.relative: 1.0 1.0;
             color: 255 255 255 255;
-            color_class: "dark";
-            image {
-               normal: "bg_keypad.jpg";
-               scale_hint: STATIC;
-            }
-            fill.smooth: 1;
+            color_class: "primary";
          }
       }
 
diff --git a/data/themes/default/contacts.edc b/data/themes/default/contacts.edc
new file mode 100644 (file)
index 0000000..e9b8682
--- /dev/null
@@ -0,0 +1,692 @@
+group {
+   name: "elm/genlist/item/contacts/default";
+
+   data {
+      item: "texts" "text.contacts.name text.contacts.last";
+      item: "contents" "swallow.photo";
+   }
+
+   parts{
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "action";
+            min: WIDTH LIST_CONTACT_HEIGHT;
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+
+      part {
+         name: "img.border";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               to: "swallow.photo";
+               relative: 0.0 0.0;
+               offset: -1 -1;
+            }
+            rel2 {
+               to: "swallow.photo";
+               relative: 1.0 1.0;
+               offset: 0 0;
+            }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part {
+         name: "img.bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+            rel1 {
+               to: "swallow.photo";
+               relative: 0.0 0.0;
+               offset: 0 0;
+            }
+            rel2 {
+               to: "swallow.photo";
+               relative: 1.0 1.0;
+               offset: -1 -1;
+            }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part {
+         name: "swallow.photo";
+         type: SWALLOW;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            min: CONTACT_PHOTO_SIZE CONTACT_PHOTO_SIZE;
+            max: CONTACT_PHOTO_SIZE CONTACT_PHOTO_SIZE;
+            align: 0.0 0.5;
+            fixed: 1 1;
+            rel1 {
+               relative: 0.0 0.0;
+               offset: BORDER_PADDING 0;
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               offset: BORDER_PADDING -1;
+            }
+         }
+      }
+
+       part {
+         name: "text.contacts.name";
+         type: TEXT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               to: "swallow.photo";
+               relative: 1.0 0.0;
+               offset: ITEM_PADDING 0;
+            }
+            rel2 {
+               to_y: "swallow.photo";
+               relative: 1.0 0.7;
+               offset: (-BORDER_PADDING -1) -1;
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_LARGE;
+               align: 0.0 0.0;
+               ellipsis: 0.0;
+            }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+       part {
+         name: "text.contacts.last";
+         type: TEXT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "secondary";
+            rel1 {
+               to: "swallow.photo";
+               relative: 1.0 0.7;
+               offset: ITEM_PADDING 0;
+            }
+            rel2 {
+               to_y: "swallow.photo";
+               relative: 1.0 1.0;
+               offset: (-BORDER_PADDING -1) -1;
+            }
+           text {
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 0.0 0.5;
+               ellipsis: 0.0;
+           }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+       }
+
+      programs {
+
+         program {
+            signal: "elm,state,selected";
+            source: "elm";
+            action: STATE_SET "selected" 0.0;
+            target: "bg";
+            target: "text.contacts.name";
+            target: "text.contacts.last";
+            target: "img.border";
+         }
+
+         program {
+            signal: "elm,state,unselected";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "bg";
+            target: "text.contacts.name";
+            target: "text.contacts.last";
+            target: "img.border";
+         }
+      }
+   }
+}
+
+group {
+   name: "elm/genlist/item/group_contacts/default";
+
+   data {
+      item: "texts" "text.group";
+   }
+
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            min: (BORDER_PADDING + CONTACT_PHOTO_SIZE) GROUP_HEIGHT;
+            max: (BORDER_PADDING + CONTACT_PHOTO_SIZE) GROUP_HEIGHT;
+            align: 0.0 0.5;
+         }
+      }
+
+      part {
+         name: "text.group";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "bg";
+            rel2 {
+               to: "bg";
+               offset: -ITEM_PADDING -1;
+            }
+            text {
+               font: FONT_BOLD;
+               size: SIZE_SMALL;
+               fit: 1 1;
+               align: 1.0 0.5;
+               ellipsis: 0.0;
+            }
+         }
+      }
+   }
+}
+
+group {
+   name: "elm/layout/ofono-efl/contacts_details";
+
+   parts {
+
+      part {
+         name: "img.border";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               to: "swallow.photo";
+               relative: 0.0 0.0;
+               offset: -1 -1;
+            }
+            rel2 {
+               to: "swallow.photo";
+               relative: 1.0 1.0;
+               offset: 0 0;
+            }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part {
+         name: "img.bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+            rel1 {
+               to: "swallow.photo";
+               relative: 0.0 0.0;
+               offset: 0 0;
+            }
+            rel2 {
+               to: "swallow.photo";
+               relative: 1.0 1.0;
+               offset: -1 -1;
+            }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part {
+         name: "swallow.photo";
+         type: SWALLOW;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            min: CONTACT_PHOTO_SIZE CONTACT_PHOTO_SIZE;
+            max: CONTACT_PHOTO_SIZE CONTACT_PHOTO_SIZE;
+            rel1 {
+               relative: 0.0 0.0;
+               offset: BORDER_PADDING 0;
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               offset: (BORDER_PADDING+CONTACT_PHOTO_SIZE) (CONTACT_PHOTO_SIZE+ITEM_PADDING);
+            }
+         }
+      }
+
+      part {
+         name: "text.name";
+         type: TEXT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               to: "swallow.photo";
+               relative: 1.0 0.0;
+               offset: ITEM_PADDING ITEM_PADDING;
+            }
+            rel2 {
+               to_y: "swallow.photo";
+               relative: 1.0 0.5;
+               offset: -BORDER_PADDING -ITEM_PADDING;
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_HUGE;
+               fit: 0 0;
+               align: 0.0 0.5;
+               ellipsis: 0.0;
+           }
+         }
+      }
+
+      part {
+         name: "text.last.name";
+         type: TEXT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 128;
+            color_class: "action";
+             rel1 {
+               to: "text.name";
+               relative: 0.0 1.0;
+                offset: 0 ITEM_PADDING;
+            }
+            rel2 {
+               to_x: "text.name";
+               to_y: "swallow.photo";
+               relative: 1.0 1.0;
+               offset: 0 ITEM_PADDING;
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               fit: 0 1;
+               align: 0.0 0.0;
+               ellipsis: 0.0;
+           }
+         }
+      }
+
+      part {
+         name: "box.phones";
+         type: BOX;
+         scale: 1;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            box {
+               layout: "vertical_homogeneous";
+            }
+            rel1 {
+              to_y: "swallow.photo";
+               relative: 0.0 1.0;
+               offset: 0 (ITEM_PADDING+ACTION_HEIGHT);
+            }
+            rel2 {
+               to_y: "bg.buttons";
+               relative: 1.0 0.0;
+               offset: -1 0;
+            }
+         }
+      }
+
+      part {
+         name: "bg.buttons";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: WIDTH ACTION_HEIGHT;
+            max: WIDTH 99999; /* keep it tight centered */
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 -ACTION_HEIGHT;
+            }
+         }
+      }
+#define BUTTON(id, label, ccls, r1, r2)                                 \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            rel1 {                                                      \
+               to: "bg.buttons";                                        \
+               relative: r1;                                            \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.buttons";                                        \
+               relative: r2;                                            \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "label."##id;                                            \
+         type: TEXT;                                                    \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: ccls;                                          \
+            rel1.to: "button."##id;                                     \
+            rel2 {                                                      \
+               to: "button."##id;                                       \
+            }                                                           \
+            text {                                                      \
+               text: label;                                             \
+               font: FONT_NORMAL;                                       \
+               size: SIZE_HUGE;                                         \
+               align: 0.5 0.5;                                          \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 240 240 240 255;                                     \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      programs {                                                        \
+         program {                                                      \
+            signal: "mouse,up,1";                                       \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "released,"##id "keypad";               \
+            after: "show_up_"##id;                                      \
+            api: id"_released" id" was released";                       \
+         }                                                              \
+         program {                                                      \
+            name: "show_up_"##id;                                       \
+            action: STATE_SET "default" 0.0;                            \
+            transition: DECELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1";                                     \
+            source: "button."##id;                                      \
+            after: "show_down_"##id;                                    \
+            action: SIGNAL_EMIT "pressed,"##id "keypad";                \
+            api: id"_pressed" id" was pressed";                         \
+         }                                                              \
+         program {                                                      \
+            name: "show_down_"##id;                                     \
+            action: STATE_SET "pressed" 0.0;                            \
+            transition: ACCELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "gui";                   \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+      }
+
+      BUTTON("back",    "Back",    "action", 0.0 0.0, 1.0 1.0);
+#undef BUTTON
+   }
+}
+
+group {
+
+   name: "elm/icon/no-picture/default";
+
+   images{
+      image: "ico_person.png" COMP;
+   }
+
+   parts {
+      part {
+         name : "base";
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            aspect: 1.0 1.0;
+            color_class: "action";
+            aspect_preference: BOTH;
+            image.normal: "ico_person.png";
+         }
+      }
+   }
+}
+group {
+
+   name: "elm/button/base/contacts";
+
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "action";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+
+      part {
+         name: "elm.text.phone";
+         type: TEXT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+           rel1 {
+               offset: BORDER_PADDING 0;
+            }
+            rel2 {
+               to_y: "elm.text.type";
+               relative: 1.0 0.0;
+               offset: (-BORDER_PADDING -1) ITEM_PADDING;
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_HUGE;
+               size_range: SIZE_SMALL SIZE_HUGE;
+               fit: 1 1;
+               align: 0.5 0.5;
+               ellipsis: 1.0;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 240 240 240 255;
+         }
+      }
+
+      part {
+         name: "elm.text.type";
+         type: TEXT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 128;
+            color_class: "action";
+            align: 0.5 1.0;
+            fixed: 1 1;
+            rel1 {
+               relative: 0.0 1.0;
+               offset: BORDER_PADDING (-ITEM_PADDING - 1);
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: (-BORDER_PADDING -1) (-ITEM_PADDING - 1);
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               min: 0 1;
+               align: 0.5 1.0;
+               ellipsis: 0.0;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 240 240 240 255;
+         }
+      }
+
+#define SEPARATOR(id, rely, offy, relto)                                \
+      part {                                                            \
+         name: "separator.primary."##id;                                \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "primary";                                     \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 offy;                                          \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT / 2);                \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "separator.bg."##id;                                     \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "bg";                                          \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 (offy + SEPARATOR_HEIGHT / 2);                 \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT);                    \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }
+
+      SEPARATOR("bottom", 1.0, -SEPARATOR_HEIGHT, "");
+#undef SEPARATOR
+   }
+
+   programs {
+
+      program {
+         signal: "mouse,clicked,1";
+         source: "bg";
+         action: SIGNAL_EMIT "elm,action,click" "";
+      }
+
+      program {
+         signal: "mouse,down,1";
+         source: "bg";
+         transition: ACCELERATE 0.3;
+         action: STATE_SET "pressed" 0.0;
+         target: "bg";
+         target: "elm.text.phone";
+         target: "elm.text.type";
+      }
+
+      program {
+         signal: "mouse,up,1";
+         source: "bg";
+         transition: DECELERATE 0.3;
+         action: STATE_SET "default" 0.0;
+         target: "bg";
+         target: "elm.text.phone";
+         target: "elm.text.type";
+      }
+   }
+}
diff --git a/data/themes/default/dialer.edc b/data/themes/default/dialer.edc
new file mode 100644 (file)
index 0000000..4d9081c
--- /dev/null
@@ -0,0 +1,768 @@
+group {
+   name: "elm/layout/ofono-efl/dialer";
+
+   min: WIDTH HEIGHT;
+
+   /*
+    * Represents the dialer main layout with actions and swallows.
+    *
+    * Parts:
+    *   SWALLOW: elm.swallow.keypad
+    *   SWALLOW: elm.swallow.contacts
+    *   SWALLOW: elm.swallow.history
+    *   SWALLOW: elm.swallow.activecall
+    *
+    * Signals:
+    *   Emit (source is "gui"):
+    *     pressed,<ID>:  key <ID> was pressed
+    *     released,<ID>: key <ID> was released
+    *     clicked,<ID>:  key <ID> was clicked (press and release in the key)
+    *   Listens (source is "gui"):
+    *     show,<ID>:       have <ID> to be visible (swallow and action)
+    *     toggle,on,<ID>:  force <ID> to be marked as selected
+    *     toggle,off,<ID>: force <ID> to be marked as unselected
+    *
+    * Where <ID> is: keypad, contacts, history, activecall.
+    */
+
+   images {
+      image: "ico_keypad.png" COMP;
+      image: "ico_history.png" COMP;
+      image: "ico_voicemail.png" COMP;
+      image: "ico_quit.png" COMP;
+   }
+
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+
+      part {
+         name: "notification.bar";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            rel1.relative: 0.0 0.0;
+            rel2 {
+               relative: 1.0 0.0;
+               offset: -1 NOTIFICATION_BAR_HEIGHT;
+            }
+         }
+      }
+
+      part {
+         name: "elm.swallow.activecall";
+         type: SWALLOW;
+         api: "activecall" "where to place the active call, if any";
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            align: 0.5 0.0;
+            fixed: 1 1;
+            visible: 1;
+            rel1 {
+               to: "notification.bar";
+               relative: 0.0 1.0;
+               offset: 0 0;
+            }
+            rel2 {
+               to: "notification.bar";
+               relative: 1.0 1.0;
+               offset: 0 0;
+            }
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+      programs {
+         program {
+            signal: "show,activecall";
+            source: "gui";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.swallow.activecall";
+            api: "activecall_show" "make the activecall swallow visible";
+         }
+         program {
+            signal: "hide,activecall";
+            source: "gui";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.activecall";
+            api: "activecall_hide" "make the activecall swallow hidden";
+         }
+      }
+
+      part {
+         name: "elm.swallow.keypad";
+         type: SWALLOW;
+         api: "keypad" "where to place the keypad";
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to_y: "elm.swallow.activecall";
+               relative: 0.0 1.0;
+               offset: 0 0;
+            }
+        rel2.offset: -1 (-ACTION_HEIGHT - 1);
+         }
+         description {
+            state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "elm.swallow.contacts";
+         type: SWALLOW;
+         api: "contacts" "where to place the contacts";
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to_y: "elm.swallow.activecall";
+               relative: 0.0 1.0;
+               offset: 0 0;
+            }
+        rel2.offset: -1 (-ACTION_HEIGHT - 1);
+         }
+         description {
+            state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "elm.swallow.history";
+         type: SWALLOW;
+         api: "history" "where to place the history";
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to_y: "elm.swallow.activecall";
+               relative: 0.0 1.0;
+               offset: 0 0;
+            }
+        rel2.offset: -1 (-ACTION_HEIGHT - 1);
+         }
+         description {
+            state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "bg.actions";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: WIDTH ACTION_HEIGHT;
+            max: WIDTH 99999; /* keep it tight centered */
+            fixed: 1 1;
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 -ACTION_HEIGHT;
+            }
+         }
+      }
+
+#define ACTION_TOGGLE(id, x1, x2)                                       \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: "clipper.toggle."##id;                                \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            min: (WIDTH / 4) ACTION_HEIGHT;                             \
+            max: (WIDTH / 4) ACTION_HEIGHT;                             \
+            fixed: 1 1;                                                 \
+            rel1 {                                                      \
+               to: "bg.actions";                                        \
+               relative: x1 0.0;                                       \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.actions";                                        \
+               relative: x2 1.0;                                        \
+               offset: -1 -1;                                           \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button.ico."##id;                                       \
+         type: IMAGE;                                                   \
+         mouse_events: 0;                                               \
+         clip_to: "clipper.toggle."##id;                                \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "action";                                      \
+            min: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            max: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            fixed: 1 1;                                                 \
+            rel1.to: "button."##id;                                     \
+            rel2.to: "button."##id;                                     \
+            image.normal: "ico_"##id".png";                            \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color_class: "bg";                                          \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "clipper.toggle."##id;                                   \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            visible: 1;                                                 \
+         }                                                              \
+         description {                                                  \
+            state: "on" 0.0;                                            \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 0;                                       \
+            visible: 0;                                                 \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button.toggle."##id;                                    \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            min: (WIDTH / 4) ACTION_HEIGHT;                             \
+            max: (WIDTH / 4) ACTION_HEIGHT;                             \
+            fixed: 1 1;                                                 \
+            visible: 0;                                                 \
+            rel1 {                                                      \
+               to: "bg.actions";                                        \
+               relative: x1 0.0;                                       \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.actions";                                        \
+               relative: x2 1.0;                                        \
+               offset: -1 -1;                                           \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "on" 0.0;                                            \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+            visible: 1;                                                 \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button.toggle.ico."##id;                                \
+         type: IMAGE;                                                   \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "action";                                      \
+            min: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            max: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            fixed: 1 1;                                                 \
+            visible: 0;                                                 \
+            rel1.to: "button.toggle."##id;                              \
+            rel2.to: "button.toggle."##id;                              \
+            image.normal: "ico_"##id".png";                            \
+         }                                                              \
+         description {                                                  \
+            state: "on" 0.0;                                            \
+            inherit: "default" 0.0;                                     \
+            color_class: "bg";                                          \
+            visible: 1;                                                 \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "blocker."##id;                                          \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 0 0 0 0;                                             \
+            visible: 0;                                                 \
+         }                                                              \
+         description {                                                  \
+            state: "disabled" 0.0;                                      \
+            inherit: "default" 0.0;                                     \
+            visible: 1;                                                 \
+         }                                                              \
+      }                                                                 \
+      programs {                                                        \
+         program {                                                      \
+            signal: "mouse,up,1";                                       \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "released,"##id "gui";                  \
+            after: "show_up_"##id;                                      \
+            api: id"_released" id" was released";                       \
+         }                                                              \
+         program {                                                      \
+            name: "show_up_"##id;                                       \
+            action: STATE_SET "default" 0.0;                            \
+            transition: DECELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "button.ico."##id;                                  \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1";                                     \
+            source: "button."##id;                                      \
+            after: "show_down_"##id;                                    \
+            action: SIGNAL_EMIT "pressed,"##id "gui";                   \
+            api: id"_pressed" id" was pressed";                         \
+         }                                                              \
+         program {                                                      \
+            name: "show_down_"##id;                                     \
+            action: STATE_SET "pressed" 0.0;                            \
+            transition: ACCELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "button.ico."##id;                                  \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "gui";                   \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button.toggle."##id;                               \
+            action: SIGNAL_EMIT "clicked,"##id "gui";                   \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+         program {                                                      \
+            signal: "toggle,on,"##id;                                   \
+            source: "gui";                                              \
+            action: STATE_SET "on" 0.0;                                 \
+            target: "clipper.toggle."##id;                              \
+            target: "button.toggle."##id;                               \
+            target: "button.toggle.ico."##id;                           \
+         }                                                              \
+         program {                                                      \
+            signal: "toggle,off,"##id;                                  \
+            source: "gui";                                              \
+            action: STATE_SET "default" 0.0;                            \
+            target: "clipper.toggle."##id;                              \
+            target: "button.toggle."##id;                               \
+            target: "button.toggle.ico."##id;                           \
+         }                                                              \
+      }
+
+      ACTION_TOGGLE("quit",    0.00, 0.25);
+      ACTION_TOGGLE("keypad",  0.25, 0.50);
+      ACTION_TOGGLE("history",   0.50, 0.75);
+#undef ACTION_TOGGLE
+
+      part {
+         name: "clipper.disable.voicemail";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+         }
+         description {
+            state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 128;
+         }
+      }
+      part {
+         name: "button.voicemail";
+         type: RECT;
+         mouse_events: 1;
+         clip_to: "clipper.toggle.voicemail-hidden";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "action";
+            min: (WIDTH / 4) ACTION_HEIGHT;
+            max: (WIDTH / 4) ACTION_HEIGHT;
+            fixed: 1 1;
+            rel1 {
+               to: "bg.actions";
+               relative: 0.75 0.0;
+            }
+            rel2 {
+               to: "bg.actions";
+               relative: 1.0 1.0;
+               offset: -1 -1;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part {
+         name: "button.ico.voicemail";
+         type: IMAGE;
+         mouse_events: 0;
+         clip_to: "clipper.toggle.voicemail-hidden";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            min: ACTION_HEIGHT ACTION_HEIGHT;
+            max: ACTION_HEIGHT ACTION_HEIGHT;
+            fixed: 1 1;
+            rel1.to: "button.voicemail";
+            rel2.to: "button.voicemail";
+            image.normal: "ico_voicemail.png";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+      part {
+         name: "clipper.toggle.voicemail-hidden";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "clipper.disable.voicemail";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+         description {
+            state: "on" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "clipper.toggle.voicemail-visible";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "clipper.disable.voicemail";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+         description {
+            state: "on" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+      }
+      part {
+         name: "button.toggle.voicemail";
+         type: RECT;
+         mouse_events: 1;
+         clip_to: "clipper.toggle.voicemail-visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "caution";
+            min: (WIDTH / 4) ACTION_HEIGHT;
+            max: (WIDTH / 4) ACTION_HEIGHT;
+            fixed: 1 1;
+            rel1 {
+               to: "bg.actions";
+               relative: 0.75 0.0;
+            }
+            rel2 {
+               to: "bg.actions";
+               relative: 1.0 1.0;
+               offset: -1 -1;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part {
+         name: "button.toggle.ico.voicemail";
+         type: IMAGE;
+         mouse_events: 0;
+         clip_to: "clipper.toggle.voicemail-visible";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "caution";
+            min: ACTION_HEIGHT ACTION_HEIGHT;
+            max: ACTION_HEIGHT ACTION_HEIGHT;
+            fixed: 1 1;
+            rel1.to: "button.toggle.voicemail";
+            rel2.to: "button.toggle.voicemail";
+            image.normal: "ico_voicemail.png";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+      part {
+         name: "elm.text.voicemail";
+         type: TEXT;
+         mouse_events: 0;
+         clip_to: "clipper.toggle.voicemail-visible";
+         description {
+            state: "default" 0.0;
+            color_class: "caution";
+            rel1 {
+               to: "button.voicemail";
+               offset: 0 (ITEM_PADDING / 2);
+            }
+            rel2.to: "button.voicemail";
+            align: 0.5 0.0;
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               max: 1 1;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+      part {
+         name: "blocker.voicemail";
+         type: RECT;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            visible: 0;
+            rel1.to: "button.voicemail";
+            rel2.to: "button.voicemail";
+         }
+         description {
+            state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+      programs {
+         program {
+            signal: "mouse,up,1";
+            source: "button.voicemail";
+            action: SIGNAL_EMIT "released,voicemail" "gui";
+            after: "show_up_voicemail";
+            api: id"_released" id" was released";
+         }
+         program {
+            name: "show_up_voicemail";
+            action: STATE_SET "default" 0.0;
+            transition: DECELERATE 0.1;
+            target: "button.voicemail";
+            target: "button.ico.voicemail";
+         }
+         program {
+            signal: "mouse,down,1";
+            source: "button.voicemail";
+            after: "show_down_voicemail";
+            action: SIGNAL_EMIT "pressed,voicemail" "gui";
+            api: id"_pressed" id" was pressed";
+         }
+         program {
+            name: "show_down_voicemail";
+            action: STATE_SET "pressed" 0.0;
+            transition: ACCELERATE 0.1;
+            target: "button.voicemail";
+            target: "button.ico.voicemail";
+         }
+         program {
+            signal: "mouse,clicked,1";
+            source: "button.voicemail";
+            action: SIGNAL_EMIT "clicked,voicemail" "gui";
+            api: id"_clicked" id" was clicked";
+         }
+
+         program {
+            signal: "mouse,up,1";
+            source: "button.toggle.voicemail";
+            action: SIGNAL_EMIT "released,voicemail" "gui";
+            after: "show_up_toggle_voicemail";
+            api: id"_released" id" was released";
+         }
+         program {
+            name: "show_up_toggle_voicemail";
+            action: STATE_SET "default" 0.0;
+            transition: DECELERATE 0.1;
+            target: "button.toggle.voicemail";
+            target: "button.toggle.ico.voicemail";
+            target: "elm.text.voicemail";
+         }
+         program {
+            signal: "mouse,down,1";
+            source: "button.toggle.voicemail";
+            after: "show_down_toggle_voicemail";
+            action: SIGNAL_EMIT "pressed,voicemail" "gui";
+            api: id"_pressed" id" was pressed";
+         }
+         program {
+            name: "show_down_toggle_voicemail";
+            action: STATE_SET "pressed" 0.0;
+            transition: ACCELERATE 0.1;
+            target: "button.toggle.voicemail";
+            target: "button.toggle.ico.voicemail";
+            target: "elm.text.voicemail";
+         }
+         program {
+            signal: "mouse,clicked,1";
+            source: "button.toggle.voicemail";
+            action: SIGNAL_EMIT "clicked,voicemail" "gui";
+            api: id"_clicked" id" was clicked";
+         }
+
+         program {
+            signal: "toggle,on,voicemail";
+            source: "gui";
+            action: STATE_SET "on" 0.0;
+            target: "clipper.toggle.voicemail-hidden";
+            target: "clipper.toggle.voicemail-visible";
+         }
+         program {
+            signal: "toggle,off,voicemail";
+            source: "gui";
+            action: STATE_SET "default" 0.0;
+            target: "clipper.toggle.voicemail-hidden";
+            target: "clipper.toggle.voicemail-visible";
+         }
+
+         program {
+            signal: "enable,voicemail";
+            source: "gui";
+            action: STATE_SET "default" 0.0;
+            target: "clipper.disable.voicemail";
+            target: "blocker.voicemail";
+         }
+         program {
+            signal: "disable,voicemail";
+            source: "gui";
+            action: STATE_SET "disabled" 0.0;
+            target: "clipper.disable.voicemail";
+            target: "blocker.voicemail";
+         }
+      }
+
+      programs {
+         program {
+            name: "show-keypad-swallow-phase1";
+            signal: "show,keypad";
+            source: "gui";
+            action: STATE_SET "hidden" 0.0;
+            target: "elm.swallow.contacts";
+            target: "elm.swallow.history";
+            after: "show-keypad-swallow-phase2";
+         }
+         program {
+            name: "show-keypad-swallow-phase2";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.keypad";
+         }
+
+         program {
+            signal: "show,keypad";
+            source: "gui";
+            action: SIGNAL_EMIT "toggle,on,keypad" "gui";
+         }
+         program {
+            signal: "show,keypad";
+            source: "gui";
+            action: SIGNAL_EMIT "toggle,off,contacts" "gui";
+         }
+         program {
+            signal: "show,keypad";
+            source: "gui";
+            action: SIGNAL_EMIT "toggle,off,history" "gui";
+         }
+
+         program {
+            name: "show-contacts-swallow-phase1";
+            signal: "show,contacts";
+            source: "gui";
+            action: STATE_SET "hidden" 0.0;
+            target: "elm.swallow.keypad";
+            target: "elm.swallow.history";
+            after: "show-contacts-swallow-phase2";
+         }
+         program {
+            name: "show-contacts-swallow-phase2";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.contacts";
+         }
+
+         program {
+            signal: "show,contacts";
+            source: "gui";
+            action: SIGNAL_EMIT "toggle,on,contacts" "gui";
+         }
+         program {
+            signal: "show,contacts";
+            source: "gui";
+            action: SIGNAL_EMIT "toggle,off,keypad" "gui";
+         }
+         program {
+            signal: "show,contacts";
+            source: "gui";
+            action: SIGNAL_EMIT "toggle,off,history" "gui";
+         }
+
+         program {
+            name: "show-history-swallow-phase1";
+            signal: "show,history";
+            source: "gui";
+            action: STATE_SET "hidden" 0.0;
+            target: "elm.swallow.contacts";
+            target: "elm.swallow.keypad";
+            after: "show-history-swallow-phase2";
+         }
+         program {
+            name: "show-history-swallow-phase2";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.history";
+         }
+
+         program {
+            signal: "show,history";
+            source: "gui";
+            action: SIGNAL_EMIT "toggle,on,history" "gui";
+         }
+         program {
+            signal: "show,history";
+            source: "gui";
+            action: SIGNAL_EMIT "toggle,off,contacts" "gui";
+         }
+         program {
+            signal: "show,history";
+            source: "gui";
+            action: SIGNAL_EMIT "toggle,off,keypad" "gui";
+         }
+      }
+   }
+}
diff --git a/data/themes/default/history-bg.edc b/data/themes/default/history-bg.edc
new file mode 100644 (file)
index 0000000..c89ac2d
--- /dev/null
@@ -0,0 +1,464 @@
+group {
+   name: "elm/layout/ofono-efl/history_bg";
+
+   images {
+      image: "bg_keypad.jpg" COMP;
+      image: "ico_edit.png" COMP;
+   }
+
+   parts {
+
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            rel1.relative: 0.0 0.0;
+            rel2.relative: 1.0 1.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+         }
+      }
+
+      part {
+         name: "button.area.clipper";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            rel1.to: "bg.buttons";
+            rel2 {
+               to: "bg.buttons";
+               offset: -1 SEPARATOR_HEIGHT;
+            }
+         }
+      }
+
+
+      part {
+         name: "button.clipper";
+         type: RECT;
+         clip_to: "button.area.clipper";
+         description {
+            state: "default" 0.0;
+            rel1.to: "button.area.clipper";
+            rel2.to: "button.area.clipper";
+         }
+         description {
+            state: "alternate" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "edit-button.clipper";
+         type: RECT;
+         clip_to: "button.area.clipper";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+            rel1.to: "button.area.clipper";
+            rel2.to: "button.area.clipper";
+         }
+         description {
+            state: "alternate" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+      }
+
+      part {
+         name: "edit.clipper";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            rel1.to: "bg.edit";
+            rel2 {
+               to: "bg.edit";
+               offset: -1 SEPARATOR_HEIGHT;
+            }
+         }
+      }
+
+      part {
+         name: "bg.buttons";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "button.clipper";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: 0 (ACTION_HEIGHT / 2);
+            rel2 {
+               to_x: "bg.edit";
+               relative: 0.0 0.0;
+               offset: (-ITEM_PADDING - 1) (ACTION_HEIGHT / 2 - 1);
+            }
+         }
+      }
+
+      part {
+         name: "bg.edit";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "edit.clipper";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: 0 (ACTION_HEIGHT / 2);
+            rel1 {
+               relative: 1.0 0.0;
+               offset: (-LIST_ICON_SIZE - ITEM_PADDING - BORDER_PADDING) 0;
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               offset: -1 (ACTION_HEIGHT / 2 - 1);
+            }
+         }
+      }
+
+#define SEPARATOR(id, clip, rely, offy, relto)                          \
+      part {                                                            \
+         name: "separator.primary."##id;                                \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "primary";                                     \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 offy;                                          \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT / 2);                \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "separator.bg."##id;                                     \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "bg";                                          \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 (offy + SEPARATOR_HEIGHT / 2);                 \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT);                    \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }
+
+      SEPARATOR("button", "button.area.clipper", 1.0, 0, "bg.buttons");
+      SEPARATOR("edit-button", "button.area.clipper", 1.0, 0, "bg.buttons");
+      SEPARATOR("edit", "edit.clipper", 1.0, 0, "bg.edit");
+#undef SEPARATOR
+
+      part {
+         name: "elm.swallow.all";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to_y: "separator.bg.button";
+               relative: 0.0 1.0;
+            }
+            visible: 1;
+         }
+         description {
+            state: "hide" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "elm.swallow.missed";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to_y: "separator.bg.button";
+               relative: 0.0 1.0;
+            }
+            visible: 0;
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+
+#define BUTTON(id, label, ccls, clip, r1, r2)                           \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            rel1 {                                                      \
+               to: "bg.buttons";                                        \
+               relative: r1;                                            \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.buttons";                                        \
+               relative: r2;                                            \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "label."##id;                                            \
+         type: TEXT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: ccls;                                          \
+            rel1.to: "button."##id;                                     \
+            rel2 {                                                      \
+               to: "button."##id;                                       \
+            }                                                           \
+            text {                                                      \
+               text: label;                                             \
+               font: FONT_NORMAL;                                       \
+               size: SIZE_MEDIUM;                                       \
+               align: 0.5 0.5;                                          \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 240 240 240 255;                                     \
+            color_class: "bg";                                          \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      programs {                                                        \
+         program {                                                      \
+            signal: "toggle,on,"##id;                                   \
+            source: "gui";                                              \
+            action: STATE_SET "pressed" 0.0;                            \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+         }                                                              \
+         program {                                                      \
+            signal: "toggle,off,"##id;                                  \
+            source: "gui";                                              \
+            action: STATE_SET "default" 0.0;                            \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "gui";                   \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+      }
+
+      BUTTON("all",    "All",    "action", "button.clipper", 0.0 0.0, 0.5 1.0);
+      BUTTON("missed", "Missed", "action", "button.clipper", 0.5 0.0, 1.0 1.0);
+
+      BUTTON("clear",     "Clear", "caution", "edit-button.clipper", 0.0 0.0, 0.5 1.0);
+      BUTTON("edit,done", "Done",  "action", "edit-button.clipper", 0.5 0.0, 1.0 1.0);
+#undef BUTTON
+
+      part {
+         name: "button.edit";
+         type: RECT;
+         mouse_events: 1;
+         clip_to: "edit.clipper";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "action";
+            rel1.to: "bg.edit";
+            rel2.to: "bg.edit";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part {
+         name: "ico.edit";
+         type: IMAGE;
+         mouse_events: 0;
+         clip_to: "edit.clipper";
+         description {
+            state: "default" 0.0;
+            min: LIST_ICON_SIZE LIST_ICON_SIZE;
+            max: LIST_ICON_SIZE LIST_ICON_SIZE;
+            align: 0.0 0.5;
+            color: 255 255 255 255;
+            color_class: "action";
+            fixed: 1 1;
+            rel1 {
+               to: "button.edit";
+               offset: ITEM_PADDING 0;
+            }
+            rel2 {
+               to: "button.edit";
+               offset: (-BORDER_PADDING - 1) -1;
+            }
+            image {
+               normal: "ico_edit.png";
+               scale_hint: STATIC;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 240 240 240 255;
+         }
+      }
+      part {
+         name: "button.over.edit";
+         type: RECT;
+         mouse_events: 1;
+         clip_to: "edit.clipper";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            visible: 0;
+            rel1.to: "bg.edit";
+            rel2.to: "bg.edit";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+
+      programs {
+         program {
+            signal: "toggle,on,edit";
+            source: "gui";
+            action: STATE_SET "pressed" 0.0;
+            target: "button.edit";
+            target: "button.over.edit";
+            target: "ico.edit";
+            after: "show_edit_buttons";
+         }
+         program {
+            name: "show_edit_buttons";
+            action: STATE_SET "alternate" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "button.clipper";
+            target: "edit-button.clipper";
+         }
+
+         program {
+            signal: "toggle,off,edit";
+            source: "gui";
+            action: STATE_SET "default" 0.0;
+            target: "button.edit";
+            target: "button.over.edit";
+            target: "ico.edit";
+            after: "hide_edit_buttons";
+         }
+         program {
+            name: "hide_edit_buttons";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "button.clipper";
+            target: "edit-button.clipper";
+         }
+
+         program {
+            signal: "mouse,clicked,1";
+            source: "button.edit";
+            action: SIGNAL_EMIT "clicked,edit" "gui";
+            api: "edit was clicked";
+         }
+         program {
+            signal: "mouse,clicked,1";
+            source: "button.over.edit";
+            action: SIGNAL_EMIT "clicked,edit,done" "gui";
+            api: "edit_done was clicked";
+         }
+      }
+   }
+
+   programs {
+      program {
+         name: "show_all";
+         signal: "show,all";
+         source: "gui";
+         action: STATE_SET "default" 0.0;
+         target: "elm.swallow.all";
+         after: "hide_missed";
+         after: "toggle,off,missed";
+         after: "toggle,on,all";
+      }
+
+      program {
+         name: "hide_missed";
+         action: STATE_SET "default" 0.0;
+         target: "elm.swallow.missed";
+      }
+
+      program {
+         name: "show_missed";
+         signal: "show,missed";
+         source: "gui";
+         action: STATE_SET "visible" 0.0;
+         target: "elm.swallow.missed";
+         after: "hide_all";
+         after: "toggle,on,missed";
+         after: "toggle,off,all";
+      }
+
+      program {
+         name: "toggle,on,missed";
+         action: SIGNAL_EMIT "toggle,on,missed" "gui";
+      }
+
+      program {
+         name: "toggle,off,missed";
+         action: SIGNAL_EMIT "toggle,off,missed" "gui";
+      }
+
+      program {
+         name: "toggle,on,all";
+         action: SIGNAL_EMIT "toggle,on,all" "gui";
+      }
+
+      program {
+         name: "toggle,off,all";
+         action: SIGNAL_EMIT "toggle,off,all" "gui";
+      }
+
+      program {
+         name: "hide_all";
+         action: STATE_SET "hide" 0.0;
+         target: "elm.swallow.all";
+      }
+   }
+}
diff --git a/data/themes/default/include.edc b/data/themes/default/include.edc
new file mode 100644 (file)
index 0000000..e75db3e
--- /dev/null
@@ -0,0 +1,21 @@
+collections {
+#include "colors.edc"
+#include "dialer.edc"
+#include "keypad.edc"
+#include "call.edc"
+#include "contacts-bg.edc"
+#include "contacts.edc"
+#include "multiparty-list.edc"
+#include "history.edc"
+#include "history-bg.edc"
+#include "scroller.edc"
+#include "popup.edc"
+#include "buttons.edc"
+#include "answer_screen.edc"
+#include "action_answer.edc"
+
+#include "messages.edc"
+#include "compose.edc"
+#include "messages-overview.edc"
+#include "messages-overview-list.edc"
+}
diff --git a/data/themes/default/keypad.edc b/data/themes/default/keypad.edc
new file mode 100644 (file)
index 0000000..8603dfc
--- /dev/null
@@ -0,0 +1,499 @@
+group {
+   name: "elm/layout/ofono-efl/keypad";
+
+   /*
+    * Represents the dialer keypad with the current number display and buttons.
+    *
+    * Parts:
+    *   TEXT: elm.text.display
+    *
+    * Signals:
+    *   Emit (source is "keypad"):
+    *     pressed,<ID>:  key <ID> was pressed
+    *     released,<ID>: key <ID> was released
+    *     clicked,<ID>:  key <ID> was clicked (press and release in the key)
+    *     enable,<ACTION>:  key <ID> is now clickable
+    *     disable,<ACTION>: key <ID> is now inactive
+    *
+    * Where <ID> is: numbers 0 to 9, star, hash, save, call or backspace.
+    *
+    * Where <ACTION> is: save, call or backspace.
+    */
+
+   images {
+      image: "bg_keypad.jpg" COMP;
+      image: "ico_call.png" COMP;
+      image: "ico_backspace.png" COMP;
+      image: "ico_add_contact.png" COMP;
+   }
+
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+         }
+      }
+
+      part {
+         name: "elm.text.display";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         api: "display" "displays the current number";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            min: (WIDTH - BORDER_PADDING*2) ACTION_HEIGHT;
+            rel1 {
+               offset: BORDER_PADDING 0;
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               offset: (-BORDER_PADDING -1) (ACTION_HEIGHT - 1);
+            }
+            text {
+               text: "+1 (12) 3456-7890";
+               font: FONT_NORMAL;
+               size: SIZE_HUGE;
+               size_range: SIZE_TINY SIZE_HUGE;
+               fit: 1 1;
+               align: 0.5 0.5;
+               ellipsis: 1.0;
+            }
+         }
+      }
+
+      part {
+         name: "elm.text.contact-and-type";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "secondary";
+            visible: 0;
+            fixed: 1 1;
+            rel1 {
+               to: "elm.text.display";
+               relative: 0.0 1.0;
+               offset: 0 0;
+            }
+            rel2 {
+               to: "elm.text.display";
+               relative: 1.0 1.0;
+               offset: -1 -1;
+            }
+            text {
+               font: FONT_BOLD;
+               size: SIZE_SMALL;
+               align: 0.5 0.0;
+               min: 0 1;
+            }
+         }
+         description {
+            state: "show" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+
+      part {
+         name: "bg.buttons";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: WIDTH ACTION_HEIGHT;
+            max: WIDTH WIDTH; /* keep it tight centered */
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 SEPARATOR_HEIGHT;
+               to_y: "elm.text.contact-and-type";
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               offset: 0 -SEPARATOR_HEIGHT;
+               to_y: "bg.actions";
+            }
+         }
+      }
+
+      part {
+         name: "bg.actions";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: WIDTH ACTION_HEIGHT;
+            max: WIDTH 99999; /* keep it tight centered */
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 -ACTION_HEIGHT;
+            }
+         }
+      }
+
+#define SEPARATOR(id, rely, offy, relto)                                \
+      part {                                                            \
+         name: "separator.primary."##id;                                \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "primary";                                     \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 offy;                                          \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT / 2);                \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "separator.bg."##id;                                     \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "bg";                                          \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 (offy + SEPARATOR_HEIGHT / 2);                 \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT);                    \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }
+
+      SEPARATOR("number", 1.0, 0, "elm.text.contact-and-type");
+      SEPARATOR("actions", 0.0, -SEPARATOR_HEIGHT, "bg.actions");
+#undef SEPARATOR
+
+
+#define BUTTON(id, label, sub, ccls, r1, r2)                            \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            rel1 {                                                      \
+               to: "bg.buttons";                                        \
+               relative: r1;                                            \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.buttons";                                        \
+               relative: r2;                                            \
+               offset: -2 -2;                                           \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "label."##id;                                            \
+         type: TEXT;                                                    \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: ccls;                                          \
+            rel1.to: "button."##id;                                     \
+            rel2 {                                                      \
+               to: "button."##id;                                       \
+               relative: 1.0 0.8;                                       \
+            }                                                           \
+            text {                                                      \
+               text: label;                                             \
+               font: FONT_NORMAL;                                       \
+               size: SIZE_LARGE;                                        \
+               align: 0.5 0.5;                                          \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 240 240 240 255;                                     \
+            color_class: "bg";                                          \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "sub."##id;                                              \
+         type: TEXT;                                                    \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "secondary";                                   \
+            rel1 {                                                      \
+               to: "button."##id;                                       \
+               relative: 0.0 0.5;                                       \
+               offset: 0 15;                                            \
+            }                                                           \
+            rel2.to: "button."##id;                                     \
+            text {                                                      \
+               text: sub;                                               \
+               font: FONT_BOLD;                                         \
+               size: SIZE_TINY;                                         \
+               align: 0.5 0.5;                                          \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 240 240 240 255;                                     \
+            color_class: "bg";                                          \
+         }                                                              \
+      }                                                                 \
+      programs {                                                        \
+         program {                                                      \
+            signal: "mouse,up,1";                                       \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "released,"##id "keypad";               \
+            after: "show_up_"##id;                                      \
+            api: id"_released" id" was released";                       \
+         }                                                              \
+         program {                                                      \
+            name: "show_up_"##id;                                       \
+            action: STATE_SET "default" 0.0;                            \
+            transition: DECELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+            target: "sub."##id;                                         \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1";                                     \
+            source: "button."##id;                                      \
+            after: "show_down_"##id;                                    \
+            action: SIGNAL_EMIT "pressed,"##id "keypad";                \
+            api: id"_pressed" id" was pressed";                         \
+         }                                                              \
+         program {                                                      \
+            name: "show_down_"##id;                                     \
+            action: STATE_SET "pressed" 0.0;                            \
+            transition: ACCELERATE 0.3;                                 \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+            target: "sub."##id;                                         \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "keypad";                \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1,double";                              \
+            source: "button."##id;                                      \
+            script {                                                    \
+               emit("pressed,"##id, "keypad");                          \
+            }                                                           \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1,triple";                              \
+            source: "button."##id;                                      \
+            script {                                                    \
+               emit("pressed,"##id, "keypad");                          \
+            }                                                           \
+         }                                                              \
+      }
+
+      BUTTON("1",    "1",     "", "action", 0.000 0.0, 0.333 0.25);
+      BUTTON("2",    "2",  "ABC", "action", 0.333 0.0, 0.666 0.25);
+      BUTTON("3",    "3",  "DEF", "action", 0.666 0.0, 1.000 0.25);
+
+      BUTTON("4",    "4",  "GHI", "action", 0.000 0.25, 0.333 0.50);
+      BUTTON("5",    "5",  "JKL", "action", 0.333 0.25, 0.666 0.50);
+      BUTTON("6",    "6",  "MNO", "action", 0.666 0.25, 1.000 0.50);
+
+      BUTTON("7",    "7", "PQRS", "action", 0.000 0.50, 0.333 0.75);
+      BUTTON("8",    "8",  "TUV", "action", 0.333 0.50, 0.666 0.75);
+      BUTTON("9",    "9", "WXYZ", "action", 0.666 0.50, 1.000 0.75);
+
+      BUTTON("star", "*",     "", "secondary",  0.000 0.75, 0.333 1.00);
+      BUTTON("0",    "0",    "+", "action", 0.333 0.75, 0.666 1.00);
+      BUTTON("hash", "#",     "", "secondary",  0.666 0.75, 1.000 1.00);
+#undef BUTTON
+
+
+#define ACTION_BUTTON(id, img, x0, x1)                                  \
+      part {                                                            \
+         name: "clipper."##id;                                          \
+         type: RECT;                                                    \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+         description {                                                  \
+            state: "disabled" 0.0;                                      \
+            inherit: "default" 0.0;                                     \
+            color_class: "disabled";                                    \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: "clipper."##id;                                       \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            min: ACTION_WIDTH ACTION_HEIGHT;                            \
+            max: ACTION_WIDTH ACTION_HEIGHT;                            \
+            fixed: 1 1;                                                 \
+            rel1 {                                                      \
+               to: "bg.actions";                                        \
+               relative: x0 0.0;                                        \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.actions";                                        \
+               relative: x1 1.0;                                        \
+               offset: -1 -1;                                           \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "button.ico."##id;                                       \
+         type: IMAGE;                                                   \
+         mouse_events: 0;                                               \
+         clip_to: "clipper."##id;                                       \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "action";                                      \
+            min: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            max: ACTION_HEIGHT ACTION_HEIGHT;                           \
+            fixed: 1 1;                                                 \
+            rel1.to: "button."##id;                                     \
+            rel2.to: "button."##id;                                     \
+            image.normal: "ico_"##img".png";                            \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color_class: "bg";                                          \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "blocker."##id;                                          \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: "clipper."##id;                                       \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 0 0 0 0;                                             \
+            visible: 0;                                                 \
+            rel1.to: "button."##id;                                     \
+            rel2.to: "button."##id;                                     \
+         }                                                              \
+         description {                                                  \
+            state: "disabled" 0.0;                                      \
+            inherit: "default" 0.0;                                     \
+            visible: 1;                                                 \
+         }                                                              \
+      }                                                                 \
+      programs {                                                        \
+         program {                                                      \
+            signal: "mouse,up,1";                                       \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "released,"##id "keypad";               \
+            after: "show_up_"##id;                                      \
+            api: id"_released" id" was released";                       \
+         }                                                              \
+         program {                                                      \
+            name: "show_up_"##id;                                       \
+            action: STATE_SET "default" 0.0;                            \
+            transition: DECELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "button.ico."##id;                                  \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,down,1";                                     \
+            source: "button."##id;                                      \
+            after: "show_down_"##id;                                    \
+            action: SIGNAL_EMIT "pressed,"##id "keypad";                \
+            api: id"_pressed" id" was pressed";                         \
+         }                                                              \
+         program {                                                      \
+            name: "show_down_"##id;                                     \
+            action: STATE_SET "pressed" 0.0;                            \
+            transition: ACCELERATE 0.1;                                 \
+            target: "button."##id;                                      \
+            target: "button.ico."##id;                                  \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "keypad";                \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+         program {                                                      \
+            signal: "disable,"##id;                                     \
+            source: "keypad";                                           \
+            action: STATE_SET "disabled" 0.0;                           \
+            target: "blocker."##id;                                     \
+            target: "clipper."##id;                                     \
+            api: id"_disable" "disable "##id;                           \
+         }                                                              \
+         program {                                                      \
+            signal: "enable,"##id;                                      \
+            source: "keypad";                                           \
+            action: STATE_SET "default" 0.0;                            \
+            target: "blocker."##id;                                     \
+            target: "clipper."##id;                                     \
+            api: id"_enable" "enable "##id;                             \
+         }                                                              \
+      }
+
+      ACTION_BUTTON("save",      "add_contact", 0.000000000, 0.333333333);
+      ACTION_BUTTON("call",      "call",        0.333333333, 0.666666666);
+      ACTION_BUTTON("backspace", "backspace",   0.666666666, 1.000000000);
+#undef ACTION_BUTTON
+   }
+
+   programs {
+      program {
+         signal: "show,contact";
+         source: "keypad";
+         action: STATE_SET "show" 0.0;
+         target: "elm.text.contact-and-type";
+      }
+
+      program {
+         signal: "hide,contact";
+         source: "keypad";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text.contact-and-type";
+      }
+   }
+}
diff --git a/data/themes/default/messages-overview.edc b/data/themes/default/messages-overview.edc
new file mode 100644 (file)
index 0000000..2e70657
--- /dev/null
@@ -0,0 +1,430 @@
+group {
+   name: "elm/layout/ofono-efl/messages-overview";
+
+   /*
+    * Represents the messages compose layout with actions and swallows.
+    *
+    * Parts:
+    *
+    * SWALLOW: elm.swallow.genlist - Where all the conversations will appear
+    *
+    * Signals:
+    *   Emit (source is "gui"):
+    *   clicked,edit - When the edit button is cliked
+    *   clicked,edit,done - When The Button "Done" while editing is clicked
+    *
+    *   Listens (source is "gui"):
+    *   show,genlist  - Show the genlist with the current message thread
+    *   hidden,genlist - Hide the genlist
+    *   toggle,on,edit - User is editing
+    *   toggle,off,edit - User finished the editing
+    *
+    * Where <ID> is the name of the button
+    *
+    */
+
+   images {
+      image: "bg_keypad.jpg" COMP;
+   }
+
+   parts {
+      part {
+         name: "bg";
+         type: IMAGE;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+            image {
+               normal: "bg_keypad.jpg";
+               scale_hint: STATIC;
+            }
+            fill.smooth: 1;
+
+         }
+      }
+
+      part {
+         name: "notification.bar";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            rel1.relative: 0.0 0.0;
+            rel2 {
+               relative: 1.0 0.0;
+               offset: -1 NOTIFICATION_BAR_HEIGHT;
+            }
+         }
+      }
+
+      part {
+         name: "button.area.clipper";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            rel1.to: "bg.buttons";
+            rel2 {
+               to: "bg.buttons";
+               offset: -1 SEPARATOR_HEIGHT;
+            }
+         }
+      }
+
+
+      part {
+         name: "button.clipper";
+         type: RECT;
+         clip_to: "button.area.clipper";
+         description {
+            state: "default" 0.0;
+            rel1.to: "button.area.clipper";
+            rel2.to: "button.area.clipper";
+         }
+         description {
+            state: "alternate" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "edit-button.clipper";
+         type: RECT;
+         clip_to: "button.area.clipper";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+            rel1.to: "button.area.clipper";
+            rel2.to: "button.area.clipper";
+         }
+         description {
+            state: "alternate" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+      }
+
+      part {
+         name: "edit.clipper";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            rel1.to: "bg.edit";
+            rel2 {
+               to: "bg.edit";
+               offset: -1 SEPARATOR_HEIGHT;
+            }
+         }
+      }
+
+      part {
+         name: "bg.buttons";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "button.clipper";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            fixed: 1 1;
+            min: 0 (ACTION_HEIGHT / 2);
+            rel1 {
+               to: "notification.bar";
+               relative: 0.0 1.0;
+            }
+            rel2 {
+               to_x: "bg.edit";
+               to_y: "notification.bar";
+               relative: 0.0 1.0;
+               offset: (-ITEM_PADDING - 1) (ACTION_HEIGHT / 2 - 1);
+            }
+         }
+      }
+
+      part {
+         name: "bg.edit";
+         type: RECT;
+         mouse_events: 0;
+         clip_to: "edit.clipper";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: 0 (ACTION_HEIGHT / 2);
+            rel1 {
+               to: "notification.bar";
+               relative: 1.0 1.0;
+               offset: (-LIST_ICON_SIZE - ITEM_PADDING - BORDER_PADDING) 0;
+            }
+            rel2 {
+               to: "notification.bar";
+               relative: 1.0 1.0;
+               offset: -1 (ACTION_HEIGHT / 2 - 1);
+            }
+         }
+      }
+
+#define SEPARATOR(id, clip, rely, offy, relto)                          \
+      part {                                                            \
+         name: "separator.primary."##id;                                \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "primary";                                     \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 offy;                                          \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT / 2);                \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "separator.bg."##id;                                     \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "bg";                                          \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 (offy + SEPARATOR_HEIGHT / 2);                 \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT);                    \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }
+
+      SEPARATOR("button", "button.area.clipper", 1.0, 0, "bg.buttons");
+      SEPARATOR("edit-button", "button.area.clipper", 1.0, 0, "bg.buttons");
+      SEPARATOR("edit", "edit.clipper", 1.0, 0, "bg.edit");
+#undef SEPARATOR
+
+
+#define BUTTON(id, label, ccls, clip, r1, r2)                           \
+      part {                                                            \
+         name: "button."##id;                                           \
+         type: RECT;                                                    \
+         mouse_events: 1;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 0;                                       \
+            color_class: "action";                                      \
+            rel1 {                                                      \
+               to: "bg.buttons";                                        \
+               relative: r1;                                            \
+            }                                                           \
+            rel2 {                                                      \
+               to: "bg.buttons";                                        \
+               relative: r2;                                            \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 255 255 255 255;                                     \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "label."##id;                                            \
+         type: TEXT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: ccls;                                          \
+            rel1.to: "button."##id;                                     \
+            rel2 {                                                      \
+               to: "button."##id;                                       \
+            }                                                           \
+            text {                                                      \
+               text: label;                                             \
+               font: FONT_NORMAL;                                       \
+               size: SIZE_MEDIUM;                                       \
+               align: 0.5 0.5;                                          \
+            }                                                           \
+         }                                                              \
+         description {                                                  \
+            state: "pressed" 0.0;                                       \
+            inherit: "default" 0.0;                                     \
+            color: 240 240 240 255;                                        \
+         }                                                              \
+      }                                                                 \
+                                                                        \
+      programs {                                                        \
+         program {                                                      \
+            signal: "toggle,on,"##id;                                   \
+            source: "gui";                                              \
+            action: STATE_SET "pressed" 0.0;                            \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+         }                                                              \
+         program {                                                      \
+            signal: "toggle,off,"##id;                                  \
+            source: "gui";                                              \
+            action: STATE_SET "default" 0.0;                            \
+            target: "button."##id;                                      \
+            target: "label."##id;                                       \
+         }                                                              \
+         program {                                                      \
+            signal: "mouse,clicked,1";                                  \
+            source: "button."##id;                                      \
+            action: SIGNAL_EMIT "clicked,"##id "gui";                   \
+            api: id"_clicked" id" was clicked";                         \
+         }                                                              \
+      }
+
+      BUTTON("view",    "View",    "action", "button.clipper", 0.0 0.0, 0.5 1.0);
+      BUTTON("compose", "Compose", "action", "button.clipper", 0.5 0.0, 1.0 1.0);
+
+      BUTTON("clear",     "Clear", "caution", "edit-button.clipper", 0.0 0.0, 0.5 1.0);
+      BUTTON("edit,done", "Done",  "action", "edit-button.clipper", 0.5 0.0, 1.0 1.0);
+#undef BUTTON
+
+      part {
+         name: "button.edit";
+         type: RECT;
+         mouse_events: 1;
+         clip_to: "edit.clipper";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "caution";
+            rel1.to: "bg.edit";
+            rel2.to: "bg.edit";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part {
+         name: "ico.edit";
+         type: IMAGE;
+         mouse_events: 0;
+         clip_to: "edit.clipper";
+         description {
+            state: "default" 0.0;
+            min: LIST_ICON_SIZE LIST_ICON_SIZE;
+            max: LIST_ICON_SIZE LIST_ICON_SIZE;
+            align: 0.0 0.5;
+            color: 255 255 255 255;
+            color_class: "caution";
+            rel1 {
+               to: "button.edit";
+               offset: ITEM_PADDING 0;
+            }
+            rel2 {
+               to: "button.edit";
+               offset: (-BORDER_PADDING - 1) -1;
+            }
+            image {
+               normal: "ico_del.png";
+               scale_hint: STATIC;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 240 240 240 255;
+         }
+      }
+      part {
+         name: "button.over.edit";
+         type: RECT;
+         mouse_events: 1;
+         clip_to: "edit.clipper";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            visible: 0;
+            rel1.to: "bg.edit";
+            rel2.to: "bg.edit";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+
+      part {
+         name: "elm.swallow.genlist";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to_y: "separator.bg.button";
+               relative: 0.0 1.0;
+            }
+         }
+      }
+   }
+
+   programs {
+      program {
+         signal: "toggle,on,edit";
+         source: "gui";
+         action: STATE_SET "pressed" 0.0;
+         target: "button.edit";
+         target: "button.over.edit";
+         target: "ico.edit";
+         after: "show_edit_buttons";
+      }
+      program {
+         name: "show_edit_buttons";
+         action: STATE_SET "alternate" 0.0;
+         transition: ACCELERATE 0.3;
+         target: "button.clipper";
+         target: "edit-button.clipper";
+      }
+
+      program {
+         signal: "toggle,off,edit";
+         source: "gui";
+         action: STATE_SET "default" 0.0;
+         target: "button.edit";
+         target: "button.over.edit";
+         target: "ico.edit";
+         after: "hide_edit_buttons";
+      }
+      program {
+         name: "hide_edit_buttons";
+         action: STATE_SET "default" 0.0;
+         transition: ACCELERATE 0.3;
+         target: "button.clipper";
+         target: "edit-button.clipper";
+      }
+
+      program {
+         signal: "mouse,clicked,1";
+         source: "button.edit";
+         action: SIGNAL_EMIT "clicked,edit" "gui";
+         api: "edit was clicked";
+      }
+      program {
+         signal: "mouse,clicked,1";
+         source: "button.over.edit";
+         action: SIGNAL_EMIT "clicked,edit,done" "gui";
+         api: "edit_done was clicked";
+      }
+   }
+}
diff --git a/data/themes/default/messages.edc b/data/themes/default/messages.edc
new file mode 100644 (file)
index 0000000..76ef8dc
--- /dev/null
@@ -0,0 +1,59 @@
+group {
+   name: "elm/layout/ofono-efl/messages";
+
+   min: WIDTH HEIGHT;
+
+   /*
+    * Represents the messages main layout with actions and swallows.
+    *
+    * Parts:
+    *
+    * Signals:
+    *   Emit (source is "gui"):
+    *   Listens (source is "gui"):
+    *
+    */
+
+   images {
+      image: "ico_edit.png" COMP;
+   }
+
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+
+      part {
+         name: "notification.bar";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            rel1.relative: 0.0 0.0;
+            rel2 {
+               relative: 1.0 0.0;
+               offset: -1 NOTIFICATION_BAR_HEIGHT;
+            }
+         }
+      }
+
+      part {
+         name: "elm.swallow.overview";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to_y: "notification.bar";
+               relative: 0.0 1.0;
+            }
+         }
+      }
+   }
+}
similarity index 98%
rename from data/themes/includes/multiparty-list.edc
rename to data/themes/default/multiparty-list.edc
index f9ee51b..d5194d2 100644 (file)
@@ -40,7 +40,7 @@ group {
          description {
             state: "pressed" 0.0;
             inherit: "default" 0.0;
-            color_class: "light";
+            color_class: "secondary";
          }
       }
 
@@ -109,7 +109,7 @@ group {
          description {
             state: "pressed" 0.0;
             inherit: "default" 0.0;
-            color_class: "light";
+            color_class: "secondary";
          }
       }
 
@@ -145,7 +145,7 @@ group {
          description {
             state: "pressed" 0.0;
             inherit: "default" 0.0;
-            color_class: "light";
+            color_class: "secondary";
          }
       }
 
@@ -236,7 +236,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             rel1 {
                to_x: "hangup.ico";
                relative: 1.0 0.5;
diff --git a/data/themes/default/popup.edc b/data/themes/default/popup.edc
new file mode 100644 (file)
index 0000000..3b5a63f
--- /dev/null
@@ -0,0 +1,613 @@
+group {
+   name: "elm/layout/ofono-efl/popup";
+
+   images {
+      image: "loading_0.png" COMP;
+      image: "loading_1.png" COMP;
+      image: "loading_2.png" COMP;
+      image: "loading_3.png" COMP;
+      image: "loading_4.png" COMP;
+      image: "loading_5.png" COMP;
+      image: "loading_6.png" COMP;
+      image: "loading_7.png" COMP;
+   }
+
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 1; /* do not let events fall through */
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 200;
+            color_class: "bg";
+         }
+         description {
+            state: "content" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 230;
+         }
+      }
+
+      part {
+         name: "notification,bar";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            rel1.relative: 0.0 0.0;
+            rel2 {
+               relative: 1.0 0.0;
+               offset: 0 50;
+            }
+         }
+      }
+
+#define SEPARATOR(id, clip, rely, offy, relto)                          \
+      part {                                                            \
+         name: "separator.primary."##id;                                \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "primary";                                     \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 offy;                                          \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT / 2);                \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "separator.bg."##id;                                     \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         clip_to: clip;                                                 \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "bg";                                          \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 (offy + SEPARATOR_HEIGHT / 2);                 \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT);                    \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }
+
+      part {
+         name: "clipper.title";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+            visible: 1;
+         }
+      }
+
+      part {
+         name: "elm.text.title";
+         type: TEXT;
+         mouse_events: 0;
+         clip_to: "clipper.title";
+         description {
+            state: "default" 0.0;
+            min: 0 (ACTION_HEIGHT / 2);
+            color_class: "action";
+            visible: 1;
+            rel1 {
+               to: "notification,bar";
+               relative: 0.0 1.0;
+               offset: 0 (-ACTION_HEIGHT / 2 - SEPARATOR_HEIGHT);
+            }
+            rel2 {
+               to: "notification,bar";
+               relative: 1.0 0.0;
+               offset: -1 (-SEPARATOR_HEIGHT - 1);
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               ellipsis: 0.0;
+               text: "contents";
+            }
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            rel1 {
+               to: "notification,bar";
+               relative: 0.0 1.0;
+               offset: 0 0;
+            }
+            rel2 {
+               to: "notification,bar";
+               relative: 1.0 0.0;
+               offset: -1 (ACTION_HEIGHT / 2 - 1);
+            }
+         }
+      }
+      SEPARATOR("title", "clipper.title", 1.0, 0, "elm.text.title");
+
+      programs {
+         program {
+            signal: "show,title";
+            source: "gui";
+            action: STATE_SET "visible" 0.0;
+            target: "clipper.title";
+            target: "elm.text.title";
+         }
+         program {
+            signal: "hide,title";
+            source: "gui";
+            action: STATE_SET "default" 0.0;
+            target: "clipper.title";
+            target: "elm.text.title";
+         }
+      }
+
+      part {
+         name: "loading";
+         type: IMAGE;
+         description {
+            state: "default" 0.0;
+            min: LOADING_SIZE LOADING_SIZE;
+            max: LOADING_SIZE LOADING_SIZE;
+            align: 0.5 0.5;
+            rel1.to: "elm.swallow.content";
+            rel2.to: "elm.swallow.content";
+            color_class: "action";
+            visible: 0;
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            image {
+               tween: "loading_0.png";
+               tween: "loading_1.png";
+               tween: "loading_2.png";
+               tween: "loading_3.png";
+               tween: "loading_4.png";
+               tween: "loading_5.png";
+               tween: "loading_6.png";
+               normal: "loading_7.png";
+               scale_hint: STATIC;
+            }
+            visible: 1;
+         }
+      }
+
+      part {
+         name: "elm.swallow.content";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to_y: "elm.text.title";
+               relative: 0.0 1.0;
+            }
+            rel2 {
+               to_y: "bg.buttons";
+               relative: 1.0 0.0;
+               offset: -1 0;
+            }
+         }
+      }
+
+      programs {
+         program {
+            signal: "show,content";
+            source: "gui";
+            action: STATE_SET "content" 0.0;
+            target: "bg";
+            after: "stop,loading";
+         }
+         program {
+            signal: "hide,content";
+            source: "gui";
+            action: STATE_SET "default" 0.0;
+            target: "bg";
+            after: "start,loading";
+         }
+
+         program {
+            name: "stop,loading";
+            action: ACTION_STOP;
+            target: "start,loading";
+            after: "hide,loading";
+         }
+         program {
+            name: "hide,loading";
+            action: STATE_SET "default" 0.0;
+            target: "loading";
+         }
+
+         program {
+            name: "start,loading";
+            action: STATE_SET "visible" 0.0;
+            transition: LINEAR 0.6666;
+            target: "loading";
+            after: "start,loading";
+         }
+
+         program {
+            signal: "load";
+            after: "start,loading";
+         }
+      }
+
+      /* note: this button 1/2 is ugly but simple */
+      part {
+         name: "bg.buttons";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "bg";
+            align: 0.5 1.0;
+            fixed: 1 1;
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 -1;
+            }
+         }
+         description {
+            state: "button1" 0.0;
+            inherit: "default" 0.0;
+            min: 0 (ACTION_HEIGHT + SEPARATOR_HEIGHT);
+         }
+         description {
+            state: "button2" 0.0;
+            inherit: "default" 0.0;
+            min: 0 (2 * ACTION_HEIGHT + 2 * SEPARATOR_HEIGHT);
+         }
+      }
+
+      part {
+         name: "elm.swallow.button1";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            visible: 0;
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 -1;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -1 -1;
+            }
+         }
+         description {
+            state: "button1" 0.0;
+            inherit: "default" 0.0;
+            min: 0 (ACTION_HEIGHT + SEPARATOR_HEIGHT);
+            visible: 1;
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 (-ACTION_HEIGHT - SEPARATOR_HEIGHT);
+            }
+         }
+         description {
+            state: "button2" 0.0;
+            inherit: "default" 0.0;
+            min: 0 (ACTION_HEIGHT + SEPARATOR_HEIGHT);
+            visible: 1;
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 (-2 * ACTION_HEIGHT - 2 * SEPARATOR_HEIGHT);
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -1 (-ACTION_HEIGHT - SEPARATOR_HEIGHT - 1);
+            }
+         }
+      }
+
+      part {
+         name: "elm.swallow.button2";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            visible: 0;
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 -1;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -1 -1;
+            }
+         }
+         description {
+            state: "button1" 0.0;
+            inherit: "default" 0.0;
+         }
+         description {
+            state: "button2" 0.0;
+            inherit: "default" 0.0;
+            min: 0 (ACTION_HEIGHT + SEPARATOR_HEIGHT);
+            visible: 1;
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 (-ACTION_HEIGHT - SEPARATOR_HEIGHT);
+            }
+         }
+      }
+
+      programs {
+         program {
+            signal: "buttons,0";
+            source: "gui";
+            action: STATE_SET "default" 0.0;
+            target: "bg.buttons";
+            target: "elm.swallow.button1";
+            target: "elm.swallow.button2";
+         }
+         program {
+            signal: "buttons,1";
+            source: "gui";
+            action: STATE_SET "button1" 0.0;
+            target: "bg.buttons";
+            target: "elm.swallow.button1";
+            target: "elm.swallow.button2";
+         }
+         program {
+            signal: "buttons,2";
+            source: "gui";
+            action: STATE_SET "button2" 0.0;
+            target: "bg.buttons";
+            target: "elm.swallow.button1";
+            target: "elm.swallow.button2";
+         }
+      }
+
+#undef SEPARATOR
+   }
+}
+
+group {
+   name: "elm/entry/cursor/dialer";
+   parts {
+      part {
+         name: "cursor";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color_class: "action";
+            min: ITEM_PADDING (SEPARATOR_HEIGHT / 2);
+            align: 0.5 1.0;
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 -1;
+            }
+         }
+         description {
+            state: "faded" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 128;
+         }
+      }
+      programs {
+         program {
+            name: "focus";
+            signal: "elm,action,focus";
+            source: "elm";
+            action: ACTION_STOP;
+            target: "unfocus";
+            target: "unfocus2";
+            after: "focus2";
+         }
+         program {
+            name: "focus2";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "cursor";
+            after: "focus3";
+         }
+         program {
+            name: "focus3";
+            action: STATE_SET "faded" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "cursor";
+            after: "focus2";
+         }
+
+         program {
+            name: "unfocus";
+            signal: "elm,action,unfocus";
+            source: "elm";
+            action: ACTION_STOP;
+            target: "focus";
+            target: "focus2";
+            target: "focus3";
+            after: "unfocus2";
+         }
+         program {
+            name: "unfocus2";
+            action: STATE_SET "faded" 0.0;
+            transition: ACCELERATE 0.3;
+            target: "cursor";
+         }
+      }
+   }
+}
+
+group {
+   name: "elm/entry/selection/dialer";
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color_class: "primary";
+         }
+      }
+   }
+}
+
+group {
+   name: "elm/entry/base-noedit/dialer-popup";
+
+   styles {
+      style {
+         name: "entry_textblock_style";
+         base: "font="FONT_NORMAL" font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_ACTION" wrap=word valign=middle align=center";
+         tag:  "b" "+ font_weight=Bold";
+         tag: "br" "\n";
+      }
+      style {
+         name: "entry_textblock_disabled_style";
+         base: "font="FONT_NORMAL" font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_ACTION" wrap=word valign=middle align=center";
+         tag:  "b" "+ font_weight=Bold";
+         tag: "br" "\n";
+      }
+   }
+
+   parts {
+      part {
+         name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         multiline: 1;
+         source: "elm/entry/selection/dialer";
+         source4: "elm/entry/cursor/dialer";
+         description {
+            state: "default" 0.0;
+            text {
+               style: "entry_textblock_style";
+               min: 0 1;
+               max: 1 1;
+               align: 0.5 0.5;
+            }
+         }
+         description {
+            state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "entry_textblock_disabled_style";
+            }
+         }
+      }
+   }
+
+   programs {
+      program {
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program {
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program {
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group {
+   name: "elm/entry/base/dialer-popup-editable";
+
+   styles {
+      style {
+         name: "entry_textblock_editable_style";
+         base: "font="FONT_NORMAL" font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_ACTION" wrap=word valign=top align=auto";
+         tag:  "b" "+ font_weight=Bold";
+         tag: "br" "\n";
+      }
+      style {
+         name: "entry_textblock_editable_disabled_style";
+         base: "font="FONT_NORMAL" font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_ACTION" wrap=word valign=top align=auto";
+         tag:  "b" "+ font_weight=Bold";
+         tag: "br" "\n";
+      }
+   }
+
+   parts {
+      part {
+         name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: EXPLICIT;
+         source: "elm/entry/selection/dialer";
+         source4: "elm/entry/cursor/dialer";
+         multiline: 1;
+         description {
+            state: "default" 0.0;
+            align: 0.0 0.0;
+            text {
+               style: "entry_textblock_editable_style";
+               min: 0 1;
+               max: 1 1;
+               align: -1.0 0.0;
+            }
+         }
+         description {
+            state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "entry_textblock_editable_disabled_style";
+            }
+         }
+      }
+   }
+
+   programs {
+      program {
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program {
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program {
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
similarity index 99%
rename from data/themes/includes/scroller.edc
rename to data/themes/default/scroller.edc
index c652b08..1593c60 100644 (file)
@@ -115,7 +115,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             fixed: 1 1;
             min: SCROLLBAR_WIDTH SCROLLBAR_HEIGHT;
             max: SCROLLBAR_WIDTH 99999;
@@ -336,7 +336,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             fixed: 1 1;
             min: SCROLLBAR_WIDTH SCROLLBAR_HEIGHT;
             max: SCROLLBAR_WIDTH 99999;
@@ -577,7 +577,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             fixed: 1 1;
             min: SCROLLBAR_WIDTH SCROLLBAR_HEIGHT;
             max: SCROLLBAR_WIDTH 99999;
similarity index 89%
rename from data/themes/default-hd.edc
rename to data/themes/night.edc
index 93b0955..0d144e2 100644 (file)
@@ -4,17 +4,17 @@
 #define ACTION_WIDTH 240
 #define ACTION_HEIGHT 80
 
-#define CALL_HEIGHT 110
+#define CALL_HEIGHT 130
 
 #define BORDER_PADDING 46
 #define ITEM_PADDING 16
 
-#define SEPARATOR_HEIGHT 8
+#define SEPARATOR_HEIGHT 2
 
 #define SCROLLBAR_WIDTH 16
 #define SCROLLBAR_HEIGHT 16
 
-#define LIST_ICON_SIZE 56
+#define LIST_ICON_SIZE 36
 #define LIST_ITEM_HEIGHT 120
 
 #define FONT_NORMAL "Verdana"
@@ -50,4 +50,4 @@
 
 #define MULTI_BUTTON_ENTRY_MAX_SIZE 300
 
-#include "default.edc"
+#include "night/include.edc"
diff --git a/data/themes/night/action_answer.edc b/data/themes/night/action_answer.edc
new file mode 100644 (file)
index 0000000..f7f1366
--- /dev/null
@@ -0,0 +1,240 @@
+
+group {
+   name: "elm/actionslider/base/answer";
+
+   images {
+      image: "ico_call.png" COMP;
+      image: "arrow_right.png" COMP;
+      image: "arrow_left.png" COMP;
+   }
+
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part {
+         name: "elm.text.left";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "caution";
+            rel1.offset: BORDER_PADDING 0;
+            rel2.relative: 0.5 1.0;
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 0 0.5;
+               min: 0 1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.image.arrow.right.1";
+         type: IMAGE;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 22 30;
+            max: 22 30;
+            color: 255 255 255 255;
+            color_class: "caution";
+            rel1 {
+               to: "elm.drag_button";
+               offset: (-190 - ITEM_PADDING) 0;
+            }
+            rel2 {
+               to: "elm.drag_button";
+            }
+            image {
+               normal: "arrow_right.png";
+               scale_hint: STATIC;
+            }
+            fill.smooth: 1;
+         }
+      }
+
+      part {
+         name: "elm.image.arrow.right.2";
+         type: IMAGE;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 22 30;
+            max: 22 30;
+            color: 255 255 255 128;
+            color_class: "caution";
+            rel1 {
+               to: "elm.drag_button";
+               offset: (-135 - ITEM_PADDING) 0;
+            }
+            rel2 {
+               to: "elm.drag_button";
+            }
+            image {
+               normal: "arrow_right.png";
+               scale_hint: STATIC;
+            }
+            fill.smooth: 1;
+         }
+      }
+
+       part {
+         name: "elm.image.arrow.left.1";
+         type: IMAGE;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 22 30;
+            max: 22 30;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               to: "elm.drag_button";
+               offset: (ITEM_PADDING + 190) 0;
+            }
+            rel2 {
+               to: "elm.drag_button";
+            }
+            image {
+               normal: "arrow_left.png";
+               scale_hint: STATIC;
+            }
+            fill.smooth: 1;
+         }
+      }
+
+       part {
+         name: "elm.image.arrow.left.2";
+         type: IMAGE;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 22 30;
+            max: 22 30;
+            color: 255 255 255 128;
+            color_class: "action";
+            rel1 {
+               to: "elm.drag_button";
+               offset: (135 +ITEM_PADDING) 0;
+            }
+            rel2 {
+               to: "elm.drag_button";
+            }
+            image {
+               normal: "arrow_left.png";
+               scale_hint: STATIC;
+            }
+            fill.smooth: 1;
+         }
+      }
+
+      part {
+         name: "elm.text.right";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               relative: 1.0 0.0;
+               offset: (-ACTION_HEIGHT -BORDER_PADDING) 0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -BORDER_PADDING 0;
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 0 0.5;
+               min: 0 1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.drag_button_base";
+         type: SWALLOW;
+         mouse_events: 1;
+         scale: 1;
+         description {
+        state: "default" 0.0;
+            fixed: 1 1;
+            min: 170 170;
+            align: 0.5 0.5;
+            rel1.to: "bg";
+            rel2 {
+               relative: 0.0 1.0;
+               to: "bg";
+            }
+         }
+         dragable {
+            confine: "bg";
+            x: 1 1 0;
+            y: 0 0 0;
+         }
+      }
+      part {
+         name: "elm.drag_button";
+         type: IMAGE;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            min: 170 170;
+            max: 170 170;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1.to_x: "elm.drag_button_base";
+            rel1.to_y: "bg";
+            rel2.to_x: "elm.drag_button_base";
+            rel2.to_y: "bg";
+            image {
+               normal: "ico_call.png";
+               scale_hint: STATIC;
+            }
+            fill.smooth: 1;
+         }
+         dragable {
+            events: "elm.drag_button_base";
+         }
+      }
+   }
+
+   programs {
+      program {
+         name: "elm.drag_button,mouse,up";
+         signal: "mouse,up,1";
+         source: "elm.drag_button";
+         action: SIGNAL_EMIT "elm.drag_button,mouse,up" "";
+      }
+      program {
+         name: "elm.drag_button,mouse,down";
+         signal: "mouse,down,1";
+         source: "elm.drag_button";
+         action: SIGNAL_EMIT "elm.drag_button,mouse,down" "";
+      }
+      program {
+         name: "elm.drag_button,mouse,move";
+         signal: "mouse,move";
+         source: "elm.drag_button_base";
+         action: SIGNAL_EMIT "elm.drag_button,mouse,move" "";
+      }
+   }
+}
diff --git a/data/themes/night/answer_screen.edc b/data/themes/night/answer_screen.edc
new file mode 100644 (file)
index 0000000..271cc87
--- /dev/null
@@ -0,0 +1,162 @@
+group {
+   name: "elm/layout/ofono-efl/answer";
+   min: WIDTH HEIGHT;
+   parts {
+
+      images {
+         image: "bg_call.jpg" COMP;
+      }
+
+      part {
+         name: "bg";
+         type: IMAGE;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+            min: WIDTH HEIGHT;
+            image {
+               normal: "bg_call.jpg";
+               scale_hint: STATIC;
+            }
+            fill.smooth: 1;
+         }
+      }
+
+      part {
+         name: "img.border";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               to: "elm.swallow.photo";
+               relative: 0.0 0.0;
+               offset: -1 -1;
+            }
+            rel2 {
+               to: "elm.swallow.photo";
+               relative: 1.0 1.0;
+               offset: 0 0;
+            }
+         }
+      }
+
+      part {
+         name: "img.bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+            rel1 {
+               to: "elm.swallow.photo";
+               relative: 0.0 0.0;
+               offset: 0 0;
+            }
+            rel2 {
+               to: "elm.swallow.photo";
+               relative: 1.0 1.0;
+               offset: -1 -1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.swallow.photo";
+         type: SWALLOW;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            min: CALL_PHOTO_SIZE CALL_PHOTO_SIZE;
+            max: CALL_PHOTO_SIZE CALL_PHOTO_SIZE;
+            rel1.offset: BORDER_PADDING SEPARATOR_HEIGHT;
+            rel2 {
+               relative: 0.0 0.0;
+               offset: (CALL_PHOTO_SIZE + BORDER_PADDING) (SEPARATOR_HEIGHT + CALL_PHOTO_SIZE);
+            }
+         }
+      }
+
+      part {
+         name: "elm.text.name";
+         type: TEXT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               to: "elm.swallow.photo";
+               relative: 1.0 0.0;
+               offset: ITEM_PADDING 0;
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               offset: 0 (SEPARATOR_HEIGHT + CONTACT_PHOTO_SIZE);
+            }
+            text {
+               text: "Gustavo Barbieri";
+               font: FONT_NORMAL;
+               size: SIZE_HUGE;
+               size_range: SIZE_TINY SIZE_HUGE;
+               fit: 1 1;
+               align: 0.0 0.5;
+               ellipsis: 0.0;
+            }
+         }
+      }
+
+      part {
+         name: "elm.text.state";
+         type: TEXT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "secondary";
+            fixed: 1 1;
+            align: 0.0 0.0;
+            rel1 {
+               to: "elm.text.name";
+               relative: 0.0 1.0;
+               offset: 0 -20;
+            }
+            rel2 {
+               to: "elm.text.name";
+               relative: 0.0 1.0;
+               offset: 0 -1;
+            }
+            text {
+               text: "Incoming...";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               min: 1 1;
+               align: 0.0 0.0;
+            }
+         }
+      }
+
+      part {
+         name: "elm.swallow.slider";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            rel1 {
+               relative: 0.0 1.0;
+               offset: 0 -LIST_CONTACT_HEIGHT;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+            }
+         }
+      }
+   }
+
+}
diff --git a/data/themes/night/buttons.edc b/data/themes/night/buttons.edc
new file mode 100644 (file)
index 0000000..2e6df8f
--- /dev/null
@@ -0,0 +1,261 @@
+group {
+   name: "elm/button/base/dialer";
+
+   parts {
+      part {
+         name: "area";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: 0 (ACTION_HEIGHT + SEPARATOR_HEIGHT);
+         }
+      }
+
+      part {
+         name: "bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "action";
+            min: 0 ACTION_HEIGHT;
+            rel1.offset: 0 SEPARATOR_HEIGHT;
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+
+      part {
+         name: "elm.text";
+         type: TEXT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+           rel1.offset: BORDER_PADDING SEPARATOR_HEIGHT;
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_LARGE;
+               align: 0.5 0.5;
+               ellipsis: 0.0;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+#define SEPARATOR(id, rely, offy, relto)                                \
+      part {                                                            \
+         name: "separator.primary."##id;                                \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "primary";                                     \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 offy;                                          \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT / 2);                \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "separator.bg."##id;                                     \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "bg";                                          \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 (offy + SEPARATOR_HEIGHT / 2);                 \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT);                    \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }
+
+      SEPARATOR("separator", 0.0, 0, "");
+#undef SEPARATOR
+   }
+
+   programs {
+      program {
+         signal: "mouse,clicked,1";
+         source: "bg";
+         action: SIGNAL_EMIT "elm,action,click" "";
+      }
+
+      program {
+         signal: "mouse,down,1";
+         source: "bg";
+         transition: ACCELERATE 0.3;
+         action: STATE_SET "pressed" 0.0;
+         target: "bg";
+         target: "elm.text";
+      }
+
+      program {
+         signal: "mouse,up,1";
+         source: "bg";
+         transition: DECELERATE 0.3;
+         action: STATE_SET "default" 0.0;
+         target: "bg";
+         target: "elm.text";
+      }
+   }
+}
+
+group {
+   name: "elm/button/base/dialer-caution";
+
+   parts {
+      part {
+         name: "area";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: 0 (ACTION_HEIGHT + SEPARATOR_HEIGHT);
+         }
+      }
+
+      part {
+         name: "bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "caution";
+            min: 0 ACTION_HEIGHT;
+            rel1.offset: 0 SEPARATOR_HEIGHT;
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+
+      part {
+         name: "elm.text";
+         type: TEXT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "caution";
+           rel1.offset: BORDER_PADDING SEPARATOR_HEIGHT;
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_LARGE;
+               align: 0.5 0.5;
+               ellipsis: 0.0;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+#define SEPARATOR(id, rely, offy, relto)                                \
+      part {                                                            \
+         name: "separator.primary."##id;                                \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "primary";                                     \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 offy;                                          \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT / 2);                \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }                                                                 \
+      part {                                                            \
+         name: "separator.bg."##id;                                     \
+         type: RECT;                                                    \
+         mouse_events: 0;                                               \
+         description {                                                  \
+            state: "default" 0.0;                                       \
+            color: 255 255 255 255;                                     \
+            color_class: "bg";                                          \
+            rel1 {                                                      \
+               relative: 0.0 rely;                                      \
+               offset: 0 (offy + SEPARATOR_HEIGHT / 2);                 \
+               to_y: relto;                                             \
+            }                                                           \
+            rel2 {                                                      \
+               relative: 1.0 rely;                                      \
+               offset: -1 (offy + SEPARATOR_HEIGHT);                    \
+               to_y: relto;                                             \
+            }                                                           \
+         }                                                              \
+      }
+
+      SEPARATOR("separator", 0.0, 0, "");
+#undef SEPARATOR
+   }
+
+   programs {
+      program {
+         signal: "mouse,clicked,1";
+         source: "bg";
+         action: SIGNAL_EMIT "elm,action,click" "";
+      }
+
+      program {
+         signal: "mouse,down,1";
+         source: "bg";
+         transition: ACCELERATE 0.3;
+         action: STATE_SET "pressed" 0.0;
+         target: "bg";
+         target: "elm.text";
+      }
+
+      program {
+         signal: "mouse,up,1";
+         source: "bg";
+         transition: DECELERATE 0.3;
+         action: STATE_SET "default" 0.0;
+         target: "bg";
+         target: "elm.text";
+      }
+   }
+}
similarity index 98%
rename from data/themes/includes/call.edc
rename to data/themes/night/call.edc
index 537bf6a..d6ce7c1 100644 (file)
@@ -70,18 +70,13 @@ group {
    parts {
       part {
          name: "bg";
-         type: IMAGE;
+         type: RECT;
          mouse_events: 0;
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "dark";
+            color_class: "primary";
             min: WIDTH HEIGHT;
-            image {
-               normal: "bg_call.jpg";
-               scale_hint: STATIC;
-            }
-            fill.smooth: 1;
          }
       }
 
@@ -102,14 +97,14 @@ group {
 
 #define SEPARATOR(id, clip, rely, offy, relto)                          \
       part {                                                            \
-         name: "separator.dark."##id;                                   \
+         name: "separator.primary."##id;                                \
          type: RECT;                                                    \
          mouse_events: 0;                                               \
          clip_to: clip;                                                 \
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "dark";                                        \
+            color_class: "primary";                                     \
             rel1 {                                                      \
                relative: 0.0 rely;                                      \
                offset: 0 offy;                                          \
@@ -214,7 +209,7 @@ group {
          description {                                                  \
             state: "pressed" 0.0;                                       \
             inherit: "default" 0.0;                                     \
-            color_class: "light";                                       \
+            color_class: "secondary";                                   \
          }                                                              \
       }                                                                 \
       programs {                                                        \
@@ -334,7 +329,7 @@ group {
          description {                                                  \
             state: "held" 0.0;                                          \
             inherit: "default" 0.0;                                     \
-            color_class: "light";                                       \
+            color_class: "secondary";                                   \
          }                                                              \
       }                                                                 \
                                                                         \
@@ -348,7 +343,7 @@ group {
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "light";                                       \
+            color_class: "secondary";                                   \
             fixed: 1 1;                                                 \
             align: 0.0 0.0;                                             \
             rel1 {                                                      \
@@ -382,7 +377,7 @@ group {
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "light";                                       \
+            color_class: "secondary";                                       \
             fixed: 1 1;                                                 \
             align: 0.0 0.0;                                             \
             rel1 {                                                      \
@@ -437,7 +432,7 @@ group {
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "dark";                                        \
+            color_class: "primary";                                     \
             rel1 {                                                      \
                to: "elm.swallow.img."##id;                              \
                relative: 0.0 0.0;                                       \
@@ -472,10 +467,8 @@ group {
                relative: 0.0 0.0;                                       \
                offset: CALL_PHOTO_SIZE (CALL_PHOTO_SIZE + ITEM_PADDING); \
             }                                                           \
-         }                                                             \
-                                                                       \
+         }                                                              \
       }                                                                 \
-                                                                       \
                                                                         \
       programs {                                                        \
          program {                                                      \
@@ -661,7 +654,7 @@ group {
             fixed: 1 1;                                                 \
             rel1.to: "button."##id;                                     \
             rel2.to: "button."##id;                                     \
-            image.normal: "ico_"##img".png";                           \
+            image.normal: "ico_"##img".png";                            \
          }                                                              \
          description {                                                  \
             state: "pressed" 0.0;                                       \
@@ -1238,6 +1231,7 @@ group {
             state: "pressed" 0.0;                                       \
             inherit: "default" 0.0;                                     \
             color: 16 16 16 255;                                        \
+            color_class: "bg";                                          \
          }                                                              \
       }                                                                 \
       part {                                                            \
@@ -1248,7 +1242,7 @@ group {
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "light";                                       \
+            color_class: "secondary";                                   \
             rel1 {                                                      \
                to: "button."##id;                                       \
                relative: 0.0 0.5;                                       \
@@ -1266,6 +1260,7 @@ group {
             state: "pressed" 0.0;                                       \
             inherit: "default" 0.0;                                     \
             color: 16 16 16 255;                                        \
+            color_class: "bg";                                          \
          }                                                              \
       }                                                                 \
       programs {                                                        \
@@ -1319,9 +1314,9 @@ group {
       BUTTON("8",    "8",  "TUV", "action", 0.333 0.50, 0.666 0.75);
       BUTTON("9",    "9", "WXYZ", "action", 0.666 0.50, 1.000 0.75);
 
-      BUTTON("star", "*",     "", "light",  0.000 0.75, 0.333 1.00);
+      BUTTON("star", "*",     "", "secondary",  0.000 0.75, 0.333 1.00);
       BUTTON("0",    "0",    "+", "action", 0.333 0.75, 0.666 1.00);
-      BUTTON("hash", "#",     "", "light",  0.666 0.75, 1.000 1.00);
+      BUTTON("hash", "#",     "", "secondary",  0.666 0.75, 1.000 1.00);
 #undef BUTTON
 
       part {
@@ -2102,9 +2097,9 @@ group {
          }                                                              \
       }
 
-      BUTTON("waiting-hangup", "Decline", "action", "separator.dark.hold-answer");
-      BUTTON("hold-answer", "Hold + Answer", "action", "separator.dark.hangup-answer");
-      BUTTON("hangup-answer", "Hangup + Answer", "caution", "separator.dark.waiting-last");
+      BUTTON("waiting-hangup", "Decline", "action", "separator.primary.hold-answer");
+      BUTTON("hold-answer", "Hold + Answer", "action", "separator.primary.hangup-answer");
+      BUTTON("hangup-answer", "Hangup + Answer", "caution", "separator.primary.waiting-last");
 #undef BUTTON
 
       SEPARATOR("waiting-last", "clipper.waiting-visible", 1.0, 0, "");
@@ -2174,7 +2169,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "dark";
+            color_class: "primary";
             rel1 {
                to: "elm.swallow.waiting.photo";
                relative: 0.0 0.0;
@@ -2220,7 +2215,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             fixed: 1 1;
             align: 0.0 0.0;
             rel1 {
@@ -2366,7 +2361,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "dark";
+            color_class: "primary";
             rel1 {
                offset: BORDER_PADDING 0;
             }
@@ -2393,7 +2388,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "dark";
+            color_class: "primary";
             align: 1.0 0.5;
             fixed: 1 1;
             rel1 {
similarity index 84%
rename from data/themes/includes/colors.edc
rename to data/themes/night/colors.edc
index cdb4bf4..7d052c1 100644 (file)
@@ -5,15 +5,15 @@ color_classes {
    }
 
    color_class {
-      name: "dark";
+      name: "primary";
       color: 25 45 51 255;
    }
 
    color_class {
-      name: "light";
+      name: "secondary";
       color: 55 88 84 255;
    }
-#define TEXTBLOCK_COLOR_LIGHT "#375854"
+#define TEXTBLOCK_COLOR_SECONDARY "#375854"
 
    color_class {
       name: "action";
similarity index 98%
rename from data/themes/includes/compose.edc
rename to data/themes/night/compose.edc
index 1906b9f..d728883 100644 (file)
@@ -42,17 +42,12 @@ group {
    parts {
       part {
          name: "bg";
-         type: IMAGE;
+         type: RECT;
          mouse_events: 0;
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "dark";
-            image {
-               normal: "bg_keypad.jpg";
-               scale_hint: STATIC;
-            }
-            fill.smooth: 1;
+            color_class: "primary";
          }
       }
 
@@ -228,14 +223,14 @@ group {
 
 #define SEPARATOR(id, clip, rely, offy, relto)                          \
       part {                                                            \
-         name: "separator.dark."##id;                                   \
+         name: "separator.primary."##id;                                \
          type: RECT;                                                    \
          mouse_events: 0;                                               \
          clip_to: clip;                                                 \
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "dark";                                        \
+            color_class: "primary";                                     \
             rel1 {                                                      \
                relative: 0.0 rely;                                      \
                offset: 0 offy;                                          \
@@ -564,12 +559,12 @@ group {
             state: "default" 0.0;
             color: 0 0 0 255;
             rel1 {
-               to: "separator.dark.back";
+               to: "separator.primary.back";
                relative: 0.0 0.0;
                offset: 0 (-ACTION_HEIGHT);
             }
             rel2 {
-               to: "separator.dark.back";
+               to: "separator.primary.back";
                relative: 1.0 0.0;
                offset: 0 -1;
             }
@@ -633,7 +628,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             fixed: 1 1;
             rel1 {
                to: "elm.text.separator_size";
@@ -663,7 +658,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             fixed: 1 1;
             rel1 {
                to: "elm.img.btn.send";
@@ -693,7 +688,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             rel1 {
                to: "elm.text.separator_size";
                relative: 1.0 0.0;
@@ -711,16 +706,16 @@ group {
          }
       }
 
-#define SEPARATOR(id, rely, offy, relto)                               \
+#define SEPARATOR(id, rely, offy, relto)                                               \
       part {                                                            \
-         name: "separator.dark."##id;                                   \
+         name: "separator.primary."##id;                                \
          type: RECT;                                                    \
          mouse_events: 0;                                               \
          clip_to: "clipper.contacts.visible";                           \
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "dark";                                        \
+            color_class: "primary";                                     \
             rel1 {                                                      \
                relative: 0.0 rely;                                      \
                offset: 0 offy;                                          \
@@ -785,11 +780,11 @@ group {
             color: 255 255 255 0;                                       \
             color_class: "action";                                      \
             rel1 {                                                      \
-           to: "bg.buttons.back";                                      \
+           to: "bg.buttons.back";                                                              \
                relative: r1;                                            \
             }                                                           \
             rel2 {                                                      \
-           to: "bg.buttons.back";                                      \
+           to: "bg.buttons.back";                                          \
                relative: r2;                                            \
             }                                                           \
          }                                                              \
@@ -1044,7 +1039,7 @@ group {
     styles {
        style {
           name: "entry_textblock_style_outgoing";
-          base: "font="FONT_NORMAL" font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_LIGHT" wrap=mixed valign=top align=right";
+          base: "font="FONT_NORMAL" font_size="SIZE_MEDIUM" color="TEXTBLOCK_COLOR_SECONDARY" wrap=mixed valign=top align=right";
           tag: "br" "\n";
        }
        style {
@@ -1107,7 +1102,7 @@ group {
           description {
              state: "default" 0.0;
              color: 255 255 255 255;
-             color_class: "light";
+             color_class: "secondary";
              min: MESSAGE_SEPARATOR_WIDTH MESSAGE_SEPARATOR_HEIGHT;
              max: MESSAGE_SEPARATOR_WIDTH MESSAGE_SEPARATOR_HEIGHT;
              align: 1.0 1.0;
@@ -1135,7 +1130,7 @@ group {
           description {
              state: "default" 0.0;
              color: 255 255 255 128;
-             color_class: "light";
+             color_class: "secondary";
              align: 0.0 0.0;
              fixed: 1 1;
              rel1 {
@@ -1197,7 +1192,7 @@ group {
           type: IMAGE;
           description {
              color: 255 255 255 255;
-             color_class: "light";
+             color_class: "secondary";
              min: MESSAGE_IMG_SENT_SIZE MESSAGE_IMG_SENT_SIZE;
              max: MESSAGE_IMG_SENT_SIZE MESSAGE_IMG_SENT_SIZE;
              visible: 0;
@@ -1414,7 +1409,7 @@ group {
          mouse_events: 0;
          description {
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             rel1 {
                to: "text.contact.name";
                relative: 0.0 1.0;
@@ -1446,7 +1441,7 @@ group {
          mouse_events: 0;
          description {
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             align: 1.0 0.5;
             fixed: 1 1;
             rel1 {
@@ -1990,7 +1985,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             rel1.offset: BORDER_PADDING 0;
             text {
                font: FONT_NORMAL;
@@ -2058,7 +2053,7 @@ group {
                to_x: "right.padding";
             }
             color: 255 255 255 0;
-            color_class: "light";
+            color_class: "secondary";
          }
          description {
             state: "focused" 0.0;
diff --git a/data/themes/night/contacts-bg.edc b/data/themes/night/contacts-bg.edc
new file mode 100644 (file)
index 0000000..bc3c790
--- /dev/null
@@ -0,0 +1,100 @@
+group {
+   name: "elm/layout/ofono-efl/contacts_bg";
+
+   images {
+      image: "bg_keypad.jpg" COMP;
+   }
+
+   parts {
+
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            rel1.relative: 0.0 0.0;
+            rel2.relative: 1.0 1.0;
+            color: 255 255 255 255;
+            color_class: "primary";
+         }
+      }
+
+      part {
+         name: "elm.swallow.details";
+         type: SWALLOW;
+         description {
+           state: "default" 0.0;
+            visible: 0;
+            rel1 {
+               relative: 0.0 0.0;
+               offset: 0 BORDER_PADDING;
+            }
+        }
+         description {
+            state: "show" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+
+      part {
+         name: "elm.swallow.genlist";
+         type: SWALLOW;
+         description {
+           state: "default" 0.0;
+            visible: 1;
+            rel1 {
+               relative: 0.0 0.0;
+               offset: 0 0;
+            }
+        }
+         description {
+            state: "hide" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+   }
+
+   programs {
+
+      program {
+         name: "hide,genlist";
+         action: STATE_SET "hide" 0.0;
+         target: "elm.swallow.genlist";
+      }
+
+      program {
+         name: "show,genlist";
+         action: STATE_SET "default" 0.0;
+         target: "elm.swallow.genlist";
+      }
+
+      program {
+         name: "hide,details";
+         action: STATE_SET "default" 0.0;
+         target: "elm.swallow.details";
+      }
+
+      program {
+         name: "show,details";
+         action: STATE_SET "show" 0.0;
+         target: "elm.swallow.details";
+      }
+
+      program {
+         signal: "show,details";
+         source: "gui";
+         after: "hide,genlist";
+         after: "show,details";
+      }
+
+      program {
+         signal: "hide,details";
+         source: "gui";
+         after: "hide,details";
+         after: "show,genlist";
+      }
+   }
+}
similarity index 98%
rename from data/themes/includes/contacts.edc
rename to data/themes/night/contacts.edc
index eb7cc50..8e04c9e 100644 (file)
@@ -59,7 +59,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "dark";
+            color_class: "primary";
             rel1 {
                to: "swallow.photo";
                relative: 0.0 0.0;
@@ -141,7 +141,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             rel1 {
                to: "swallow.photo";
                relative: 1.0 0.7;
@@ -279,7 +279,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "dark";
+            color_class: "primary";
             rel1 {
                to: "swallow.photo";
                relative: 0.0 0.0;
@@ -617,13 +617,13 @@ group {
 
 #define SEPARATOR(id, rely, offy, relto)                                \
       part {                                                            \
-         name: "separator.dark."##id;                                   \
+         name: "separator.primary."##id;                                \
          type: RECT;                                                    \
          mouse_events: 0;                                               \
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "dark";                                        \
+            color_class: "primary";                                     \
             rel1 {                                                      \
                relative: 0.0 rely;                                      \
                offset: 0 offy;                                          \
similarity index 98%
rename from data/themes/includes/history-bg.edc
rename to data/themes/night/history-bg.edc
index a1a7d69..4bc3f4c 100644 (file)
@@ -10,19 +10,14 @@ group {
 
       part {
          name: "bg";
-         type: IMAGE;
+         type: RECT;
          mouse_events: 0;
          description {
             state: "default" 0.0;
             rel1.relative: 0.0 0.0;
             rel2.relative: 1.0 1.0;
             color: 255 255 255 255;
-            color_class: "dark";
-            image {
-               normal: "bg_keypad.jpg";
-               scale_hint: STATIC;
-            }
-            fill.smooth: 1;
+            color_class: "primary";
          }
       }
 
@@ -126,14 +121,14 @@ group {
 
 #define SEPARATOR(id, clip, rely, offy, relto)                          \
       part {                                                            \
-         name: "separator.dark."##id;                                   \
+         name: "separator.primary."##id;                                \
          type: RECT;                                                    \
          mouse_events: 0;                                               \
          clip_to: clip;                                                 \
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "dark";                                        \
+            color_class: "primary";                                     \
             rel1 {                                                      \
                relative: 0.0 rely;                                      \
                offset: 0 offy;                                          \
@@ -258,6 +253,7 @@ group {
             state: "pressed" 0.0;                                       \
             inherit: "default" 0.0;                                     \
             color: 16 16 16 255;                                        \
+            color_class: "bg";                                          \
          }                                                              \
       }                                                                 \
                                                                         \
@@ -321,6 +317,7 @@ group {
             align: 0.0 0.5;
             color: 255 255 255 255;
             color_class: "action";
+            fixed: 1 1;
             rel1 {
                to: "button.edit";
                offset: ITEM_PADDING 0;
diff --git a/data/themes/night/history.edc b/data/themes/night/history.edc
new file mode 100644 (file)
index 0000000..1ac84d3
--- /dev/null
@@ -0,0 +1,547 @@
+group {
+   name: "elm/layout/ofono-efl/history/img";
+
+   parts {
+      part {
+         name: "rect";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            min: LIST_ICON_SIZE LIST_ICON_SIZE;
+            max: LIST_ICON_SIZE LIST_ICON_SIZE;
+            color: 0 0 0 0;
+         }
+      }
+   }
+   programs {
+      program {
+         signal: "mouse,clicked,1";
+         source: "rect";
+         action: SIGNAL_EMIT "clicked,more" "gui";
+      }
+   }
+}
+
+group {
+   name: "elm/genlist/item/history/default";
+
+   data {
+      item: "texts" "text.call.name text.call.time text.call.type";
+      item: "contents" "call.swallow.more";
+      item: "states" "missed";
+   }
+
+   script {
+      public missed;
+      public selected;
+      public not_first; /* can't call it 'first' as globals start as 0 */
+
+      public anim_states() {
+         new m = get_int(missed);
+         new s = get_int(selected);
+
+         if (m) {
+            if (s)
+               run_program(PROGRAM:"show_selected");
+            else
+               run_program(PROGRAM:"show_missed");
+         } else {
+            if (s)
+               run_program(PROGRAM:"show_selected");
+            else
+               run_program(PROGRAM:"show_default");
+         }
+      }
+
+      public set_missed(val) {
+         new m = get_int(missed);
+         new s = get_int(selected);
+
+         if (m == val) return;
+         set_int(missed, val);
+         m = val;
+
+         if (get_int(not_first)) {
+            if (m) {
+               if (s)
+                  run_program(PROGRAM:"animate_selected");
+               else
+                  run_program(PROGRAM:"animate_missed");
+            } else {
+               if (s)
+                  run_program(PROGRAM:"animate_selected");
+               else
+                  run_program(PROGRAM:"animate_default");
+            }
+         } else {
+            set_int(not_first, 1);
+            anim_states();
+         }
+      }
+
+      public set_selected(val) {
+         new s = get_int(selected);
+
+         if (s == val) return;
+         set_int(selected, val);
+
+         anim_states();
+      }
+   }
+
+   images {
+      image: "ico_arrow_right.png" COMP;
+      image: "ico_del.png" COMP;
+   }
+
+   parts{
+      part {
+         name: "bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "action";
+            min: ACTION_WIDTH LIST_ITEM_HEIGHT;
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part {
+         name: "text.call.name";
+         type: TEXT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               relative: 0.0 0.0;
+               offset: BORDER_PADDING ITEM_PADDING;
+            }
+            rel2 {
+               to_x: "call.swallow.more";
+               relative: 0.0 0.5;
+               offset: -ITEM_PADDING -1;
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 0.0 1.0;
+               ellipsis: 0.0;
+            }
+         }
+         description {
+            state: "missed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "caution";
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part {
+         name: "text.call.time";
+         type: TEXT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 128;
+            color_class: "action";
+            rel1 {
+               relative: 0.0 0.5;
+               offset: BORDER_PADDING 0;
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               offset: (-BORDER_PADDING - 1) (-ITEM_PADDING - 1);
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_SMALL;
+               align: 0.0 0.0;
+               ellipsis: 1.0;
+            }
+         }
+         description {
+            state: "missed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "caution";
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part {
+         name: "text.call.type";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 128;
+            color_class: "action";
+            rel1 {
+               relative: 0.5 0.5;
+               offset: 0 0;
+            }
+            rel2 {
+               to_x: "call.swallow.more";
+               relative: 0.0 1.0;
+               offset: (-ITEM_PADDING - ITEM_PADDING) (-ITEM_PADDING - 1);
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_SMALL;
+               align: 0.0 0.0;
+               ellipsis: 1.0;
+            }
+         }
+         description {
+            state: "missed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "caution";
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part {
+         name: "call.img.more";
+         type: IMAGE;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            rel1.to: "call.swallow.more";
+            rel2.to: "call.swallow.more";
+            color_class: "action";
+            image {
+               normal: "ico_arrow_right.png";
+               scale_hint: STATIC;
+            }
+         }
+         description {
+            state: "missed" 0.0;
+            inherit: "default" 0.0;
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part {
+         name: "call.swallow.more";
+         type: SWALLOW;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            min: LIST_ICON_SIZE LIST_ICON_SIZE;
+            max: LIST_ICON_SIZE LIST_ICON_SIZE;
+            align: 1.0 0.5;
+            fixed: 1 1;
+            rel1 {
+               relative: 1.0 0.0;
+               offset: -BORDER_PADDING 0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -BORDER_PADDING -1;
+            }
+         }
+      }
+   }
+
+   programs {
+      program {
+         signal: "elm,state,missed,active";
+         source: "elm";
+         script {
+            set_missed(1);
+         }
+      }
+      program {
+         signal: "elm,state,missed,passive";
+         source: "elm";
+         script {
+            set_missed(0);
+         }
+      }
+      program {
+         signal:  "elm,state,selected";
+         source:  "elm";
+         script {
+            set_selected(1);
+         }
+      }
+      program {
+         signal:  "elm,state,unselected";
+         source:  "elm";
+         script {
+            set_selected(0);
+         }
+      }
+
+      program {
+         name: "show_missed";
+         action: STATE_SET "missed" 0.0;
+         target: "bg";
+         target: "text.call.name";
+         target: "text.call.time";
+         target: "text.call.type";
+         target: "call.img.more";
+      }
+      program {
+         name: "show_default";
+         action: STATE_SET "default" 0.0;
+         target: "bg";
+         target: "text.call.name";
+         target: "text.call.time";
+         target: "text.call.type";
+         target: "call.img.more";
+      }
+      program {
+         name: "show_selected";
+         action: STATE_SET "selected" 0.0;
+         target: "bg";
+         target: "text.call.name";
+         target: "text.call.time";
+         target: "text.call.type";
+         target: "call.img.more";
+      }
+
+      program {
+         name: "animate_missed";
+         action: STATE_SET "missed" 0.0;
+         transition: DECELERATE 0.1;
+         target: "bg";
+         target: "text.call.name";
+         target: "text.call.time";
+         target: "text.call.type";
+         target: "call.img.more";
+      }
+      program {
+         name: "animate_default";
+         action: STATE_SET "default" 0.0;
+         transition: DECELERATE 0.1;
+         target: "bg";
+         target: "text.call.name";
+         target: "text.call.time";
+         target: "text.call.type";
+         target: "call.img.more";
+      }
+      program {
+         name: "animate_selected";
+         action: STATE_SET "selected" 0.0;
+         transition: DECELERATE 0.1;
+         target: "bg";
+         target: "text.call.name";
+         target: "text.call.time";
+         target: "text.call.type";
+         target: "call.img.more";
+      }
+   }
+}
+
+group {
+   name: "elm/genlist/item/history-delete/default";
+   alias: "elm/genlist/item_odd/history-delete/default";
+
+   data {
+      item: "contents" "call.swallow.delete";
+      item: "mode_part" "elm.swallow.decorate.content";
+   }
+
+   parts {
+      part {
+         name: "content.clipper";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+         }
+         description {
+            state: "decorated" 0.0;
+            inherit: "default" 0.0;
+            rel2 {
+               offset: (-BORDER_PADDING - LIST_ICON_SIZE - ITEM_PADDING - 1) -1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.swallow.decorate.content";
+         type: SWALLOW;
+         mouse_events: 1;
+         scale: 1;
+         clip_to: "content.clipper";
+         description {
+            state: "default" 0.0;
+         }
+      }
+
+      part {
+         name: "call.swallow.delete";
+         type: SWALLOW;
+         mouse_events: 1;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            fixed: 1 0;
+            align: 0.0 0.5;
+            rel1 {
+               relative: 1.0 0.0;
+            }
+         }
+         description {
+            state: "decorated" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            align: 1.0 0.5;
+            rel1 {
+               relative: 1.0 0.0;
+               offset: -BORDER_PADDING 0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -BORDER_PADDING -1;
+            }
+         }
+      }
+
+      programs {
+         program {
+            name: "animate_decorated";
+            signal: "elm,state,decorate,enabled,effect";
+            source: "elm";
+            action: STATE_SET "decorated" 0.0;
+            target: "content.clipper";
+            after: "animate_decorated2";
+         }
+         program {
+            name: "animate_decorated2";
+            action: STATE_SET "decorated" 0.0;
+            transition: ACCELERATE 0.15;
+            target: "call.swallow.delete";
+         }
+
+         program {
+            name: "animate_default";
+            signal: "elm,state,decorate,disabled,effect";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.15;
+            target: "call.swallow.delete";
+            after: "animate_default2";
+         }
+         program {
+            name: "animate_default2";
+            action: STATE_SET "default" 0.0;
+            target: "content.clipper";
+         }
+
+         program {
+            signal: "elm,state,decorate,enabled";
+            source: "elm";
+            action: STATE_SET "decorated" 0.0;
+            target: "content.clipper";
+            target: "call.swallow.delete";
+         }
+         program {
+            signal: "elm,state,decorate,disabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "content.clipper";
+            target: "call.swallow.delete";
+         }
+
+         program {
+            signal: "elm,state,slide,active";
+            source: "elm";
+            after: "animate_decorated";
+         }
+         program {
+            signal: "elm,state,slide,passive";
+            source: "elm";
+            after: "animate_default";
+         }
+      }
+   }
+}
+
+group {
+   name: "elm/button/base/history-delete";
+
+   parts {
+      part {
+         name: "area";
+         type: IMAGE;
+         description {
+            state: "default" 0.0;
+            min: LIST_ICON_SIZE LIST_ICON_SIZE;
+            max: LIST_ICON_SIZE LIST_ICON_SIZE;
+            color: 255 255 255 255;
+            color_class: "caution";
+            image {
+               normal: "ico_del.png";
+               scale_hint: STATIC;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 128;
+         }
+      }
+   }
+   programs {
+      program {
+         signal: "mouse,down,1";
+         source: "area";
+         action: SIGNAL_EMIT "elm,action,press" "";
+      }
+      program {
+         signal: "mouse,up,1";
+         source: "area";
+         action: SIGNAL_EMIT "elm,action,unpress" "";
+      }
+      program {
+         signal: "mouse,clicked,1";
+         source: "area";
+         action: SIGNAL_EMIT "elm,action,click" "";
+      }
+
+      program {
+         signal: "mouse,up,1";
+         source: "area";
+         action: STATE_SET "default" 0.0;
+         transition: ACCELERATE 0.1;
+         target: "area";
+      }
+
+      program {
+         signal: "mouse,down,1";
+         source: "area";
+         action: STATE_SET "pressed" 0.0;
+         transition: ACCELERATE 0.1;
+         target: "area";
+      }
+   }
+}
diff --git a/data/themes/night/include.edc b/data/themes/night/include.edc
new file mode 100644 (file)
index 0000000..e75db3e
--- /dev/null
@@ -0,0 +1,21 @@
+collections {
+#include "colors.edc"
+#include "dialer.edc"
+#include "keypad.edc"
+#include "call.edc"
+#include "contacts-bg.edc"
+#include "contacts.edc"
+#include "multiparty-list.edc"
+#include "history.edc"
+#include "history-bg.edc"
+#include "scroller.edc"
+#include "popup.edc"
+#include "buttons.edc"
+#include "answer_screen.edc"
+#include "action_answer.edc"
+
+#include "messages.edc"
+#include "compose.edc"
+#include "messages-overview.edc"
+#include "messages-overview-list.edc"
+}
similarity index 97%
rename from data/themes/includes/keypad.edc
rename to data/themes/night/keypad.edc
index 78ad3bf..3c82d9a 100644 (file)
@@ -30,17 +30,12 @@ group {
    parts {
       part {
          name: "bg";
-         type: IMAGE;
+         type: RECT;
          mouse_events: 0;
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "dark";
-            image {
-               normal: "bg_keypad.jpg";
-               scale_hint: STATIC;
-            }
-            fill.smooth: 1;
+            color_class: "primary";
          }
       }
 
@@ -82,7 +77,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "light";
+            color_class: "secondary";
             visible: 0;
             fixed: 1 1;
             rel1 {
@@ -120,10 +115,12 @@ group {
             max: WIDTH WIDTH; /* keep it tight centered */
             rel1 {
                relative: 0.0 1.0;
+               offset: 0 SEPARATOR_HEIGHT;
                to_y: "elm.text.contact-and-type";
             }
             rel2 {
                relative: 1.0 0.0;
+               offset: 0 -SEPARATOR_HEIGHT;
                to_y: "bg.actions";
             }
          }
@@ -147,13 +144,13 @@ group {
 
 #define SEPARATOR(id, rely, offy, relto)                                \
       part {                                                            \
-         name: "separator.dark."##id;                                   \
+         name: "separator.primary."##id;                                \
          type: RECT;                                                    \
          mouse_events: 0;                                               \
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "dark";                                        \
+            color_class: "primary";                                     \
             rel1 {                                                      \
                relative: 0.0 rely;                                      \
                offset: 0 offy;                                          \
@@ -241,6 +238,7 @@ group {
             state: "pressed" 0.0;                                       \
             inherit: "default" 0.0;                                     \
             color: 16 16 16 255;                                        \
+            color_class: "bg";                                          \
          }                                                              \
       }                                                                 \
       part {                                                            \
@@ -250,17 +248,17 @@ group {
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "light";                                       \
+            color_class: "secondary";                                   \
             rel1 {                                                      \
                to: "button."##id;                                       \
                relative: 0.0 0.5;                                       \
-               offset: 0 15;                                             \
+               offset: 0 15;                                            \
             }                                                           \
             rel2.to: "button."##id;                                     \
             text {                                                      \
                text: sub;                                               \
-               font: FONT_BOLD;                              \
-               size: SIZE_TINY;                                                \
+               font: FONT_BOLD;                                         \
+               size: SIZE_TINY;                                         \
                align: 0.5 0.5;                                          \
             }                                                           \
          }                                                              \
@@ -268,6 +266,7 @@ group {
             state: "pressed" 0.0;                                       \
             inherit: "default" 0.0;                                     \
             color: 16 16 16 255;                                        \
+            color_class: "bg";                                          \
          }                                                              \
       }                                                                 \
       programs {                                                        \
@@ -335,9 +334,9 @@ group {
       BUTTON("8",    "8",  "TUV", "action", 0.333 0.50, 0.666 0.75);
       BUTTON("9",    "9", "WXYZ", "action", 0.666 0.50, 1.000 0.75);
 
-      BUTTON("star", "*",     "", "light",  0.000 0.75, 0.333 1.00);
+      BUTTON("star", "*",     "", "secondary",  0.000 0.75, 0.333 1.00);
       BUTTON("0",    "0",    "+", "action", 0.333 0.75, 0.666 1.00);
-      BUTTON("hash", "#",     "", "light",  0.666 0.75, 1.000 1.00);
+      BUTTON("hash", "#",     "", "secondary",  0.666 0.75, 1.000 1.00);
 #undef BUTTON
 
 
diff --git a/data/themes/night/messages-overview-list.edc b/data/themes/night/messages-overview-list.edc
new file mode 100644 (file)
index 0000000..413be88
--- /dev/null
@@ -0,0 +1,332 @@
+group {
+   name: "elm/genlist/item/messages-overview/default";
+
+   data {
+      item: "texts" "elm.text.name elm.text.content elm.text.time";
+      item: "contents" "elm.swallow.more";
+   }
+
+   images {
+      image: "ico_arrow_right.png" COMP;
+      image: "ico_del.png" COMP;
+   }
+
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 0;
+            color_class: "action";
+            min: WIDTH LIST_CONTACT_HEIGHT;
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+
+      part {
+         name: "msg.img.more";
+         type: IMAGE;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            rel1.to: "elm.swallow.more";
+            rel2.to: "elm.swallow.more";
+            color_class: "action";
+            image {
+               normal: "ico_arrow_right.png";
+               scale_hint: STATIC;
+            }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part {
+         name: "elm.swallow.more";
+         type: SWALLOW;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            min: LIST_ICON_SIZE LIST_ICON_SIZE;
+            max: LIST_ICON_SIZE LIST_ICON_SIZE;
+            align: 1.0 0.5;
+            fixed: 1 1;
+            rel1 {
+               relative: 1.0 0.0;
+               offset: -BORDER_PADDING 0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -BORDER_PADDING -1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.text.name";
+         type: TEXT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               relative: 0.0 0.0;
+               offset: BORDER_PADDING ITEM_PADDING;
+            }
+            rel2 {
+               to_x: "elm.text.time";
+               relative: 0.0 0.5;
+               offset: -ITEM_PADDING -1;
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_LARGE;
+               align: 0.0 1.0;
+               ellipsis: 0.0;
+            }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part {
+         name: "elm.text.content";
+         type: TEXT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 128;
+            color_class: "action";
+            fixed: 1 1;
+            rel1 {
+               to: "elm.text.name";
+               relative: 0.0 1.0;
+               offset: 0 0;
+            }
+            rel2 {
+               to: "elm.swallow.more";
+               relative: 0.0 1.0;
+               offset: -ITEM_PADDING -ITEM_PADDING;
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 0.0 0.0;
+               ellipsis: 0.0;
+            }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+
+      part {
+         name: "elm.text.time";
+         type: TEXT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            fixed: 1 1;
+            state: "default" 0.0;
+            color: 255 255 255 128;
+            color_class: "action";
+            align: 1.0 0.5;
+            rel1 {
+               to_x: "elm.swallow.more";
+               relative: 0.0 0.0;
+               offset: -ITEM_PADDING ITEM_PADDING;
+            }
+            rel2 {
+               to_x: "elm.swallow.more";
+               relative: 0.0 0.5;
+               offset: -ITEM_PADDING -1;
+            }
+            text {
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 1.0 1.0;
+               ellipsis: 0.0;
+               min: 1 0;
+            }
+         }
+         description {
+            state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color_class: "bg";
+         }
+      }
+   }
+   programs {
+      program {
+         signal:  "elm,state,selected";
+         source:  "elm";
+         after: "show_selected";
+      }
+      program {
+         signal:  "elm,state,unselected";
+         source:  "elm";
+         after: "show_default";
+      }
+      program {
+         name: "show_default";
+         action: STATE_SET "default" 0.0;
+         target: "bg";
+         target: "elm.text.name";
+         target: "elm.text.time";
+         target: "elm.text.content";
+         target: "msg.img.more";
+      }
+      program {
+         name: "show_selected";
+         action: STATE_SET "selected" 0.0;
+         target: "bg";
+         target: "elm.text.name";
+         target: "elm.text.time";
+         target: "elm.text.content";
+         target: "msg.img.more";
+      }
+   }
+}
+
+group {
+   name: "elm/genlist/item/messages-overview-delete/default";
+   alias: "elm/genlist/item_odd/messages-overview-delete/default";
+
+   data {
+      item: "contents" "elm.swallow.delete";
+      item: "mode_part" "elm.swallow.decorate.content";
+   }
+
+   parts {
+      part {
+         name: "content.clipper";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+         }
+         description {
+            state: "decorated" 0.0;
+            inherit: "default" 0.0;
+            rel2 {
+               offset: (-BORDER_PADDING - LIST_ICON_SIZE - ITEM_PADDING - 1) -1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.swallow.decorate.content";
+         type: SWALLOW;
+         mouse_events: 1;
+         scale: 1;
+         clip_to: "content.clipper";
+         description {
+            state: "default" 0.0;
+         }
+      }
+
+      part {
+         name: "elm.swallow.delete";
+         type: SWALLOW;
+         mouse_events: 1;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            fixed: 1 0;
+            align: 0.0 0.5;
+            rel1 {
+               relative: 1.0 0.0;
+            }
+         }
+         description {
+            state: "decorated" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            align: 1.0 0.5;
+            rel1 {
+               relative: 1.0 0.0;
+               offset: -BORDER_PADDING 0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -BORDER_PADDING -1;
+            }
+         }
+      }
+
+      programs {
+         program {
+            name: "animate_decorated";
+            signal: "elm,state,decorate,enabled,effect";
+            source: "elm";
+            action: STATE_SET "decorated" 0.0;
+            target: "content.clipper";
+            after: "animate_decorated2";
+         }
+         program {
+            name: "animate_decorated2";
+            action: STATE_SET "decorated" 0.0;
+            transition: ACCELERATE 0.15;
+            target: "elm.swallow.delete";
+         }
+
+         program {
+            name: "animate_default";
+            signal: "elm,state,decorate,disabled,effect";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            transition: ACCELERATE 0.15;
+            target: "elm.swallow.delete";
+            after: "animate_default2";
+         }
+         program {
+            name: "animate_default2";
+            action: STATE_SET "default" 0.0;
+            target: "content.clipper";
+         }
+
+         program {
+            signal: "elm,state,decorate,enabled";
+            source: "elm";
+            action: STATE_SET "decorated" 0.0;
+            target: "content.clipper";
+            target: "elm.swallow.delete";
+         }
+         program {
+            signal: "elm,state,decorate,disabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "content.clipper";
+            target: "elm.swallow.delete";
+         }
+
+         program {
+            signal: "elm,state,slide,active";
+            source: "elm";
+            after: "animate_decorated";
+         }
+         program {
+            signal: "elm,state,slide,passive";
+            source: "elm";
+            after: "animate_default";
+         }
+      }
+   }
+}
similarity index 99%
rename from data/themes/includes/messages-overview.edc
rename to data/themes/night/messages-overview.edc
index 108a51e..5cd1974 100644 (file)
@@ -35,7 +35,7 @@ group {
          description {
             state: "default" 0.0;
             color: 255 255 255 255;
-            color_class: "dark";
+            color_class: "primary";
             image {
                normal: "bg_keypad.jpg";
                scale_hint: STATIC;
@@ -168,14 +168,14 @@ group {
 
 #define SEPARATOR(id, clip, rely, offy, relto)                          \
       part {                                                            \
-         name: "separator.dark."##id;                                   \
+         name: "separator.primary."##id;                                \
          type: RECT;                                                    \
          mouse_events: 0;                                               \
          clip_to: clip;                                                 \
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "dark";                                        \
+            color_class: "primary";                                     \
             rel1 {                                                      \
                relative: 0.0 rely;                                      \
                offset: 0 offy;                                          \
diff --git a/data/themes/night/multiparty-list.edc b/data/themes/night/multiparty-list.edc
new file mode 100644 (file)
index 0000000..d5194d2
--- /dev/null
@@ -0,0 +1,306 @@
+group {
+   name: "elm/layout/ofono-efl/multiparty-details";
+
+   images {
+      image: "ico_multiparty_hangup.png" COMP;
+      image: "ico_multiparty_private.png" COMP;
+   }
+
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+            min: ACTION_WIDTH LIST_ITEM_HEIGHT;
+         }
+      }
+
+      part {
+         name: "hangup.ico";
+         type: IMAGE;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            min: LIST_ICON_SIZE LIST_ICON_SIZE;
+            max: LIST_ICON_SIZE LIST_ICON_SIZE;
+            align: 0.0 0.5;
+            rel1.offset: BORDER_PADDING 0;
+            rel2 {
+               relative: 0.0 1.0;
+               offset: (LIST_ICON_SIZE + BORDER_PADDING - 1) -1;
+            }
+            image.normal: "ico_multiparty_hangup.png";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "secondary";
+         }
+      }
+
+      programs {
+         program {
+            signal: "mouse,down,1";
+            source: "hangup.ico";
+            action: STATE_SET "pressed" 0.0;
+            transition: ACCELERATE 0.1;
+            target: "hangup.ico";
+         }
+
+         program {
+            signal: "mouse,up,1";
+            source: "hangup.ico";
+            action: STATE_SET "default" 0.0;
+            transition: DECELERATE 0.1;
+            target: "hangup.ico";
+         }
+
+         program {
+            signal: "mouse,clicked,1";
+            source: "hangup.ico";
+            action: SIGNAL_EMIT "clicked,hangup" "call";
+         }
+      }
+
+      part {
+         name: "private.clipper";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+         }
+         description {
+            state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "private.ico";
+         type: IMAGE;
+         mouse_events: 1;
+         clip_to: "private.clipper";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            min: LIST_ICON_SIZE LIST_ICON_SIZE;
+            max: LIST_ICON_SIZE LIST_ICON_SIZE;
+            align: 0.0 0.5;
+            rel1 {
+               relative: 1.0 0.0;
+               offset: (-LIST_ICON_SIZE -BORDER_PADDING - 1) 0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: (-BORDER_PADDING - 1) -1;
+            }
+            image.normal: "ico_multiparty_private.png";
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "secondary";
+         }
+      }
+
+      part {
+         name: "private.label";
+         type: TEXT;
+         mouse_events: 0;
+         clip_to: "private.clipper";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            align: 0.5 0.0;
+            fixed: 1 1;
+            rel1 {
+               to: "private.ico";
+               relative: 0.5 1.0;
+               offset: 0 2;
+            }
+            rel2 {
+               to_x: "private.ico";
+               relative: 0.5 1.0;
+               offset: -1 -1;
+            }
+            text {
+               text: "PRIVATE";
+               font: FONT_NORMAL;
+               size: SIZE_SMALL;
+               min: 1 1;
+               align: 0.5 0.0;
+            }
+         }
+         description {
+            state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color_class: "secondary";
+         }
+      }
+
+      programs {
+         program {
+            signal: "mouse,down,1";
+            source: "private.ico";
+            action: STATE_SET "pressed" 0.0;
+            transition: ACCELERATE 0.1;
+            target: "private.ico";
+            target: "private.label";
+         }
+
+         program {
+            signal: "mouse,up,1";
+            source: "private.ico";
+            action: STATE_SET "default" 0.0;
+            in: 0.1 0.0;
+            transition: DECELERATE 0.1;
+            target: "private.ico";
+            target: "private.label";
+         }
+
+         program {
+            name: "clicked_private_ico_phase1";
+            signal: "mouse,clicked,1";
+            source: "private.ico";
+            action: SIGNAL_EMIT "clicked,private" "call";
+         }
+
+         program {
+            signal: "show,private";
+            source: "call";
+            action: STATE_SET "default" 0.0;
+            target: "private.clipper";
+         }
+         program {
+            signal: "hide,private";
+            source: "call";
+            action: STATE_SET "hidden" 0.0;
+            target: "private.clipper";
+         }
+      }
+
+      part {
+         name: "elm.text.name";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         api: "name" "party name";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "action";
+            rel1 {
+               to_x: "hangup.ico";
+               relative: 1.0 0.0;
+               offset: ITEM_PADDING ITEM_PADDING;
+            }
+            rel2 {
+               to_x: "private.ico";
+               relative: 0.0 0.5;
+               offset: (-ITEM_PADDING - 1) 0;
+            }
+            text {
+               text: "Name Here";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               align: 0.0 1.0;
+               ellipsis: 0.0;
+               min: 0 1;
+            }
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            color: 255 0 0 255;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "elm.text.number";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         api: "number" "party number";
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "secondary";
+            rel1 {
+               to_x: "hangup.ico";
+               relative: 1.0 0.5;
+               offset: ITEM_PADDING ITEM_PADDING;
+            }
+            rel2 {
+               to_x: "private.ico";
+               relative: 0.0 1.0;
+               offset: (-ITEM_PADDING - 1) (-ITEM_PADDING - 1);
+            }
+            text {
+               text: "3333-4444";
+               font: FONT_NORMAL;
+               size: SIZE_MEDIUM;
+               size_range: SIZE_SMALL SIZE_MEDIUM;
+               ellipsis: 1.0;
+               min: 0 1;
+               fit: 1 0;
+               align: -1.0 0.0;
+            }
+         }
+         description {
+            state: "alternate" 0.0;
+            inherit: "default" 0.0;
+            color_class: "action";
+            rel1 {
+               to_x: "hangup.ico";
+               relative: 1.0 0.0;
+               offset: ITEM_PADDING ITEM_PADDING;
+            }
+            rel2 {
+               to_x: "private.ico";
+               relative: 0.0 1.0;
+               offset: (-ITEM_PADDING - 1) (-ITEM_PADDING - 1);
+            }
+            text {
+               text: "3333-4444";
+               font: FONT_NORMAL;
+               size: SIZE_LARGE;
+               size_range: SIZE_SMALL SIZE_LARGE;
+               ellipsis: 1.0;
+               min: 0 1;
+               fit: 1 0;
+               align: -1.0 0.5;
+            }
+         }
+      }
+
+      programs {
+         program {
+            signal: "show,name";
+            source: "call";
+            action: STATE_SET "default" 0.0;
+            target: "elm.text.name";
+            target: "elm.text.number";
+         }
+
+         program {
+            signal: "hide,name";
+            source: "call";
+            action: STATE_SET "alternate" 0.0;
+            target: "elm.text.name";
+            target: "elm.text.number";
+         }
+      }
+   }
+}
similarity index 99%
rename from data/themes/includes/popup.edc
rename to data/themes/night/popup.edc
index 7adacff..db22137 100644 (file)
@@ -46,14 +46,14 @@ group {
 
 #define SEPARATOR(id, clip, rely, offy, relto)                          \
       part {                                                            \
-         name: "separator.dark."##id;                                   \
+         name: "separator.primary."##id;                                \
          type: RECT;                                                    \
          mouse_events: 0;                                               \
          clip_to: clip;                                                 \
          description {                                                  \
             state: "default" 0.0;                                       \
             color: 255 255 255 255;                                     \
-            color_class: "dark";                                        \
+            color_class: "primary";                                     \
             rel1 {                                                      \
                relative: 0.0 rely;                                      \
                offset: 0 offy;                                          \
@@ -467,7 +467,7 @@ group {
          mouse_events: 0;
          description {
             state: "default" 0.0;
-            color_class: "dark";
+            color_class: "primary";
          }
       }
    }
diff --git a/data/themes/night/scroller.edc b/data/themes/night/scroller.edc
new file mode 100644 (file)
index 0000000..1593c60
--- /dev/null
@@ -0,0 +1,695 @@
+group {
+   name: "elm/scroller/base/multiparty-details";
+   alias: "elm/genlist/base/history";
+   alias: "elm/genlist/base/contacts";
+   alias: "elm/genlist/base/messages-overview";
+   alias: "elm/scroller/entry/compose";
+   alias: "elm/genlist/base/compose";
+
+   script {
+      public sbvis_v, sbalways_v, sbvis_timer;
+      public timer0(val) {
+         new v;
+         v = get_int(sbvis_v);
+         if (v) {
+            v = get_int(sbalways_v);
+            if (!v) {
+               emit("do-hide-vbar", "");
+               set_int(sbvis_v, 0);
+            }
+         }
+         set_int(sbvis_timer, 0);
+         return 0;
+      }
+   }
+
+   parts {
+      part {
+         name: "clipper";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+         }
+      }
+
+      part {
+         name: "bg";
+         type: RECT;
+         clip_to: "clipper";
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+         }
+      }
+
+      part {
+         name: "elm.swallow.content";
+         clip_to: "clipper";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+         }
+      }
+
+      part {
+         name: "sb_vbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+         }
+         description {
+            state: "hidden" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "sb_vbar_clip";
+         clip_to: "sb_vbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+         }
+         description {
+            state: "hidden" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "sb_vbar";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            visible: 0;
+            min: SCROLLBAR_WIDTH SCROLLBAR_HEIGHT;
+            align: 1.0 0.0;
+            rel1 {
+               relative: 1.0 0.0;
+               offset: -1 0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -1 -1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.dragable.vbar";
+         type: RECT;
+         clip_to: "sb_vbar_clip";
+         mouse_events: 0;
+         dragable {
+            x: 0 0 0;
+            y: 1 1 0;
+            confine: "sb_vbar";
+         }
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "secondary";
+            fixed: 1 1;
+            min: SCROLLBAR_WIDTH SCROLLBAR_HEIGHT;
+            max: SCROLLBAR_WIDTH 99999;
+            rel1 {
+               relative: 0.5 0.5;
+               offset: 0 0;
+               to: "sb_vbar";
+            }
+            rel2 {
+               relative: 0.5 0.5;
+               offset: 0 0;
+               to: "sb_vbar";
+            }
+         }
+      }
+   }
+
+   programs {
+      program {
+         signal: "load";
+         source: "";
+         script {
+            set_state(PART:"sb_vbar_clip", "hidden", 0.0);
+            set_int(sbvis_v, 0);
+            set_int(sbalways_v, 0);
+            set_int(sbvis_timer, 0);
+         }
+      }
+
+      program {
+         name: "vbar_show";
+         signal: "elm,action,show,vbar";
+         source: "elm";
+         action:  STATE_SET "default" 0.0;
+         target: "sb_vbar_clip_master";
+      }
+
+      program {
+         name: "vbar_hide";
+         signal: "elm,action,hide,vbar";
+         source: "elm";
+         action:  STATE_SET "hidden" 0.0;
+         target: "sb_vbar_clip_master";
+      }
+
+      program {
+         name: "vbar_show_always";
+         signal: "elm,action,show_always,vbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbvis_v);
+            v |= get_int(sbalways_v);
+            if (!v) {
+               set_int(sbalways_v, 1);
+               emit("do-show-vbar", "");
+               set_int(sbvis_v, 1);
+            }
+         }
+      }
+
+      program {
+         name: "vbar_show_notalways";
+         signal: "elm,action,show_notalways,vbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbalways_v);
+            if (v) {
+               set_int(sbalways_v, 0);
+               v = get_int(sbvis_v);
+               if (!v) {
+                  emit("do-hide-vbar", "");
+                  set_int(sbvis_v, 0);
+               }
+            }
+         }
+      }
+
+      program {
+         signal: "do-show-vbar";
+         source: "";
+         action:  STATE_SET "default" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_vbar_clip";
+      }
+
+      program {
+         signal: "do-hide-vbar";
+         source: "";
+         action:  STATE_SET "hidden" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_vbar_clip";
+      }
+
+      program {
+         name: "scroll";
+         signal: "elm,action,scroll";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbvis_v);
+            v |= get_int(sbalways_v);
+            if (!v) {
+               emit("do-show-vbar", "");
+               set_int(sbvis_v, 1);
+            }
+            v = get_int(sbvis_timer);
+            if (v > 0) cancel_timer(v);
+            v = timer(1.0, "timer0", 0);
+            set_int(sbvis_timer, v);
+         }
+      }
+   }
+}
+
+group {
+   name: "elm/scroller/entry/dialer-popup";
+
+   script {
+      public sbvis_v, sbalways_v, sbvis_timer;
+      public timer0(val) {
+         new v;
+         v = get_int(sbvis_v);
+         if (v) {
+            v = get_int(sbalways_v);
+            if (!v) {
+               emit("do-hide-vbar", "");
+               set_int(sbvis_v, 0);
+            }
+         }
+         set_int(sbvis_timer, 0);
+         return 0;
+      }
+   }
+
+   parts {
+      part {
+         name: "clipper";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+         }
+      }
+
+      part {
+         name: "elm.swallow.content";
+         clip_to: "clipper";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            rel1.offset: BORDER_PADDING 0;
+            rel2.offset: (-BORDER_PADDING - 1) -1;
+         }
+      }
+
+      part {
+         name: "sb_vbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+         }
+         description {
+            state: "hidden" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "sb_vbar_clip";
+         clip_to: "sb_vbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+         }
+         description {
+            state: "hidden" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "sb_vbar";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            visible: 0;
+            min: SCROLLBAR_WIDTH SCROLLBAR_HEIGHT;
+            align: 1.0 0.0;
+            rel1 {
+               relative: 1.0 0.0;
+               offset: -1 0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -1 -1;
+            }
+         }
+      }
+
+      part {
+         name: "elm.dragable.vbar";
+         type: RECT;
+         clip_to: "sb_vbar_clip";
+         mouse_events: 0;
+         dragable {
+            x: 0 0 0;
+            y: 1 1 0;
+            confine: "sb_vbar";
+         }
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "secondary";
+            fixed: 1 1;
+            min: SCROLLBAR_WIDTH SCROLLBAR_HEIGHT;
+            max: SCROLLBAR_WIDTH 99999;
+            rel1 {
+               relative: 0.5 0.5;
+               offset: 0 0;
+               to: "sb_vbar";
+            }
+            rel2 {
+               relative: 0.5 0.5;
+               offset: 0 0;
+               to: "sb_vbar";
+            }
+         }
+      }
+   }
+
+   programs {
+      program {
+         signal: "load";
+         source: "";
+         script {
+            set_state(PART:"sb_vbar_clip", "hidden", 0.0);
+            set_int(sbvis_v, 0);
+            set_int(sbalways_v, 0);
+            set_int(sbvis_timer, 0);
+         }
+      }
+
+      program {
+         name: "vbar_show";
+         signal: "elm,action,show,vbar";
+         source: "elm";
+         action:  STATE_SET "default" 0.0;
+         target: "sb_vbar_clip_master";
+      }
+
+      program {
+         name: "vbar_hide";
+         signal: "elm,action,hide,vbar";
+         source: "elm";
+         action:  STATE_SET "hidden" 0.0;
+         target: "sb_vbar_clip_master";
+      }
+
+      program {
+         name: "vbar_show_always";
+         signal: "elm,action,show_always,vbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbvis_v);
+            v |= get_int(sbalways_v);
+            if (!v) {
+               set_int(sbalways_v, 1);
+               emit("do-show-vbar", "");
+               set_int(sbvis_v, 1);
+            }
+         }
+      }
+
+      program {
+         name: "vbar_show_notalways";
+         signal: "elm,action,show_notalways,vbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbalways_v);
+            if (v) {
+               set_int(sbalways_v, 0);
+               v = get_int(sbvis_v);
+               if (!v) {
+                  emit("do-hide-vbar", "");
+                  set_int(sbvis_v, 0);
+               }
+            }
+         }
+      }
+
+      program {
+         signal: "do-show-vbar";
+         source: "";
+         action:  STATE_SET "default" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_vbar_clip";
+      }
+
+      program {
+         signal: "do-hide-vbar";
+         source: "";
+         action:  STATE_SET "hidden" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_vbar_clip";
+      }
+
+      program {
+         name: "scroll";
+         signal: "elm,action,scroll";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbvis_v);
+            v |= get_int(sbalways_v);
+            if (!v) {
+               emit("do-show-vbar", "");
+               set_int(sbvis_v, 1);
+            }
+            v = get_int(sbvis_timer);
+            if (v > 0) cancel_timer(v);
+            v = timer(1.0, "timer0", 0);
+            set_int(sbvis_timer, v);
+         }
+      }
+   }
+}
+
+group {
+   name: "elm/scroller/entry/dialer-popup-editable";
+
+   script {
+      public sbvis_v, sbalways_v, sbvis_timer;
+      public timer0(val) {
+         new v;
+         v = get_int(sbvis_v);
+         if (v) {
+            v = get_int(sbalways_v);
+            if (!v) {
+               emit("do-hide-vbar", "");
+               set_int(sbvis_v, 0);
+            }
+         }
+         set_int(sbvis_timer, 0);
+         return 0;
+      }
+   }
+
+   parts {
+      part {
+         name: "clipper";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+         }
+      }
+
+      part {
+         name: "bg-color";
+         type: RECT;
+         clip_to: "clipper";
+         description {
+            state: "default" 0.0;
+            color_class: "action";
+         }
+      }
+      part {
+         name: "bg-nocolor";
+         type: RECT;
+         clip_to: "clipper";
+         description {
+            state: "default" 0.0;
+            color_class: "bg";
+            rel1.offset: 1 1;
+            rel2.offset: -2 -2;
+         }
+      }
+      part {
+         name: "elm.swallow.content";
+         clip_to: "clipper";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            rel1.offset: BORDER_PADDING 2;
+            rel2.offset: (-BORDER_PADDING - 1) -3;
+         }
+      }
+
+      part {
+         name: "sb_vbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+         }
+         description {
+            state: "hidden" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "sb_vbar_clip";
+         clip_to: "sb_vbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+         }
+         description {
+            state: "hidden" 0.0;
+            color: 255 255 255 0;
+            visible: 0;
+         }
+      }
+
+      part {
+         name: "sb_vbar";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            visible: 0;
+            min: SCROLLBAR_WIDTH SCROLLBAR_HEIGHT;
+            align: 1.0 0.0;
+            rel1 {
+               relative: 1.0 0.0;
+               offset: -3 2;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               offset: -3 -3;
+            }
+         }
+      }
+
+      part {
+         name: "elm.dragable.vbar";
+         type: RECT;
+         clip_to: "sb_vbar_clip";
+         mouse_events: 0;
+         dragable {
+            x: 0 0 0;
+            y: 1 1 0;
+            confine: "sb_vbar";
+         }
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            color_class: "secondary";
+            fixed: 1 1;
+            min: SCROLLBAR_WIDTH SCROLLBAR_HEIGHT;
+            max: SCROLLBAR_WIDTH 99999;
+            rel1 {
+               relative: 0.5 0.5;
+               offset: 0 0;
+               to: "sb_vbar";
+            }
+            rel2 {
+               relative: 0.5 0.5;
+               offset: 0 0;
+               to: "sb_vbar";
+            }
+         }
+      }
+   }
+
+   programs {
+      program {
+         signal: "load";
+         source: "";
+         script {
+            set_state(PART:"sb_vbar_clip", "hidden", 0.0);
+            set_int(sbvis_v, 0);
+            set_int(sbalways_v, 0);
+            set_int(sbvis_timer, 0);
+         }
+      }
+
+      program {
+         name: "vbar_show";
+         signal: "elm,action,show,vbar";
+         source: "elm";
+         action:  STATE_SET "default" 0.0;
+         target: "sb_vbar_clip_master";
+      }
+
+      program {
+         name: "vbar_hide";
+         signal: "elm,action,hide,vbar";
+         source: "elm";
+         action:  STATE_SET "hidden" 0.0;
+         target: "sb_vbar_clip_master";
+      }
+
+      program {
+         name: "vbar_show_always";
+         signal: "elm,action,show_always,vbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbvis_v);
+            v |= get_int(sbalways_v);
+            if (!v) {
+               set_int(sbalways_v, 1);
+               emit("do-show-vbar", "");
+               set_int(sbvis_v, 1);
+            }
+         }
+      }
+
+      program {
+         name: "vbar_show_notalways";
+         signal: "elm,action,show_notalways,vbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbalways_v);
+            if (v) {
+               set_int(sbalways_v, 0);
+               v = get_int(sbvis_v);
+               if (!v) {
+                  emit("do-hide-vbar", "");
+                  set_int(sbvis_v, 0);
+               }
+            }
+         }
+      }
+
+      program {
+         signal: "do-show-vbar";
+         source: "";
+         action:  STATE_SET "default" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_vbar_clip";
+      }
+
+      program {
+         signal: "do-hide-vbar";
+         source: "";
+         action:  STATE_SET "hidden" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_vbar_clip";
+      }
+
+      program {
+         name: "scroll";
+         signal: "elm,action,scroll";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbvis_v);
+            v |= get_int(sbalways_v);
+            if (!v) {
+               emit("do-show-vbar", "");
+               set_int(sbvis_v, 1);
+            }
+            v = get_int(sbvis_timer);
+            if (v > 0) cancel_timer(v);
+            v = timer(1.0, "timer0", 0);
+            set_int(sbvis_timer, v);
+         }
+      }
+   }
+}
index 2c814f6..6722b35 100644 (file)
@@ -51,8 +51,8 @@ rm -rf %{buildroot}
 /usr/apps/org.tizen.dialer/bin/message_daemon
 /usr/apps/org.tizen.dialer/data/lemolo/examples/contacts.csv
 /usr/apps/org.tizen.dialer/data/lemolo/scripts/ofono-efl-contacts-db-create.py
-/usr/apps/org.tizen.dialer/data/lemolo/themes/default-sd.edj
 /usr/apps/org.tizen.dialer/data/lemolo/themes/default.edj
+/usr/apps/org.tizen.dialer/data/lemolo/themes/night.edj
 /usr/apps/org.tizen.dialer/data/lemolo/tizen-examples/order
 /usr/share/packages/org.tizen.dialer.xml
 %{_datadir}/icons/default/small/org.tizen.dialer.png