Main Page | Data Structures | Directories | File List | Data Fields | Globals

e_mod_container.c

Go to the documentation of this file.
00001 #include "dEvian.h"
00002 
00003 static void _devian_container_del(dEvian *devian);
00004 
00005 /* Public functions */
00006 
00007 /*
00008   Change the current container of a devian
00009   Return:
00010     - 0 if ok
00011     - 1 if fails
00012 */
00013 int devian_container_change(dEvian *devian, int container)
00014 {
00015   /* CHECK: if no source, no way */
00016   if (!devian->source)
00017     return 1;
00018 
00019   /* CHECK: if already one container, remove it, except if its the one we want */
00020   if (devian->container)
00021     _devian_container_del(devian);
00022 
00023   /* Add the new container to the devian */
00024   switch (container)
00025     {
00026     case CONTAINER_BOX:
00027       {
00028   if ( devian_container_box_add(devian) )
00029     return 1;
00030   break;
00031       }
00032 
00033     case CONTAINER_BAR:
00034       {
00035   return 1;
00036       }
00037 
00038     case CONTAINER_NO:
00039       {
00040   /* I want no container attached, thank you */
00041   return 0;
00042       }
00043 
00044     default : return 1;
00045     }
00046   
00047   return 0;
00048 }
00049 
00050 void devian_container_resize_auto(dEvian *devian)
00051 {
00052   switch (devian->conf->container_type)
00053     {
00054     case CONTAINER_BOX:
00055       {
00056   devian_container_box_resize_auto(devian->container);
00057   break;
00058       }
00059     case CONTAINER_BAR:
00060       {
00061   break;
00062       }
00063     }
00064 }
00065 
00066 int devian_container_devian_dying(dEvian *devian)
00067 {
00068   if (devian->conf->container_type == CONTAINER_BOX)
00069     {
00070       return devian_container_box_devian_dying(devian->container);
00071     }
00072   return 0;
00073 }
00074 
00075 int devian_container_edje_part_get(dEvian *devian)
00076 {
00077   if (!devian->container)
00078     return -1;
00079 
00080   switch (devian->conf->container_type)
00081     {
00082     case CONTAINER_BOX:
00083       return devian_container_box_edje_part_get(devian->container);
00084     case CONTAINER_BAR:
00085       break;
00086     }
00087 
00088   return -1;
00089 }
00090 
00091 int devian_container_edje_part_change(dEvian *devian)
00092 {
00093   switch (devian->conf->container_type)
00094     {
00095     case CONTAINER_BOX:
00096       return devian_container_box_edje_part_change(devian->container);
00097     case CONTAINER_BAR:
00098       break;
00099     }
00100 
00101   return 0;
00102 }
00103 
00104 void devian_container_edje_part_change_set(dEvian *devian, int action)
00105 {
00106   if (!devian)
00107     return;
00108   if (!devian->container)
00109     return;
00110 
00111   switch (devian->conf->container_type)
00112     {
00113     case CONTAINER_BOX:
00114       devian_container_box_edje_part_change_set(devian->container, action);
00115       break;
00116     case CONTAINER_BAR:
00117       break;
00118     }
00119 
00120   return;
00121 }
00122 
00123 int devian_container_update_name_devian(dEvian *devian)
00124 {
00125   if (!devian->conf || !devian->container)
00126     return 0;
00127 
00128   switch (devian->conf->container_type)
00129     {
00130     case CONTAINER_BOX:
00131       return devian_container_box_update_name_devian(devian->container);
00132     case CONTAINER_BAR:
00133       return 0;
00134     }
00135 
00136   return 0;
00137 }
00138 
00139 int devian_container_edje_load(Evas_Object *edje_obj, char *part)
00140 {
00141   int source_w, source_h;
00142 
00143   if (!devian_devian_edje_load(edje_obj, part))
00144     return 1;
00145 
00146   /* 'Precalculate' (get) borders */
00147   evas_object_resize(edje_obj, 400, 400);
00148   edje_object_part_geometry_get(edje_obj, "source0",
00149         NULL, NULL, &source_w, &source_h);
00150   dEvianM->theme_box_border_source_w = 400 - source_w;
00151   dEvianM->theme_box_border_source_h = 400 - source_h;
00152   DCONTAINER(("Theme borders: x:%d y:%d",
00153         dEvianM->theme_box_border_source_w,
00154         dEvianM->theme_box_border_source_h));
00155   evas_object_resize(edje_obj, 0, 0);
00156   
00157   return 0;
00158 }
00159 
00160 int devian_container_theme_set(char *theme)
00161 {
00162   dEvian *devian;
00163   Config_dEvian *conf;
00164   char *buf;
00165   int i, max;
00166 
00167   /* Same theme ? */
00168   if (!strcmp(dEvianM->conf->theme, theme))
00169     return 0;
00170 
00171   DCONTAINER(("Switching to theme %s", theme));
00172   
00173   buf = (char *)evas_stringshare_add(dEvianM->conf->theme);
00174   evas_stringshare_del(dEvianM->conf->theme);
00175   dEvianM->conf->theme = (char *)evas_stringshare_add(theme);
00176 
00177   devian_menu_main_menu_refresh();
00178   
00179   max = evas_list_count(dEvianM->devians);
00180   for (i=0; i<max; i++)
00181     {
00182       devian = evas_list_nth(dEvianM->devians, i);
00183       devian_config_devian_save(devian);
00184       conf = devian_config_devian_new(devian->conf);
00185       DCONTAINER(("Switch theme devian %d", i));
00186       devian_devian_del(devian, 0);
00187       if (!devian_devian_add(conf))
00188   {
00189     DCONTAINER(("Switch theme has failed !"));
00190     evas_stringshare_del(dEvianM->conf->theme);
00191     dEvianM->conf->theme = buf;
00192     devian_devian_add(conf);
00193     return 0;
00194   }
00195     }
00196   
00197   evas_stringshare_del(buf);
00198   return 1;
00199 }
00200 
00201 /* Static functions */
00202 
00203 static void _devian_container_del(dEvian *devian)
00204 {
00205   switch (devian->conf->container_type)
00206     {
00207     case CONTAINER_NO: return;
00208     case CONTAINER_BOX: devian_container_box_del(devian->container);
00209     case CONTAINER_BAR: return;
00210 
00211     default: return;
00212     }
00213 }

Generated on Fri Jan 6 02:26:26 2006 for dEvian by  doxygen 1.4.4