Backup : 0813
authorJin Yoon <jinny.yoon@samsung.com>
Thu, 13 Aug 2015 14:23:59 +0000 (23:23 +0900)
committerJin Yoon <jinny.yoon@samsung.com>
Thu, 13 Aug 2015 14:23:59 +0000 (23:23 +0900)
19 files changed:
inc/db.h
inc/group_info.h
inc/item.h
inc/main_view.h
inc/util.h
res/edje/conf.h
res/edje/entry.edc
res/edje/images/popup button.png [new file with mode: 0644]
res/edje/images/popup_button.png [new file with mode: 0755]
res/edje/item.edc
res/edje/momentic.edc
res/edje/popup.edc
res/images/Group_list_delete.png [new file with mode: 0755]
src/db.c
src/group_info.c
src/item.c
src/main.c
src/main_view.c
src/map.c

index 4cb735a..0535d29 100644 (file)
--- a/inc/db.h
+++ b/inc/db.h
@@ -55,8 +55,9 @@ extern int db_update_version(sqlite3 *db, int version);
 extern int db_count_version(sqlite3 *db);
 
 extern int db_count_group(sqlite3 *db, int *count);
-extern long db_insert_group(sqlite3 *db, const char *title, int city1, int city2, int city3, int city4, int city5);
-extern int db_update_group(sqlite3 *db, int time, const char *title, int city1, int city2, int city3, int city4, int city5);
-extern int db_delete_group(sqlite3 *db, int time);
+extern int db_insert_group(sqlite3 *db, const char *title, int city1, int city2, int city3, int city4, int city5);
+extern int db_update_group(sqlite3 *db, int id, const char *title, int city1, int city2, int city3, int city4, int city5);
+extern int db_delete_group(sqlite3 *db, int id);
+extern int db_list_group(sqlite3 *db, Eina_List **group_list);
 
 #endif // __ADVENTURE_DB_H__
index df0474e..f1a483e 100644 (file)
@@ -3,16 +3,12 @@
 
 struct _group_info_s {
        char *title;
-       long time;
-       int city1;
-       int city2;
-       int city3;
-       int city4;
-       int city5;
+       int id;
+       int city[5]; /* FIXME */
 };
 typedef struct _group_info_s group_info_s;
 
-extern group_info_s *group_info_create(long time, const char *title, int city1, int city2, int city3, int city4, int city5);
+extern group_info_s *group_info_create(int time, const char *title, int city1, int city2, int city3, int city4, int city5);
 extern void group_info_destroy(group_info_s *group_info);
 
 #endif /* __MOMENTIC_GROUP_INFO_H__ */
index 4d105fd..a5249ee 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <Elementary.h>
 #include "main_view.h"
