Enlightenment CVS committal

Author  : doursse
Project : e17
Module  : proto

Dir     : e17/proto/epdf/src/bin


Modified Files:
        epdf_ewl_test.c 


Log Message:
switch to ewl_tree2

===================================================================
RCS file: /cvs/e/e17/proto/epdf/src/bin/epdf_ewl_test.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- epdf_ewl_test.c     20 Dec 2006 21:23:25 -0000      1.4
+++ epdf_ewl_test.c     15 Jan 2007 03:17:02 -0000      1.5
@@ -7,44 +7,116 @@
 #include "ewl_pdf.h"
 
 
+typedef struct Tree_Row_Data Tree_Row_Data;
+typedef struct Tree_Data     Tree_Data;
+
+struct Tree_Row_Data
+{
+  char      *text;
+  Tree_Data *subdata;
+  int        expandable;
+  int        page;
+};
+
+struct Tree_Data
+{
+  unsigned int    count;
+  Tree_Row_Data **rows;
+};
+
+
 static void _quit_cb (Ewl_Widget * w, void *ev_data, void *user_data);
 static void _change_page_cb (Ewl_Widget *widget, void *ev_data, void 
*user_data);
 
-void
-_tree_fill (Ewl_Widget *pdf, Ewl_Tree *tree, Ewl_Row *row, Ecore_List *items)
+void *
+_tree2_fill (Ewl_Widget *pdf, Ecore_List *items)
 {
-  Ewl_Widget      *prow;
+  Tree_Data       *data;
   Epdf_Index_Item *item;
+  int              i = 0;
 
   if (!items)
-    return;
+    return NULL;
+
+  data = (Tree_Data *)calloc (1, sizeof (Tree_Data));
+  if (!data)
+    return NULL;
+
+  data->count = ecore_list_nodes (items);
+  data->rows = (Tree_Row_Data **)calloc (data->count, sizeof (Tree_Row_Data 
*));
+  if (!data->rows) {
+    free (data);
+    return NULL;
+  }
   
   ecore_list_goto_first (items);
   while ((item = ecore_list_next (items))) {
-    int         page;
-    int        *num;
-    char       *buf;
     Ecore_List *c;
+    int         page;
 
-    buf = strdup (epdf_index_item_title_get (item));
-    prow = ewl_tree_text_row_add (tree, row,
-                                  &buf);
     page = epdf_index_item_page_get (ewl_pdf_pdf_document_get (EWL_PDF (pdf)), 
item);
-    if (page >= 0) {
-      num = (int *)malloc (sizeof (int));
-      *num = page;
-      ewl_widget_data_set (prow, "row-number", num);
-      ewl_callback_append (EWL_WIDGET (prow),
-                           EWL_CALLBACK_CLICKED,
-                           EWL_CALLBACK_FUNCTION (_change_page_cb),
-                           pdf);
-    }
-    free (buf);
+
+    data->rows[i] = (Tree_Row_Data *)calloc (1, sizeof (Tree_Row_Data));
+    data->rows[i]->text = strdup (epdf_index_item_title_get (item));
+    data->rows[i]->expandable = 0;
+    data->rows[i]->page = (page < 0) ? 0 : page;
+
     c = epdf_index_item_children_get (item);
     if (c) {
-      _tree_fill (pdf, tree, EWL_ROW (prow), c);
+      data->rows[i]->expandable = 1;
+      data->rows[i]->subdata = _tree2_fill (pdf, c);
     }
+
+    i++;
   }
+
+  return data;
+}
+
+static void *tree2_data_fetch(void *data, unsigned int row, unsigned int 
column)
+{
+  Tree_Data *d;
+
+  d = (Tree_Data *)data;
+
+  return d->rows[row]->text;
+}
+
+static int
+tree2_data_count_get (void *data)
+{
+  Tree_Data *d;
+
+  d = (Tree_Data *)data;
+
+  return d->count;
+}
+
+static int
+tree2_data_expandable_get(void *data, unsigned int row)
+{
+  Tree_Data *d;
+
+  d = data;
+
+  return d->rows[row]->expandable;
+}
+
+static void *
+tree2_data_expansion_fetch(void *data, unsigned int parent)
+{
+  Tree_Data *d;
+
+  d = data;
+
+  return d->rows[parent]->subdata;
+}
+
+static void
+_label_text_set (Ewl_Widget *widget, void *data)
+{
+  ewl_label_text_set (EWL_LABEL (widget), (const char *)data);
+  ewl_object_alignment_set (EWL_OBJECT (widget), EWL_FLAG_ALIGN_LEFT);
 }
 
 int
