Enlightenment CVS committal

Author  : chaos
Project : e17
Module  : proto

Dir     : e17/proto/entropy/src/plugins


Modified Files:
        etk_icon_viewer.c 


Log Message:
* Add dnd events to entropy_etk_iconbox.  The etk iconbox viewer in entropy 
should now match the ewl iconbox for functionality.  Note that this will not 
work properly until the 'dnd_event' tags are added to etk_iconbox, like in 
etk_tree

===================================================================
RCS file: /cvs/e/e17/proto/entropy/src/plugins/etk_icon_viewer.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- etk_icon_viewer.c   30 Apr 2006 07:23:36 -0000      1.9
+++ etk_icon_viewer.c   3 Jun 2006 12:54:07 -0000       1.10
@@ -9,13 +9,14 @@
 #include "etk_properties_dialog.h"
 #include "entropy_etk_context_menu.h"
 
+#define EN_DND_COL_NUM 5
+
 typedef struct entropy_etk_iconbox_viewer entropy_etk_iconbox_viewer;
 struct entropy_etk_iconbox_viewer
 {
   Etk_Widget *iconbox;
   Etk_Widget* parent_visual; 
 
-  Ecore_Hash* etk_list_viewer_row_hash;
   Ecore_Hash* gui_hash;
 
   Ecore_List *gui_events;
@@ -99,11 +100,6 @@
   ecore_list_destroy (list);
 
 
-  /*ecore_list_goto_first(view->files);
-  while ((row = ecore_list_remove_first(view->files))) {
-         ecore_hash_remove(etk_list_viewer_row_hash, row);
-  }*/
-
   entropy_notify_unlock_loop (comp->core->notify);
 
 
@@ -283,6 +279,104 @@
        entropy_core_file_cache_add_reference (file->md5);
 }
 
+static void _entropy_etk_icon_viewer_drag_begin_cb(Etk_Object *object, void 
*data)
+{
+   Etk_Iconbox *iconbox;
+   const char **types;
+   unsigned int num_types;
+   Etk_Drag *drag;
+   Etk_Widget *image;
+   entropy_gui_component_instance* instance;
+   entropy_etk_iconbox_viewer* viewer;
+   char buffer[8192]; /* Um - help - what do we size this to? */
+   Etk_Widget* table;
+   int l=0,r=0,t=0,b=0;
+   int added_object = 0;
+   entropy_generic_file* file;
+   Etk_Widget* vbox;
+   Etk_Widget* label;
+   char label_buffer[50];
+   Etk_Iconbox_Icon* icon;
+
+   instance = data;
+   viewer = instance->data;
+
+   iconbox = ETK_ICONBOX(object);
+   
+   drag = (ETK_WIDGET(iconbox))->drag;
+
+   table = etk_table_new(5,5,ETK_FALSE);
+   bzero(buffer,8192);
+   for (icon = iconbox->first_icon; icon ; icon = icon->next ) {
+          if (etk_iconbox_is_selected(icon)) {
+                  file = etk_iconbox_icon_data_get(icon);
+          
+                  strcat(buffer, file->uri);
+                  strcat(buffer, "\r\n");
+
+                  if (added_object < (EN_DND_COL_NUM*5)-1) {
+                          /*Build the drag widget*/
+                          vbox = etk_vbox_new(ETK_TRUE,0);
+
+                          /*Print the label*/
+                          bzero(label_buffer, sizeof(label_buffer));
+
+                          if (strlen(file->filename) > 5) {
+                                  snprintf(label_buffer,5,"%s", 
file->filename);
+                                  strcat(label_buffer, "...");
+                          } else {
+                                  sprintf(label_buffer,"%s", file->filename);
+                          }
+                          label = etk_label_new(label_buffer);
+                  
+                         if (file->thumbnail && 
file->thumbnail->thumbnail_filename) {
+                               image = 
etk_image_new_from_file(file->thumbnail->thumbnail_filename);
+                         } else {
+                               image = 
etk_image_new_from_file(PACKAGE_DATA_DIR "/icons/default.png");
+                         }
+                        etk_image_keep_aspect_set(ETK_IMAGE(image), ETK_TRUE);
+                        etk_widget_size_request_set(image, 48, 48);
+                        etk_box_pack_start(ETK_BOX(vbox), image, ETK_FALSE, 
ETK_FALSE, 0);
+                         
+                         etk_box_pack_start(ETK_BOX(vbox), label, ETK_FALSE, 
ETK_FALSE, 0);
+                         etk_table_attach(ETK_TABLE(table), vbox, l, r, t, b, 
3, 3,
+                                  ETK_FILL_POLICY_NONE);
+                 
+                         ++l; ++r;
+                         added_object++;
+                         if(l == EN_DND_COL_NUM) {
+                              l = r = 0;
+                              ++t; ++b;
+                           }    
+                 }
+         }
+         
+   }
+
+   etk_container_add(ETK_CONTAINER(drag), table);
+  
+
+   types = entropy_malloc(sizeof(char*));
+   num_types = 1;
+   types[0] = strdup("text/uri-list");
+    
+
+   printf("Drag buffer: %s\n", buffer);
+   
+   etk_drag_types_set(drag, types, num_types);
+   etk_drag_data_set(drag, buffer, strlen(buffer)+1);
+
+
+
+   
+   /*image = etk_image_new_from_file(icol1_string);
+   etk_image_keep_aspect_set(ETK_IMAGE(image), ETK_TRUE);
+   etk_widget_size_request_set(image, 96, 96);
+   etk_container_add(ETK_CONTAINER(drag), image);*/
+
+}
+
+
 
 
 entropy_gui_component_instance *
@@ -293,8 +387,6 @@
   entropy_etk_iconbox_viewer *viewer;
   char  **dnd_types;
   int dnd_types_num=0;
-  Etk_Widget* new_menu;
-  Etk_Widget* menu_item;
 
     
   instance = entropy_gui_component_instance_new ();
@@ -309,6 +401,14 @@
   instance->core = core;
   instance->data = viewer;
   instance->layout_parent = layout;
+
+  /*DND Setup*/
+   dnd_types_num = 1;
+   dnd_types = entropy_malloc(dnd_types_num* sizeof(char*));
+   dnd_types[0] = strdup("text/uri-list");  
+  etk_widget_dnd_source_set(viewer->iconbox, ETK_TRUE);
+  etk_signal_connect("drag_begin", ETK_OBJECT(viewer->iconbox) , 
ETK_CALLBACK(_entropy_etk_icon_viewer_drag_begin_cb), instance);
+
 
   /*Register out interest in receiving folder notifications */
   entropy_core_component_event_register (instance,




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

Reply via email to