Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals  

mlview-settings-builder.c

Go to the documentation of this file.
00001 /*This file is part of GNU MlView
00002  *
00003  *GNU 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  *GNU 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-2002 dodji seketeli
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 ; /*the default expansion depth of the xml tree.*/
00025         GtkCheckButton* validation_on ;
00026 } ;
00027 
00028 struct _MlViewSettingsBuilderPrivate {
00029         MlViewAppContext *app_context ;
00030         MlViewSettingsManager * settings_manager ;
00031 
00032         /*MlViewXMLDocument settings ...*/
00033         XMLDocumentSettingsWidgetStruct xml_document_settings_widget_struct ;
00034         MlViewSettingsEntry * xml_document_settings_entry ;
00035         GtkWidget * xml_document_settings_widget ;
00036 
00037         /*Settings of Other MlView parts come down here ...*/
00038 } ;
00039 
00040 
00041 #define PRIVATE(dialog) ((dialog)->private)
00042 
00043 static GtkObjectClass * parent_class = NULL ;
00044 
00045 
00046 /*private function of this class*/
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 ; /*overload the destroy method of GtkObject*/  
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         /*build the xml document related settings widget part*/
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         /*default node expansion level setting frame*/
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         /*Validation setting frame*/
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         //mlview_settings_builder_build_xml_document_settings_widget (a_settings_builder) ;
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          *set the handlers.
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         //do not have anything to do yet.
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         /*get "tree view depth expansion" setting*/
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          *get the "validation on" setting
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         /*set expansion depth*/
00272         tmp_str =  g_hash_table_lookup (settings, (gpointer) MLVIEW_STG_K_DEFAULT_TREE_EXPANSION_LEVEL) ;
00273         /*do not free this content of tmp_str !!*/
00274 
00275         gtk_entry_set_text (settings_widgets_struct->tree_view_default_expansion_depth_entry, tmp_str) ;
00276         
00277         /*set validation_on*/
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         /*set the settings*/
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         /*call the destroy method of the parent*/
00373         if (GTK_OBJECT_CLASS (parent_class)->destroy)
00374                 (*GTK_OBJECT_CLASS (parent_class)->destroy) (a_object) ;
00375 }
00376 
00377 /*=====================================================
00378  *Public Methods ...
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         /*build all the settings entries*/
00424         mlview_settings_builder_build_xml_document_settings_widget (a_settings_builder) ;
00425 
00426         /*install all the settings entries*/
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         /*if user mlview settings dir/files does not exist, create them*/
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 }

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