BUG Fixes: clip/get first time, add advanced section for setting bg on this desk...
authorChristopher Michael <cpmichael1@comcast.net>
Tue, 10 Jan 2006 14:17:59 +0000 (14:17 +0000)
committerChristopher Michael <cpmichael1@comcast.net>
Tue, 10 Jan 2006 14:17:59 +0000 (14:17 +0000)
SVN revision: 19694

src/bin/e_int_config_background.c

index 44d6594..e00dbd6 100644 (file)
@@ -3,14 +3,21 @@
  */
 #include "e.h"
 
+#define BG_SET_DEFAULT_DESK 0
+#define BG_SET_THIS_DESK 1
+#define BG_SET_ALL_DESK 2
+
 /* PROTOTYPES - same all the time */
 typedef struct _CFData CFData;
 typedef struct _E_Cfg_Bg_Data E_Cfg_Bg_Data;
 
-static void *_create_data(E_Config_Dialog *cfd);
-static void _free_data(E_Config_Dialog *cfd, CFData *cfdata);
-static int _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata);
+static void        *_create_data(E_Config_Dialog *cfd);
+static void        _free_data(E_Config_Dialog *cfd, CFData *cfdata);
+static int         _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata);
 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata);
+static int         _advanced_apply_data(E_Config_Dialog *cfd, CFData *cfdata);
+static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata);
+static void        _load_bgs(Evas *evas, E_Config_Dialog *cfd, Evas_Object *il);
 
 /* Actual config data we will be playing with whil the dialog is active */
 struct _CFData
@@ -18,6 +25,7 @@ struct _CFData
    /*- BASIC -*/
    char *file ;
    /*- ADVANCED -*/
+   int bg_method;
 };
 
 struct _E_Cfg_Bg_Data
@@ -38,12 +46,10 @@ e_int_config_background(E_Container *con)
    v.free_cfdata             = _free_data;
    v.basic.apply_cfdata      = _basic_apply_data;
    v.basic.create_widgets    = _basic_create_widgets;
-   /* Make these NULL for now until we have something here */
-   v.advanced.apply_cfdata   = NULL;
-   v.advanced.create_widgets = NULL;
+   v.advanced.apply_cfdata   = _advanced_apply_data;
+   v.advanced.create_widgets = _advanced_create_widgets;
    /* create config diaolg for NULL object/data */
    cfd = e_config_dialog_new(con, _("Background Settings"), NULL, 0, &v, NULL);
-   //e_dialog_resizable_set(cfd->dia, 1);
    return cfd;
 }
 
@@ -51,8 +57,8 @@ e_int_config_background(E_Container *con)
 static void
 _fill_data(CFData *cfdata)
 {
-   /* TODO: get debfault bg */
-
+   cfdata->bg_method = BG_SET_DEFAULT_DESK;
+   /* TODO: get default bg */
 }
 
 static void *
@@ -80,14 +86,6 @@ _free_data(E_Config_Dialog *cfd, CFData *cfdata)
 static int
 _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata)
 {
-   E_Zone *z;
-   E_Desk *d;
-   
-   z = e_zone_current_get(cfd->con);
-   d = e_desk_current_get(z);
-   /* Actually take our cfdata settings and apply them in real life */
-   printf("file: %s\n", cfdata->file);
-   //e_bg_add(cfd->con, z, 0, 0, cfdata->file);
    if (e_config->desktop_default_background) evas_stringshare_del(e_config->desktop_default_background);
    e_config->desktop_default_background = evas_stringshare_add(cfdata->file);
    e_bg_update();
@@ -101,20 +99,74 @@ _e_config_bg_cb_standard(void *data)
    E_Cfg_Bg_Data *d;
    
    d = data;
-   e_widget_image_object_set(d->cfd->data, e_thumb_evas_object_get(d->file, d->cfd->dia->win->evas, 160, 120, 1));
+   e_widget_image_object_set(d->cfd->data, e_thumb_evas_object_get(d->file, d->cfd->dia->win->evas, 200, 160, 1));
 }
 
