[mlview-list][patch] New completion widget #2.



Hello,

	This patch replaces the old completion widgets (GTK+ 1.x) by a new
standalone one. I completely rewrote it since the last patch I posted ;
this one is cleaner, simpler, usable.

Nicolas Centa
"HappyPeng"

The tarball countains the new files, the patch countains the
modification to existing ones.
? test.diff
? src/mlview-completion-table.c
? src/mlview-completion-table.h
Index: src/Makefile.am
===================================================================
RCS file: /cvs/gnome/mlview/src/Makefile.am,v
retrieving revision 1.30
diff -a -u -r1.30 Makefile.am
--- src/Makefile.am	24 Nov 2003 23:18:05 -0000	1.30
+++ src/Makefile.am	8 Jan 2004 21:02:00 -0000
@@ -54,8 +54,9 @@
 	mlview-icon-tree.c \
 	mlview-icon-tree.h \
 	mlview-xslt-utils.c \
-	mlview-xslt-utils.h
-
+	mlview-xslt-utils.h \
+	mlview-completion-table.c \
+	mlview-completion-table.h 
 
 bin_PROGRAMS = mlv
 mlv_SOURCES  =  main.c 
Index: src/mlview-tree-view.c
===================================================================
RCS file: /cvs/gnome/mlview/src/mlview-tree-view.c,v
retrieving revision 1.17
diff -a -u -r1.17 mlview-tree-view.c
--- src/mlview-tree-view.c	25 Dec 2003 23:10:49 -0000	1.17
+++ src/mlview-tree-view.c	8 Jan 2004 21:02:03 -0000
@@ -24,10 +24,13 @@
  */
 
 #include <string.h>
+
 #include <glade/glade.h>
+
 #include "mlview-tree-view.h"
 #include "mlview-tree-editor2.h"
 #include "mlview-icon-tree.h"
+#include "mlview-completion-table.h"
 
 /**
  * file
@@ -48,10 +51,6 @@
         /*The main paned that divides the view in two main parts */
         GtkPaned *main_paned;
         GtkPaned *upper_paned1;
-        GtkCList *feasible_children;
-        GtkCList *feasible_prev_siblings;
-        GtkCList *feasible_next_siblings;
-        GtkCList *feasible_attributes ;        
         guint main_paned_percentage;
         gboolean dispose_has_run;
 } ;
@@ -64,11 +63,6 @@
 #define PRIVATE(tree_view) (tree_view->priv)
 
 static void
-visual_node_selected_cb (MlViewTreeEditor2 * a_editor,
-                         GtkTreeRowReference *a_ref,
-                         gpointer a_user_data);
-
-static void
 tree_selected_cb (GtkNotebook *notebook,
                   GtkNotebookPage *page, 
                   guint page_num,
@@ -80,37 +74,6 @@
 static void toggle_expand_to_leaves_cb (GtkToggleButton * a_toggle_button,
                                         gpointer * a_depth_entry);
 
-static void update_feasible_attributes_list_cb (MlViewTreeEditor2 * a_editor,
-                                                GtkTreeRowReference *a_ref,
-                                                gpointer a_user_data) ;
-
-static void update_feasible_next_siblings_list_cb (MlViewTreeEditor2 * a_editor,
-                                                   GtkTreeRowReference * a_ref,
-                                                   gpointer a_user_data);
-
-static void update_feasible_prev_siblings_list_cb (MlViewTreeEditor2 * a_editor,
-                                                   GtkTreeRowReference * a_ref,
-                                                   gpointer a_user_data);
-
-static void update_feasible_children_list_cb (MlViewTreeEditor2 * a_editor,
-                                              GtkTreeRowReference *a_ref,
-                                              gpointer a_user_data);
-
-static void selected_a_possible_child_cb (GtkCList * a_possible_children,
-                                          gint a_row, gint a_column,
-                                          GdkEventButton * event,
-                                          gpointer a_user_data);
-
-static void selected_a_possible_next_sibling_cb (GtkCList * a_possible_next_siblings,
-                                                 gint a_row, gint a_column,
-                                                 GdkEventButton * event,
-                                                 gpointer a_user_data);
-
-static void selected_a_possible_prev_sibling_cb (GtkCList * a_possible_prev_siblings,
-                                                 gint a_row, gint a_column,
-                                                 GdkEventButton * event,
-                                                 gpointer a_user_data);
-
 static void doc_path_changed_cb (MlViewXMLDocument * a_xml_doc,
                                  gpointer a_xml_doc_tree_view);
 
@@ -316,52 +279,6 @@
 }
 
 /**
- *This callback is called when an xml 
- *node is selected by the user. It calls the
- *mlview_node_editor_edit_xml_node() method of the MlViewNodeEditor object. 
- *
- */
-static void
-visual_node_selected_cb (MlViewTreeEditor2 * a_editor,
-                         GtkTreeRowReference * a_ref,
-                         gpointer a_user_data)
-{
-        MlViewTreeView *view = NULL;
-        xmlNode *xml_node = NULL;
-        MlViewXMLDocument *mlview_xml_doc = NULL;
-        GtkTreeView *tree_view = NULL ;
-
-        g_return_if_fail (a_editor
-                          && MLVIEW_IS_TREE_EDITOR2 (a_editor)
-                          && PRIVATE (a_editor)
-                          && a_ref
-                          && a_user_data) ;        
-        tree_view = mlview_tree_editor2_get_tree_view (a_editor) ;
-        g_return_if_fail (tree_view && GTK_IS_TREE_VIEW (tree_view)) ;
-        view = a_user_data ;
-        g_return_if_fail (MLVIEW_IS_TREE_VIEW (view)
-                          && PRIVATE (view) 
-                          && PRIVATE (view)->node_editor
-                          && MLVIEW_IS_NODE_EDITOR 
-                          (PRIVATE (view)->node_editor)) ;
-
-        xml_node =
-                mlview_tree_editor2_get_xml_node2 (a_editor, a_ref) ;
-        g_return_if_fail (xml_node) ;
-
-        PRIVATE (view)->current_node = xml_node;
-
-        mlview_iview_get_document
-                (MLVIEW_IVIEW (view), &mlview_xml_doc);
-        g_return_if_fail (mlview_xml_doc);
-
-        mlview_node_editor_edit_xml_node (PRIVATE (view)->node_editor,
-                                          mlview_xml_doc, xml_node);
-        gtk_widget_show_all (GTK_WIDGET
-                             (PRIVATE (view)->node_editor));
-}
-
-/**
  *The callback of the "element-changed signal" 
  *emited by the element editor of MlViewEditor 
  */
@@ -423,444 +340,20 @@
 }
 
 /**
- *This callback is invoked when the user selects a visual xml node. 
- *It's a callback function for the "node-selected" signal of
- *#MlViewTreeEditor2.
- *
- */
-void
-update_feasible_children_list_cb (MlViewTreeEditor2 * a_editor,
-                                  GtkTreeRowReference * a_ref,
-                                  gpointer a_user_data)
-{
-        MlViewTreeView *view = NULL;
-        xmlNode *xml_node = NULL;
-        GList *children_name_list = NULL;
-        gint nb_of_names = 0;
-        GtkTreeView *tree_view=NULL ;
-
-        g_return_if_fail (a_editor 
-                          && MLVIEW_IS_TREE_EDITOR2 (a_editor)
-                          && a_ref && a_user_data
-                          && MLVIEW_IS_TREE_VIEW 
-                          (a_user_data));
-        tree_view = mlview_tree_editor2_get_tree_view (a_editor) ;
-        g_return_if_fail (tree_view 
-                          && GTK_IS_TREE_VIEW (tree_view)) ;
-        view = MLVIEW_TREE_VIEW (a_user_data);
-        g_return_if_fail (PRIVATE (view) != NULL);
-        gtk_clist_clear (PRIVATE (view)->feasible_children);
-        xml_node = mlview_tree_editor2_get_xml_node2 (a_editor,
-                                                      a_ref) ;
-        g_return_if_fail (xml_node) ;
-        if (xml_node->type == XML_ELEMENT_NODE) {
-
-                nb_of_names =
-                        mlview_parsing_utils_build_element_name_completion_list
-                        (PRIVATE (view)->app_context,
-                         ADD_CHILD,
-                         xml_node, &children_name_list);
-
-        }
-        if (nb_of_names > 0) {
-                gchar *clist_text[1] = { NULL };
-                gchar *cur_name =
-                        (gchar *) children_name_list->data;
-                GList *cur = children_name_list;
-
-                while (cur_name) {
-                        clist_text[0] = cur_name;
-                        gtk_clist_append (PRIVATE (view)->
-                                          feasible_children,
-                                          clist_text);
-
-                        cur = (cur->next) ? cur->next : NULL;
-                        cur_name =
-                                (cur) ? (gchar *) cur->
-                                data : NULL;
-                }
-        }
-}
-
-/**
- *This callback is invoked when the user selects a visual xml node. 
- *It is a callback of the "node-selected" signal.
- */
-static void
-update_feasible_prev_siblings_list_cb (MlViewTreeEditor2 *a_editor,
-                                       GtkTreeRowReference *a_ref,
-                                       gpointer a_user_data)
-{
-        MlViewTreeView *view = NULL;
-        xmlNode *xml_node = NULL;
-        GList *children_name_list = NULL;
-        gint nb_of_names = 0;
-        GtkTreeView *tree_view=NULL ;
-
-        g_return_if_fail (a_editor
-                          && MLVIEW_IS_TREE_EDITOR2 (a_editor)
-                          && PRIVATE (a_editor)
-                          && a_ref
-                          && a_user_data) ;
-        tree_view = mlview_tree_editor2_get_tree_view (a_editor) ;
-        g_return_if_fail (tree_view) ;
-        view = MLVIEW_TREE_VIEW (a_user_data);
-        g_return_if_fail (PRIVATE (view) != NULL);
-
-        gtk_clist_clear (PRIVATE (view)->feasible_prev_siblings);
-        xml_node =
-                mlview_tree_editor2_get_xml_node2 (a_editor,
-                                                   a_ref) ;
-        g_return_if_fail (xml_node);
-        if (xml_node->type == XML_ELEMENT_NODE) {
-                nb_of_names =
-                        mlview_parsing_utils_build_element_name_completion_list
-                        (PRIVATE (view)->app_context,
-                         INSERT_BEFORE,
-                         xml_node, &children_name_list);
-        }
-        if (nb_of_names > 0) {
-                gchar *clist_text[1] = { NULL };
-                gchar *cur_name =
-                        (gchar *) children_name_list->data;
-                GList *cur = children_name_list;
-
-                while (cur_name) {
-                        clist_text[0] = cur_name;
-                        gtk_clist_append
-                                (PRIVATE (view)->
-                                 feasible_prev_siblings,
-                                 clist_text);
-                        cur = (cur->next) ? cur->next : NULL;
-                        cur_name =
-                                (cur) ? (gchar *) cur->
-                                data : NULL;
-                }
-        }
-}
-
-
-/**
- *This callback is invoked when the user selects a visual xml node. 
- *This is a callback for the "node-selected" signal.
- */
-static void
-update_feasible_next_siblings_list_cb (MlViewTreeEditor2 *a_editor,
-                                       GtkTreeRowReference *a_ref,
-                                       gpointer a_user_data)
-{
-        MlViewTreeView *view = NULL;
-        xmlNode *xml_node = NULL;
-        GList *children_name_list = NULL;
-        gint nb_of_names = 0;
-        GtkTreeView *tree_view=NULL ;
-
-        g_return_if_fail (a_editor
-                          && MLVIEW_IS_TREE_EDITOR2 (a_editor)
-                          && PRIVATE (a_editor)
-                          && a_ref
-                          && a_user_data) ;
-        tree_view = mlview_tree_editor2_get_tree_view (a_editor) ;
-        g_return_if_fail (tree_view) ;
-        view = MLVIEW_TREE_VIEW (a_user_data);
-        g_return_if_fail (PRIVATE (view) != NULL);
-        gtk_clist_clear (PRIVATE (view)->feasible_next_siblings);
-        xml_node = 
-                mlview_tree_editor2_get_xml_node2 (a_editor, a_ref) ;
-        g_return_if_fail (xml_node != NULL);
-        if (xml_node->type == XML_ELEMENT_NODE) {
-                nb_of_names =
-                        mlview_parsing_utils_build_element_name_completion_list
-                        (PRIVATE (view)->app_context,
-                         INSERT_AFTER, xml_node,
-                         &children_name_list);
-        }
-        if (nb_of_names > 0) {
-                gchar *clist_text[1] = { NULL };
-                gchar *cur_name =
-                        (gchar *) children_name_list->data;
-                GList *cur = children_name_list;
-
-                while (cur_name) {
-                        clist_text[0] = cur_name;
-                        gtk_clist_append
-                                (PRIVATE (view)->
-                                 feasible_next_siblings,
-                                 clist_text);
-                        cur = (cur->next) ? cur->next : NULL;
-                        cur_name =
-                                (cur) ? (gchar *) cur->
-                                data : NULL;
-                }
-        }
-}
-
-
-/**
- *This callback is invoked when the user selects a visual xml node. 
- *
- */
-
-static void
-update_feasible_attributes_list_cb (MlViewTreeEditor2 * a_editor,
-                                    GtkTreeRowReference *a_ref,
-                                    gpointer a_user_data)
-{
-        MlViewTreeView *view = NULL;
-        xmlNode *xml_node = NULL;
-        GList *children_name_list = NULL;
-        gint nb_of_names = 0;
-        GtkTreeView *tree_view=NULL ;
-
-        g_return_if_fail (a_editor 
-                          && MLVIEW_IS_TREE_EDITOR2 (a_editor)
-                          && PRIVATE (a_editor)
-                          && a_ref
-                          && a_user_data) ;
-        g_return_if_fail (MLVIEW_IS_TREE_VIEW
-                          (a_user_data));
-
-        tree_view = mlview_tree_editor2_get_tree_view (a_editor) ;
-        g_return_if_fail (tree_view) ;
-        view = MLVIEW_TREE_VIEW (a_user_data);
-        g_return_if_fail (PRIVATE (view) != NULL);
-        gtk_clist_clear (PRIVATE (view)->feasible_attributes);
-        xml_node = mlview_tree_editor2_get_xml_node2 (a_editor,
-                                                      a_ref) ;
-        g_return_if_fail (xml_node != NULL);
-        if (xml_node->type == XML_ELEMENT_NODE) {
-                nb_of_names =
-                        mlview_parsing_utils_build_attribute_name_completion_list
-                        (PRIVATE (view)->app_context, xml_node,
-                         &children_name_list, FALSE);
-        }
-        if (nb_of_names > 0) {
-                gchar *clist_text[1] = { NULL };
-                gchar *cur_name =
-                        (gchar *) children_name_list->data;
-                GList *cur = children_name_list;
-
-                while (cur_name) {
-                        clist_text[0] = cur_name;
-                        gtk_clist_append (PRIVATE (view)->
-                                          feasible_attributes,
-                                          clist_text);
-                        cur = (cur->next) ? cur->next : NULL;
-                        cur_name =
-                                (cur) ? (gchar *) cur->
-                                data : NULL;
-                }
-        }
-}
-
-
-static void
-selected_a_possible_child_cb (GtkCList * a_possible_children,
-                              gint a_row, gint a_column,
-                              GdkEventButton * event,
-                              gpointer a_user_data)
-{
-        MlViewTreeView *doc_tree_view = NULL;
-        GtkTreeIter cur_sel_start={0} ;
-        gchar *element_name = NULL;
-        gint ret_code = 0;
-        enum MlViewStatus status = MLVIEW_OK ;
-
-        g_return_if_fail (a_possible_children != NULL);
-        g_return_if_fail (GTK_IS_CLIST (a_possible_children));
-        g_return_if_fail (a_user_data != NULL);
-        g_return_if_fail (MLVIEW_IS_TREE_VIEW
-                          (a_user_data));
-
-        doc_tree_view = MLVIEW_TREE_VIEW (a_user_data);
-        g_return_if_fail (PRIVATE (doc_tree_view) != NULL);
-        g_return_if_fail (PRIVATE (doc_tree_view)->tree_editor !=
-                          NULL);
-        status = mlview_tree_editor2_get_cur_sel_start_iter
-                (PRIVATE (doc_tree_view)->tree_editor,
-                 &cur_sel_start) ;
-        g_return_if_fail (status == MLVIEW_OK) ;
-        /*do not free element_name!! */
-        ret_code = gtk_clist_get_text (a_possible_children,
-                                       a_row, a_column,
-                                       &element_name);
-        if (ret_code == 1) {
-                /*text retrieved ! */
-                xmlNode *new_node = NULL;
-
-                if (strcmp (element_name, "#PCDATA") == 0) {
-                        new_node = xmlNewNode (NULL, "text");
-                        new_node->type = XML_TEXT_NODE;
-                } else {
-                        new_node =
-                                xmlNewNode (NULL, element_name);
-                }
-                mlview_tree_editor2_add_child_node 
-                        (PRIVATE (doc_tree_view)->tree_editor,
-                         &cur_sel_start, new_node) ;
-        }
-}
-
-static void
-selected_a_possible_prev_sibling_cb (GtkCList * a_possible_prev_siblings,
-                                     gint a_row, gint a_column,
-                                     GdkEventButton * event,
-                                     gpointer a_user_data)
-{
-        MlViewTreeView *doc_tree_view = NULL;
-        enum MlViewStatus stat = MLVIEW_OK ;
-        GtkTreeIter cur_sel_start = {0} ;
-        gchar *element_name = NULL;
-        gint ret_code = 0;
-
-        g_return_if_fail (a_possible_prev_siblings != NULL);
-        g_return_if_fail (GTK_IS_CLIST
-                          (a_possible_prev_siblings));
-        g_return_if_fail (a_user_data != NULL);
-        g_return_if_fail (MLVIEW_IS_TREE_VIEW
-                          (a_user_data));
-        doc_tree_view = MLVIEW_TREE_VIEW (a_user_data);
-        g_return_if_fail (PRIVATE (doc_tree_view) != NULL);
-        g_return_if_fail (PRIVATE (doc_tree_view)->tree_editor !=
-                          NULL);
-        stat = mlview_tree_editor2_get_cur_sel_start_iter 
-                (PRIVATE (doc_tree_view)->tree_editor,
-                 &cur_sel_start) ;
-        g_return_if_fail (stat == MLVIEW_OK) ;
-        /*do not free element_name!! */
-        ret_code = gtk_clist_get_text (a_possible_prev_siblings,
-                                     a_row, a_column,
-                                     &element_name);
-        if (ret_code == 1) {
-                /*text retrieved ! */
-                xmlNode *new_node = NULL;
-                if (strcmp (element_name, "#PCDATA") == 0) {
-                        new_node = xmlNewNode (NULL, "text");
-                        new_node->type = XML_TEXT_NODE;
-                } else {
-                        new_node =
-                                xmlNewNode (NULL, element_name);
-                }
-                stat = mlview_tree_editor2_insert_sibling_node
-                        (PRIVATE (doc_tree_view)->tree_editor,
-                         &cur_sel_start, new_node, TRUE) ;
-                g_return_if_fail (stat == MLVIEW_OK);
-        }
-}
-
-
-static void
-selected_a_possible_next_sibling_cb (GtkCList * a_possible_next_siblings,
-                                     gint a_row, gint a_column,
-                                     GdkEventButton * event,
-                                     gpointer a_user_data)
-{
-        MlViewTreeView *doc_tree_view = NULL;
-        GtkTreeIter cur_sel_start = {0} ;
-        enum MlViewStatus stat = MLVIEW_OK ;
-        gchar *element_name = NULL;
-        gint ret_code = 0;
-
-        g_return_if_fail (a_possible_next_siblings != NULL);
-        g_return_if_fail (GTK_IS_CLIST
-                          (a_possible_next_siblings));
-        g_return_if_fail (a_user_data != NULL);
-        g_return_if_fail (MLVIEW_IS_TREE_VIEW
-                          (a_user_data));
-        doc_tree_view = MLVIEW_TREE_VIEW (a_user_data);
-        g_return_if_fail (PRIVATE (doc_tree_view) != NULL);
-        g_return_if_fail (PRIVATE (doc_tree_view)->tree_editor !=
-                          NULL);
-        stat = mlview_tree_editor2_get_cur_sel_start_iter
-                (PRIVATE (doc_tree_view)->tree_editor,
-                 &cur_sel_start) ;
-        g_return_if_fail (stat == MLVIEW_OK) ;
-        /*do not free element_name!! */
-        ret_code = gtk_clist_get_text (a_possible_next_siblings,
-                                       a_row, a_column,
-                                       &element_name);
-        if (ret_code == 1) {
-                /*text retrieved ! */
-                xmlNode *new_node = NULL;
-                if (strcmp (element_name, "#PCDATA") == 0) {
-                        new_node = xmlNewNode (NULL, "text");
-                        new_node->type = XML_TEXT_NODE;
-                } else {
-                        new_node =
-                                xmlNewNode (NULL, element_name);
-                }
-                stat = mlview_tree_editor2_insert_sibling_node
-                        (PRIVATE (doc_tree_view)->tree_editor,
-                         &cur_sel_start, new_node, FALSE) ;
-        }
-}
-
-
-/**
- *
+ *Callback called when the MlViewXMLDocument emits
+ *a "node-selected" signal ; updates the MlViewCompletionTable.
  */
 static void
-selected_a_possible_attribute_cb (GtkCList * a_possible_attributes,
-                                  gint a_row, gint a_column,
-                                  GdkEventButton * a_event,
-                                  gpointer a_user_data)
-{
-        MlViewTreeView *doc_tree_view = NULL;
-        MlViewXMLDocument *mlview_xml_doc = NULL;        
-        enum MlViewStatus stat = MLVIEW_OK ;
-        GtkTreeIter cur_sel_start = {0} ;
-        GtkTreeView *visual_tree = NULL;
-        gchar *attribute_name = NULL;
-        gint ret_code = 0;
-
-        g_return_if_fail (a_possible_attributes != NULL);
-        g_return_if_fail (GTK_IS_CLIST (a_possible_attributes));
-        g_return_if_fail (a_user_data != NULL);
-        g_return_if_fail (MLVIEW_IS_TREE_VIEW
-                          (a_user_data));
-
-        doc_tree_view = MLVIEW_TREE_VIEW (a_user_data);
+update_completion_widget_cb (MlViewXMLDocument *a_xml_doc,
+                             xmlNode *a_node_found,
+                             gpointer a_user_data)
+{
+        g_return_if_fail (a_xml_doc && MLVIEW_IS_XML_DOCUMENT (a_xml_doc));
+        g_return_if_fail (a_node_found);
+        g_return_if_fail (a_user_data && MLVIEW_IS_COMPLETION_TABLE (a_user_data));
 
-        g_return_if_fail (PRIVATE (doc_tree_view) != NULL);
-        g_return_if_fail (MLVIEW_IS_TREE_VIEW
-                          (doc_tree_view));
-        g_return_if_fail (PRIVATE (doc_tree_view)->tree_editor !=
-                          NULL);
-        g_return_if_fail (PRIVATE (doc_tree_view)->node_editor !=
-                          NULL);
-        mlview_iview_get_document
-                (MLVIEW_IVIEW (doc_tree_view), &mlview_xml_doc);
-        g_return_if_fail (mlview_xml_doc != NULL);
-        stat = mlview_tree_editor2_get_cur_sel_start_iter 
-                (PRIVATE (doc_tree_view)->tree_editor,
-                 &cur_sel_start) ;
-        g_return_if_fail (stat == MLVIEW_OK) ;
-
-        visual_tree = mlview_tree_editor2_get_tree_view 
-                (PRIVATE (doc_tree_view)->tree_editor) ;
-        g_return_if_fail (visual_tree != NULL);
-        ret_code = gtk_clist_get_text 
-                (a_possible_attributes, a_row, 
-                 a_column, &attribute_name); /*do not free attribute_name!! */
-        if (ret_code == 1) {
-                /*text retrieved ! */
-                xmlNode *xml_node = NULL;
-                xmlAttr *attr = NULL;
-                xml_node = mlview_tree_editor2_get_xml_node
-                        (PRIVATE (doc_tree_view)->tree_editor,
-                         &cur_sel_start) ;
-                g_return_if_fail (xml_node != NULL);
-                attr = xmlNewProp (xml_node,
-                                   attribute_name,
-                                   "value");
-                stat = mlview_tree_editor2_update_visual_node 
-                        (PRIVATE (doc_tree_view)->tree_editor,
-                         &cur_sel_start) ;
-                g_return_if_fail (stat == MLVIEW_OK) ;
-                mlview_node_editor_edit_xml_node
-                        (PRIVATE (doc_tree_view)->node_editor,
-                         mlview_xml_doc, xml_node) ;                
-        }
+        mlview_completion_table_select_node (MLVIEW_COMPLETION_TABLE (a_user_data),
+                                             a_node_found);
 }
 
 /**
@@ -1322,7 +815,7 @@
                             gchar * a_name,
                             MlViewAppContext *a_app_context)
 {
-        GtkWidget *table = NULL,
+        GtkWidget *compl = NULL,
                 *scrolled = NULL;
         MlViewTreeEditor2 *raw_xml = NULL;
         MlViewTreeEditor2 *elements = NULL;
@@ -1330,17 +823,6 @@
         MlViewTreeEditor2 *tree_editor;
     
         enum MLVIEW_VIEW_ADAPTER_STATUS status = NOK;
-        const gchar *feasible_children_titles[1] =
-                { _("Possible Children") };
-
-        const gchar *feasible_prev_siblings_titles[1] =
-                { _("Possible previous siblings") };
-
-        const gchar *feasible_next_siblings_titles[1] =
-                { _("Possible next siblings") };
-
-        const gchar *feasible_attributes_titles[1] =
-                { _("Possible attributes") };
 
         g_return_if_fail (MLVIEW_IS_TREE_VIEW
                           (a_this));
@@ -1396,97 +878,16 @@
                                   GTK_WIDGET (raw_xml),
                                   gtk_label_new (_("Raw XML")));
 
-        /*the table with the feasible children, siblings and attributes */
-        PRIVATE (a_this)->feasible_children =
-                GTK_CLIST (gtk_clist_new_with_titles
-                           (1, (gchar**)feasible_children_titles));
-
-        g_signal_connect (G_OBJECT
-                          (PRIVATE (a_this)->
-                           feasible_children), "select-row",
-                          G_CALLBACK
-                          (selected_a_possible_child_cb),
-                          a_this);
-
-        PRIVATE (a_this)->feasible_prev_siblings =
-                GTK_CLIST (gtk_clist_new_with_titles
-                           (1, (gchar**)feasible_prev_siblings_titles));
-
-        g_signal_connect (G_OBJECT
-                          (PRIVATE (a_this)->
-                           feasible_prev_siblings), "select-row",
-                          G_CALLBACK
-                          (selected_a_possible_prev_sibling_cb),
-                          a_this);
-
-        PRIVATE (a_this)->feasible_next_siblings =
-                GTK_CLIST (gtk_clist_new_with_titles
-                           (1, (gchar**) feasible_next_siblings_titles));
-
-        g_signal_connect (G_OBJECT
-                          (PRIVATE (a_this)->
-                           feasible_next_siblings), "select-row",
-                          G_CALLBACK
-                          (selected_a_possible_next_sibling_cb),
-                          a_this);
-
-        PRIVATE (a_this)->feasible_attributes =
-                GTK_CLIST
-                (gtk_clist_new_with_titles
-                 (1, (gchar**)feasible_attributes_titles));
-
-        g_signal_connect (G_OBJECT
-                          (PRIVATE (a_this)->
-                           feasible_attributes), "select-row",
-                          GTK_SIGNAL_FUNC
-                          (selected_a_possible_attribute_cb),
-                          a_this);
-
-        table = gtk_table_new (2, 2, TRUE);
-
-        scrolled = gtk_scrolled_window_new (NULL, NULL);
-
-        gtk_container_add
-                (GTK_CONTAINER (scrolled),
-                 GTK_WIDGET (PRIVATE (a_this)->
-                             feasible_children));
-
-        gtk_table_attach_defaults (GTK_TABLE (table), scrolled,
-                                   0, 1, 0, 1);
-
-        scrolled = gtk_scrolled_window_new (NULL, NULL);
-
-        gtk_container_add (GTK_CONTAINER (scrolled),
-                           GTK_WIDGET
-                           (PRIVATE (a_this)->
-                            feasible_prev_siblings));
-
-        gtk_table_attach_defaults (GTK_TABLE (table), scrolled,
-                                   1, 2, 0, 1);
-
-        scrolled = gtk_scrolled_window_new (NULL, NULL);
-
-        gtk_container_add (GTK_CONTAINER (scrolled),
-                           GTK_WIDGET
-                           (PRIVATE (a_this)->
-                            feasible_next_siblings));
-
-        gtk_table_attach_defaults (GTK_TABLE (table), scrolled,
-                                   1, 2, 1, 2);
-
-        scrolled = gtk_scrolled_window_new (NULL, NULL);
-
-        gtk_container_add (GTK_CONTAINER (scrolled),
-                           GTK_WIDGET
-                           (PRIVATE (a_this)->
-                            feasible_attributes));
+        /* The widget with the feasible children, siblings and attributes */
+        
+        compl = mlview_completion_table_new (a_mlview_xml_doc);
 
-        gtk_table_attach_defaults (GTK_TABLE (table), scrolled,
-                                   0, 1, 1, 2);
+        g_signal_connect (a_mlview_xml_doc, "node-selected",
+                          (GCallback)update_completion_widget_cb, compl);
 
         gtk_paned_pack2 (GTK_PANED
                          (PRIVATE (a_this)->upper_paned1),
-                         table, FALSE, TRUE);
+                         compl, FALSE, TRUE);
 
         /*The node editor */
         PRIVATE (a_this)->node_editor =
