Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals  

mlview-node-type-picker.c

Go to the documentation of this file.
00001 /*This file is part of MlView
00002  *
00003  *MlView is free software; you can redistribute it and/or modify it under the terms of 
00004  *the GNU General Public License as published by the Free Software Foundation; either version 2, 
00005  *or (at your option) any later version.
00006  *
00007  *MlView is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
00008  *without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00009  *See the GNU General Public License for more details.
00010  *
00011  *You should have received a copy of the GNU General Public License along with MlView; 
00012  *see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00013  *
00014  *
00015  *Copyright 2001 dodji seketeli
00016  */
00017 #include <libxml/parser.h>
00018 #include <libxml/valid.h>
00019 
00020 #include "mlview-node-type-picker.h"
00021 #include "mlview-global-settings.h"
00022 
00023 /*a pointer to the parent class structure of MlViewNodeTypePickerClass*/
00024 static GnomeDialogClass *parent_class = NULL ;
00025 static gboolean gv_on_going_validation = TRUE ;
00026 
00027 /*the data structure of the private part of MlViewNodeType*/
00028 struct _MlViewNodeTypePickerPrivate
00029 {
00030         guint selected_node_type ;
00031 
00032         /*a combo box that lets the user choose a type of node*/
00033         GtkCombo * node_types_combo ;
00034 
00035         /*If the user chooses an element node, this entry contains the name. If it chooses a content node, contains the content etc ...*/
00036         GtkCombo * node_name_or_content ; 
00037 
00038         /*The label of the entry above. Will be dynamically changed depending on what "node_name_or_content" contains*/
00039         GtkLabel * node_name_or_content_label ;
00040 
00041         /*the context of the mlview application*/
00042         MlViewAppContext * app_context ;
00043 
00044         /*the element names completion list.
00045          *Whenever validation is on, this list should be built (according to the document validation constraints)
00046          *each time the user has to enter an element name.
00047          */
00048         GList * element_names_choice_list ;
00049 
00050         /*The node types presented to the user*/
00051         GList * node_type_names ;
00052 };
00053 
00054 
00055 /*The data structure to define xml node types*/
00056 typedef struct _NodeTypeDefinition NodeTypeDefinition ;
00057 struct _NodeTypeDefinition
00058 {
00059         char * node_type_name ;
00060         guint  node_type_id ;
00061 } ;
00062 
00063 #define PRIVATE(node_type_picker) (node_type_picker->private)
00064 static const int NO_SELECTED_NODE_TYPE = -1 ;
00065 
00066 /*======================================================================================
00067  *This is the list of all the types of xml node that the editor should ne able to handle
00068  *The types come from the file libxml/tree.h of Daniel Veillard's libxml-2
00069  *=====================================================================================*/
00070 static
00071 NodeTypeDefinition gv_xml_node_types[] =
00072 {
00073         {"ELEMENT NODE", XML_ELEMENT_NODE}, /*0*/
00074         {"TEXT NODE", XML_TEXT_NODE}, /*1*/
00075         {"PI NODE", XML_PI_NODE}, /*2*/
00076         {"COMMENT NODE", XML_COMMENT_NODE}, /*3*/
00077         /*the line below must be the last one...*/
00078         {NULL}
00079 } ;
00080 static const int ELEMENT_NODE = 0 ;
00081 static const int TEXT_NODE = 1 ;
00082 static const int PI_NODE = 2 ;
00083 static const int COMMENT_NODE = 3 ;
00084 
00085 /*
00086  *An index to find a node type def by the node type name. This index if followed by its ref count.
00087  *When the ref count falls to zero, the index is freed.
00088  */
00089 static GHashTable * gv_xml_node_types_by_names=NULL ;
00090 
00091 /*private functions declarations*/
00092 static void 
00093 node_type_selected_cb (GtkEditable *a_entry, 
00094                        MlViewNodeTypePicker * a_nt_picker) ;
00095 
00096 static void 
00097 mlview_node_type_picker_clear_element_name_choice_list (MlViewNodeTypePicker *a_picker, 
00098                                                         gboolean a_clear_element_name_entry) ;
00099 
00100 static void 
00101 mlview_node_type_picker_init_node_type_list (MlViewNodeTypePicker * a_nt_picker) ;
00102 
00103 static void 
00104 mlview_node_type_picker_clear_node_type_choice_list (MlViewNodeTypePicker *a_nt_picker, 
00105                                                      gboolean a_clear_node_type_entry) ;
00106 
00107 static void 
00108 mlview_node_type_picker_update_node_type_list_and_elements_list (MlViewNodeTypePicker * a_nt_picker) ;
00109 
00110 /*private gtk framework methods*/
00111 
00116 static void
00117 mlview_node_type_picker_init_class (MlViewNodeTypePickerClass * a_klass)
00118 {
00119         GtkObjectClass * object_class ;
00120         g_return_if_fail (a_klass != NULL) ;
00121         
00122         parent_class = gtk_type_class (GNOME_TYPE_DIALOG) ;
00123         object_class = GTK_OBJECT_CLASS (a_klass);
00124         
00125         object_class->destroy = mlview_node_type_picker_destroy ;       
00126         /*signal definition should come below*/
00127 }
00128 
00129 
00134 static void
00135 mlview_node_type_picker_init (MlViewNodeTypePicker * a_nt_picker)
00136 {
00137         GtkWidget *label=NULL, *table=NULL ;
00138 
00139         g_return_if_fail (a_nt_picker != NULL) ;
00140 
00141         if ( PRIVATE (a_nt_picker) == NULL ) {
00142                 PRIVATE (a_nt_picker) = g_malloc0 (sizeof(MlViewNodeTypePickerPrivate)) ;
00143         }
00144 
00145         /*init the private attributes*/
00146         PRIVATE (a_nt_picker)->selected_node_type = NO_SELECTED_NODE_TYPE ;
00147 
00148         /*build the gui*/
00149         PRIVATE (a_nt_picker)->node_types_combo = GTK_COMBO (gtk_combo_new ()) ;
00150         gtk_entry_set_editable (GTK_ENTRY (PRIVATE (a_nt_picker)->node_types_combo->entry), FALSE) ;
00151         PRIVATE (a_nt_picker)->node_name_or_content = GTK_COMBO (gtk_combo_new ()) ;
00152 
00153         PRIVATE (a_nt_picker)->node_name_or_content_label = GTK_LABEL (gtk_label_new (_("Element name"))) ;
00154 
00155         mlview_node_type_picker_init_node_type_list (a_nt_picker) ;
00156 
00157         PRIVATE (a_nt_picker)->selected_node_type = gv_xml_node_types[0].node_type_id ;
00158         gtk_signal_connect (GTK_OBJECT (PRIVATE (a_nt_picker)->node_types_combo->entry),
00159                             "changed",GTK_SIGNAL_FUNC(node_type_selected_cb),
00160                            a_nt_picker) ;       
00161 
00162         label = gtk_label_new (_("Node type")) ;
00163         table = gtk_table_new (1, 2, FALSE) ;
00164         gtk_table_attach_defaults (GTK_TABLE(table),label,
00165                                    0,1,0,1) ;
00166         gtk_table_attach_defaults (GTK_TABLE(table),
00167                                    GTK_WIDGET(PRIVATE (a_nt_picker)->node_types_combo),
00168                                    1,2,0,1) ;
00169         gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (a_nt_picker)->vbox),
00170                            table,FALSE,TRUE,0) ;
00171 
00172         gtk_widget_show (table) ;
00173         gtk_widget_show (GTK_WIDGET (PRIVATE (a_nt_picker)->node_types_combo)) ;
00174         gtk_widget_show (label) ;
00175 
00176         table = gtk_table_new (1,2,FALSE) ;     
00177         gtk_table_attach_defaults (GTK_TABLE(table),GTK_WIDGET (PRIVATE (a_nt_picker)->node_name_or_content_label),
00178                                   0,1,0,1) ;
00179         gtk_table_attach_defaults (GTK_TABLE (table),GTK_WIDGET (PRIVATE (a_nt_picker)->node_name_or_content),
00180                                   1,2,0,1) ;
00181         gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (a_nt_picker)->vbox),
00182                             table,FALSE,TRUE,0) ;       
00183 
00184         gtk_widget_show (table) ;
00185         gtk_widget_show (GTK_WIDGET (PRIVATE (a_nt_picker)->node_name_or_content)) ;
00186         gtk_widget_show (GTK_WIDGET (PRIVATE (a_nt_picker)->node_name_or_content_label)) ;
00187 }
00188 
00189 
00194 static void
00195 mlview_node_type_picker_update_node_type_list_and_elements_list (MlViewNodeTypePicker * a_nt_picker)
00196 {
00197         GHashTable * present_element_types = NULL ;
00198         GList *list_elem = NULL, *elements_to_remove = NULL ;
00199 
00200         g_return_if_fail (a_nt_picker != NULL) ;
00201         g_return_if_fail (MLVIEW_IS_NODE_TYPE_PICKER (a_nt_picker)) ;
00202         g_return_if_fail (PRIVATE (a_nt_picker) != NULL) ;
00203         
00204         mlview_node_type_picker_clear_node_type_choice_list (a_nt_picker, TRUE) ;
00205 
00206         present_element_types = g_hash_table_new (g_str_hash, g_str_equal) ;    
00207         
00208         for (list_elem = PRIVATE (a_nt_picker)->element_names_choice_list ; 
00209              list_elem; 
00210              list_elem = g_list_next (list_elem)) {
00211                 gchar *element_name=NULL ;              
00212                 
00213                 element_name = list_elem->data ;
00214 
00215                 if ( element_name && !strcmp (element_name, "#PCDATA") 
00216                      && !g_hash_table_lookup (present_element_types, "TEXT_NODE")) {
00217                         PRIVATE (a_nt_picker)->node_type_names = 
00218                                 g_list_append (PRIVATE (a_nt_picker)->node_type_names,
00219                                                gv_xml_node_types[TEXT_NODE].node_type_name) ;
00220                         g_hash_table_insert (present_element_types, "TEXT_NODE", "TEXT_NODE") ;
00221                         elements_to_remove = g_list_append (elements_to_remove, list_elem->data) ;
00222                 } else if ( element_name 
00223                             && !g_hash_table_lookup (present_element_types, "ELEMENT_NODE") ) {
00224                         PRIVATE (a_nt_picker)->node_type_names = 
00225                                 g_list_append (PRIVATE (a_nt_picker)->node_type_names,
00226                                                gv_xml_node_types[ELEMENT_NODE].node_type_name) ;
00227                         g_hash_table_insert (present_element_types, "ELEMENT_NODE", "ELEMENT_NODE") ;
00228                 }
00229         }
00230         
00231         list_elem = elements_to_remove ;
00232         while (list_elem && list_elem->data) {          
00233                 PRIVATE (a_nt_picker)->element_names_choice_list = 
00234                         g_list_remove (PRIVATE (a_nt_picker)->element_names_choice_list,
00235                                        list_elem->data) ;
00236                 list_elem = g_list_next (list_elem) ;
00237         }
00238         
00239         if ( g_list_length (PRIVATE (a_nt_picker)->element_names_choice_list) <= 0)
00240                 PRIVATE (a_nt_picker)->element_names_choice_list = 0 ;
00241 
00242         PRIVATE (a_nt_picker)->node_type_names = 
00243                                 g_list_append (PRIVATE (a_nt_picker)->node_type_names,
00244                                                gv_xml_node_types[PI_NODE].node_type_name) ;
00245         PRIVATE (a_nt_picker)->node_type_names = 
00246                                 g_list_append (PRIVATE (a_nt_picker)->node_type_names,
00247                                                gv_xml_node_types[COMMENT_NODE].node_type_name) ;
00248 
00249         gtk_combo_set_popdown_strings (PRIVATE (a_nt_picker)->node_types_combo,
00250                                        PRIVATE (a_nt_picker)->node_type_names) ;
00251 
00252         gtk_combo_set_popdown_strings (PRIVATE (a_nt_picker)->node_name_or_content,
00253                                        PRIVATE (a_nt_picker)->element_names_choice_list) ;      
00254 
00255         if ( present_element_types ) {
00256                 g_hash_table_destroy (present_element_types) ;
00257                 present_element_types = NULL ;
00258         }
00259 }
00260 
00261 
00267 static void
00268 mlview_node_type_picker_init_node_type_list (MlViewNodeTypePicker * a_nt_picker)
00269 {
00270         int i ;
00271 
00272         g_return_if_fail (a_nt_picker != NULL) ;
00273         g_return_if_fail (MLVIEW_IS_NODE_TYPE_PICKER (a_nt_picker)) ;
00274         g_return_if_fail (PRIVATE (a_nt_picker) != NULL) ;
00275 
00276         /*walk thru the table of node types to  build the combo popdown list*/
00277         if(gv_xml_node_types_by_names == NULL){
00278                 gv_xml_node_types_by_names = g_hash_table_new(g_str_hash,g_str_equal) ;
00279         }
00280 
00281         for (i=0 ; gv_xml_node_types[i].node_type_name ; i++) {
00282                 PRIVATE (a_nt_picker)->node_type_names = 
00283                         g_list_append(PRIVATE (a_nt_picker)->node_type_names, 
00284                                       gv_xml_node_types[i].node_type_name) ;
00285 
00286                 g_hash_table_insert (gv_xml_node_types_by_names,
00287                                      gv_xml_node_types[i].node_type_name,
00288                                      &gv_xml_node_types[i]) ;
00289         }
00290         gtk_combo_set_popdown_strings (PRIVATE (a_nt_picker)->node_types_combo, 
00291                                        PRIVATE (a_nt_picker)->node_type_names) ;
00292 }
00293 
00294 
00300 static void
00301 mlview_node_type_picker_clear_element_name_choice_list (MlViewNodeTypePicker *a_picker, 
00302                                                         gboolean a_clear_element_name_entry)
00303 {
00304         g_return_if_fail (a_picker != NULL) ;
00305         g_return_if_fail (PRIVATE (a_picker) != NULL) ;
00306 
00307         if ( PRIVATE (a_picker)->element_names_choice_list ) {
00308                 g_list_free (PRIVATE (a_picker)->element_names_choice_list ) ;
00309                 PRIVATE (a_picker)->element_names_choice_list = NULL ;
00310 
00311                 gtk_list_clear_items (GTK_LIST (PRIVATE (a_picker)->node_name_or_content->list), 0, -1) ;
00312 
00313                 if ( a_clear_element_name_entry == TRUE  
00314                      && PRIVATE (a_picker)->node_name_or_content
00315                      && PRIVATE (a_picker)->node_name_or_content->entry) 
00316                         gtk_editable_delete_text (GTK_EDITABLE (PRIVATE (a_picker)->node_name_or_content->entry),
00317                                                   0, -1) ;
00318         }
00319 }
00320 
00324 static void
00325 mlview_node_type_picker_clear_node_type_choice_list (MlViewNodeTypePicker *a_nt_picker,
00326                                                      gboolean a_clear_node_type_entry)
00327 {
00328         g_return_if_fail (a_nt_picker != NULL) ;
00329         g_return_if_fail (MLVIEW_IS_NODE_TYPE_PICKER (a_nt_picker)) ;
00330         g_return_if_fail (PRIVATE (a_nt_picker) != NULL) ;
00331 
00332         if ( PRIVATE (a_nt_picker)->node_type_names ) {
00333                 g_list_free (PRIVATE (a_nt_picker)->node_type_names ) ;
00334                 PRIVATE (a_nt_picker)->node_type_names = NULL ;
00335 
00336                 gtk_list_clear_items (GTK_LIST (PRIVATE (a_nt_picker)->node_types_combo->list), 0, -1) ;
00337 
00338                 if ( a_clear_node_type_entry == TRUE 
00339                      && PRIVATE (a_nt_picker)->node_types_combo 
00340                      && PRIVATE (a_nt_picker)->node_types_combo->entry) {
00341 
00342                         gtk_editable_delete_text (GTK_EDITABLE (PRIVATE (a_nt_picker)->node_types_combo->entry),
00343                                                   0, -1) ;
00344                 }
00345         }
00346 }
00347 
00348 /*===============================================================
00349  *Private signals callback methods
00350  *===============================================================*/
00351 
00359 static void
00360 node_type_selected_cb(GtkEditable *a_entry, MlViewNodeTypePicker * a_nt_picker)
00361 {
00362         gchar * node_type_name ;
00363         NodeTypeDefinition * node_type_def ;
00364 
00365         g_return_if_fail(a_entry != NULL) ;
00366         g_return_if_fail(a_nt_picker != NULL) ;
00367         
00368         node_type_name = gtk_entry_get_text(GTK_ENTRY(a_entry)) ;
00369         g_assert(node_type_name != NULL) ;
00370         g_assert(gv_xml_node_types_by_names != NULL) ;
00371 
00372         node_type_def = g_hash_table_lookup(gv_xml_node_types_by_names,node_type_name) ;
00373         g_return_if_fail(node_type_def != NULL) ;
00374 
00375         mlview_node_type_picker_set_selected_node_type(a_nt_picker,node_type_def->node_type_id) ;
00376 }
00377 
00378 
00379 /*===============================================================
00380  *Private helper functions
00381  *===============================================================*/
00382 
00383 /*================================================================
00384  *Public methods of the NodeTypePicker class.
00385  *=================================================================*/
00386 
00387 
00392 GtkWidget *
00393 mlview_node_type_picker_new (MlViewAppContext *a_app_context)
00394 {
00395         GtkWidget * result ;
00396         gchar * buttons[] = {GNOME_STOCK_BUTTON_OK,GNOME_STOCK_BUTTON_CANCEL,NULL} ;
00397                 
00398         result = GTK_WIDGET (gtk_type_new (MLVIEW_TYPE_NODE_TYPE_PICKER)) ;
00399         g_return_val_if_fail (result != NULL, NULL) ;
00400         g_return_val_if_fail (MLVIEW_IS_NODE_TYPE_PICKER (result), NULL) ;
00401 
00402         PRIVATE (MLVIEW_NODE_TYPE_PICKER (result))->app_context = a_app_context ;
00403 
00404         gnome_dialog_constructv (GNOME_DIALOG (result),
00405                                 _("Define a new node"),
00406                                 (const gchar **)buttons) ;
00407         
00408         gnome_dialog_set_default (GNOME_DIALOG (result), 0) ;
00409         return result ;
00410 }
00411 
00412 
00413 
00420 void
00421 mvliew_node_type_picker_build_element_name_choice_list (MlViewNodeTypePicker * a_picker,
00422                                                         enum NODE_INSERTION_SCHEME a_insertion_scheme,
00423                                                         xmlNode *a_current_xml_node)
00424 {
00425         gint nb_of_names = 0 ;
00426         gchar * validation_is_on = NULL ;
00427 
00428         g_return_if_fail (a_picker != NULL) ;
00429         g_return_if_fail (MLVIEW_IS_NODE_TYPE_PICKER (a_picker)) ;
00430         g_return_if_fail (PRIVATE (a_picker) != NULL) ;
00431 
00432         mlview_node_type_picker_clear_element_name_choice_list (a_picker, TRUE) ;
00433         mlview_node_type_picker_clear_node_type_choice_list (a_picker, TRUE) ;
00434         mlview_node_type_picker_init_node_type_list (a_picker) ;
00435 
00436         /*some more sanity checks ... i feel better when I stay away from core dumps :) */
00437         if (PRIVATE (a_picker)->app_context 
00438             && mlview_app_context_settings_exist (PRIVATE (a_picker)->app_context))
00439                 validation_is_on = 
00440                         mlview_app_context_get_settings_value (PRIVATE (a_picker)->app_context, 
00441                                                                MLVIEW_STG_K_IS_VALIDATION_ON) ;
00442 
00443         if ( (validation_is_on == NULL)
00444              || (strcmp (validation_is_on, MLVIEW_STG_V_YES) != 0)
00445              || (a_current_xml_node == NULL)
00446              || (a_current_xml_node->doc == NULL) )
00447                 return ;
00448 
00449         if ((a_current_xml_node == NULL)
00450             || (a_current_xml_node->doc == NULL) )
00451                 return ;        
00452         
00453                           
00454         nb_of_names = mlview_parsing_utils_build_element_name_completion_list (PRIVATE (a_picker)->app_context,
00455                                                                                a_insertion_scheme,
00456                                                                                a_current_xml_node,
00457                                                                                &PRIVATE (a_picker)->element_names_choice_list) ;
00458         if ( nb_of_names > 0) {/*found some names to propose to the user*/
00459                 mlview_node_type_picker_update_node_type_list_and_elements_list (a_picker) ;
00460         }
00461 }
00462 
00467 GtkWidget *
00468 mlview_node_type_picker_new_with_title (gchar * a_title, MlViewAppContext *a_app_context)
00469 {
00470         GtkWidget * result ;
00471         gchar * buttons[] = {GNOME_STOCK_BUTTON_OK,GNOME_STOCK_BUTTON_CANCEL,NULL} ;
00472         
00473         result = GTK_WIDGET (gtk_type_new (MLVIEW_TYPE_NODE_TYPE_PICKER)) ;
00474         g_return_val_if_fail (result != NULL, NULL) ;
00475         g_return_val_if_fail (MLVIEW_IS_NODE_TYPE_PICKER (result), NULL) ;
00476 
00477         PRIVATE (MLVIEW_NODE_TYPE_PICKER (result))->app_context = a_app_context ;
00478 
00479         gnome_dialog_constructv (GNOME_DIALOG (result),
00480                                  a_title,
00481                                  (const gchar **)buttons) ;
00482         gnome_dialog_set_default (GNOME_DIALOG (result), 0) ;
00483 
00484         mlview_app_context_set_window_icon (a_app_context, result) ;
00485         return result ;
00486 }
00487 
00488 
00492 void 
00493 mlview_node_type_picker_set_title (MlViewNodeTypePicker *a_nt_picker, 
00494                                    gchar * a_title)
00495 {
00496         g_return_if_fail(a_nt_picker != NULL) ;
00497         g_return_if_fail(a_title != NULL) ;
00498 
00499         gtk_window_set_title(GTK_WINDOW(a_nt_picker),a_title) ;
00500 }
00501 
00502 
00507 guint
00508 mlview_node_type_picker_get_selected_node_type (MlViewNodeTypePicker * a_nt_picker)
00509 {
00510         g_return_val_if_fail(a_nt_picker != NULL, -1) ;
00511         g_return_val_if_fail(PRIVATE(a_nt_picker) != NULL, -1) ;
00512         
00513         return PRIVATE(a_nt_picker)->selected_node_type ;
00514 }
00515 
00516 
00525 gchar *
00526 mlview_node_type_picker_get_node_name_or_content(MlViewNodeTypePicker * a_nt_picker)
00527 {
00528         g_return_val_if_fail(a_nt_picker != NULL, NULL) ;
00529         g_return_val_if_fail(PRIVATE(a_nt_picker) != NULL, NULL) ;
00530 
00531         if ( PRIVATE(a_nt_picker)->node_name_or_content ) {
00532                 /*if node name completion is on, validation is on, free the element names
00533                  *choice list proposed to the user and build during the last
00534                  *invocation of mvliew_node_type_picker_build_element_name_choice_list ()*/
00535                 return gtk_entry_get_text (GTK_ENTRY (PRIVATE(a_nt_picker)->node_name_or_content->entry)) ;
00536         }
00537         return NULL ;   
00538 }
00539 
00540 
00544 void
00545 mlview_node_type_picker_set_selected_node_type (MlViewNodeTypePicker * a_nt_picker, 
00546                                                 guint a_node_type)
00547 {
00548         g_return_if_fail(a_nt_picker != NULL) ;
00549         g_return_if_fail(PRIVATE(a_nt_picker) != NULL) ;
00550         g_return_if_fail(PRIVATE(a_nt_picker)->node_name_or_content_label != NULL) ;
00551 
00552         PRIVATE(a_nt_picker)->selected_node_type = a_node_type ;
00553 
00554         switch(PRIVATE(a_nt_picker)->selected_node_type){
00555         case XML_ELEMENT_NODE:
00556                 gtk_label_set_text(PRIVATE(a_nt_picker)->node_name_or_content_label, _("Element node name")) ;
00557                 
00558                 if ( gv_on_going_validation == TRUE 
00559                      && PRIVATE (a_nt_picker)->element_names_choice_list ) {
00560                         gtk_combo_set_popdown_strings (PRIVATE (a_nt_picker)->node_name_or_content,
00561                                                        PRIVATE (a_nt_picker)->element_names_choice_list) ;
00562                 }
00563 
00564                 break ;
00565         case XML_COMMENT_NODE:
00566                 gtk_label_set_text(PRIVATE(a_nt_picker)->node_name_or_content_label, _("Comment node content")) ;
00567                 if ( PRIVATE ( a_nt_picker)->node_name_or_content ) {
00568                         gtk_list_clear_items (GTK_LIST (PRIVATE ( a_nt_picker)->node_name_or_content->list), 
00569                                         0, -1) ;
00570                         gtk_editable_delete_text (GTK_EDITABLE (PRIVATE (a_nt_picker)->node_name_or_content->entry), 
00571                                                   0, -1) ;
00572                 }
00573                 break ;
00574         case XML_TEXT_NODE:
00575                 gtk_label_set_text(PRIVATE(a_nt_picker)->node_name_or_content_label, _("Text node content")) ;
00576                 if ( PRIVATE ( a_nt_picker)->node_name_or_content ) {
00577                         gtk_list_clear_items (GTK_LIST (PRIVATE ( a_nt_picker)->node_name_or_content->list), 
00578                                               0, -1) ;
00579                         gtk_editable_delete_text (GTK_EDITABLE (PRIVATE (a_nt_picker)->node_name_or_content->entry), 
00580                                                   0, -1) ;
00581                 }
00582                 
00583                 break ;
00584         case XML_PI_NODE :
00585                 gtk_label_set_text(PRIVATE(a_nt_picker)->node_name_or_content_label, _("PI node name")) ;
00586                 if ( PRIVATE ( a_nt_picker)->node_name_or_content ) {
00587                         gtk_list_clear_items (GTK_LIST (PRIVATE ( a_nt_picker)->node_name_or_content->list), 
00588                                               0, -1) ;
00589                         gtk_editable_delete_text (GTK_EDITABLE (PRIVATE (a_nt_picker)->node_name_or_content->entry), 
00590                                                   0, -1) ;
00591                 }
00592                 break ;
00593         case XML_CDATA_SECTION_NODE :
00594                 gtk_label_set_text(PRIVATE(a_nt_picker)->node_name_or_content_label, _("CDATA section node content")) ;
00595                 if ( PRIVATE ( a_nt_picker)->node_name_or_content ) {
00596                         gtk_list_clear_items (GTK_LIST (PRIVATE ( a_nt_picker)->node_name_or_content->list), 
00597                                         0, -1) ;
00598                         gtk_editable_delete_text (GTK_EDITABLE (PRIVATE (a_nt_picker)->node_name_or_content->entry), 
00599                                                   0, -1) ;
00600                 }
00601                 break ;
00602         default:
00603                 gtk_label_set_text(PRIVATE(a_nt_picker)->node_name_or_content_label, _("Element node name")) ;
00604                 break ;
00605         }
00606 }
00607 
00612 void
00613 mlview_node_type_picker_set_on_going_validation (gboolean a_on)
00614 {
00615         gv_on_going_validation = a_on ;
00616 }
00617 
00618 
00623 gboolean
00624 mlview_node_type_picker_on_going_validation_is_on (void)
00625 {
00626         return gv_on_going_validation ;
00627 }
00628 
00632 void
00633 mlview_node_type_picker_destroy (GtkObject *a_object)
00634 {
00635         MlViewNodeTypePicker * node_type_picker ;
00636         g_return_if_fail (a_object != NULL) ;
00637         g_return_if_fail (MLVIEW_IS_NODE_TYPE_PICKER(a_object)) ;
00638         
00639         node_type_picker = MLVIEW_NODE_TYPE_PICKER(a_object) ;
00640 
00641         if ( PRIVATE(node_type_picker)->node_types_combo != NULL ) {
00642                 gtk_widget_destroy(GTK_WIDGET(PRIVATE(node_type_picker)->node_types_combo)) ;
00643                 PRIVATE(node_type_picker)->node_types_combo = NULL ;
00644         }
00645         if ( PRIVATE(node_type_picker) != NULL ) {
00646                 g_free(PRIVATE(node_type_picker)) ;
00647                 PRIVATE(node_type_picker) = NULL ;
00648         }
00649 
00650         if( gv_xml_node_types_by_names != NULL ) {
00651                 g_hash_table_destroy(gv_xml_node_types_by_names) ;
00652                 gv_xml_node_types_by_names = NULL ;
00653         }
00654         /*call the destroy method of the parent class. This must the last action of this function*/
00655         if ( GTK_OBJECT_CLASS (parent_class)->destroy ) {
00656                 GTK_OBJECT_CLASS (parent_class)->destroy (a_object) ;
00657         }
00658 
00659 }
00660 
00661 
00666 guint
00667 mlview_node_type_picker_get_type(void)
00668 {
00669         static guint mlview_node_type_picker_type=0 ;
00670 
00671         if ( !mlview_node_type_picker_type ) {
00672                 static const GtkTypeInfo t_info = {
00673                         "MlViewNodeTypePicker",
00674                         sizeof (MlViewNodeTypePicker),
00675                         sizeof (MlViewNodeTypePickerClass),
00676                         (GtkClassInitFunc) mlview_node_type_picker_init_class,
00677                         (GtkObjectInitFunc) mlview_node_type_picker_init,
00678                         NULL,NULL,NULL
00679                 };
00680                 mlview_node_type_picker_type = gtk_type_unique (GNOME_TYPE_DIALOG,&t_info) ;
00681         }
00682         return mlview_node_type_picker_type ;
00683 }
00684 
00685 
00689 void 
00690 mlview_node_type_picker_set_focus_to_node_name_or_content_entry (MlViewNodeTypePicker *a_nt_picker)
00691 {
00692         g_return_if_fail (a_nt_picker != NULL) ;
00693         g_return_if_fail (PRIVATE(a_nt_picker) != NULL) ;
00694 
00695         if ( PRIVATE (a_nt_picker)->node_name_or_content )
00696                 gtk_widget_grab_focus (GTK_WIDGET (PRIVATE (a_nt_picker)->node_name_or_content->entry)) ;
00697 }
00698 
00699 
00703 void 
00704 mlview_node_type_picker_select_node_name_or_content_entry_text (MlViewNodeTypePicker *a_nt_picker)
00705 {
00706         gchar * tmp_str=NULL ;
00707 
00708         g_return_if_fail (a_nt_picker != NULL) ;
00709         g_return_if_fail (PRIVATE (a_nt_picker) != NULL) ;
00710 
00711         mlview_node_type_picker_set_focus_to_node_name_or_content_entry (a_nt_picker) ;
00712         
00713         if ( PRIVATE (a_nt_picker)->node_name_or_content )
00714                 tmp_str = gtk_entry_get_text (GTK_ENTRY (PRIVATE(a_nt_picker)->node_name_or_content->entry)) ;
00715 
00716         if ( tmp_str != NULL ) {
00717                 gtk_entry_select_region(GTK_ENTRY (PRIVATE (a_nt_picker)->node_name_or_content->entry), 0, -1) ;
00718         }
00719 }

Generated on Sat Jul 6 09:57:34 2002 for Gnome-MlView by doxygen1.2.16