+#include "group_info.h"
 
 struct _selecting_info_s {
        int city;
@@ -27,13 +28,13 @@ extern void item_destroy_typing(Evas_Object *item);
 extern Evas_Object *item_create_selecting(Evas_Object *parent, int city, struct tm *local_time, main_view_s *main_view_info);
 extern void item_destroy_selecting(Evas_Object *item);
 
-extern Evas_Object *item_create_group(Evas_Object *parent, const char *title, main_view_s *main_view_info);
+extern Evas_Object *item_create_group(Evas_Object *parent, group_info_s *group_info, main_view_s *main_view_info);
 extern void item_destroy_group(Evas_Object *item);
 
 extern Evas_Object *item_create_padding(Evas_Object *parent);
 extern void item_destroy_padding(Evas_Object *item);
 
-extern Evas_Object *item_create_best_time(Evas_Object *parent);
+extern Evas_Object *item_create_best_time(Evas_Object *parent, double start, double end);
 extern void item_destroy_best_time(Evas_Object *item);
 
 #endif /* __MOMENTIC_ITEM_H__ */
index 67a4003..8c4782e 100644 (file)
@@ -14,6 +14,7 @@ struct _main_view_s {
        Evas_Object *searchlist;
        Evas_Object *result_list;
        Evas_Object *group_scroller;
+       Evas_Object *save_button;
        moment_info_s *moment_info;
 };
 typedef struct _main_view_s main_view_s;
@@ -21,4 +22,7 @@ typedef struct _main_view_s main_view_s;
 extern Evas_Object *main_view_create(Evas_Object *parent, moment_info_s *moment_info);
 extern void main_view_destroy(Evas_Object *main_view);
 
+extern void main_view_click_add_btn_cb(void *data, Evas_Object *obj, void *event_info);
+extern void main_view_click_next_btn_cb(void *data, Evas_Object *obj, void *event_info);
+
 #endif /* __MAIN_VIEW_H__ */
index b08b4a5..450fdb0 100644 (file)
@@ -20,6 +20,7 @@
 /* DATA */
 #define DATA_KEY_SELECTING "selecting"
 #define DATA_KEY_RESULT "result"
+#define GROUP_INFO "group_info"
 
 /* Return values */
 typedef enum {
index a0e4f3c..e953461 100644 (file)
@@ -8,7 +8,7 @@
 #define BEST_END_TIME (BEST_START_TIME + BEST_DURING_TIME)
 
 #define ENTRY_WIDTH 446
-#define ENTRY_HEIGHT 38
+#define ENTRY_HEIGHT 45
 #define ENTRY_RESULT_HEIGHT 400
 
 #endif /* __MOMENT_CONF_H__ */
index 0883ddb..f16cd9e 100644 (file)
@@ -24,11 +24,11 @@ collections {
                                type: IMAGE;
                                description {
                                        state: "default" 0.0;
-                                       rel1 { relative: 0.0 0.0; to: "bg"; }
-                                       rel2 { relative: 1.0 1.0; to: "bg"; offset: -1 -2; }
+                                       rel1 { relative: 0.0 0.0; to: "bg"; offset: 3 3;}
+                                       rel2 { relative: 1.0 1.0; to: "bg"; offset: -4 -5; }
                                        image {
                                                normal: "searching_bar.png";
-                                               border: 5 15 15;
+                                               border: 15 15 15 15;
                                                border_scale: 1;
                                        }
                                        visible: 1;
@@ -50,7 +50,7 @@ collections {
                                type: SWALLOW;
                                clip_to: "entry_clipper";
                                description {
-                                       rel1 { relative: 0.05 0.0; to: "bg_img"; }
+                                       rel1 { relative: 0.05 0.0; to: "bg_img"; offset: 0 0; }
                                        rel2 { relative: 0.0 1.0; to_x: "delete_event"; to_y: "bg_img"; }
                                        align: 0.0 0.0;
                                        fixed: 1 1;
diff --git a/res/edje/images/popup button.png b/res/edje/images/popup button.png
new file mode 100644 (file)
index 0000000..4758856
Binary files /dev/null and b/res/edje/images/popup button.png differ
diff --git a/res/edje/images/popup_button.png b/res/edje/images/popup_button.png
new file mode 100755 (executable)
index 0000000..4758856
Binary files /dev/null and b/res/edje/images/popup_button.png differ
index 3966bef..49f2ede 100755 (executable)
@@ -8,7 +8,7 @@
 #define ITEM_RESULT_WIDTH ITEM_SELECTING_WIDTH
 #define ITEM_RESULT_HEIGHT ITEM_SELECTING_HEIGHT
 
-#define ITEM_GROUP_WIDTH 442
+#define ITEM_GROUP_WIDTH 300
 #define ITEM_GROUP_HEIGHT 50
 
 #define ITEM_PADDING_WIDTH 442
@@ -19,6 +19,7 @@ images {
        image: "other_location_blue_small.png" COMP;
        image: "other_location_mint_small.png" COMP;
        image: "delete_button.png" COMP;
+       image: "Group_list_delete.png" COMP;
 }
 
 collections {
@@ -453,8 +454,8 @@ collections {
                                        rel1 { relative: 0.0 0.0; }
                                        rel2 { relative: 1.0 1.0; }
                                        min: ITEM_GROUP_WIDTH ITEM_GROUP_HEIGHT;
-                                       color: 247 208 143 200;
-                                       visible: 1;
+                                       //color: 247 208 143 200;
+                                       visible: 0;
                                }
                        }
                        part {
@@ -485,6 +486,44 @@ collections {
                                }
                        }
                        part {
+                               name: "delete";
+                               type: IMAGE;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.5 0.5; to: "delete_event"; }
+                                       rel2 { relative: 0.5 0.5; to: "delete_event"; }
+                                       align: 0.5 0.5;
+                                       min: 20 20;
+                                       fixed: 1 1;
+                                       image {
+                                               normal: "Group_list_delete.png";
+                                       }
+                                       color: 255 255 255 255;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "press" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 255 255 255 100;
+                               }
+                       }
+                       part {
+                               name: "delete_event";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.9 0.5; to: "bg"; }
+                                       rel2 { relative: 0.9 0.5; to: "bg"; }
+                                       align: 0.5 0.5;
+                                       min: ITEM_GROUP_HEIGHT ITEM_GROUP_HEIGHT;
+                                       fixed: 1 1;
+                                       visible: 1;
+                               }
+                       }
+                       part {
                                name: "title_event";
                                type: RECT;
                                mouse_events: 1;
@@ -492,7 +531,7 @@ collections {
                                description {
                                        state: "default" 0.0;
                                        rel1 { relative: 20/ITEM_GROUP_WIDTH 0.0; to: "bg"; }
-                                       rel2 { relative: 400/ITEM_GROUP_WIDTH 1.0; to: "bg"; }
+                                       rel2 { relative: 0.0 1.0; to_x: "delete"; to_y: "bg"; }
                                        align: 0.5 0.5;
                                        min: ITEM_GROUP_HEIGHT ITEM_GROUP_HEIGHT;
                                        fixed: 1 1;
index 667785e..b73f282 100644 (file)
@@ -17,9 +17,6 @@ collections {
             scale:1 ;
             description { state: "default";
                image.normal: "world_map.png";
-               fixed: 1 1;
-               min: 443 259;
-               max: 443 259;
             }
          }
       }
@@ -55,6 +52,9 @@ collections {
                rel2.to: "map_base";
                rel1.relative: 0.0 0.27;
                rel2.relative: 1.0 0.90;
+               min: 443 259;
+               max: 443 259;
+               align: 0.5 0.5;
                fixed: 1 1;
             }
             description { state: "next";
@@ -193,7 +193,7 @@ collections {
             description { state: "default";
                rel1.relative: -0.68 0;
                rel2.relative: 0 1;
-               color: 255 200 0 210;
+               color: 255 180 50 210;
             }
             description { state: "visible";
                inherit: "default";
@@ -204,14 +204,66 @@ collections {
                rel2.relative: 0.68 1;
             }
          }
+         part { name: "drawer_title";
+            type: TEXT;
+            scale: 1;
+            description { state: "default" 0.0;
+               rel1.to: "drawer_bg";
+               rel2.to: "drawer_bg";
+               rel2.relative: 1 0.1;
+               text.text: "My Group List";
+               text.size: 30;
+               text.font: "Tizen:style="Bold"";
+               text.text_class: "tizen";
+               text.align: 0.1 0.25;
+               text.min: 0 1;
+               fixed: 0 1;
+            }
+         }
+         part { name: "drawer_line";
+            type: RECT;
+            description { state: "default" 0.0;
+               rel1.to: "drawer_title";
+               rel2.to: "drawer_title";
+               rel1.relative: 0.05 0.65;
+               rel2.relative: 0.95 0.65;
+               align: 0.5 0;
+               min: 0 3;
+               fixed: 0 1;
+            }
+         }
          part { name: "drawer_content";
             type: SWALLOW;
             scale: 1;
             description { state: "default";
-               rel1.to: "drawer_bg";
+               rel1.to: "drawer_line";
                rel2.to: "drawer_bg";
-               rel1.relative: 0.05 0.01;
-               rel2.relative: 0.85 0.99;
+               rel1.relative: 0 1;
+               rel2.relative: 0.95 0.99;
+               rel1.offset: 0 10;
+               rel2.offset: -1 -11;
+            }
+         }
+         part { name: "drawer_no_result";
+            type: TEXT;
+            scale: 1;
+            description { state: "default" 0.0;
+               rel1.to: "drawer_line";
+               rel2.to: "drawer_line";
+               rel1.relative: 0 1;
+               rel1.offset: 10 15;
+               rel2.relative: 1 1;
+               text.text: "No Groups";
+               text.size: 20;
+               text.font: "Tizen:style=Regular";
+               text.text_class: "tizen";
+               text.align: 0 0;
+               text.min: 0 1;
+               align: 0 0;
+               fixed: 0 1;
+            }
+            description { state: "hide" 0.0;
+               visible:0;
             }
          }
          part { name: "drawer_btn";
@@ -298,10 +350,12 @@ collections {
                align: 0.5 0;
                fixed: 1 1;
                color: 255 255 255 0;
+                          visible: 0;
             }
             description { state: "visible";
                inherit: "default";
                color: 255 255 255 255;
+                          visible: 1;
             }
          }
          part { name: "searchbar";
@@ -368,6 +422,8 @@ collections {
             }
             description { state:"next";
                inherit: "default";
+               min: 0 100;
+               align: 0 1;
             }
          }
          part { name: "save_group_bg";
@@ -376,6 +432,9 @@ collections {
                color: 0 0 0 0;
                visible: 0;
             }
+            description{ state: "next";
+               inherit: "default";
+            }            
             description{ state:"activated";
                color: 0 0 0 126;
                visible: 1;
@@ -387,19 +446,26 @@ collections {
             description { state: "default";
                rel1.to: "bottom_part";
                rel2.to: "bottom_part";
-               rel1.relative: 0.25 0.5;
-               rel2.relative: 0.25 0.5;
+               rel1.relative: 0.5 1;
+               rel2.relative: 0.5 1;
                fixed: 1 1;
-               min: 150 50;
+               min: 150 55;
+               align: 0.5 0;
+               color: 255 0 0 255;
+            }
+            description { state: "next";
+               inherit: "default";
+               rel1.relative: 0.5 0.5;
+               rel2.relative: 0.5 0.5;
                align: 0.5 0.5;
             }
             description { state: "activated";
                rel1.relative: 0.5 0.5;
                rel2.relative: 0.5 0.5;
-               min: 350 350;
-               fixed: 1 1;
                align: 0.5 0.5;
-            }
+               min: 350 175;
+               fixed: 1 1;
+            }            
          }
          part { name: "new_event_btn";
             type: SWALLOW;
@@ -407,12 +473,19 @@ collections {
             description { state: "default";
                rel1.to: "bottom_part";
                rel2.to: "bottom_part";
-               rel1.relative: 0.75 0.5;
-               rel2.relative: 0.75 0.5;
+               rel1.relative: 0.75 1;
+               rel2.relative: 0.75 1;
                fixed: 1 1;
-               min: 150 50;
+               min: 150 55;
                align: 0.5 0;
+               color: 255 0 0 255;               
             }
+            description { state: "next";
+               inherit: "default";               
+               rel1.relative: 0.75 0.5;
+               rel2.relative: 0.75 0.5;
+               align: 0.5 0.5;
+            }            
          }
       }
       programs {
@@ -475,6 +548,8 @@ collections {
             target: "map";
             target: "city_list";
             target: "bottom_part";
+            target: "save_group_btn";
+            target: "new_event_btn";            
             transition: DECELERATE 0.75;
             after: "page_back_1b";
          }
@@ -534,6 +609,14 @@ collections {
 //page 0 back end
         
          
+//description1 begin
+         program { //name: "go_page1a";
+            signal: "momentic,state,go_result_page";
+                       after: "go_page1a";
+         }
+
+         
+
          
 //page 1 begin
          program { name: "go_page1a";
@@ -601,7 +684,6 @@ collections {
          }
 //search bar end
          
-         
 //description2 begin
          program { name: "show_add_description2";
             signal: "momentic,state,add_description,show";
@@ -631,6 +713,8 @@ collections {
             target: "map_base";
             target: "map";
             target: "bottom_part";
+            target: "save_group_btn";
+            target: "new_event_btn";
             transition: DECELERATE 0.75;
             after: "go_page2c";
          }
@@ -698,6 +782,16 @@ collections {
                run_program(PROGRAM:"drawer_hide");
             }
          }         
+         program { name: "drawer_no_result_hide";
+            signal: "momentic,state,drawer,noresult,hide";
+            action: STATE_SET "hide" 0.0;
+            target: "drawer_no_result";
+         }
+         program { name: "drawer_no_result_show";
+            signal: "momentic,state,drawer,noresult,show";
+            action: STATE_SET "default" 0.0;
+            target: "drawer_no_result";
+         }
 //drawer end
          
          
@@ -712,7 +806,7 @@ collections {
          }
          program { name: "save_group_deactivate";
             signal: "momentic,state,save_group,deactivate";
-            action: STATE_SET "default" 0.0;
+            action: STATE_SET "next" 0.0;
             target: "save_group_btn";
             target: "save_group_bg";
             transition: DECELERATE 0.5;
index e69de29..3806a48 100755 (executable)
@@ -0,0 +1,229 @@
+collections {
+   base_scale: 1.8;
+   styles {
+      style { name: "text_style";
+         base: "font=Tizen font_size=18 text_class=tizen color=#ffffff valign=0.5 align=center";
+      }
+   }
+   images {
+      image: "popup_button.png" COMP;
+   }
+   group { name: "set_as_new_event";
+      parts {
+         part { name: "base";
+            scale: 1;
+            type: RECT;
+            description { state: "default";
+               rel1 { relative: 0.5 0.5; }
+               rel2 { relative: 0.5 0.5; }
+               min: 150 55;
+               fixed: 1 1;
+               color: 255 255 255 0;
+            }
+         }
+         part { name: "bg";
+            type: IMAGE;
+            scale: 1;
+            description { state: "default";
+               rel1.to: "base";
+               rel2.to: "base";
+               image.normal: "popup_button.png";
+               image.border: 3 3 3 3;
+               image.border_scale: 1;
+            }
+         }
+         part { name: "text";
+            type: TEXTBLOCK;
+            scale: 1;
+            description { state: "default";
+               rel1.to: "base";
+               rel2.to: "base";
+               rel1.relative: 0 0;
+               rel2.relative: 1 0;
+               fixed: 1 1;
+               align: 0.5 0;
+               text { 
+                  style: "text_style";
+                  text: "Set as new</br>event";
+                  min: 0 1;
+               }
+            }
+         }
+      }
+   }   
+   group { name: "save_as_group";
+      parts {
+         part { name: "base";
+            scale: 1;
+            type: RECT;
+            description { state: "default";
+               rel1 { relative: 0.5 0.5; }
+               rel2 { relative: 0.5 0.5; }
+               min: 150 55;
+               fixed: 1 1;
+               color: 255 255 255 0;
+            }
+            description { state: "activated";
+               inherit: "default";
+               rel1 { relative: 0.5 0.5; }
+               rel2 { relative: 0.5 0.5; }
+               min: 350 175;
+               color: 255 255 255 255;
+            }
+         }
+         part { name: "bg";
+            type: IMAGE;
+            scale: 1;
+            description { state: "default";
+               rel1.to: "base";
+               rel2.to: "base";
+               image.normal: "popup_button.png";
+               image.border: 3 3 3 3;
+               image.border_scale: 1;
+            }
+         }
+         part { name: "text";
+            type: TEXTBLOCK;
+            scale: 1;
+            description { state: "default";
+               rel1.to: "base";
+               rel2.to: "base";
+               rel1.relative: 0 0;
+               rel1.offset: 0 3;
+               rel2.relative: 1 0;
+               fixed: 1 1;
+               align: 0.5 0;
+               text { 
+                  style: "text_style";
+                  text: "Save as</br>group";
+                  min: 0 1;
+               }
+               color: 255 255 255 255;
+            }
+            description { state: "activated";
+               inherit: "default";
+               color: 255 255 255 0;
+            }
+         }
+         part { name: "text2";
+            type: TEXTBLOCK;
+            scale: 1;
+            clip_to: "base";
+            description { state: "default";
+               rel1.to: "base";
+               rel2.to: "base";
+               rel1.relative: 0 0;
+               rel2.relative: 1 0;
+               fixed: 1 1;
+               align: 0.5 0;
+               text { 
+                  style: "text_style";
+                  text: "Save as group";
+                  min: 0 1;
+               }
+            }
+         }
+         part { name: "line";
+            type: RECT;
+            clip_to: "base";
+            description { state: "default";
+               rel1 { to: "text2"; relative: 0.1 1; }
+               rel2 { to: "text2"; relative: 0.9 1; }
+               min: 0 1;
+               fixed: 0 1;
+            }
+         }
+         part { name: "entry";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "base";
+            description { state: "default";
+               rel1 { to: "text2"; relative: 0.1 1; offset: 0 10; }
+               rel2 { to: "text2"; relative: 0.9 1; }
+               align: 0.5 0;
+               min: 0 50;
+            }
+         }
+         part { name: "cancel_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "base";
+            description { state: "default";
+               rel1 { to: "base"; relative: 0.25 0.9; }
+               rel2 { to: "base"; relative: 0.25 0.9; }
+               align: 0.5 1;
+               min: 100 40;
+               fixed: 1 1;
+            }
+         }
+         part { name: "create_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "base";
+            description { state: "default";
+               rel1 { to: "base"; relative: 0.75 0.9; }
+               rel2 { to: "base"; relative: 0.75 0.9; }
+               align: 0.5 1;
+               min: 100 40;
+               fixed: 1 1;
+            }
+         }
+         part { name: "button";
+            type: SWALLOW;
+            description { state: "default";
+                               rel1.to: "base";
+                               rel2.to: "base";
+            }
+           description { state: "activated";
+                inherit: "default";
+                           visible: 0;
+            }
+         }
+         part { name: "effect";
+            type: RECT;
+            repeat_events: 1;
+            description { state: "default";
+               rel1.to: "base";
+               rel2.to: "base";
+               color:255 255 255 0;
+            }
+            description { state: "clicked";
+                inherit: "default";
+               color:255 255 255 127;
+            }
+         }
+      }
+      programs {
+         program { name: "activate";
+            signal: "momentic,state,activate";
+            action: STATE_SET "activated" 0.0;
+            target: "base";
+            target: "text";
+           target: "button";
+            transition: DECELERATE 1;
+         }
+         program { name: "deactivate";
+            signal: "momentic,state,deactivate";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+            target: "text";
+               target: "button";
+            transition: DECELERATE 1;
+         }
+         program { name: "down";
+            signal: "mouse,down,1";
+            source: "effect";
+            action: STATE_SET "clicked" 0.0;
+            target: "effect";
+            transition: DECELERATE 0.25;
+         }
+         program { name: "up";
+            signal: "mouse,up,1";
+            source: "effect";
+            action: STATE_SET "default" 0.0;
+            target: "effect";
+            transition: DECELERATE 0.25;
+         }
+      }
+   }
+}
diff --git a/res/images/Group_list_delete.png b/res/images/Group_list_delete.png
new file mode 100755 (executable)
index 0000000..7e5eb75
Binary files /dev/null and b/res/images/Group_list_delete.png differ
index f9ca46b..c7ee7b8 100644 (file)
--- a/src/db.c
+++ b/src/db.c
@@ -22,7 +22,6 @@
 #include <string.h>
 #include <unistd.h>
 #include <app_common.h>
-#include <time.h>
 
 #include "db.h"
 #include "log.h"
@@ -47,6 +46,7 @@ HAPI sqlite3 *db_open(void)
        snprintf(db_file, sizeof(db_file), "%s/%s", path, APP_DB_FILE);
        free(path);
 
+       _D("db_file : %s", db_file);
        ret = sqlite3_open(db_file, &db);
        if (SQLITE_OK != ret) {
                _E("%s", sqlite3_errmsg(db));
@@ -93,15 +93,15 @@ HAPI int db_next(sqlite3 *db, sqlite3_stmt *stmt)
        ret = sqlite3_step(stmt);
        switch (ret) {
        case SQLITE_ROW: /* SQLITE_ROW : 100 */
-               return APPL_ERROR_NONE;
+               return SQLITE_ROW;
        case SQLITE_DONE: /* SQLITE_ROW : 101 */
-               return APPL_ERROR_NO_DATA;
+               return SQLITE_DONE;
        default:
                _E("%s", sqlite3_errmsg(db));
-               return APPL_ERROR_FAIL;
+               return -1;
        }
 
-       return APPL_ERROR_NONE;
+       return -1;
 }
 
 
@@ -296,15 +296,15 @@ ERROR:
 HAPI int db_create_table(sqlite3 *db)
 {
        const char *TABLES[] = {
-               "CREATE TABLE IF NOT EXIST db_checksum (version INT);",
-               "CREATE TABLE IF NOT EXIST group ("
-                       "time INTEGER PRIMARY KEY"
+               "CREATE TABLE IF NOT EXISTS db_checksum (version INT);",
+               "CREATE TABLE IF NOT EXISTS gr ("
+                       "id INTEGER PRIMARY KEY AUTOINCREMENT"
                        ", title TEXT"
-                       ", city1 INT"
-                       ", city2 INT"
-                       ", city3 INT"
-                       ", city4 INT"
-                       ", city5 INT"
+                       ", city1 INTEGER"
+                       ", city2 INTEGER"
+                       ", city3 INTEGER"
+                       ", city4 INTEGER"
+                       ", city5 INTEGER"
                        ");",
        };
        int count = 0;
@@ -324,8 +324,8 @@ HAPI int db_create_table(sqlite3 *db)
 HAPI int db_drop_table(sqlite3 *db)
 {
        const char *TABLES[] = {
-               "DROP TABLE IF EXIST db_checksum;",
-               "DROP TABLE IF EXIST group;",
+               "DROP TABLE IF EXISTS db_checksum;",
+               "DROP TABLE IF EXISTS gr;",
        };
        int count = 0;
        int i = 0;
@@ -444,7 +444,7 @@ HAPI int db_count_version(sqlite3 *db)
 
 HAPI int db_count_group(sqlite3 *db, int *count)
 {
-       const char *const QUERY_SYNTAX = "SELECT COUNT(*) FROM group;";
+       const char *const QUERY_SYNTAX = "SELECT COUNT(*) FROM gr;";
        sqlite3_stmt *st = NULL;
 
        st = db_prepare(db, QUERY_SYNTAX);
@@ -468,18 +468,45 @@ error:
 
 
 
-HAPI long db_insert_group(sqlite3 *db, const char *title, int city1, int city2, int city3, int city4, int city5)
+HAPI int db_max_group(sqlite3 *db, int *max)
+{
+       const char *const QUERY_SYNTAX = "SELECT MAX(id) FROM gr;";
+       sqlite3_stmt *st = NULL;
+
+       st = db_prepare(db, QUERY_SYNTAX);
+       retv_if(!st, APPL_ERROR_FAIL);
+
+       goto_if(db_next(db, st) == -1, error);
+
+       *max = db_get_int(st, 0);
+
+       db_reset(db, st);
+       db_finalize(db, st);
+
+       /* keep this DB opened */
+
+       return APPL_ERROR_NONE;
+
+error:
+       db_finalize(db, st);
+       return APPL_ERROR_FAIL;
+}
+
+
+
+HAPI int db_insert_group(sqlite3 *db, const char *title, int city1, int city2, int city3, int city4, int city5)
 {
-       const char *const QUERY_INSERT = "INSERT INTO group (time, title, city1, city2, city3, city4, city5) VALUES (?, ?, ?, ?, ?, ?, ?);";
+       const char *const QUERY_INSERT = "INSERT INTO gr (id, title, city1, city2, city3, city4, city5) VALUES (?, ?, ?, ?, ?, ?, ?);";
        sqlite3_stmt *st = NULL;
-       time_t t;
+       int max = 0;
 
-       time(&t);
+       db_max_group(db, &max);
+       max++;
 
        st = db_prepare(db, QUERY_INSERT);
-       retv_if(!st, 0l);
+       retv_if(!st, -1);
 
-       goto_if(db_bind_long(db, st, 1, (long) t) != APPL_ERROR_NONE, error);
+       goto_if(db_bind_int(db, st, 1, max) != APPL_ERROR_NONE, error);
        goto_if(db_bind_str(db, st, 2, title) != APPL_ERROR_NONE, error);
        goto_if(db_bind_int(db, st, 3, city1) != APPL_ERROR_NONE, error);
        goto_if(db_bind_int(db, st, 4, city2) != APPL_ERROR_NONE, error);
@@ -493,18 +520,18 @@ HAPI long db_insert_group(sqlite3 *db, const char *title, int city1, int city2,
 
        /* keep the sticker panel DB opened */
 
-       return t;
+       return max;
 
 error:
        db_finalize(db, st);
-       return 0l;
+       return -1;
 }
 
 
 
-HAPI int db_update_group(sqlite3 *db, int time, const char *title, int city1, int city2, int city3, int city4, int city5)
+HAPI int db_update_group(sqlite3 *db, int id, const char *title, int city1, int city2, int city3, int city4, int city5)
 {
-       const char *const QUERY_UPDATE = "UPDATE group SET title = ?, city1 = ?, city2 = ?, city3 = ?, city4 = ?, city5 = ? WHERE time = ?;";
+       const char *const QUERY_UPDATE = "UPDATE gr SET title = ?, city1 = ?, city2 = ?, city3 = ?, city4 = ?, city5 = ? WHERE id = ?;";
        sqlite3_stmt *st = NULL;
 
        st = db_prepare(db, QUERY_UPDATE);
@@ -516,7 +543,7 @@ HAPI int db_update_group(sqlite3 *db, int time, const char *title, int city1, in
        goto_if(db_bind_int(db, st, 4, city3) != APPL_ERROR_NONE, error);
        goto_if(db_bind_int(db, st, 5, city4) != APPL_ERROR_NONE, error);
        goto_if(db_bind_int(db, st, 6, city5) != APPL_ERROR_NONE, error);
-       goto_if(db_bind_int(db, st, 7, time) != APPL_ERROR_NONE, error);
+       goto_if(db_bind_int(db, st, 7, id) != APPL_ERROR_NONE, error);
        goto_if(db_next(db, st) == -1, error);
 
        db_reset(db, st);
@@ -533,15 +560,15 @@ error:
 
 
 
-HAPI int db_delete_group(sqlite3 *db, int time)
+HAPI int db_delete_group(sqlite3 *db, int id)
 {
-       const char *const QUERY_SYNTAX = "DELETE FROM group WHERE time = ?;";
+       const char *const QUERY_SYNTAX = "DELETE FROM gr WHERE id = ?;";
        sqlite3_stmt *st = NULL;
 
        st = db_prepare(db, QUERY_SYNTAX);
        retv_if(!st, APPL_ERROR_FAIL);
 
-       goto_if(db_bind_int(db, st, 1, time) != APPL_ERROR_NONE, error);
+       goto_if(db_bind_int(db, st, 1, id) != APPL_ERROR_NONE, error);
        goto_if(db_next(db, st) == -1, error);
 
        db_reset(db, st);
@@ -558,9 +585,9 @@ error:
 
 
 
-HAPI int db_list_group(sqlite3 *db, Eina_List **group_list, int limit)
+HAPI int db_list_group(sqlite3 *db, Eina_List **group_list)
 {
-       const char *const QUERY_LIST = "SELECT time, title, city1, city2, city3, city4, city5 FROM group ORDER BY time ASC";
+       const char *const QUERY_LIST = "SELECT id, title, city1, city2, city3, city4, city5 FROM gr ORDER BY id ASC";
        sqlite3_stmt *st = NULL;
        group_info_s *group_info = NULL;
 
@@ -570,7 +597,7 @@ HAPI int db_list_group(sqlite3 *db, Eina_List **group_list, int limit)
        retv_if(!st, APPL_ERROR_FAIL);
 
        do {
-               long time = 0l;
+               int id = 0;
                const char *title = NULL;
                int city1 = 0, city2 = 0, city3 = 0, city4 = 0, city5 = 0;
                ret = db_next(db, st);
@@ -581,7 +608,7 @@ HAPI int db_list_group(sqlite3 *db, Eina_List **group_list, int limit)
                        goto error;
                }
 
-               time = db_get_long(st, 0);
+               id = db_get_int(st, 0);
                title = db_get_str(st, 1);
                city1 = db_get_int(st, 2);
                city2 = db_get_int(st, 3);
@@ -589,7 +616,7 @@ HAPI int db_list_group(sqlite3 *db, Eina_List **group_list, int limit)
                city4 = db_get_int(st, 5);
                city5 = db_get_int(st, 6);
 
-               group_info = group_info_create(time, title, city1, city2, city3, city4, city5);
+               group_info = group_info_create(id, title, city1, city2, city3, city4, city5);
                continue_if(!group_info);
 
                *group_list = eina_list_append(*group_list, group_info);
index ef74a4e..27c009c 100644 (file)
@@ -1,36 +1,27 @@
 #include <stdlib.h>
 
 #include "log.h"
+#include "group_info.h"
 
-struct _group_info_s {
-       char *title;
-       int time;
-       int city1;
-       int city2;
-       int city3;
-       int city4;
-       int city5;
-};
-typedef struct _group_info_s group_info_s;
-
-group_info_s *group_info_create(long time, const char *title, int city1, int city2, int city3, int city4, int city5)
+group_info_s *group_info_create(int id, const char *title, int city1, int city2, int city3, int city4, int city5)
 {
        group_info_s *group_info = NULL;
 
        group_info = calloc(1, sizeof(group_info_s));
        retv_if(!group_info, NULL);
 
-       group_info->time = time;
+       group_info->id = id;
 
        if (title)
                group_info->title = strdup(title);
 
-       group_info->city1 = city1;
-       group_info->city2 = city2;
-       group_info->city3 = city3;
-       group_info->city4 = city4;
-       group_info->city5 = city5;
+       group_info->city[0] = city1;
+       group_info->city[1] = city2;
+       group_info->city[2] = city3;
+       group_info->city[3] = city4;
+       group_info->city[4] = city5;
        
+       _D("HELLO, %s, %d:%d:%d", title, city1, city2, city3);
        return group_info;
 }
 
index 0318c0f..6e094ea 100644 (file)
@@ -15,6 +15,9 @@
 #include "scroller.h"
 #include "popup.h"
 #include "map.h"
+#include "notification.h"
+#include "group_info.h"
+#include "db.h"
 
 #define _EDJ(o) elm_layout_edje_get(o)
 
@@ -49,7 +52,6 @@ static double _get_local_timezone(void)
        retv_if(!local_time, 0.0f);
 
        timezone = (double) (local_time->tm_gmtoff / 3600l);
-_D("HELLO, gmtoff:%d", local_time->tm_gmtoff / 3600l);
 
        return timezone;
 }
@@ -100,6 +102,7 @@ static void _item_typing_up_cb(void *data, Evas_Object *obj, const char *emissio
 {
        Evas_Object *item = obj;
        Evas_Object *selecting_item = NULL;
+       Evas_Object *entry = NULL;
        main_view_s *main_view_info = data;
        struct tm *local_time = NULL;
        int city = 0;
@@ -120,10 +123,8 @@ static void _item_typing_up_cb(void *data, Evas_Object *obj, const char *emissio
 
        count = scroller_count_item(main_view_info->city_list);
        if (count + 1 > MAXIMUM_SELECTED_CITY) {
-               Evas_Object *popup = NULL;
                _D("Cities selected are limited.");
-               popup = popup_create_text(main_view_info->main_view, "Maximum number of cities reached");
-               ret_if(!popup);
+               notification_status_message_post("Maximum number of cities reached");
                return;
        }
 
@@ -140,6 +141,10 @@ static void _item_typing_up_cb(void *data, Evas_Object *obj, const char *emissio
                elm_object_signal_emit(main_view_info->main_view, "momentic,state,add_description,show", "");
                elm_object_signal_emit(main_view_info->main_view, "momentic,state,next_btn,hide", "");
        }
+
+       entry = elm_object_part_content_get(main_view_info->searchbar, "entry");
+       elm_entry_entry_set(entry, "");
+       elm_object_focus_set(main_view_info->next_btn, EINA_TRUE);
 }
 
 Evas_Object *item_create_typing(Evas_Object *parent, int city, main_view_s *main_view_info)
@@ -290,10 +295,9 @@ Evas_Object *item_create_selecting(Evas_Object *parent, int city, struct tm *loc
        for (i = 0; i < MAXIMUM_SELECTED_CITY; i++) {
                if (color_index[i]) continue;
 
-               _D("HELLO, i : %d, city : %d", i, city);
                if (EINA_FALSE == add_city_to_map(i, &city_info[city])) {
                        _E("cannot add a city to the map");
-                       return NULL;
+                       break;
                }
                break;
        }
@@ -420,10 +424,11 @@ static void _item_group_up_cb(void *data, Evas_Object *obj, const char *emission
        Evas_Object *item = obj;
        Evas_Object *selecting_item = NULL;
        main_view_s *main_view_info = data;
+       group_info_s *group_info = NULL;
        struct tm *local_time = NULL;
        int city = 0;
-       int count = 0;
        time_t t = 0;
+       int i = 0;
 
        ret_if(!item);
        ret_if(!main_view_info);
@@ -431,28 +436,69 @@ static void _item_group_up_cb(void *data, Evas_Object *obj, const char *emission
 
        _D("An item is selected");
 
+       scroller_clear_item(main_view_info->city_list);
+
+       group_info = evas_object_data_get(item, GROUP_INFO);
+       ret_if(!group_info);
+
        time(&t);
        local_time = localtime(&t);
 
-       count = scroller_count_item(main_view_info->city_list);
-       if (count >= MAXIMUM_SELECTED_CITY) {
-               Evas_Object *popup = NULL;
-               _D("Cities selected are limited.");
-               popup = popup_create_text(main_view_info->main_view, "Maximum number of cities reached");
-               elm_object_part_content_set(main_view_info->main_view, "popup", popup);
-               return;
+       for (i = 0; i < MAXIMUM_SELECTED_CITY; i++) {
+               if (!group_info->city[i]) {
+                       _D("No city anymore");
+                       break;
+               }
+               selecting_item = item_create_selecting(main_view_info->city_list, group_info->city[i], local_time, main_view_info);
+               break_if(!selecting_item);
+               scroller_append_item(main_view_info->city_list, selecting_item);
        }
 
-       city = (int) evas_object_data_get(item, DATA_KEY_CITY);
-       selecting_item = item_create_selecting(main_view_info->city_list, city, local_time, main_view_info);
-       ret_if(!selecting_item);
+       /* Hide texts */
+       //elm_object_signal_emit(main_view_info->main_view, "momentic,state,go_result_page", "");
+       //elm_object_signal_emit(main_view_info->main_view, "momentic,state,add_description,hide", "");
+       //elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,hide", "");
+       //elm_object_signal_emit(main_view_info->main_view, "momentic,state,page2", "");
 
-       scroller_append_item(main_view_info->city_list, selecting_item);
+       //main_view_click_add_btn_cb(main_view_info, NULL, NULL);
+       //main_view_click_next_btn_cb(main_view_info, NULL, NULL);
 }
 
-Evas_Object *item_create_group(Evas_Object *parent, const char *title, main_view_s *main_view_info)
+static void _delete_group_item_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       main_view_s *main_view_info = NULL;
+       Evas_Object *item = data;
+       group_info_s *group_info = NULL;
+       int count = 0;
+
+       _D("clicked, delete the group item");
+
+       ret_if(!item);
+
+       main_view_info = evas_object_data_get(item, DATA_KEY_MAIN_VIEW_INFO);
+       ret_if(!main_view_info);
+
+       group_info = evas_object_data_get(item, GROUP_INFO);
+       ret_if(!group_info);
+
+       db_delete_group(main_view_info->moment_info->db, group_info->id);
+       main_view_info->moment_info->group_list = eina_list_remove(main_view_info->moment_info->group_list, group_info);
+       group_info_destroy(group_info);
+
+       item_destroy_group(item);
+
+       count = scroller_count_item(main_view_info->group_scroller);
+       if (count < 1) {
+               elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,show", "");
+       }
+
+       
+}
+
+Evas_Object *item_create_group(Evas_Object *parent, group_info_s *group_info, main_view_s *main_view_info)
 {
        Evas_Object *item = NULL;
+       Evas_Object *btn = NULL;
 
        char *path = NULL;
        char full_path[PATH_LEN] = {0, };
@@ -469,6 +515,8 @@ Evas_Object *item_create_group(Evas_Object *parent, const char *title, main_view
        retv_if(!item, NULL);
 
        elm_layout_file_set(item, full_path, "item_group");
+       evas_object_data_set(item, GROUP_INFO, group_info);
+       evas_object_data_set(item, DATA_KEY_MAIN_VIEW_INFO, main_view_info);
 
        evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        evas_object_size_hint_align_set(item, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -478,7 +526,15 @@ Evas_Object *item_create_group(Evas_Object *parent, const char *title, main_view
 
        evas_object_show(item);
 
-       elm_object_part_text_set(item, "city", title);
+       btn = elm_button_add(item);
+       if (btn) {
+               elm_object_style_set(btn, "transparent");
+               elm_object_part_content_set(item, "delete_event", btn);
+               evas_object_smart_callback_add(btn, "clicked", _delete_group_item_cb, item);
+               evas_object_show(btn);
+       }
+
+       elm_object_part_text_set(item, "title", group_info->title);
 
        return item;
 }
@@ -487,6 +543,8 @@ void item_destroy_group(Evas_Object *item)
 {
        ret_if(!item);
 
+       evas_object_data_del(item, GROUP_INFO);
+       evas_object_data_del(item, DATA_KEY_MAIN_VIEW_INFO);
        evas_object_event_callback_del(item, EVAS_CALLBACK_DEL, _item_group_del_cb);
        elm_object_signal_callback_del(item, "down", "item", _item_group_down_cb);
        elm_object_signal_callback_del(item, "up", "item", _item_group_up_cb);
@@ -542,14 +600,18 @@ static void _item_best_time_del_cb(void *data, Evas *e, Evas_Object *obj, void *
        item_destroy_best_time(obj);
 }
 
-Evas_Object *item_create_best_time(Evas_Object *parent)
+Evas_Object *item_create_best_time(Evas_Object *parent, double start, double end)
 {
        Evas_Object *item = NULL;
        city_s *city_info = NULL;
 
        char *path = NULL;
        char full_path[PATH_LEN] = {0, };
-       char city_str[PATH_LEN] = {0, };
+       char time_str[PATH_LEN] = {0, };
+
+       double start1, start2, end1, end2;
+       double half;
+       int tmp = 0;
 
        retv_if(!parent, NULL);
 
@@ -572,6 +634,38 @@ Evas_Object *item_create_best_time(Evas_Object *parent)
 
        evas_object_show(item);
 
+       if (start >= end) {
+               elm_object_part_text_set(item, "time", "No matched time");
+               goto out;
+       }
+
+       tmp = start;
+       if (tmp == start) half = 0.0f;
+       else half = 0.5f;
+
+       if (tmp) tmp %= 24;
+       start = ((double) tmp) + half;
+
+       tmp = end;
+       if (tmp == end) half = 0.0f;
+       else half = 0.5f;
+
+       if (tmp) tmp %= 24;
+       end = ((double) tmp) + half;
+
+       _D("HELLO, Best,%f:%f", start, end);
+
+       int start_hour = start;
+       int start_minute = (start_hour == start)? 0 : 30;
+       int end_hour = end;
+       int end_minute = (end_hour == end)? 0 : 30;
+
+       snprintf(time_str, sizeof(time_str), "%d:%02d - %d:%02d", start_hour, start_minute, end_hour, end_minute);
+       elm_object_part_text_set(item, "time",  time_str);
+       if (set_time_range(item, 5, start, end, 0.0f, 0.0f) == EINA_FALSE)
+               _E("cannot set time range");
+
+out:
        return item;
 }
 
index 348232d..544c664 100644 (file)
@@ -22,6 +22,7 @@
 #include "util.h"\r
 #include "main.h"\r
 #include "ui_manager.h"\r
+#include "db.h"\r
 \r
 static void\r
 _win_delete_request_cb(void *data, Evas_Object *obj, void *event_info)\r
@@ -76,6 +77,8 @@ app_create(void *data)
        _D("Window size (%d:%d)", moment_info->width, moment_info->height);\r
 \r
        moment_info->e = evas_object_evas_get(moment_info->win);\r
+       moment_info->db = db_open();\r
+       db_create_table(moment_info->db);\r
 \r
        return true;\r
 }\r
index b8cca81..574012d 100644 (file)
@@ -1,6 +1,7 @@
 #include <Elementary.h>
 #include <time.h>
 #include <app_control.h>
+#include <notification.h>
 
 #include "main.h"
 #include "main_view.h"
@@ -226,8 +227,8 @@ static Evas_Object *_create_searchbar(Evas_Object *parent, main_view_s *main_vie
        elm_entry_single_line_set(entry_obj, EINA_TRUE);
        /* This makes the text upper */
        elm_entry_scrollable_set(entry_obj, EINA_FALSE);
-       //elm_entry_cnp_mode_set(entry_obj, ELM_CNP_MODE_PLAINTEXT);
        elm_entry_text_style_user_push(entry_obj, "DEFAULT='font_size=20'");
+       elm_entry_context_menu_disabled_set(entry_obj, EINA_TRUE);
        elm_object_part_text_set(entry_obj, "elm.guide", "<font_size=20>Search</font_size>");
 
        evas_object_size_hint_weight_set(entry_obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -256,7 +257,7 @@ static void _destroy_searchbar(Evas_Object *searchbar)
        evas_object_del(searchbar);
 }
 
-static void _set_time_range(Evas_Object *item, int i, int base_city, int cur_city)
+static void _set_time_range(Evas_Object *item, int i, int base_city, int cur_city, double *matched_start, double *matched_end)
 {
        double start1 = 0.0f;
        double end1 = 0.0f;
@@ -265,18 +266,37 @@ static void _set_time_range(Evas_Object *item, int i, int base_city, int cur_cit
 
        city_s *city_info = NULL;
 
-       int start = 0;
-       int end = 0;
+       double start = 0;
+       double end = 0;
+       double half = 0.0f;
+
+       int tmp = 0;
 
        city_info = city_get();
        ret_if(!city_info);
 
-       start = (int) city_info[cur_city].timezone - city_info[base_city].timezone + (double) BEST_START_TIME;
+       start = city_info[cur_city].timezone - city_info[base_city].timezone + (double) BEST_START_TIME;
+
+       if (start < 0.0f)
+               start += 24.0f;
+
+       if (matched_start && matched_end) {
+               /* This end is only for the matched end */
+               end = start + BEST_DURING_TIME;
+               if (*matched_start < (double) start)
+                       *matched_start = (double) start;
+
+               if (*matched_end > (double) end)
+                       *matched_end = end;
+       }
+
+       tmp = start;
+       if (tmp != start) half = 0.5f;
+       else half = 0.0f;
 
-       if (start < 0)
-               start += 24;
+       tmp %= 24;
 
-       start %= 24;
+       start = ((double) tmp) + half;
        end = start + BEST_DURING_TIME;
 
        if (end > 24.0f) {
@@ -284,13 +304,18 @@ static void _set_time_range(Evas_Object *item, int i, int base_city, int cur_cit
                end1 = 24.0f;
 
                start2 = 0.0f;
-               end2 = (double) (end % 24);
+
+               tmp = end;
+               if (tmp != end) half = 0.5f;
+               else half = 0.0f;
+
+               end2 = (double) (tmp % 24) + half;
        } else {
                start1 = (double) start;
                end1 = (double) end;
        }
 
-       _D("O, %s %f:%f:%f:%f", city_info[cur_city].name, start1, end1, start2, end2);
+       _D("HELLO, %s %f:%f:%f:%f", city_info[cur_city].name, start1, end1, start2, end2);
 
        if (set_time_range(item, i, start1, end1, start2, end2) == EINA_FALSE)
                _E("cannot set time range");
@@ -303,7 +328,7 @@ typedef struct part_info
 } part_info_s;
 
 
-static void _click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
+void main_view_click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
 {
        main_view_s *main_view_info = data;
        Evas_Object *box = NULL;
@@ -316,6 +341,9 @@ static void _click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
        int cur_timezone = 0;
        int base_city = 0;
 
+       double matched_start = 0.0f;
+       double matched_end = 100.0f; /* We have to initialize this variable as 100.0f */
+
        ret_if(!main_view_info);
        ret_if(!main_view_info->city_list);
 
@@ -345,66 +373,17 @@ static void _click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
 
                if (!base_city) {
                        base_city = selecting_info->city;
-                       _set_time_range(item, selecting_info->color, base_city, base_city);
+                       _set_time_range(item, selecting_info->color, base_city, base_city, &matched_start, &matched_end);
                        continue;
                } else
-                       _set_time_range(item, selecting_info->color, base_city, selecting_info->city);
-
-#if 0
-               selecting_info_s *selecting_info = NULL;
-               int start = 0, end = 0;
-               int tmp_timezone = 0;
-
-               selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
-               continue_if(!selecting_info);
-
-               tmp_timezone = city_info[selecting_info->city].timezone;
-               if (tmp_timezone < cur_timezone)
-                       tmp_timezone += 24;
-
-               start = tmp_timezone - cur_timezone + BEST_START_TIME;
-               end = (start + (BEST_END_TIME - BEST_START_TIME)) % 24;
-#endif
+                       _set_time_range(item, selecting_info->color, base_city, selecting_info->city, &matched_start, &matched_end);
        }
 
-       item = item_create_best_time(main_view_info->city_list);
+       _D("HELLO, match!! %f, %f", matched_start, matched_end);
+       item = item_create_best_time(main_view_info->city_list, matched_start, matched_end);
        if (item) {
                elm_object_signal_emit(item, "momentic,item,state,show", "");
                scroller_append_item(main_view_info->city_list, item);
-#if 0
-        //decide best time range
-               list = elm_box_children_get(box);
-               double r1 = 0, r2 = 24, r3 = 0, r4 = 24;
-               Eina_Bool best_time = EINA_TRUE;
-           Evas_Object *it;    
-               EINA_LIST_FREE(list, it) {
-                 Evas_Object *rect1 = evas_object_data_get(it, "part1");
-                 Evas_Object *rect2 = evas_object_data_get(it, "part2");
-
-                 if (rect1)
-                 {
-                         part_info_s *pi = evas_object_data_get(rect1, "part_info");
-                         if ((pi->p1 * 24) > r1) r1 = pi->p1 * 24;
-                         else best_time = EINA_FALSE;
-                         if ((pi->p2 * 24) < r2) r2 = pi->p2 * 24;
-                         else best_time = EINA_FALSE;
-                 }
-
-                 if (rect2)
-                 {
-                         part_info_s *pi = evas_object_data_get(rect2, "part_info");
-                         if ((pi->p1 *24) > r1) r1 = pi->p1 * 24;
-                         else best_time = EINA_FALSE;
-                         if ((pi->p2 *24) < r2) r2 = pi->p2 * 24;
-                         else best_time = EINA_FALSE;
-                 }
-               }
-
-               if (best_time){
-_D("AQAAA %f %f %f %f", r1, r2, r3, r4);
-          set_time_range(item, 5, r1, r2, r3, r4);
-               }
-#endif
        } else
                _E("cannot append an item");
 
@@ -430,7 +409,7 @@ static Evas_Object *_create_next_btn(Evas_Object *parent, main_view_s *main_view
        next_btn = elm_button_add(parent);
        retv_if(!next_btn, NULL);
        elm_object_style_set(next_btn, "transparent");
-       evas_object_smart_callback_add(next_btn, "clicked", _click_next_btn_cb, main_view_info);
+       evas_object_smart_callback_add(next_btn, "clicked", main_view_click_next_btn_cb, main_view_info);
 
        icon = elm_image_add(next_btn);
        if (icon) {
@@ -449,7 +428,40 @@ static void _destroy_next_btn(Evas_Object *next_btn)
        evas_object_del(next_btn);
 }
 
-static Evas_Object *_create_city_list(Evas_Object *parent)
+static void _append_here_to_city_list(Evas_Object *city_list, main_view_s *main_view_info)
+{
+       Evas_Object *item = NULL;
+       struct tm *local_time = NULL;
+       city_s *city_info = NULL;
+       time_t t;
+       int i = 0;
+
+       city_info = city_get();
+       ret_if(!city_info);
+
+       time(&t);
+       local_time = localtime(&t);
+
+       for (i = 0; i < CITY_SYDNEY; i++) {
+               if (city_info[i].timezone == ((double) (local_time->tm_gmtoff / 3600l)))
+                       break;
+       }
+
+       item = item_create_selecting(city_list, i, local_time, main_view_info);
+       if (item)
+               scroller_append_item(city_list, item);
+}
+
+static Eina_Bool
+_append_here_city_anim_cb(void *data)
+{
+       main_view_s *main_view_info = data;
+
+       _append_here_to_city_list(main_view_info->city_list, main_view_info);
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static Evas_Object *_create_city_list(Evas_Object *parent, main_view_s *main_view_info)
 {
        Evas_Object *city_list = NULL;
 
@@ -458,6 +470,8 @@ static Evas_Object *_create_city_list(Evas_Object *parent)
        city_list = scroller_create(parent);
        retv_if(!city_list, NULL);
 
+       ecore_animator_add(_append_here_city_anim_cb, main_view_info);
+
        return city_list;
 }
 
@@ -483,7 +497,7 @@ static void _destroy_city_list(Evas_Object *city_list)
        evas_object_del(city_list);
 }
 
-static void _click_add_btn_cb(void *data, Evas_Object *obj, void *event_info)
+void main_view_click_add_btn_cb(void *data, Evas_Object *obj, void *event_info)
 {
        main_view_s *main_view_info = data;
 
@@ -519,7 +533,7 @@ static Evas_Object *_create_add_btn(Evas_Object *parent, main_view_s *main_view_
        add_btn = elm_button_add(parent);
        retv_if(!add_btn, NULL);
        elm_object_style_set(add_btn, "transparent");
-       evas_object_smart_callback_add(add_btn, "clicked", _click_add_btn_cb, main_view_info);
+       evas_object_smart_callback_add(add_btn, "clicked", main_view_click_add_btn_cb, main_view_info);
 
        icon = elm_image_add(add_btn);
        if (icon) {
@@ -546,63 +560,132 @@ static void _click_save_button_cb(void *data, Evas_Object *obj, void *event_info
        Evas_Object *item = NULL;
        Eina_List *list = NULL;
        group_info_s *group_info = NULL;
-       int city[MAXIMUM_SELECTED_CITY] = {0, };
+       //int city[MAXIMUM_SELECTED_CITY] = {0, };
+       int city[5] = {0, }; /* FIXME : for compatibility */
        int i = 0;
-       long time = 0l;
+       char group_title[PATH_LEN] = {0, };
+       city_s *city_info = NULL;
+       char message[PATH_LEN] = {0, };
+
+       city_info = city_get();
+       ret_if(!city_info);
 
        _D("Save button is clicked");
 
        ret_if(!main_view_info);
-       ret_if(!main_view_info->result_list);
 
-       box = elm_object_content_get(main_view_info->result_list);
+       box = elm_object_content_get(main_view_info->city_list);
        ret_if(!box);
 
        list = elm_box_children_get(box);
        ret_if(!list);
 
        EINA_LIST_FREE(list, item) {
-               result_info_s *result_info = NULL;
+               selecting_info_s *selecting_info = NULL;
+
+               selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
+               if (!selecting_info)
+                       break;
 
-               result_info = evas_object_data_get(item, DATA_KEY_RESULT);
-               continue_if(!result_info);
+               if (i != 0) 
+                       strcat(group_title, ", ");
 
-               city[i] = result_info->city;
+               city[i] = selecting_info->city;
+               strcat(group_title, city_info[city[i]].name);
                i++;
        }
 
-       time = db_insert_group(moment_info->db
-                       , "Momentic time"
+       int id = db_insert_group(moment_info->db
+                       , group_title 
                        , city[0] 
                        , city[1]
                        , city[2]
                        , city[3]
                        , city[4]);
-       group_info = group_info_create(time
-                       , "Momentic time"
+       group_info = group_info_create(id
+                       , group_title 
                        , city[0] 
                        , city[1]
                        , city[2]
                        , city[3]
                        , city[4]);
        moment_info->group_list = eina_list_append(moment_info->group_list, group_info);
+
+       Evas_Object *item_group = item_create_group(main_view_info->group_scroller
+                               , group_info
+                               , main_view_info);
+       scroller_append_item(main_view_info->group_scroller, item_group);
+       elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,hide", "");
+
+       snprintf(message, sizeof(message), "Create a group named <br>'%s'", group_title);
+       notification_status_message_post(message);
+}
+
+#if 0
+static void _click_save_button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       main_view_s *main_view_info = data;
+       elm_object_signal_emit(main_view_info->save_button, "momentic,state,activate", "");
+       elm_object_signal_emit(main_view_info->main_view, "momentic,state,save_group,activate", "");
+}
+
+static void _click_cancel_button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       main_view_s *main_view_info = data;
+       elm_object_signal_emit(main_view_info->save_button, "momentic,state,deactivate", "");
+       elm_object_signal_emit(main_view_info->main_view, "momentic,state,save_group,deactivate", "");
 }
+#endif
 
-static Evas_Object *_create_save_button(Evas_Object *parent, moment_info_s *moment_info)
+
+static Evas_Object *_create_save_button(Evas_Object *parent, main_view_s *main_view_info)
 {
+       Evas_Object *popup_button = NULL;
        Evas_Object *save_button = NULL;
 
+       char *path = NULL;
+       char full_path[PATH_LEN] = {0, };
+
        retv_if(!parent, NULL);
 
+       path = app_get_resource_path();
+       retv_if(!path, NULL);
+
+       snprintf(full_path, sizeof(full_path), "%s/edje/popup.edj", path);
+       free(path);
+
+       popup_button = elm_layout_add(parent);
+       retv_if(!popup_button, NULL);
+
+       elm_layout_file_set(popup_button, full_path, "save_as_group");
+       evas_object_size_hint_weight_set(popup_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(popup_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(popup_button);
+
        save_button = elm_button_add(parent);
        retv_if(!save_button, NULL);
+       elm_object_style_set(save_button, "transparent");
+       elm_object_part_content_set(popup_button, "button", save_button);
+       evas_object_smart_callback_add(save_button, "clicked", _click_save_button_cb, main_view_info);
 
-       elm_object_text_set(save_button, "Save");
-       evas_object_size_hint_weight_set(save_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(save_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_smart_callback_add(save_button, "clicked", _click_save_button_cb, moment_info);
+#if 0
+       Evas_Object *create_button = NULL;
+       Evas_Object *cancel_button = NULL;
+
+       create_button = elm_button_add(parent);
+       retv_if(!create_button, NULL);
+       //elm_object_style_set(create_button, "transparent");
+       elm_object_part_content_set(popup_button, "create_btn", create_button);
+       //evas_object_smart_callback_add(create_button, "clicked", _click_create_button_cb, main_view_info);
+
+       cancel_button = elm_button_add(parent);
+       retv_if(!cancel_button, NULL);
+       //elm_object_style_set(cancel_button, "transparent");
+       elm_object_part_content_set(popup_button, "cancel_btn", cancel_button);
+       evas_object_smart_callback_add(cancel_button, "clicked", _click_cancel_button_cb, main_view_info);
+#endif
 
-       return save_button;
+       return popup_button;
 }
 
 static void _destroy_save_button(Evas_Object *save_button)
@@ -692,11 +775,17 @@ static Evas_Object *_create_group_scroller(Evas_Object *parent, Eina_List *list,
 
        EINA_LIST_FOREACH(list, l, group_info) {
                Evas_Object *item_group = item_create_group(group_scroller
-                               , group_info->title
+                               , group_info
                                , main_view_info);
                scroller_append_item(group_scroller, item_group);
        }
 
+       int count = scroller_count_item(group_scroller);
+       if (count)
+               elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,hide", "");
+       else
+               elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,show", "");
+
        return group_scroller;
 }
 
@@ -730,7 +819,7 @@ static void _main_view_back_cb(void *data, Evas_Object *obj, void *event_info)
 
        time(&cur_t);
 
-       if (prev_t + 1 > cur_t) {
+       if (prev_t + 2 > cur_t) {
                _D("wait a sec to process the back key event");
                return;
        }
@@ -741,7 +830,7 @@ static void _main_view_back_cb(void *data, Evas_Object *obj, void *event_info)
        if (1 == cur_page) {
                item_reset_color_index();
                scroller_clear_item(main_view_info->city_list);
-
+               _append_here_to_city_list(main_view_info->city_list, main_view_info);
                elm_object_focus_set(main_view_info->searchbar, EINA_FALSE);
                cur_page = 0;
        } else if (2 == cur_page) {
@@ -813,7 +902,7 @@ Evas_Object *main_view_create(Evas_Object *parent, moment_info_s *moment_info)
        if (main_view_info->next_btn)
                elm_object_part_content_set(main_view_info->main_view, "next_btn", main_view_info->next_btn);
 
-       main_view_info->city_list = _create_city_list(main_view_info->main_view);
+       main_view_info->city_list = _create_city_list(main_view_info->main_view, main_view_info);
        if (main_view_info->city_list)
                elm_object_part_content_set(main_view_info->main_view, "city_list", main_view_info->city_list);
 
@@ -825,10 +914,15 @@ Evas_Object *main_view_create(Evas_Object *parent, moment_info_s *moment_info)
        if (main_view_info->searchlist)
                elm_object_part_content_set(main_view_info->main_view, "searchlist", main_view_info->searchlist);
 
+       db_list_group(moment_info->db, &moment_info->group_list);
+
        main_view_info->group_scroller = _create_group_scroller(main_view_info->main_view, moment_info->group_list, main_view_info);
        if (main_view_info->group_scroller)
-               evas_object_hide(main_view_info->group_scroller);
-               //elm_object_part_content_set(main_view_info->main_view, "group_scroller", main_view_info->group_scroller);
+               elm_object_part_content_set(main_view_info->main_view, "drawer_content", main_view_info->group_scroller);
+
+       main_view_info->save_button = _create_save_button(main_view_info->main_view, main_view_info);
+       if (main_view_info->save_button)
+               elm_object_part_content_set(main_view_info->main_view, "save_group_btn", main_view_info->save_button);
 
        elm_object_signal_callback_add(main_view_info->main_view, "momentic,page1,done", "", _page1_done_cb, main_view_info->searchbar);
 
@@ -845,6 +939,9 @@ void main_view_destroy(Evas_Object *main_view)
        main_view_info = evas_object_data_del(main_view_info->main_view, DATA_KEY_INFO);
        ret_if(!main_view_info);
 
+       if (main_view_info->save_button)
+               _destroy_save_button(main_view_info->save_button);
+
        if (main_view_info->group_scroller)
                _destroy_group_scroller(main_view_info->group_scroller);
 
@@ -923,6 +1020,7 @@ static void _launch_calendar_edit(int start, int end)
        ret = app_control_create(&app_control);
        ret_if(APP_CONTROL_ERROR_NONE != ret);
 
+       time(&t);
        local_time = localtime(&t);
 
        snprintf(start_str, sizeof(start_str), "%4d-%2d-%2d %2d:%2d:%2d"
index d7ce295..f40ab40 100644 (file)
--- a/src/map.c
+++ b/src/map.c
@@ -25,7 +25,6 @@ map_geom_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
 {
        Evas_Coord x, y, w, h, x2, y2, w2, h2;
        evas_object_geometry_get(obj, &x, &y, &w, &h);
-       edje_object_part_geometry_get(elm_layout_edje_get(obj), "map", &x2, &y2, &w, &h);
        double scale_w = (double) w / ORIGIN_W;
        double scale_h = (double) h / ORIGIN_H;
 
@@ -34,12 +33,9 @@ map_geom_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
      {
         if (!city[idx].obj) continue;
         evas_object_move(city[idx].obj,
-                         (x + city[idx].ci.x) - (city[idx].w / 2),
-                         (y + city[idx].ci.y) - (city[idx].h / 2));
-        evas_object_move(city[idx].obj,
-                         (int)((double)city[idx].ci.x * scale_w) + x + x2 - (city[idx].w / 2),
-                         (int)((double)city[idx].ci.y * scale_h) + y + y2 - (city[idx].h / 2));
-     }
+                         (int)((double)city[idx].ci.x * scale_w) + x - (city[idx].w / 2),
+                         (int)((double)city[idx].ci.y * scale_h) + y - (city[idx].h / 2));
+        }
 }
 
 static void
@@ -105,7 +101,7 @@ add_city_to_map(int idx, city_s *ci)
    snprintf(buf, sizeof(buf), "city%d", idx);
    city[idx].obj = elm_layout_add(map_layout);
    elm_layout_file_set(city[idx].obj, full_path, buf);
-   evas_object_smart_member_add(city[idx].obj, map_layout);
+//   evas_object_smart_member_add(city[idx].obj, map_layout);
    evas_object_show(city[idx].obj);
 
    Evas_Object *edje = elm_layout_edje_get(city[idx].obj);
@@ -240,8 +236,8 @@ item_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
 Eina_Bool
 set_time_range(Evas_Object *item, int idx, double p1, double p2, double p3, double p4)
 {
-       if (!item) return EINA_FALSE;
-       if (idx < 0 || idx >= MAXIMUM_SELECTED_CITY) return EINA_FALSE;
+       retv_if(!item, EINA_FALSE);
+       retv_if(idx < 0 || idx >= 6, EINA_FALSE); /* FIXME */
 
        if (0.0f != p1)
                p1 /= 24.0f;
@@ -275,6 +271,7 @@ set_time_range(Evas_Object *item, int idx, double p1, double p2, double p3, doub
        //Part 1
 
        rect = evas_object_rectangle_add(evas_object_evas_get(item));
+       evas_object_smart_member_add(rect, item);
        switch (idx)
        {
            case 0:
@@ -316,6 +313,8 @@ set_time_range(Evas_Object *item, int idx, double p1, double p2, double p3, doub
        if ((p3 == 0 && p4 == 0)) return EINA_TRUE;
 
        rect = evas_object_rectangle_add(evas_object_evas_get(item));
+       evas_object_smart_member_add(rect, item);
+
        switch (idx)
        {
                case 0: