Enlightenment CVS committal

Author  : devilhorns
Project : e_modules
Module  : screenshot

Dir     : e_modules/screenshot


Modified Files:
        TODO e_mod_config.c e_mod_main.c e_mod_main.h 


Log Message:
Screenshot module can now optionally prompt for a filename when you take the
shot (titansoccer) :)

Removed a todo item.

===================================================================
RCS file: /cvs/e/e_modules/screenshot/TODO,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- TODO        22 May 2006 09:16:32 -0000      1.7
+++ TODO        13 Jun 2006 01:25:49 -0000      1.8
@@ -11,8 +11,6 @@
 
 In the Advanced case, i'd leave the behaviour of the ss as is.
 
-Option to allow prompting to user of filename to use.
-
 * Nice to have *
 
 * The ss module should highlight when mouse overs it. Similarly as Start 
module does.
===================================================================
RCS file: /cvs/e/e_modules/screenshot/e_mod_config.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- e_mod_config.c      21 May 2006 15:07:31 -0000      1.22
+++ e_mod_config.c      13 Jun 2006 01:25:49 -0000      1.23
@@ -7,6 +7,7 @@
    int method;
    int use_import;
    int use_scrot;
+   int prompt;
    double delay_time;
    char *location;
    char *filename;
@@ -26,6 +27,8 @@
    } scrot;
    int use_app;
    char *app;
+   
+   Evas_Object *file_entry;
 };
 
 /* Protos */
@@ -35,6 +38,7 @@
 static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data 
*cfdata);
 static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata);
 static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data 
*cfdata);
+static void _prompt_cb_change(void *data, Evas_Object *obj);
 
 /* Config Calls */
 void
@@ -63,6 +67,8 @@
 static void
 _fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata)
 {
+   cfdata->prompt = ci->prompt;
+   
    if (ci->use_import == 1)
      cfdata->method = 0;
    else if (ci->use_scrot == 1)
@@ -143,15 +149,20 @@
    e_widget_list_object_append(o, of, 1, 1, 0.5);
       
    of = e_widget_frametable_add(evas, D_("File Settings"), 1);
-   ob = e_widget_label_add(evas, D_("Save Directory:"));
+   ob = e_widget_check_add(evas, D_("Always Prompt For Filename"), 
&(cfdata->prompt));
+   e_widget_on_change_hook_set(ob, _prompt_cb_change, cfdata);
    e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 0, 0, 1, 0);
+   ob = e_widget_label_add(evas, D_("Save Directory:"));
+   e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 0, 0, 1, 0);
    ob = e_widget_entry_add(evas, &cfdata->location);
-   e_widget_frametable_object_append(of, ob, 1, 0, 2, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 0, 1, 0);
    ob = e_widget_label_add(evas, D_("Filename:"));
-   e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 0, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 0, 0, 1, 0);
    ob = e_widget_entry_add(evas, &cfdata->filename);
-   e_widget_frametable_object_append(of, ob, 1, 1, 2, 1, 1, 0, 1, 0);
+   cfdata->file_entry = ob;
+   e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 0, 1, 0);
    e_widget_list_object_append(o, of, 1, 1, 0.5);
+
    return o;
 }
 
@@ -163,6 +174,9 @@
    Config_Item *ci;
 
    ci = cfd->data;
+   
+   ci->prompt = cfdata->prompt;
+   
    if (cfdata->method == 0)
      {
         ci->use_import = 1;
@@ -188,7 +202,7 @@
    evas_stringshare_del(ci->filename);
    if (cfdata->filename != NULL) 
      {
-       cfdata->filename = ecore_file_strip_ext(cfdata->filename);
+//     cfdata->filename = ecore_file_strip_ext(cfdata->filename);
        ci->filename = evas_stringshare_add(cfdata->filename); 
      }
    else
@@ -234,20 +248,24 @@
 
    of = e_widget_frametable_add(evas, D_("Image Viewer Settings"), 1);
    ob = e_widget_check_add(evas, D_("Launch Image Viewer After Screenshot"), 
&(cfdata->use_app));
-   e_widget_frametable_object_append(of, ob, 0, 0, 2, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 0, 1, 0);
    ob = e_widget_entry_add(evas, &(cfdata->app));
-   e_widget_frametable_object_append(of, ob, 0, 1, 2, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 0, 1, 0);
    e_widget_list_object_append(o, of, 1, 1, 0.5);
    
    of = e_widget_frametable_add(evas, D_("File Settings"), 1);
-   ob = e_widget_label_add(evas, D_("Save Directory:"));
+   ob = e_widget_check_add(evas, D_("Always Prompt For Filename"), 
&(cfdata->prompt));
+   e_widget_on_change_hook_set(ob, _prompt_cb_change, cfdata);
    e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 0, 0, 1, 0);
+   ob = e_widget_label_add(evas, D_("Save Directory:"));
+   e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 0, 0, 1, 0);
    ob = e_widget_entry_add(evas, &cfdata->location);
-   e_widget_frametable_object_append(of, ob, 1, 0, 2, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 0, 1, 0);
    ob = e_widget_label_add(evas, D_("Filename:"));
-   e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 0, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 0, 0, 1, 0);
    ob = e_widget_entry_add(evas, &cfdata->filename);
-   e_widget_frametable_object_append(of, ob, 1, 1, 2, 1, 1, 0, 1, 0);
+   cfdata->file_entry = ob;
+   e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 0, 1, 0);
    e_widget_list_object_append(o, of, 1, 1, 0.5);
 
    ot = e_widget_table_add(evas, 0);
@@ -308,4 +326,24 @@
 
    e_config_save_queue();
    return 1;
+}
+
+static void 
+_prompt_cb_change(void *data, Evas_Object *obj) 
+{
+   E_Config_Dialog_Data *cfdata;
+   
+   cfdata = data;
+   if (!cfdata) return;
+   
+   if (!cfdata->prompt) 
+     {
+       e_widget_disabled_set(cfdata->file_entry, 0);
+       e_widget_entry_text_set(cfdata->file_entry, cfdata->filename);
+     }
+   else 
+     {
+       e_widget_disabled_set(cfdata->file_entry, 1);
+       e_widget_entry_text_set(cfdata->file_entry, "");
+     }
 }
===================================================================
RCS file: /cvs/e/e_modules/screenshot/e_mod_main.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -3 -r1.47 -r1.48
--- e_mod_main.c        6 Jun 2006 15:31:00 -0000       1.47
+++ e_mod_main.c        13 Jun 2006 01:25:49 -0000      1.48
@@ -47,6 +47,9 @@
 static void _ss_free(Screenshot *ss);
 static void _ss_handle_mouse_down(Instance *inst);
 static int _ss_exe_cb_exit(void *data, int type, void *event);
+static void _ss_take_shot(void *data);
+static void _ss_get_filename(void *data);
+static void _cb_entry_ok(char *text, void *data);
 
 char *_get_import_options(Config_Item *ci);
 char *_get_scrot_options(Config_Item *ci);
@@ -228,6 +231,7 @@
         ci->use_import = 0;
         ci->use_scrot = 1;
      }
+   ci->prompt = 0;
    ci->location = evas_stringshare_add(e_user_homedir_get());
    ci->filename = evas_stringshare_add("");
    ci->import.use_img_border = 1;
@@ -267,6 +271,7 @@
    E_CONFIG_VAL(D, T, delay_time, DOUBLE);
    E_CONFIG_VAL(D, T, use_import, UCHAR);
    E_CONFIG_VAL(D, T, use_scrot, UCHAR);
+   E_CONFIG_VAL(D, T, prompt, UCHAR);
    E_CONFIG_VAL(D, T, location, STR);
    E_CONFIG_VAL(D, T, filename, STR);
    E_CONFIG_VAL(D, T, import.use_img_border, UCHAR);
@@ -317,6 +322,7 @@
              ci->use_import = 0;
              ci->use_scrot = 1;
           }
+       ci->prompt = 0;
         ci->location = evas_stringshare_add(e_user_homedir_get());
         ci->filename = evas_stringshare_add("");
         ci->import.use_img_border = 1;
@@ -336,7 +342,7 @@
 
    ss_config->module = m;
    e_gadcon_provider_register(&_gc_class);
-   return 1;
+   return (void *)1;
 }
 
 EAPI int
@@ -428,45 +434,23 @@
 static void
 _ss_handle_mouse_down(Instance *inst)
 {
-   Edje_Message_Int_Set *msg;
-   char buf[1024];
-   char *cmd, *opt, *f;
    Config_Item *ci;
 
    if (inst->exe) return;
    ci = _ss_config_item_get(inst->gcc->id);
 
-   if (ci->use_import == 1)
-     {
-        cmd = strdup("import");
-        opt = _get_import_options(ci);
-     }
-   else if (ci->use_scrot == 1)
+   if (!ci->prompt) 
      {
-        cmd = strdup("scrot");
-        opt = _get_scrot_options(ci);
+       if (!ci->filename) 
+         {
+            char *f = _get_filename(ci);
+            ci->filename = evas_stringshare_add(f);
+            e_config_save_queue();
+         }
+       _ss_take_shot(inst);
      }
    else
-     {
-        e_module_dialog_show(D_("Enlightenment Screenshot Module"),
-                             D_("Please install either ImageMagick or Scrot 
for taking screenshots."));
-        return;
-     }
-
-   f = _get_filename(ci);
-   snprintf(buf, sizeof(buf), "%s %s %s", cmd, opt, f);
-
-   inst->filename = evas_stringshare_add(f);
-   ss_config->exe_exit_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, 
_ss_exe_cb_exit, NULL);
-   if (ci->delay_time > 0)
-     {
-        msg = malloc(sizeof(Edje_Message_Int_Set) + 1 * sizeof(int));
-        msg->count = 1;
-        msg->val[0] = ci->delay_time - 1;
-        edje_object_message_send(inst->ss->ss_obj, EDJE_MESSAGE_INT_SET, 1, 
msg);
-        free(msg);
-     }
-   inst->exe = ecore_exe_run(buf, inst);
+     _ss_get_filename(inst);
 }
 
 char *
@@ -605,3 +589,106 @@
      }
    return 0;
 }
+
+static void 
+_ss_take_shot(void *data) 
+{
+   Instance *inst;
+   Config_Item *ci;
+   Edje_Message_Int_Set *msg;
+   char buf[1024];
+   char *cmd, *opt, *p;
+   
+   inst = data;
+   if (!inst) return;
+
+   ci = _ss_config_item_get(inst->gcc->id);
+   if (!ci) return;
+   
+   if (ci->use_import == 1)
+     {
+        cmd = strdup("import");
+        opt = _get_import_options(ci);
+     }
+   else if (ci->use_scrot == 1)
+     {
+        cmd = strdup("scrot");
+        opt = _get_scrot_options(ci);
+     }
+   else
+     {
+        e_module_dialog_show(D_("Enlightenment Screenshot Module"),
+                             D_("Please install either ImageMagick or Scrot 
for taking screenshots."));
+        return;
+     }
+
+   p = strrchr(ci->filename, '.');
+   if (!p) 
+     {
+       snprintf(buf, sizeof(buf), "%s.png", ci->filename);
+       evas_stringshare_del(ci->filename);
+       ci->filename = evas_stringshare_add(buf);
+       e_config_save_queue();
+     }
+   
+   snprintf(buf, sizeof(buf), "%s %s %s/%s", cmd, opt, ci->location, 
ci->filename);
+   inst->filename = evas_stringshare_add(ci->filename);
+   ss_config->exe_exit_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, 
_ss_exe_cb_exit, NULL);
+   if (ci->delay_time > 0)
+     {
+        msg = malloc(sizeof(Edje_Message_Int_Set) + 1 * sizeof(int));
+        msg->count = 1;
+        msg->val[0] = ci->delay_time - 1;
+        edje_object_message_send(inst->ss->ss_obj, EDJE_MESSAGE_INT_SET, 1, 
msg);
+        free(msg);
+     }
+   inst->exe = ecore_exe_run(buf, inst);   
+}
+
+static void 
+_ss_get_filename(void *data) 
+{
+   e_entry_dialog_show(_("Enlightenment Screenshot Module"), "enlightenment/e",
+                      _("Enter a new filename to use for this screenshot"),
+                      NULL, NULL, _cb_entry_ok, NULL, data);
+}
+
+static void
+_cb_entry_ok(char *text, void *data) 
+{
+   Instance *inst;
+   Config_Item *ci;   
+   char buf[4096];
+   char *t;
+   
+   inst = data;
+   if (!inst) return;
+
+   ci = _ss_config_item_get(inst->gcc->id);
+
+   t = ecore_file_get_dir(text);
+   if (!strcmp(t, text))
+     {
+        e_module_dialog_show(D_("Enlightenment Screenshot Module"),
+                             D_("You did not specify a path.<br>"
+                               "This shot will be saved in your home 
folder."));
+       if (ci->location)
+         evas_stringshare_del(ci->location);
+       ci->location = evas_stringshare_add(e_user_homedir_get());      
+     }
+   else
+     {
+
+       if (ci->location)
+         evas_stringshare_del(ci->location);
+       ci->location = evas_stringshare_add(t);
+     }
+   
+   if (ci->filename)
+     evas_stringshare_del(ci->filename);   
+   ci->filename = evas_stringshare_add(text);
+   e_config_save_queue();
+   
+   _ss_take_shot(inst);
+}
+
===================================================================
RCS file: /cvs/e/e_modules/screenshot/e_mod_main.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- e_mod_main.h        6 Jun 2006 15:31:00 -0000       1.18
+++ e_mod_main.h        13 Jun 2006 01:25:49 -0000      1.19
@@ -23,6 +23,7 @@
    double delay_time;
    unsigned char use_import;
    unsigned char use_scrot;
+   unsigned char prompt;
    const char *location;
    const char *filename;
    unsigned char use_app;




_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to