@@ -52,7 +124,8 @@
 {
   Ecore_List     *str_data = NULL;
   Ewl_Widget     *window;
-  Ewl_Widget     *table;
+  Ewl_Widget     *hbox;
+  Ewl_Widget     *vbox;
   Ewl_Widget     *list;
   Ewl_Model      *model;
   Ewl_View       *view;
@@ -91,25 +164,56 @@
   ewl_callback_append (window, EWL_CALLBACK_DELETE_WINDOW,
                        _quit_cb, str_data);
 
-  table = ewl_table_new (2, 2, NULL);
-  ewl_table_homogeneous_set (EWL_TABLE (table), FALSE);
-  ewl_container_child_append (EWL_CONTAINER (window), table);
-  ewl_widget_show (table);
+  hbox = ewl_hbox_new ();
+  ewl_box_homogeneous_set (EWL_BOX (hbox), FALSE);
+  ewl_container_child_append (EWL_CONTAINER (window), hbox);
+  ewl_widget_show (hbox);
+
+  vbox = ewl_vbox_new ();
+  ewl_box_homogeneous_set (EWL_BOX (vbox), TRUE);
+  ewl_container_child_append (EWL_CONTAINER (hbox), vbox);
+  ewl_widget_show (vbox);
 
   if (index) {
-    tree = ewl_tree_new (1);
-    ewl_tree_headers_visible_set (EWL_TREE (tree), FALSE);
-    ewl_table_add (EWL_TABLE (table), tree, 1, 1, 1, 1);
-    _tree_fill (pdf, EWL_TREE (tree), NULL, index);
+    Ewl_Model *model;
+    Ewl_View  *view;
+    void      *data;
+
+    /* tree */
+    tree = ewl_tree2_new ();
+    ewl_widget_name_set (tree, "tree");
+/*     ewl_object_fill_policy_set (EWL_OBJECT (tree), EWL_FLAG_FILL_VFILL); */
+    ewl_tree2_headers_visible_set (EWL_TREE2 (tree), FALSE);
+    ewl_callback_append (tree, EWL_CALLBACK_VALUE_CHANGED,
+                         _change_page_cb, pdf);
+
+    /* data */
+    data = _tree2_fill (pdf, index);
     epdf_index_delete (index);
+
+    /* model */
+    model = ewl_model_new ();
+    ewl_model_fetch_set (model, tree2_data_fetch);
+    ewl_model_count_set (model, tree2_data_count_get);
+    ewl_model_expandable_set (model, tree2_data_expandable_get);
+    ewl_model_expansion_data_fetch_set(model, tree2_data_expansion_fetch);
+
+    /* MVC */
+    ewl_mvc_data_set (EWL_MVC (tree), data);
+
+    /* view */
+    view = ewl_view_new();
+    ewl_view_constructor_set (view, ewl_label_new);
+    ewl_view_assign_set (view, EWL_VIEW_ASSIGN (_label_text_set));
+    ewl_tree2_column_append (EWL_TREE2(tree), model, view);
+
+    /* we attach and show */
+    ewl_container_child_append (EWL_CONTAINER (vbox), tree);
     ewl_widget_show (tree);
   }
 
   sp = ewl_scrollpane_new ();
-  if  (index)
-    ewl_table_add (EWL_TABLE (table), sp, 1, 1, 2, 2);
-  else
-    ewl_table_add (EWL_TABLE (table), sp, 1, 1, 1, 2);
+  ewl_container_child_append (EWL_CONTAINER (vbox), sp);
   ewl_widget_show (sp);
 
   page_count = epdf_document_page_count_get (document);
@@ -123,7 +227,9 @@
   }
 
   model = ewl_model_ecore_list_get();
-  view = ewl_label_view_get();
+  view = ewl_view_new();
+  ewl_view_constructor_set (view, ewl_label_new);
+  ewl_view_assign_set (view, EWL_VIEW_ASSIGN (_label_text_set));
 
   list = ewl_list_new ();
   ewl_mvc_model_set(EWL_MVC(list), model);
@@ -136,7 +242,7 @@
   ewl_container_child_append (EWL_CONTAINER (sp), list);
   ewl_widget_show (list);
 
-  ewl_table_add (EWL_TABLE (table), pdf, 2, 2, 1, 2);
+  ewl_container_child_append (EWL_CONTAINER (hbox), pdf);
   ewl_widget_show (pdf);
 
   ewl_widget_show (window);
@@ -154,7 +260,6 @@
     list = (Ecore_List *)user_data;
     ecore_list_destroy (list);
   }
-  ewl_widget_destroy(w);
   ewl_main_quit();
 }
 
@@ -162,17 +267,29 @@
 _change_page_cb (Ewl_Widget *widget, void *ev_data, void *user_data)
 {
   Ewl_Pdf           *pdf;
-  Ewl_List          *list;
   Ecore_List        *el;
   Ewl_Selection_Idx *idx;
 
-  list = EWL_LIST(widget);
-  el = ewl_mvc_data_get(EWL_MVC(list));
-  idx = ewl_mvc_selected_get(EWL_MVC(list));
-
-  pdf = EWL_PDF (user_data);
-  if (idx->row != ewl_pdf_page_get (pdf)) {
-    ewl_pdf_page_set (pdf, idx->row);
-    ewl_callback_call (EWL_WIDGET (pdf), EWL_CALLBACK_REVEAL);
+  if (ewl_widget_type_is (widget, "list")) {
+    el = ewl_mvc_data_get (EWL_MVC (widget));
+    idx = ewl_mvc_selected_get (EWL_MVC (widget));
+
+    pdf = EWL_PDF (user_data);
+    if (idx->row != ewl_pdf_page_get (pdf)) {
+      ewl_pdf_page_set (pdf, idx->row);
+      ewl_callback_call (EWL_WIDGET (pdf), EWL_CALLBACK_REVEAL);
+    }
+  }
+  else {
+    Ewl_Selection *sel;
+    Tree_Data     *data;
+
+    el = ewl_mvc_selected_list_get (EWL_MVC (widget));
+    sel = ecore_list_goto_first (el);
+    idx = EWL_SELECTION_IDX(sel);
+    if (!idx) printf ("pas de idx\n");
+    data = (Tree_Data *)ewl_mvc_data_get (EWL_MVC (widget));
+    if (idx)
+      printf ("row %d\n", idx->row);
   }
 }



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to