-
 /**--GUI--**/
 static Evas_Object *
 _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
 {
-   /* generate the core widget layout for a basic dialog */
-   Evas_Object *o, *fr, *im = NULL;
-   Evas_Object *il;
-   char buf[4096];
-   char *homedir;
-   Evas_Object *bg;   
+   Evas_Object *o, *fr, *il;
+   Evas_Object *im = NULL;
+   
+   _fill_data(cfdata);
+   
+   o = e_widget_table_add(evas, 0);
+   
+   cfdata->file = NULL;
+   il = e_widget_ilist_add(evas, 48, 48, &(cfdata->file));
+   e_widget_ilist_selector_set(il, 1);
+   e_widget_min_size_set(il, 240, 200);
+
+   _load_bgs(evas, cfd, il);
+   im = cfd->data;
+   
+   e_widget_focus_set(il, 1);
+   e_widget_ilist_go(il);   
+   e_widget_table_object_append(o, il, 0, 0, 1, 2, 1, 1, 1, 1);
+
+   fr = e_widget_framelist_add(evas, "Preview", 0);
+   e_widget_min_size_set(fr, 180, 160);
+   e_widget_table_object_append(o, fr, 1, 0, 1, 1, 1, 1, 1, 1);   
+   e_widget_framelist_object_append(fr, im);   
+   
+   return o;
+}
+
+static int
+_advanced_apply_data(E_Config_Dialog *cfd, CFData *cfdata) 
+{
+   E_Zone *z;
+   E_Desk *d;
+   Evas_List *l;
+   int x, y;
+
+   z = e_zone_current_get(cfd->con);   
+   switch (cfdata->bg_method) 
+     {
+      case BG_SET_DEFAULT_DESK:
+       if (e_config->desktop_default_background) evas_stringshare_del(e_config->desktop_default_background);
+       e_config->desktop_default_background = evas_stringshare_add(cfdata->file);
+       e_bg_update();
+       e_config_save_queue();
+       break;
+      case BG_SET_THIS_DESK:
+       d = e_desk_current_get(z);
+       e_desk_xy_get(d, &x, &y);
+       break;
+      case BG_SET_ALL_DESK:
+       break;
+     }
+   return 1; /* Apply was OK */   
+}
+
+static Evas_Object *
+_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata) 
+{
+   Evas_Object *o, *fr, *il;
+   Evas_Object *im = NULL;
+   Evas_Object *oc;
+   E_Radio_Group *rg;
    
    _fill_data(cfdata);
    
@@ -122,7 +174,48 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
    
    cfdata->file = NULL;
    il = e_widget_ilist_add(evas, 48, 48, &(cfdata->file));
-   //e_widget_ilist_selector_set(il, 1);
+   e_widget_ilist_selector_set(il, 1);
+   e_widget_min_size_set(il, 240, 200);
+
+   _load_bgs(evas, cfd, il);
+   im = cfd->data;
+   
+   e_widget_focus_set(il, 1);
+   e_widget_ilist_go(il);   
+   e_widget_table_object_append(o, il, 0, 0, 1, 2, 1, 1, 1, 1);
+
+   fr = e_widget_framelist_add(evas, "Preview", 0);
+   e_widget_min_size_set(fr, 180, 160);
+   e_widget_table_object_append(o, fr, 1, 0, 1, 1, 1, 1, 1, 1);   
+   e_widget_framelist_object_append(fr, im);   
+   
+   rg = e_widget_radio_group_new(&(cfdata->bg_method));
+   
+   fr = e_widget_framelist_add(evas, "Set Background For", 0);
+   e_widget_min_size_set(fr, 180, 160);
+   
+   oc = e_widget_radio_add(evas, _("Default Desktop"), BG_SET_DEFAULT_DESK, rg);
+   e_widget_framelist_object_append(fr, oc);   
+   oc = e_widget_radio_add(evas, _("This Desktop"), BG_SET_THIS_DESK, rg);
+   e_widget_disabled_set(oc, 1);
+   e_widget_framelist_object_append(fr, oc);   
+   oc = e_widget_radio_add(evas, _("All Desktops"), BG_SET_ALL_DESK, rg);
+   e_widget_disabled_set(oc, 1);
+   e_widget_framelist_object_append(fr, oc);   
+
+   e_widget_table_object_append(o, fr, 1, 1, 1, 1, 1, 1, 1, 1);   
+   
+   return o;
+}
+
+static void
+_load_bgs(Evas *evas, E_Config_Dialog *cfd, Evas_Object *il) 
+{
+   Evas_Object *im = NULL;
+   Evas_Object *bg = NULL;
+   char buf[4096];
+   char *homedir;
+   
    homedir = e_user_homedir_get();
    if (homedir)
      {
@@ -130,7 +223,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
        free(homedir);
      }
    
-   if ((ecore_file_exists(buf)) && (ecore_file_is_dir(buf)))
+   if (ecore_file_is_dir(buf))
      {
        Ecore_List *bgs;
        
@@ -151,70 +244,49 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
             while ((bgfile = ecore_list_next(bgs)))
               {
                  snprintf(fullbg, sizeof(fullbg), "%s/%s", buf, bgfile);
-                 if (ecore_file_is_dir(fullbg))
-                   continue;
+                 if (ecore_file_is_dir(fullbg)) continue;
                  
                  /* minimum theme requirements */
                  if (edje_object_file_set(o, fullbg, "desktop/background"))
                    {
                       Evas_Object *o = NULL;
-                      char *noext, *ext;
+                      char *noext;
                       E_Cfg_Bg_Data *cb_data;
                       
-                      o = e_thumb_generate_begin(fullbg, 48, 48, cfd->dia->win->evas, &o, NULL, NULL);
-                      
-                      ext = strrchr(bgfile ,'.');
-                      
-                      if (!ext)
-                        {
-                           noext = strdup(bgfile);
-                        }
-                      else
-                        {
-                           noext = malloc((ext - bgfile + 1));
-                           if (bgfile)
-                             {
-                                memcpy(noext, bgfile, ext - bgfile);
-                                noext[ext - bgfile] = 0;
-                             }
-                        }
+                      o = e_thumb_generate_begin(fullbg, 48, 48, evas, &o, NULL, NULL);
+
+                      noext = ecore_file_strip_ext(bgfile);
                       cb_data = E_NEW(E_Cfg_Bg_Data, 1);
                       cb_data->cfd = cfd;
                       cb_data->file = strdup(fullbg);
                       e_widget_ilist_append(il, o, noext, _e_config_bg_cb_standard, cb_data, fullbg);
                       
                       if ((e_config->desktop_default_background) && !(strcmp(e_config->desktop_default_background, fullbg)))
-                        {
+                        {                          
                            e_widget_ilist_selected_set(il, i);
                            bg = edje_object_add(evas);
                            edje_object_file_set(bg, e_config->desktop_default_background, "desktop/background");
-                           im = e_widget_image_add_from_object(evas, bg, 160, 120);
-                        }
-                      
+                           im = e_widget_image_add_from_object(evas, bg, 200, 160);
+                           e_widget_image_object_set(im, e_thumb_evas_object_get(fullbg, evas, 200, 160, 1));  
+                        }                     
                       free(noext);
                       i++;
                    }
               }
-            
+            free(bgfile);
             evas_object_del(o);
             ecore_evas_free(eebuf);
             ecore_list_destroy(bgs);
          }
      }
-   e_widget_ilist_go(il);   
-   e_widget_min_size_set(il, 240, 320);
-   e_widget_table_object_append(o, il, 0, 0, 1, 2, 1, 1, 1, 1);
-   fr = e_widget_framelist_add(evas, "Preview", 0);
+
    if (im == NULL)
      {
        bg = edje_object_add(evas);
        e_theme_edje_object_set(bg, "base/theme/background", "desktop/background");
-       im = e_widget_image_add_from_object(evas, bg, 160, 120);
+       im = e_widget_image_add_from_object(evas, bg, 200, 160);
      }
    cfd->data = im;
-   e_widget_min_size_set(fr, 180, 150);
-   e_widget_table_object_append(o, fr, 1, 0, 1, 1, 1, 1, 1, 1);   
-   e_widget_framelist_object_append(fr, im);   
-   
-   return o;
 }
+
+