We also need a SOLID DOCUMENTATION!

Thanks.
Daniel Juyung Seo (SeoZ)

2011/7/13 ChunEon Park <her...@naver.com>:
> Dear,
> I added a new widget naviframe.
> This widget is for application's view manager such as elm_pager.
>  But has optional functions more for users convenience.
>  Not completed yet for decorations. but basic frame is completed.
> Do someone review it's APIs and functionalities?
> ------------------------------------
> Let's run together for the best moment!
>  -Regards, Hermet-
>
> -----Original Message-----
> From: "Enlightenment SVN"&lt;no-re...@enlightenment.org&gt;
> To: enlightenment-...@lists.sourceforge.net
> Cc:
> Sent: 11-07-13(수) 13:21:50
> Subject: E SVN: hermet IN trunk/elementary: data/images data/themes src/bin 
> src/libLog:
> elementary/naviframe - added new widget.
>
>  This widget is for application's view manager such as elm_pager
>  But has optional functions more for users convenience.
>  Not completed yet for decorations. but basic frame is completed.
>
>  Need to have a review.
>
>
> Author: hermet
> Date: 2011-07-12 21:21:50 -0700 (Tue, 12 Jul 2011)
> New Revision: 61313
> Trac: http://trac.enlightenment.org/e/changeset/61313
> Added:
>  trunk/elementary/data/images/icon_right_arrow.png 
> trunk/elementary/src/bin/test_naviframe.c 
> trunk/elementary/src/lib/elc_naviframe.c
> Modified:
>  trunk/elementary/data/themes/default.edc 
> trunk/elementary/src/bin/Makefile.am trunk/elementary/src/bin/test.c 
> trunk/elementary/src/lib/Elementary.h.in trunk/elementary/src/lib/Makefile.am
> Property changes on: trunk/elementary/data/images/icon_right_arrow.png
> ___________________________________________________________________
> Added: svn:mime-type
>  + application/octet-stream
> Modified: trunk/elementary/data/themes/default.edc
> ===================================================================
> --- trunk/elementary/data/themes/default.edc 2011-07-13 01:41:56 UTC (rev 
> 61312)
> +++ trunk/elementary/data/themes/default.edc 2011-07-13 04:21:50 UTC (rev 
> 61313)
> @@ -2970,6 +2970,193 @@
>  }
>  }
>  }
> + group { name: "elm/button/base/naviframe/back_btn/default";
> + images {
> + image: "bt_base1.png" COMP;
> + image: "bt_base2.png" COMP;
> + image: "bt_hilight.png" COMP;
> + image: "bt_shine.png" COMP;
> + image: "bt_glow.png" COMP;
> + image: "bt_dis_base.png" COMP;
> + image: "bt_dis_hilight.png" COMP;
> + image: "icon_left_arrow.png" COMP;
> + }
> + parts {
> + part { name: "button_image";
> + mouse_events: 1;
> + description { state: "default" 0.0;
> + min: 15 15;
> + image {
> + normal: "bt_base2.png";
> + border: 7 7 7 7;
> + }
> + image.middle: SOLID;
> + }
> + description { state: "clicked" 0.0;
> + inherit: "default" 0.0;
> + image.normal: "bt_base1.png";
> + }
> + description { state: "disabled" 0.0;
> + inherit: "default" 0.0;
> + image {
> + normal: "bt_dis_base.png";
> + border: 4 4 4 4;
> + }
> + }
> + }
> + part { name: "prev_image";
> + type: IMAGE;
> + scale: 1;
> + description { state: "default" 0.0;
> + min: 30 30;
> + max: 30 30;
> + fixed: 1 1;
> + align: 0.5 0.5;
> + image.normal: "icon_left_arrow.png";
> + }
> + }
> + part { name: "over1";
> + mouse_events: 0;
> + description { state: "default" 0.0;
> + rel2.relative: 1.0 0.5;
> + image {
> + normal: "bt_hilight.png";
> + border: 7 7 7 0;
> + }
> + }
> + description { state: "disabled" 0.0;
> + inherit: "default" 0.0;
> + image {
> + normal: "bt_dis_hilight.png";
> + border: 4 4 4 0;
> + }
> + }
> + }
> + part { name: "over2";
> + mouse_events: 1;
> + repeat_events: 1;
> + ignore_flags: ON_HOLD;
> + description { state: "default" 0.0;
> + image {
> + normal: "bt_shine.png";
> + border: 7 7 7 7;
> + }
> + }
> + description { state: "disabled" 0.0;
> + inherit: "default" 0.0;
> + visible: 0;
> + }
> + }
> + part { name: "over3";
> + mouse_events: 1;
> + repeat_events: 1;
> + description { state: "default" 0.0;
> + color: 255 255 255 0;
> + image {
> + normal: "bt_glow.png";
> + border: 12 12 12 12;
> + }
> + fill.smooth : 0;
> + }
> + description { state: "clicked" 0.0;
> + inherit: "default" 0.0;
> + color: 255 255 255 255;
> + }
> + }
> + part { name: "disabler";
> + type: RECT;
> + 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 {
> + name: "button_click";
> + signal: "mouse,down,1";
> + source: "over2";
> + action: SIGNAL_EMIT "elm,action,press" "";
> + after: "button_click_anim";
> + }
> + program {
> + name: "button_click_anim";
> + action: STATE_SET "clicked" 0.0;
> + target: "button_image";
> + }
> + program {
> + name: "button_unclick";
> + signal: "mouse,up,1";
> + source: "over3";
> + action: SIGNAL_EMIT "elm,action,unpress" "";
> + after: "button_unclick_anim";
> + }
> + program {
> + name: "button_pressed_anim";
> + signal: "elm,anim,activate";
> + source: "elm";
> + action: STATE_SET "clicked" 0.0;
> + target: "button_image";
> + target: "over3";
> + after: "button_unpressed_anim";
> + }
> + program {
> + name: "button_unpressed_anim";
> + action: STATE_SET "default" 0.0;
> + transition: DECELERATE 0.5;
> + target: "button_image";
> + target: "over3";
> + }
> + program {
> + name: "button_unclick_anim";
> + action: STATE_SET "default" 0.0;
> + target: "button_image";
> + }
> + program {
> + name: "button_click2";
> + signal: "mouse,down,1";
> + source: "over3";
> + action: STATE_SET "clicked" 0.0;
> + target: "over3";
> + }
> + program {
> + name: "button_unclick2";
> + signal: "mouse,up,1";
> + source: "over3";
> + action: STATE_SET "default" 0.0;
> + transition: DECELERATE 0.5;
> + target: "over3";
> + }
> + program {
> + name: "button_unclick3";
> + signal: "mouse,clicked,1";
> + source: "over2";
> + action: SIGNAL_EMIT "elm,action,click" "";
> + }
> + program { name: "disable";
> + signal: "elm,state,disabled";
> + source: "elm";
> + action: STATE_SET "disabled" 0.0;
> + target: "button_image";
> + target: "over1";
> + target: "over2";
> + target: "disabler";
> + }
> + program { name: "enable";
> + signal: "elm,state,enabled";
> + source: "elm";
> + action: STATE_SET "default" 0.0;
> + target: "button_image";
> + target: "over1";
> + target: "over2";
> + target: "disabler";
> + }
> + }
> + }
>
>  
> ///////////////////////////////////////////////////////////////////////////////
>  group { name: "elm/toggle/base/default";
> @@ -36691,4 +36878,378 @@
>  }
>  }
>  }
> +/////////////////////////////////////////////////////////////////////////
> + group { name:"elm/naviframe/base/default";
> + images {
> + image: "frame_1.png" COMP;
> + image: "frame_2.png" COMP;
> + image: "dia_grad.png" COMP;
> + }
> + parts {
> + part { name: "base0";
> + mouse_events: 0;
> + description { state: "default" 0.0;
> + image.normal: "dia_grad.png";
> + fill {
> + smooth: 0;
> + size {
> + relative: 0.0 1.0;
> + offset: 64 0;
> + }
> + }
> + }
> + }
> + part { name: "base1";
> + type: IMAGE;
> + description { state: "default" 0.0;
> + image {
> + normal: "frame_2.png";
> + border: 5 5 32 26;
> + middle: 0;
> + }
> + fill.smooth : 0;
> + }
> + }
> + part { name: "over";
> + mouse_events: 0;
> + description { state: "default" 0.0;
> + rel1.offset: 4 4;
> + rel2.offset: 5 5;
> + image {
> + normal: "frame_1.png";
> + border: 2 2 28 22;
> + middle: 0;
> + }
> + fill.smooth : 0;
> + }
> + }
> + }
> + }
> + group { name:"elm/naviframe/item/basic/default";
> + parts {
> + part { name: "title_clip";
> + type: RECT;
> + mouse_events: 0;
> + description { state: "default" 0.0;
> + min: 1 50;
> + align: 0.0 0.0;
> + fixed: 0 1;
> + rel1 { relative: 0.0 0.0; }
> + rel2 { relative: 1.0 0.0; }
> + }
> + description { state: "hide" 0.0;
> + inherit: "default" 0.0;
> + min: 0 0;
> + max: 0 0;
> + fixed: 1 1;
> + }
> + }
> + part { name: "content_clip";
> + type: RECT;
> + mouse_events: 0;
> + description { state: "default" 0.0;
> + rel1.to_y: "title_clip";
> + }
> + }
> + part { name: "elm.swallow.content";
> + type: SWALLOW;
> + scale: 1;
> + repeat_events: 0;
> + clip_to: "content_clip";
> + description { state: "default" 0.0;
> + align: 0.0 0.0;
> + rel1.relative: 1.0 1.0;
> + rel1.to_y: "title_clip";
> + rel2.relative: 2.0 1.0;
> + }
> + description { state: "show" 0.0;
> + inherit: "default" 0.0;
> + rel1.relative: 0.0 1.0;
> + rel2.relative: 1.0 1.0;
> + }
> + description { state: "pushed" 0.0;
> + inherit: "default" 0.0;
> + rel1.relative: -1.0 1.0;
> + rel2.relative: 0.0 1.0;
> + }
> + description { state: "popped" 0.0;
> + inherit: "default" 0.0;
> + rel1.relative: 1.0 1.0;
> + rel2.relative: 2.0 1.0;
> + }
> + }
> + part { name: "elm.swallow.title";
> + type: SWALLOW;
> + scale: 1;
> + repeat_events: 0;
> + clip_to: "title_clip";
> + description { state: "default" 0.0;
> + min: 1 50;
> + align: 0.0 0.0;
> + fixed: 0 1;
> + rel1 { relative: 0.0 0.0; }
> + rel2 { relative: 1.0 0.0; }
> + }
> + description { state: "hide" 0.0;
> + inherit: "default" 0.0;
> + min: 0 0;
> + max: 0 0;
> + fixed: 1 1;
> + }
> + }
> + }
> + programs {
> + program { name: "show";
> + signal: "elm,state,show";
> + source: "elm";
> + action: STATE_SET "show" 0.0;
> + target: "elm.swallow.content";
> + transition: DECELERATE 0.5;
> + after: "show_finished";
> + }
> + program { name: "pushed";
> + signal: "elm,state,pushed";
> + source: "elm";
> + action: STATE_SET "pushed" 0.0;
> + target: "elm.swallow.content";
> + transition: DECELERATE 0.5;
> + after: "pushed_finished";
> + }
> + program { name: "popped";
> + signal: "elm,state,popped";
> + source: "elm";
> + action: STATE_SET "popped" 0.0;
> + target: "elm.swallow.content";
> + transition: DECELERATE 0.5;
> + after: "popped_finished";
> + }
> + program { name: "visible";
> + signal: "elm,state,visible";
> + source: "elm";
> + action: STATE_SET "show" 0.0;
> + target: "elm.swallow.content";
> + }
> + program { name: "title_show";
> + signal: "elm,state,title,show";
> + source: "elm";
> + action: STATE_SET "default" 0.0;
> + target: "title_clip";
> + }
> + program { name: "title_hide";
> + signal: "elm,state,title,hide";
> + source: "elm";
> + action: STATE_SET "hide" 0.0;
> + target: "title_clip";
> + }
> + program { name: "show_finished";
> + action: SIGNAL_EMIT "elm,action,show,finished" "";
> + }
> + program { name: "pushed_finished";
> + action: SIGNAL_EMIT "elm,action,pushed,finished" "";
> + }
> + program { name: "popped_finished";
> + action: SIGNAL_EMIT "elm,action,popped,finished" "";
> + }
> + }
> + }
> + group { name:"elm/naviframe/item/no_transit/default";
> + parts {
> + part { name: "clip";
> + type: RECT;
> + mouse_events: 0;
> + description { state: "default" 0.0;
> + }
> + }
> + part { name: "elm.swallow.content";
> + type: SWALLOW;
> + scale: 1;
> + repeat_events: 0;
> + clip_to: "clip";
> + description { state: "default" 0.0;
> + align: 0.0 0.0;
> + rel1.relative: 0.0 1.0;
> + rel1.to_y: "elm.swallow.title";
> + rel2.relative: 1.0 1.0;
> + visible: 0;
> + }
> + description { state: "show" 0.0;
> + inherit: "default" 0.0;
> + visible: 1;
> + }
> + }
> + part { name: "elm.swallow.title";
> + type: SWALLOW;
> + scale: 1;
> + repeat_events: 0;
> + clip_to: "clip";
> + description { state: "default" 0.0;
> + min: 1 50;
> + align: 0.5 0.0;
> + fixed: 0 1;
> + rel1 { relative: 0.0 0.0; offset: 4 4; }
> + rel2 { relative: 1.0 0.0; offset: -5 -5; }
> + visible: 0;
> + }
> + description { state: "hide" 0.0;
> + inherit: "default" 0.0;
> + min: 0 0;
> + max: 0 0;
> + fixed: 1 1;
> + }
> + }
> + }
> + programs {
> + program { name: "show";
> + signal: "elm,state,show";
> + source: "elm";
> + action: STATE_SET "show" 0.0;
> + target: "elm.swallow.content";
> + after: "show_finished";
> + }
> + program { name: "pushed";
> + signal: "elm,state,pushed";
> + source: "elm";
> + action: STATE_SET "default" 0.0;
> + target: "elm.swallow.content";
> + after: "pushed_finished";
> + }
> + program { name: "popped";
> + signal: "elm,state,popped";
> + source: "elm";
> + action: STATE_SET "default" 0.0;
> + target: "elm.swallow.content";
> + after: "popped_finished";
> + }
> + program { name: "visible";
> + signal: "elm,state,visible";
> + source: "elm";
> + action: STATE_SET "show" 0.0;
> + target: "elm.swallow.content";
> + }
> + program { name: "title_show";
> + signal: "elm,state,title,show";
> + source: "elm";
> + action: STATE_SET "default" 0.0;
> + target: "elm.swallow.title";
> + }
> + program { name: "title_hide";
> + signal: "elm,state,title,hide";
> + source: "elm";
> + action: STATE_SET "hide" 0.0;
> + target: "elm.swallow.title";
> + }
> + program { name: "show_finished";
> + action: SIGNAL_EMIT "elm,action,show,finished" "";
> + }
> + program { name: "pushed_finished";
> + action: SIGNAL_EMIT "elm,action,pushed,finished" "";
> + }
> + program { name: "popped_finished";
> + action: SIGNAL_EMIT "elm,action,popped,finished" "";
> + }
> + }
> + }
> + group { name:"elm/naviframe/title/default";
> + images {
> + image: "flip_base.png" COMP;
> + image: "flip_shad.png" COMP;
> + }
> + parts {
> + part { name: "base";
> + type: IMAGE;
> + description {
> + image.normal: "flip_base.png";
> + }
> + }
> + part { name: "elm.swallow.prev_btn";
> + type: SWALLOW;
> + scale: 1;
> + description { state: "default" 0.0;
> + min: 80 40;
> + max: 80 40;
> + align: 0 0;
> + fixed: 1 1;
> + rel1.offset: 5 5;
> + rel2.offset: -1 -6;
> + }
> + }
> + part { name: "elm.swallow.next_btn";
> + type: SWALLOW;
> + scale: 1;
> + description { state: "default" 0.0;
> + min: 80 40;
> + max: 80 40;
> + align: 1 0;
> + fixed: 1 1;
> + rel1.offset: 0 5;
> + rel2.offset: -6 -6;
> + }
> + }
> + part { name: "elm.swallow.icon";
> + type: SWALLOW;
> + scale: 1;
> + description { state: "default" 0.0;
> + min: 40 40;
> + max: 40 40;
> + align: 1 0.5;
> + rel1.to: "elm.text.title";
> + rel1.relative: 0 0;
> + rel2.to: "elm.text.title";
> + rel2.relative: 0 1;
> + }
> + }
> + part { name: "elm.text.title";
> + type: TEXT;
> + scale: 1;
> + repeat_events: 1;
> + description { state: "default" 0.0;
> + text { font: "Sans,Edje-Vera";
> + size: 10;
> + min: 0 0;
> + max: 1 0;
> + align: 0.5 0.5;
> + }
> + color: 0 0 0 255;
> + align: 0.5 0.5;
> + }
> + }
> + part { name: "elm.text.subtitle";
> + type: TEXT;
> + scale: 1;
> + repeat_events: 1;
> + description { state: "default" 0.0;
> + text { font: "Sans,Edje-Vera";
> + size: 8;
> + min: 0 0;
> + max: 1 0;
> + align: 0.5 1;
> + }
> + rel1.to_y: "elm.text.title";
> + rel1.relative: 0 1;
> + color: 50 50 50 255;
> + align: 0.5 0;
> + }
> + }
> + part { name: "shade";
> + type: IMAGE;
> + mouse_events: 0;
> + description {
> + align: 0.5 1;
> + rel1.to_y: "elm.text.title";
> + rel1.relative: 0 1;
> + rel1.offset: 0 0;
> + rel2.offset: -1 5;
> + image.normal: "flip_shad.png";
> + }
> + }
> + }
> + programs {
> + program {
> + name: "title_clicked";
> + signal: "mouse,clicked,1";
> + source: "base";
> + action: SIGNAL_EMIT "elm,action,clicked" "elm";
> + }
> + }
> + }
>  }
> Modified: trunk/elementary/src/bin/Makefile.am
> ===================================================================
> --- trunk/elementary/src/bin/Makefile.am 2011-07-13 01:41:56 UTC (rev 61312)
> +++ trunk/elementary/src/bin/Makefile.am 2011-07-13 04:21:50 UTC (rev 61313)
> @@ -81,6 +81,7 @@
>  test_map.c \
>  test_menu.c \
>  test_multi.c \
> +test_naviframe.c \
>  test_notify.c \
>  test_pager.c \
>  test_panel.c \
> Modified: trunk/elementary/src/bin/test.c
> ===================================================================
> --- trunk/elementary/src/bin/test.c 2011-07-13 01:41:56 UTC (rev 61312)
> +++ trunk/elementary/src/bin/test.c 2011-07-13 04:21:50 UTC (rev 61313)
> @@ -139,6 +139,7 @@
>  void test_glview_simple(void *data, Evas_Object *obj, void *event_info);
>  void test_glview(void *data, Evas_Object *obj, void *event_info);
>  void test_3d(void *data, Evas_Object *obj, void *event_info);
> +void test_naviframe(void *data, Evas_Object *obj, void *event_info);
>  #ifdef HAVE_EIO
>  void test_eio(void *data, Evas_Object *obj, void *event_info);
>  #endif
> @@ -416,6 +417,7 @@
>  ADD_TEST("3D", test_3d);
>  ADD_TEST("Genscroller", test_genscroller);
>  ADD_TEST("Gesture Layer", test_gesture_layer);
> + ADD_TEST("Naviframe", test_naviframe);
>  #undef ADD_TEST
>
>  if (autorun)
> Modified: trunk/elementary/src/lib/Elementary.h.in
> ===================================================================
> --- trunk/elementary/src/lib/Elementary.h.in 2011-07-13 01:41:56 UTC (rev 
> 61312)
> +++ trunk/elementary/src/lib/Elementary.h.in 2011-07-13 04:21:50 UTC (rev 
> 61313)
> @@ -7852,6 +7852,37 @@
>  EAPI Evas_Object *elm_player_add(Evas_Object *parent);
>  EAPI void elm_player_video_set(Evas_Object *player, Evas_Object *video);
>
> + /* naviframe */
> + typedef struct _Elm_Naviframe_Item Elm_Naviframe_Item;
> +
> + typedef enum
> + {
> + ELM_NAVIFRAME_PREV_BUTTON,
> + ELM_NAVIFRAME_NEXT_BUTTON
> + } Elm_Naviframe_Button_Type;
> +
> + EAPI Evas_Object *elm_naviframe_add(Evas_Object *parent) 
> EINA_ARG_NONNULL(1);
> + EAPI Elm_Naviframe_Item *elm_naviframe_item_push(Evas_Object *obj, const 
> char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object 
> *content, const char *item_style) EINA_ARG_NONNULL(1, 5);
> + EAPI Evas_Object *elm_naviframe_item_pop(Evas_Object *obj) 
> EINA_ARG_NONNULL(1);
> + EAPI void elm_naviframe_content_preserve_on_pop_set(Evas_Object *obj, 
> Eina_Bool preserve) EINA_ARG_NONNULL(1);
> + EAPI Eina_Bool elm_naviframe_content_preserve_on_pop_get(const Evas_Object 
> *obj) EINA_ARG_NONNULL(1);
> + EAPI void elm_naviframe_item_content_set(Elm_Naviframe_Item *item, 
> Evas_Object *content) EINA_ARG_NONNULL(1);
> + EAPI Evas_Object *elm_naviframe_item_content_get(const Elm_Naviframe_Item 
> *it) EINA_ARG_NONNULL(1);
> + EAPI void elm_naviframe_item_title_label_set(Elm_Naviframe_Item *it, const 
> char *label) EINA_ARG_NONNULL(1);
> + EAPI const char *elm_naviframe_item_title_label_get(const 
> Elm_Naviframe_Item *it) EINA_ARG_NONNULL(1);
> + EAPI void elm_naviframe_item_subtitle_label_set(Elm_Naviframe_Item *it, 
> const char *label) EINA_ARG_NONNULL(1);
> + EAPI const char *elm_naviframe_item_subtitle_label_get(const 
> Elm_Naviframe_Item *it) EINA_ARG_NONNULL(1);
> + EAPI Elm_Naviframe_Item *elm_naviframe_top_item_get(const Evas_Object *obj) 
> EINA_ARG_NONNULL(1);
> + EAPI Elm_Naviframe_Item *elm_naviframe_bottom_item_get(const Evas_Object 
> *obj) EINA_ARG_NONNULL(1);
> + EAPI void elm_naviframe_item_button_set(Elm_Naviframe_Item *it, Evas_Object 
> *btn, Elm_Naviframe_Button_Type btn_type) EINA_ARG_NONNULL(1);
> + EAPI Evas_Object *elm_naviframe_item_button_get(const Elm_Naviframe_Item 
> *it, Elm_Naviframe_Button_Type btn_type) EINA_ARG_NONNULL(1);
> + EAPI void elm_naviframe_item_icon_set(Elm_Naviframe_Item *it, Evas_Object 
> *icon) EINA_ARG_NONNULL(1);
> + EAPI Evas_Object *elm_naviframe_item_icon_get(const Elm_Naviframe_Item *it) 
> EINA_ARG_NONNULL(1);
> + EAPI void elm_naviframe_item_style_set(Elm_Naviframe_Item *it, const char 
> *item_style) EINA_ARG_NONNULL(1);
> + EAPI const char *elm_naviframe_item_style_get(const Elm_Naviframe_Item *it) 
> EINA_ARG_NONNULL(1);
> + EAPI void elm_naviframe_item_title_visible_set(Elm_Naviframe_Item *it, 
> Eina_Bool visible) EINA_ARG_NONNULL(1);
> + EAPI Eina_Bool elm_naviframe_item_title_visible_get(const 
> Elm_Naviframe_Item *it) EINA_ARG_NONNULL(1);
> +
>  #ifdef __cplusplus
>  }
>  #endif
> Modified: trunk/elementary/src/lib/Makefile.am
> ===================================================================
> --- trunk/elementary/src/lib/Makefile.am 2011-07-13 01:41:56 UTC (rev 61312)
> +++ trunk/elementary/src/lib/Makefile.am 2011-07-13 04:21:50 UTC (rev 61313)
> @@ -49,6 +49,7 @@
>  elc_fileselector.c \
>  elc_fileselector_entry.c \
>  elc_hoversel.c \
> +elc_naviframe.c \
>  elc_player.c \
>  elc_scrolled_entry.c \
>  elm_actionslider.c \
> ------------------------------------------------------------------------------
> AppSumo Presents a FREE Video for the SourceForge Community by Eric
> Ries, the creator of the Lean Startup Methodology on "Lean Startup
> Secrets Revealed." This video shows you how to validate your ideas,
> optimize your ideas and identify your business strategy.
> http://p.sf.net/sfu/appsumosfdev2dev
> _______________________________________________
> enlightenment-svn mailing list
> enlightenment-...@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-svn
> ------------------------------------------------------------------------------
> AppSumo Presents a FREE Video for the SourceForge Community by Eric
> Ries, the creator of the Lean Startup Methodology on "Lean Startup
> Secrets Revealed." This video shows you how to validate your ideas,
> optimize your ideas and identify your business strategy.
> http://p.sf.net/sfu/appsumosfdev2dev
> _______________________________________________
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>

------------------------------------------------------------------------------
AppSumo Presents a FREE Video for the SourceForge Community by Eric 
Ries, the creator of the Lean Startup Methodology on "Lean Startup 
Secrets Revealed." This video shows you how to validate your ideas, 
optimize your ideas and identify your business strategy.
http://p.sf.net/sfu/appsumosfdev2dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to