@@ -1521,40 +922,7 @@
                 tree_editor = MLVIEW_TREE_EDITOR2
                         (gtk_notebook_get_nth_page (PRIVATE (a_this)->trees, i));
                 mlview_tree_editor2_edit_xml_doc
-                        (tree_editor, a_mlview_xml_doc, NULL);
-/*
-                g_signal_connect (G_OBJECT
-                                  (tree),
-                                  "node-selected",
-                                  G_CALLBACK (visual_node_selected_cb),
-                                  a_this);
-*/
-                g_signal_connect (G_OBJECT
-                                  (tree_editor),
-                                  "node-selected",
-                                  G_CALLBACK
-                                  (update_feasible_children_list_cb),
-                                  a_this);
-
-                g_signal_connect (G_OBJECT
-                                  (tree_editor),
-                                  "node-selected",
-                                  G_CALLBACK
-                                  (update_feasible_prev_siblings_list_cb),
-                                  a_this);
-                g_signal_connect (G_OBJECT
-                                  (tree_editor),
-                                  "node-selected",
-                                  G_CALLBACK
-                                  (update_feasible_next_siblings_list_cb),
-                                  a_this);
-                g_signal_connect (GTK_OBJECT
-                                  (tree_editor),
-                                  "node-selected",
-                                  G_CALLBACK
-                                  (update_feasible_attributes_list_cb),
-                                  a_this);
-                
+                        (tree_editor, a_mlview_xml_doc, NULL);         
         }
         g_signal_connect (G_OBJECT (a_mlview_xml_doc),
                           "file-path-changed",

Attachment: completion.tar.gz
Description: application/compressed-tar



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]