00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
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
00024 static GnomeDialogClass *parent_class = NULL ;
00025 static gboolean gv_on_going_validation = TRUE ;
00026
00027
00028 struct _MlViewNodeTypePickerPrivate
00029 {
00030 guint selected_node_type ;
00031
00032
00033 GtkCombo * node_types_combo ;
00034
00035
00036 GtkCombo * node_name_or_content ;
00037
00038
00039 GtkLabel * node_name_or_content_label ;
00040
00041
00042 MlViewAppContext * app_context ;
00043
00044
00045
00046
00047
00048 GList * element_names_choice_list ;
00049
00050
00051 GList * node_type_names ;
00052 };
00053
00054
00055
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
00068
00069
00070 static
00071 NodeTypeDefinition gv_xml_node_types[] =
00072 {
00073 {"ELEMENT NODE", XML_ELEMENT_NODE},
00074 {"TEXT NODE", XML_TEXT_NODE},
00075 {"PI NODE", XML_PI_NODE},
00076 {"COMMENT NODE", XML_COMMENT_NODE},
00077
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
00087
00088
00089 static GHashTable * gv_xml_node_types_by_names=NULL ;
00090
00091
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
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
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
00146 PRIVATE (a_nt_picker)->selected_node_type = NO_SELECTED_NODE_TYPE ;
00147
00148
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
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
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
00381
00382
00383
00384
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
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) {
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
00533
00534
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
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 }