00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mlview-settings-builder.h"
00019 #include "mlview-global-settings.h"
00020
00021 typedef struct _XMLDocumentSettingsWidgetStruct XMLDocumentSettingsWidgetStruct ;
00022
00023 struct _XMLDocumentSettingsWidgetStruct {
00024 GtkEntry * tree_view_default_expansion_depth_entry ;
00025 GtkCheckButton* validation_on ;
00026 } ;
00027
00028 struct _MlViewSettingsBuilderPrivate {
00029 MlViewAppContext *app_context ;
00030 MlViewSettingsManager * settings_manager ;
00031
00032
00033 XMLDocumentSettingsWidgetStruct xml_document_settings_widget_struct ;
00034 MlViewSettingsEntry * xml_document_settings_entry ;
00035 GtkWidget * xml_document_settings_widget ;
00036
00037
00038 } ;
00039
00040
00041 #define PRIVATE(dialog) ((dialog)->private)
00042
00043 static GtkObjectClass * parent_class = NULL ;
00044
00045
00046
00047 static void mlview_settings_builder_init (MlViewSettingsBuilder * a_settings_builder) ;
00048
00049 static void mlview_settings_builder_init_class (MlViewSettingsBuilderClass * a_klass) ;
00050
00051 static void mlview_xml_document_load_settings_from_xml_doc_into_settings_entry_handler (MlViewSettingsEntry * a_settings_entry,
00052 xmlDoc * a_xml_doc) ;
00053
00054 static void mlview_xml_document_settings_changed_notifier_handler (MlViewSettingsEntry *a_settings,
00055 void * a_user_data) ;
00056
00057 static void mlview_xml_document_get_settings_from_settings_widget_handler (MlViewSettingsEntry * a_settings_entry) ;
00058
00059 static void mlview_xml_document_set_settings_to_settings_widget_handler (MlViewSettingsEntry * a_settings_entry) ;
00060
00061 static void mlview_settings_builder_construct (MlViewSettingsBuilder *a_settings_builder,
00062 MlViewAppContext *a_app_context) ;
00063
00068 static void
00069 mlview_settings_builder_init_class (MlViewSettingsBuilderClass * a_klass)
00070 {
00071 GtkObjectClass *object_class = GTK_OBJECT_CLASS (a_klass) ;
00072 parent_class = gtk_type_class (GTK_TYPE_OBJECT) ;
00073
00074 object_class->destroy = mlview_settings_builder_destroy ;
00075 }
00076
00077 static void
00078 mlview_settings_builder_construct (MlViewSettingsBuilder *a_settings_builder, MlViewAppContext *a_app_context)
00079 {
00080 g_return_if_fail (a_settings_builder != NULL) ;
00081 g_return_if_fail (MLVIEW_IS_SETTINGS_BUILDER (a_settings_builder)) ;
00082 g_return_if_fail (PRIVATE (a_settings_builder) != NULL) ;
00083 g_return_if_fail (a_app_context != NULL) ;
00084
00085 PRIVATE (a_settings_builder)->settings_manager =
00086 mlview_settings_manager_new (a_app_context) ;
00087 PRIVATE (a_settings_builder)->app_context = a_app_context ;
00088 g_return_if_fail (PRIVATE(a_settings_builder)->settings_manager != NULL) ;
00089 }
00090
00091
00095 static void
00096 mlview_settings_builder_init (MlViewSettingsBuilder * a_settings_builder)
00097 {
00098 g_return_if_fail (a_settings_builder != NULL) ;
00099 g_return_if_fail (MLVIEW_IS_SETTINGS_BUILDER (a_settings_builder)) ;
00100
00101
00102 PRIVATE (a_settings_builder) = g_malloc0 (sizeof (MlViewSettingsBuilderPrivate)) ;
00103 }
00104
00105
00109 static void
00110 mlview_settings_builder_build_xml_document_settings_widget (MlViewSettingsBuilder * a_settings_builder)
00111 {
00112 GtkWidget *frame = NULL, *label = NULL, *table = NULL, *separator = NULL ;
00113
00114 g_return_if_fail (a_settings_builder != NULL) ;
00115 g_return_if_fail (MLVIEW_IS_SETTINGS_BUILDER (a_settings_builder)) ;
00116 g_return_if_fail (PRIVATE (a_settings_builder) != NULL) ;
00117
00118 PRIVATE (a_settings_builder)->xml_document_settings_widget =
00119 gtk_vbox_new (FALSE, 0) ;
00120
00121
00122
00123 frame = gtk_frame_new (_("When opening an xml document, use :")) ;
00124 table = gtk_table_new (1, 2, TRUE) ;
00125 PRIVATE (a_settings_builder)->xml_document_settings_widget_struct.tree_view_default_expansion_depth_entry =
00126 GTK_ENTRY (gtk_entry_new ()) ;
00127
00128 label = gtk_label_new (_("Node expansion level : ")) ;
00129 gtk_table_attach_defaults (GTK_TABLE(table), label,
00130 0,1,0,1) ;
00131 gtk_table_attach_defaults (GTK_TABLE (table),
00132 GTK_WIDGET (PRIVATE (a_settings_builder)->xml_document_settings_widget_struct.tree_view_default_expansion_depth_entry),
00133 1,2,0,1) ;
00134 gtk_container_add (GTK_CONTAINER (frame), table) ;
00135 gtk_box_pack_start (GTK_BOX (PRIVATE (a_settings_builder)->xml_document_settings_widget), frame, FALSE, TRUE, 0) ;
00136
00137 separator = gtk_hseparator_new () ;
00138 gtk_box_pack_start(GTK_BOX(PRIVATE (a_settings_builder)->xml_document_settings_widget), separator, FALSE, TRUE, 0) ;
00139
00140
00141 frame = gtk_frame_new (_("Validation")) ;
00142 PRIVATE (a_settings_builder)->xml_document_settings_widget_struct.validation_on =
00143 GTK_CHECK_BUTTON (gtk_check_button_new_with_label (_("Validation on"))) ;
00144 gtk_container_add (GTK_CONTAINER (frame),
00145 GTK_WIDGET (PRIVATE (a_settings_builder)->xml_document_settings_widget_struct.validation_on)) ;
00146 gtk_box_pack_start (GTK_BOX (PRIVATE (a_settings_builder)->xml_document_settings_widget),
00147 frame, FALSE, TRUE, 0) ;
00148
00149 gtk_widget_show_all (PRIVATE (a_settings_builder)->xml_document_settings_widget) ;
00150 }
00151
00152 static void
00153 mlview_settings_builder_destroy_xml_document_settings_entry (MlViewSettingsBuilder *a_settings_builder)
00154 {
00155 g_return_if_fail (a_settings_builder != NULL) ;
00156 g_return_if_fail (MLVIEW_IS_SETTINGS_BUILDER (a_settings_builder)) ;
00157 g_return_if_fail (PRIVATE (a_settings_builder) != NULL) ;
00158
00159 if (PRIVATE (a_settings_builder)->xml_document_settings_entry) {
00160 mlview_settings_entry_destroy (PRIVATE (a_settings_builder)->xml_document_settings_entry) ;
00161 PRIVATE (a_settings_builder)->xml_document_settings_entry = NULL ;
00162 }
00163 }
00164
00165
00169 static void
00170 mlview_settings_builder_build_xml_document_settings_entry (MlViewSettingsBuilder *a_settings_builder)
00171 {
00172 GHashTable * settings = NULL ;
00173 MlViewSettingsEntryHandlers * handlers ;
00174
00175 g_return_if_fail (a_settings_builder != NULL) ;
00176 g_return_if_fail (MLVIEW_IS_SETTINGS_BUILDER (a_settings_builder)) ;
00177 g_return_if_fail (PRIVATE (a_settings_builder) != NULL) ;
00178
00179
00180 settings = mlview_app_context_get_settings_hash_table (PRIVATE (a_settings_builder)->app_context) ;
00181 if (settings) {
00182 g_hash_table_insert (settings, (gpointer) MLVIEW_STG_K_IS_VALIDATION_ON,
00183 (gpointer) MLVIEW_STG_V_YES) ;
00184 }
00185
00186 if (PRIVATE (a_settings_builder)->xml_document_settings_entry == NULL) {
00187 PRIVATE (a_settings_builder)->xml_document_settings_entry =
00188 mlview_settings_entry_new (_("XML Documents"),
00189 settings,
00190 PRIVATE (a_settings_builder)->xml_document_settings_widget,
00191 &PRIVATE (a_settings_builder)->xml_document_settings_widget_struct);
00192
00193
00194
00195 handlers =
00196 mlview_settings_entry_get_handlers (PRIVATE (a_settings_builder)->xml_document_settings_entry) ;
00197
00198 handlers->notify_settings_changed =
00199 mlview_xml_document_settings_changed_notifier_handler ;
00200
00201 handlers->load_settings_from_xml_doc_into_settings_entry =
00202 mlview_xml_document_load_settings_from_xml_doc_into_settings_entry_handler ;
00203
00204 handlers->get_settings_from_settings_widget =
00205 mlview_xml_document_get_settings_from_settings_widget_handler ;
00206
00207 handlers->set_settings_to_settings_widget =
00208 mlview_xml_document_set_settings_to_settings_widget_handler ;
00209 }
00210 }
00211
00212
00213 static void
00214 mlview_xml_document_settings_changed_notifier_handler (MlViewSettingsEntry *a_settings, void * a_user_data)
00215 {
00216
00217 }
00218
00219
00220 static void
00221 mlview_xml_document_get_settings_from_settings_widget_handler (MlViewSettingsEntry * a_settings_entry)
00222 {
00223 GHashTable * settings ;
00224 XMLDocumentSettingsWidgetStruct * settings_widgets_struct ;
00225 gchar * depth_str ;
00226 g_return_if_fail (a_settings_entry != NULL) ;
00227
00228 settings = mlview_settings_entry_get_settings (a_settings_entry) ;
00229
00230 g_return_if_fail (settings != NULL) ;
00231 settings_widgets_struct = mlview_settings_entry_get_settings_widgets_struct (a_settings_entry) ;
00232 g_return_if_fail (settings_widgets_struct) ;
00233
00234
00235 depth_str =
00236 gtk_entry_get_text (settings_widgets_struct->tree_view_default_expansion_depth_entry) ;
00237
00238 if(depth_str != NULL && strcmp (depth_str,""))
00239 g_hash_table_insert (settings,
00240 (gpointer) MLVIEW_STG_K_DEFAULT_TREE_EXPANSION_LEVEL,
00241 depth_str) ;
00242
00243
00244
00245
00246 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (settings_widgets_struct->validation_on))) {
00247 g_hash_table_insert (settings,
00248 (gpointer) MLVIEW_STG_K_IS_VALIDATION_ON,
00249 (gpointer) MLVIEW_STG_V_YES) ;
00250 } else {
00251 g_hash_table_insert (settings,
00252 (gpointer) MLVIEW_STG_K_IS_VALIDATION_ON,
00253 (gpointer) MLVIEW_STG_V_NO) ;
00254 }
00255 }
00256
00257 static void
00258 mlview_xml_document_set_settings_to_settings_widget_handler (MlViewSettingsEntry * a_settings_entry)
00259 {
00260 GHashTable * settings = NULL ;
00261 XMLDocumentSettingsWidgetStruct * settings_widgets_struct = NULL ;
00262
00263 gchar * tmp_str = NULL ;
00264 g_return_if_fail (a_settings_entry != NULL) ;
00265
00266 settings = mlview_settings_entry_get_settings (a_settings_entry) ;
00267 g_return_if_fail (settings != NULL) ;
00268 settings_widgets_struct = mlview_settings_entry_get_settings_widgets_struct (a_settings_entry) ;
00269 g_return_if_fail (settings_widgets_struct) ;
00270
00271
00272 tmp_str = g_hash_table_lookup (settings, (gpointer) MLVIEW_STG_K_DEFAULT_TREE_EXPANSION_LEVEL) ;
00273
00274
00275 gtk_entry_set_text (settings_widgets_struct->tree_view_default_expansion_depth_entry, tmp_str) ;
00276
00277
00278 tmp_str = g_hash_table_lookup (settings, (gpointer) MLVIEW_STG_K_IS_VALIDATION_ON) ;
00279 if (!strcmp (tmp_str, MLVIEW_STG_V_YES))
00280 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (settings_widgets_struct->validation_on),
00281 TRUE) ;
00282 else
00283 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (settings_widgets_struct->validation_on),
00284 FALSE) ;
00285 }
00286
00287
00288 static void
00289 mlview_xml_document_load_settings_from_xml_doc_into_settings_entry_handler (MlViewSettingsEntry * a_settings_entry,
00290 xmlDoc * a_xml_doc)
00291 {
00292 #define NODE_SET_IS_NOT_EMPTY(xpath_object) ((xpath_object) \
00293 &&(xpath_object)->nodesetval \
00294 && (xpath_object)->nodesetval->nodeNr)
00295
00296 #define NODE_SET_GET_NODE(xpath_object,indice) ((xpath_object)->nodesetval->nodeTab[indice])
00297
00298 xmlXPathObject * xpath_object=NULL ;
00299 gchar * expansion_level_str = NULL, * validation_on_str = NULL ;
00300 GHashTable * settings = NULL ;
00301
00302 g_return_if_fail(a_settings_entry != NULL) ;
00303 g_return_if_fail(a_xml_doc != NULL) ;
00304
00305 if (!mlview_settings_management_get_settings_xml_nodes(&xpath_object,
00306 "/gMlView:Settings/gMlView:TreeView", a_xml_doc)) {
00307 if (NODE_SET_IS_NOT_EMPTY (xpath_object)) {
00308 xmlNode * node ;
00309 node = NODE_SET_GET_NODE (xpath_object,0) ;
00310 if (node) {
00311 expansion_level_str = xmlGetProp(node, "nodeExpansionLevel") ;
00312 }
00313 xmlXPathFreeObject(xpath_object) ;
00314 xpath_object = NULL ;
00315 }
00316 }
00317
00318 if (!mlview_settings_management_get_settings_xml_nodes(&xpath_object,
00319 "/gMlView:Settings/gMlView:Validation", a_xml_doc)){
00320 if (NODE_SET_IS_NOT_EMPTY(xpath_object)){
00321 xmlNode *node ;
00322 node = NODE_SET_GET_NODE(xpath_object, 0) ;
00323 if (node) {
00324 validation_on_str = xmlGetProp(node, "turnOn") ;
00325 }
00326 xmlXPathFreeObject(xpath_object) ;
00327 xpath_object = NULL ;
00328 }
00329 }
00330
00331
00332 settings = mlview_settings_entry_get_settings (a_settings_entry) ;
00333 g_return_if_fail (settings != NULL) ;
00334
00335 if (!strcmp (validation_on_str, "true"))
00336 g_hash_table_insert (settings, (gpointer) MLVIEW_STG_K_IS_VALIDATION_ON,
00337 (gpointer)MLVIEW_STG_V_YES) ;
00338 else
00339 g_hash_table_insert (settings, (gpointer) MLVIEW_STG_K_IS_VALIDATION_ON,
00340 (gpointer) MLVIEW_STG_V_NO) ;
00341
00342 g_hash_table_insert (settings, (gpointer) MLVIEW_STG_K_DEFAULT_TREE_EXPANSION_LEVEL,
00343 expansion_level_str) ;
00344
00345 }
00346
00347
00351 void
00352 mlview_settings_builder_destroy (GtkObject * a_object)
00353 {
00354 MlViewSettingsBuilder * settings_builder = NULL ;
00355
00356 g_return_if_fail (a_object != NULL) ;
00357 g_return_if_fail (MLVIEW_IS_SETTINGS_BUILDER (a_object)) ;
00358
00359 settings_builder = MLVIEW_SETTINGS_BUILDER (a_object) ;
00360
00361 mlview_settings_builder_destroy_xml_document_settings_entry (settings_builder) ;
00362
00363 if (PRIVATE (settings_builder)->settings_manager) {
00364 mlview_settings_manager_destroy (PRIVATE (settings_builder)->settings_manager) ;
00365 PRIVATE (settings_builder)->settings_manager = NULL ;
00366 }
00367 if (PRIVATE (settings_builder)) {
00368 g_free (PRIVATE (settings_builder)) ;
00369 PRIVATE (settings_builder) = NULL ;
00370 }
00371
00372
00373 if (GTK_OBJECT_CLASS (parent_class)->destroy)
00374 (*GTK_OBJECT_CLASS (parent_class)->destroy) (a_object) ;
00375 }
00376
00377
00378
00379
00380
00381
00382 MlViewSettingsBuilder *
00383 mlview_settings_builder_new (MlViewAppContext *a_app_context)
00384 {
00385 MlViewSettingsBuilder * settings_builder ;
00386
00387 settings_builder = gtk_type_new (MLVIEW_TYPE_SETTINGS_BUILDER) ;
00388 mlview_settings_builder_construct (settings_builder, a_app_context) ;
00389
00390 return settings_builder ;
00391 }
00392
00393
00394 gint
00395 mlview_settings_builder_get_type (void)
00396 {
00397 static guint settings_builder_type = 0 ;
00398
00399 if (!settings_builder_type) {
00400 static const GtkTypeInfo settings_builder_type_info = {
00401 "MlViewSettingsBuilder",
00402 sizeof (MlViewSettingsBuilder) ,
00403 sizeof (MlViewSettingsBuilderClass),
00404 (GtkClassInitFunc) mlview_settings_builder_init_class ,
00405 (GtkObjectInitFunc) mlview_settings_builder_init,
00406 NULL, NULL,NULL
00407 } ;
00408 settings_builder_type = gtk_type_unique (gtk_object_get_type (),
00409 &settings_builder_type_info) ;
00410 }
00411 return settings_builder_type ;
00412 }
00413
00414 void
00415 mlview_settings_builder_build_settings (MlViewSettingsBuilder * a_settings_builder)
00416 {
00417 xmlDoc * settings_xml_doc = NULL ;
00418
00419 g_return_if_fail (a_settings_builder != NULL) ;
00420 g_return_if_fail (MLVIEW_IS_SETTINGS_BUILDER (a_settings_builder)) ;
00421 g_return_if_fail (PRIVATE (a_settings_builder) != NULL) ;
00422
00423
00424 mlview_settings_builder_build_xml_document_settings_widget (a_settings_builder) ;
00425
00426
00427 mlview_settings_builder_build_xml_document_settings_entry (a_settings_builder) ;
00428 if (PRIVATE (a_settings_builder)->xml_document_settings_entry != NULL)
00429 mlview_settings_manager_install_settings (PRIVATE (a_settings_builder)->settings_manager,
00430 PRIVATE (a_settings_builder)->xml_document_settings_entry) ;
00431
00432
00433 if (!mlview_settings_manager_personal_settings_file_exists ()){
00434 gint settings_file_creation_status ;
00435 settings_file_creation_status =
00436 mlview_settings_manager_create_personal_settings_file (&settings_xml_doc) ;
00437 if (settings_file_creation_status != 0 || settings_xml_doc == NULL) {
00438 mlview_app_context_error (PRIVATE (a_settings_builder)->app_context,
00439 _("Could not create the user personal settings.\nPlease, Please, make sure you have write acces to your home directory")) ;
00440 exit (-1) ;
00441 }
00442
00443 }
00444
00445 if (!settings_xml_doc) {
00446 settings_xml_doc =
00447 mlview_settings_manager_load_settings_from_disk (PRIVATE (a_settings_builder)->settings_manager) ;
00448 }
00449 mlview_settings_manager_post_settings_install_init (PRIVATE (a_settings_builder)->settings_manager,settings_xml_doc) ;
00450 }
00451
00452 MlViewSettingsManager *
00453 mlview_settings_builder_get_settings_manager (MlViewSettingsBuilder * a_settings_builder)
00454 {
00455 g_return_val_if_fail (a_settings_builder != NULL, NULL) ;
00456 g_return_val_if_fail (MLVIEW_IS_SETTINGS_BUILDER (a_settings_builder), NULL) ;
00457 g_return_val_if_fail (PRIVATE (a_settings_builder) != NULL, NULL) ;
00458
00459 return PRIVATE (a_settings_builder)->settings_manager ;
00460 }