Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals  

mlview-app-context.c

Go to the documentation of this file.
00001 /*
00002  *This file is part of GNU MlView
00003  *
00004  *GNU MlView is free software; you can redistribute it and/or modify it under the terms of 
00005  *the GNU General Public License as published by the Free Software Foundation; either version 2, 
00006  *or (at your option) any later version.
00007  *
00008  *GNU MlView is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
00009  *without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00010  *See the GNU General Public License for more details.
00011  *
00012  *You should have received a copy of the GNU General Public License along with MlView; 
00013  *see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00014  *
00015  *
00016  *Copyright 2001-2002 Dodji Seketeli.
00017  */
00018 
00029 #include <stdarg.h>
00030 
00031 #include "mlview-app-context.h"
00032 #include "mlview-global-settings.h"
00033 #include "mlview-file-descriptor.h"
00034 
00035 
00039 struct _MlVAppContextPrivate{
00040 
00042         GHashTable *context_elements ;
00043 
00045         GHashTable *global_settings ;
00046 
00053         GHashTable *pixmaps_cache ;
00054         
00060         GHashTable *bitmaps_cache ;
00061 
00066         gchar *error_msg_buffer ;
00067 
00071         gchar *error_dialog_title ;
00072         
00077         MlViewFileSelection * file_sel ;
00078         
00082         xmlCatalog * xml_catalog ;
00083 
00084         /*
00085          *the last attribute id number 
00086          *part generated by mlview
00087          */
00088         gint last_id ;
00089 } ;
00090 
00091 
00095 #define PRIVATE(mlv_app_context) (mlv_app_context->private) 
00096 
00097 static void 
00098 mlview_app_context_init_class (MlViewAppContextClass *a_klass) ;
00099 
00100 static void 
00101 mlview_app_context_init(MlViewAppContext *a_ctxt) ;
00102 
00103 static void 
00104 mlview_app_context_destroy(GtkObject *a_object) ;
00105 
00106 static GtkObjectClass *
00107 p_parent_class=NULL ;
00108 
00109 static GtkObject * 
00110 mlview_app_context_new(void) ;
00111 
00112 static void 
00113 pixmaps_cache_foreach_func (gchar *a_key, GdkPixmap *a_value, gchar *user_data) ;
00114 
00115 static void 
00116 bitmaps_cache_foreach_func (gchar *a_key, GdkBitmap *a_value, gchar *user_data) ;
00117 
00118 /*=====================================================
00119  *Private methods imposed by the gtk object framework.
00120  *====================================================*/
00121 
00127 guint
00128 mlview_app_context_get_type (void)
00129 {
00130         static guint mlview_app_context_type=0 ;
00131         if(!mlview_app_context_type){
00132                 static const GtkTypeInfo t_info={
00133                         "MlViewAppContext",
00134                         sizeof (MlViewAppContext),
00135                         sizeof (MlViewAppContextClass),
00136                         (GtkClassInitFunc)mlview_app_context_init_class,
00137                         (GtkObjectInitFunc)mlview_app_context_init,
00138                         NULL,NULL,NULL
00139                 };
00140                 mlview_app_context_type=gtk_type_unique(GTK_TYPE_OBJECT,&t_info) ;
00141         }
00142         return mlview_app_context_type ;
00143 }
00144 
00149 static void
00150 mlview_app_context_init_class (MlViewAppContextClass *a_klass)
00151 {
00152         GtkObjectClass *object_class = GTK_OBJECT_CLASS (a_klass) ;
00153         p_parent_class = gtk_type_class (GTK_TYPE_OBJECT) ;
00154 
00155         object_class->destroy = mlview_app_context_destroy ;
00156 }
00157 
00158 
00165 static void
00166 mlview_app_context_init (MlViewAppContext *a_ctxt)
00167 {
00168         g_return_if_fail (a_ctxt != NULL) ;
00169 
00170         if (PRIVATE (a_ctxt) == NULL)
00171                 PRIVATE(a_ctxt) = g_malloc0(sizeof(MlVAppContextPrivate)) ;
00172 
00173         if (PRIVATE (a_ctxt)->global_settings == NULL)
00174                 PRIVATE (a_ctxt)->global_settings = g_hash_table_new (g_str_hash, g_str_equal) ;
00175 
00176         if (PRIVATE (a_ctxt)->context_elements == NULL)
00177                 PRIVATE (a_ctxt)->context_elements = g_hash_table_new (g_str_hash, g_str_equal) ;
00178 
00179         if (PRIVATE (a_ctxt)->pixmaps_cache == NULL)
00180                 PRIVATE (a_ctxt)->pixmaps_cache = g_hash_table_new (g_str_hash, g_str_equal) ;
00181 
00182         if (PRIVATE (a_ctxt)->bitmaps_cache == NULL)
00183                 PRIVATE (a_ctxt)->bitmaps_cache = g_hash_table_new (g_str_hash, g_str_equal) ;
00184 }
00185 
00186 
00192 static GtkObject *
00193 mlview_app_context_new (void)
00194 {
00195         MlViewAppContext * result ;
00196         result = gtk_type_new (MLVIEW_TYPE_APP_CONTEXT) ;
00197         return GTK_OBJECT(result) ;
00198 }
00199 
00200 
00209 MlViewAppContext * 
00210 mlview_app_context_get_instance (void)
00211 {
00212         static MlViewAppContext * app_context = NULL ;
00213 
00214         if ( ! app_context ) {
00215                 app_context = MLVIEW_APP_CONTEXT(mlview_app_context_new()) ;
00216         }
00217         return app_context ;
00218 }
00219 
00220 
00232 gint *
00233 mlview_app_context_get_last_id_ptr (MlViewAppContext *a_app_context)
00234 {
00235         g_return_val_if_fail (a_app_context != NULL, NULL) ;
00236         g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context), NULL) ;
00237         g_return_val_if_fail (PRIVATE (a_app_context) != NULL, NULL) ;
00238 
00239         return & PRIVATE (a_app_context)->last_id ;
00240 }
00241 
00242 
00250 gint
00251 mlview_app_context_get_last_id (MlViewAppContext *a_app_context)
00252 {
00253         g_return_val_if_fail (a_app_context != NULL, 0) ;
00254         g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context), 0) ;
00255         g_return_val_if_fail (PRIVATE (a_app_context) != NULL, 0) ;
00256 
00257         return PRIVATE (a_app_context)->last_id ;
00258 }
00259 
00260 
00268 void
00269 mlview_app_context_set_last_id (MlViewAppContext *a_app_context,
00270                                 gint a_new_id) 
00271 {
00272         g_return_if_fail (a_app_context != NULL) ;
00273         g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context)) ;
00274         g_return_if_fail (PRIVATE (a_app_context) != NULL) ;
00275 
00276         PRIVATE (a_app_context)->last_id  = a_new_id ;
00277 }
00278 
00279 
00294 void
00295 mlview_app_context_set_element (MlViewAppContext * a_context, 
00296                                 gchar *a_element_name, gpointer a_context_element)
00297 {
00298         g_return_if_fail (a_context != NULL) ;
00299         g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_context)) ;
00300         g_return_if_fail (PRIVATE(a_context) != NULL) ;
00301         g_return_if_fail (a_element_name != NULL) ;
00302 
00303         if ( PRIVATE (a_context)->context_elements == NULL )
00304                 PRIVATE (a_context)->context_elements = 
00305                         g_hash_table_new (g_str_hash, g_str_equal) ;
00306         g_hash_table_insert (PRIVATE (a_context)->context_elements,
00307                              a_element_name, a_context_element) ;
00308 }
00309 
00310 
00318 gpointer
00319 mlview_app_context_get_element (MlViewAppContext * a_context, 
00320                                 gchar * a_element_name)
00321 {
00322         g_return_val_if_fail (a_context != NULL, NULL) ;
00323         g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_context), NULL) ;
00324         g_return_val_if_fail (PRIVATE(a_context) != NULL, NULL) ;
00325         
00326         return g_hash_table_lookup (PRIVATE(a_context)->context_elements, 
00327                                     a_element_name) ;
00328 }
00329 
00330 
00336 void 
00337 mlview_app_context_sbar_push_message ( MlViewAppContext * a_context, 
00338                                        gchar * a_msg_format,...)
00339 {
00340         GnomeAppBar * app_bar ;
00341         GnomeApp * app ;
00342         va_list params ;
00343         gchar * msg = NULL ;
00344         
00345         
00346         if (a_context && PRIVATE(a_context)) {
00347                 app = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeApp") ;
00348                 app_bar = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeAppBar") ;
00349         }
00350         
00351         va_start (params, a_msg_format) ;
00352         msg = g_strdup_vprintf (a_msg_format, params) ;
00353         va_end (params) ;
00354 
00355         if ( msg && app && app_bar) {
00356                 gnome_appbar_push(app_bar, msg) ;
00357         } else if (msg && app ) {
00358                 gnome_app_message (app, msg) ;
00359         } else if (msg ) {
00360                 g_printerr (msg) ;
00361         }
00362 
00363         if (msg) {
00364                 g_free (msg) ;
00365                 msg = NULL ;
00366         }
00367 }
00368 
00369 
00378 void
00379 mlview_app_context_sbar_pop_message ( MlViewAppContext * a_context )
00380 {
00381         GnomeAppBar * app_bar=NULL ;
00382 
00383         if (a_context && PRIVATE(a_context)) {
00384                 app_bar = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeAppBar") ;
00385         }
00386        
00387         if (app_bar)
00388                 gnome_appbar_pop( app_bar ) ;   
00389 }
00390 
00391 
00399 void
00400 mlview_app_context_sbar_set_default_message (MlViewAppContext * a_context, 
00401                                              gchar *a_msg_format,... )
00402 {
00403         GnomeAppBar * app_bar = NULL ;
00404         va_list params ;
00405         gchar * msg = NULL ;
00406 
00407         if (a_context && PRIVATE(a_context)) {
00408                 app_bar = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeAppBar") ;
00409         }
00410 
00411         va_start (params, a_msg_format) ;
00412         msg = g_strdup_vprintf (a_msg_format, params) ;
00413         va_end (params) ;
00414                 
00415         if ( app_bar )
00416                 gnome_appbar_set_default (app_bar, msg) ;
00417 
00418         if (msg) {
00419                 g_free (msg) ;
00420                 msg = NULL ;
00421         }
00422 }
00423 
00424 
00432 void
00433 mlview_app_context_message (MlViewAppContext * a_context,
00434                             gchar *a_msg_format, ...)
00435 {
00436         GnomeApp * app=NULL ;
00437         va_list params ;
00438         gchar * msg = NULL ;
00439 
00440         if (a_context && PRIVATE(a_context))
00441                 app = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeApp") ;
00442         
00443         va_start (params, a_msg_format) ;
00444         msg = g_strdup_vprintf (a_msg_format, params) ;
00445         va_end (params) ;
00446 
00447         if ( msg && app ) {
00448                 gnome_app_message (app, msg) ;
00449         } else if ( msg ) {
00450                 g_printerr(msg) ;
00451                 return ;
00452         }
00453 
00454         if (msg) {
00455                 g_free (msg) ;
00456                 msg = NULL ;
00457         }
00458 }
00459 
00467 void 
00468 mlview_app_context_error (MlViewAppContext * a_context,
00469                           gchar *a_msg_format, ...)
00470 {
00471         GnomeApp *app = NULL ;
00472         va_list params ;
00473         gchar * err_msg = NULL;
00474 
00475         if ( a_context  && PRIVATE(a_context))
00476                 app = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeApp") ;  
00477 
00478         va_start (params, a_msg_format) ;
00479         err_msg = g_strdup_vprintf (a_msg_format, params) ;     
00480         va_end (params) ;
00481         
00482         /*Add a title to the error message if needed*/
00483         if ( err_msg && PRIVATE (a_context)->error_dialog_title ) {
00484                 gchar * tmp_str=err_msg ;               
00485                 err_msg = g_strconcat (PRIVATE (a_context)->error_dialog_title,  "\n", tmp_str, NULL) ;
00486                 g_free (tmp_str) ;
00487                 /*delete the error dialog title*/
00488                 g_free (PRIVATE (a_context)->error_dialog_title) ;
00489                 PRIVATE (a_context)->error_dialog_title = NULL ;
00490         }
00491 
00492         if ( app && err_msg ) {
00493                 gnome_app_error (app, err_msg) ;                
00494         } else if ( err_msg ) {
00495                 g_printerr (err_msg) ;
00496                 return ;
00497         }
00498         if ( err_msg ) 
00499                 g_free (err_msg) ;
00500 }
00501 
00502 
00515 void
00516 mlview_app_context_set_error_dialog_title (MlViewAppContext * a_context,
00517                                            gchar * a_title)
00518 {
00519         if ( !a_context || !PRIVATE (a_context) ) 
00520                 return ;
00521 
00522         if ( PRIVATE (a_context)->error_dialog_title ) {
00523                 g_free (PRIVATE (a_context)->error_dialog_title) ;
00524                 PRIVATE (a_context)->error_dialog_title = NULL ;
00525         }
00526 
00527         if ( a_title )
00528                 PRIVATE (a_context)->error_dialog_title = 
00529                         g_strdup ( a_title) ;
00530         else
00531                 PRIVATE (a_context)->error_dialog_title = NULL ;
00532 }
00533 
00534 
00541 gchar *
00542 mlview_app_context_get_error_dialog_title ( MlViewAppContext * a_context )
00543 {
00544         if ( !a_context || !PRIVATE (a_context) )
00545                 return NULL ;
00546 
00547         return PRIVATE (a_context)->error_dialog_title ;
00548 }
00549 
00550 
00565 void
00566 mlview_app_context_bufferize_error (MlViewAppContext * a_context,
00567                                     gchar * a_msg_format, 
00568                                     ...)
00569 {
00570         GnomeApp *app = NULL ;
00571         va_list params ;
00572         gchar * temp_err_msg = NULL ;
00573 
00574         if ( a_context && PRIVATE (a_context))
00575                 app = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeApp") ;
00576 
00577         va_start (params, a_msg_format) ;
00578         temp_err_msg = g_strdup_vprintf (a_msg_format, params) ;
00579         va_end (params) ;
00580 
00581         if ( app && temp_err_msg ) {
00582                 if ( !PRIVATE (a_context)->error_msg_buffer )
00583                         PRIVATE (a_context)->error_msg_buffer = g_strdup (temp_err_msg) ;
00584                 else {
00585                         gchar *old_str = PRIVATE (a_context)->error_msg_buffer ;
00586                         PRIVATE (a_context)->error_msg_buffer = g_strconcat (PRIVATE (a_context)->error_msg_buffer, 
00587                                                                              temp_err_msg,
00588                                                                              NULL) ;
00589                         g_free (old_str) ;
00590                 }
00591         } else if ( temp_err_msg) {
00592                 g_printerr (temp_err_msg) ;
00593         }
00594         if ( temp_err_msg )
00595                 g_free (temp_err_msg) ;
00596 }
00597 
00598 
00606 void
00607 mlview_app_context_display_buffered_error (MlViewAppContext * a_context)
00608 {
00609 
00610         if ( !a_context  || !PRIVATE(a_context) || !PRIVATE (a_context)->error_msg_buffer )
00611                 return  ;
00612 
00613         mlview_app_context_error (a_context, PRIVATE (a_context)->error_msg_buffer) ;
00614         g_free (PRIVATE (a_context)->error_msg_buffer) ;
00615         PRIVATE (a_context)->error_msg_buffer = NULL ;
00616 }
00617 
00626 gboolean
00627 mlview_app_context_error_buffer_is_empty (MlViewAppContext *a_context)
00628 {
00629         g_return_val_if_fail (a_context != NULL, TRUE) ;
00630         g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT(a_context), TRUE) ;
00631         g_return_val_if_fail (PRIVATE (a_context) != NULL, TRUE) ;
00632 
00633         return ( PRIVATE(a_context)->error_msg_buffer == NULL  ||  !strcmp (PRIVATE(a_context)->error_msg_buffer, "")) ;
00634 }
00635 
00636 
00645 void 
00646 mlview_app_context_warning (MlViewAppContext *a_context,
00647                             gchar * a_msg_format, ...)
00648 {       
00649         GnomeApp *app = NULL ;
00650         va_list params ;
00651         gchar * warning_msg = NULL ;
00652 
00653         if ( a_context && PRIVATE (a_context))
00654                 app = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeApp") ;
00655 
00656         va_start (params, a_msg_format) ;
00657         warning_msg = g_strdup_vprintf (a_msg_format, params) ;
00658         va_end (params) ;
00659 
00660         if ( app && warning_msg ) {
00661                 gnome_app_warning (app, warning_msg) ;
00662         } else if ( warning_msg ) {
00663                 g_printerr (warning_msg) ;
00664         }
00665 
00666         if ( warning_msg ) 
00667                 g_free (warning_msg) ;
00668 }
00669 
00670 
00683 GHashTable *
00684 mlview_app_context_get_settings_hash_table (MlViewAppContext *a_context)
00685 {
00686         g_return_val_if_fail (a_context != NULL, NULL) ;
00687         g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_context), NULL) ;
00688         g_return_val_if_fail (PRIVATE (a_context) != NULL, NULL) ;
00689         
00690         return PRIVATE (a_context)->global_settings ;
00691 }
00692 
00707 void
00708 mlview_app_context_set_settings_hash_table (MlViewAppContext *a_context,
00709                                             GHashTable *a_settings)
00710 {
00711         g_return_if_fail (a_context != NULL) ;
00712         g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_context)) ;
00713         g_return_if_fail (PRIVATE (a_context) != NULL) ;
00714         
00715         PRIVATE (a_context)->global_settings = a_settings ;
00716 }
00717 
00718 
00725 gboolean
00726 mlview_app_context_settings_exist (MlViewAppContext * a_app_context)
00727 {
00728         g_return_val_if_fail (a_app_context != NULL, FALSE) ;
00729         g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context), FALSE) ;
00730         g_return_val_if_fail (PRIVATE (a_app_context) != NULL, FALSE) ;
00731 
00732         if (PRIVATE (a_app_context)->global_settings)
00733                 return TRUE ;
00734 
00735         return FALSE ;
00736 }
00737 
00748 gchar *
00749 mlview_app_context_get_settings_value (MlViewAppContext *a_app_context,
00750                                        const gchar * a_key)
00751 {
00752         g_return_val_if_fail (a_app_context != NULL, NULL) ;
00753         g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context), NULL) ;
00754         g_return_val_if_fail (PRIVATE (a_app_context) != NULL, NULL) ;
00755 
00756         if (PRIVATE (a_app_context)->global_settings)
00757                 return g_hash_table_lookup (PRIVATE (a_app_context)->global_settings, a_key) ;
00758 
00759         return NULL ;
00760 }
00761 
00772 void
00773 mlview_app_context_set_settings_value (MlViewAppContext * a_app_context,
00774                                        const gchar * a_key, const gchar *a_value)
00775 {
00776         g_return_if_fail (a_app_context != NULL) ;
00777         g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context)) ;
00778         g_return_if_fail (PRIVATE (a_app_context) != NULL) ;
00779         
00780         if (PRIVATE (a_app_context)->global_settings) {
00781                 g_hash_table_insert (PRIVATE (a_app_context)->global_settings,
00782                                      (gpointer) a_key, (gpointer) a_value) ;
00783         }
00784 }
00785 
00786 
00798 MlViewFileSelection *
00799 mlview_app_context_get_file_selector (MlViewAppContext * a_app_context,
00800                                       const gchar * a_title) {
00801 
00802         g_return_val_if_fail (a_app_context != NULL, NULL) ;
00803         g_return_val_if_fail (PRIVATE (a_app_context) != NULL, NULL) ;
00804 
00805         if (!PRIVATE (a_app_context)->file_sel ) {
00806                 PRIVATE (a_app_context)->file_sel = 
00807                         MLVIEW_FILE_SELECTION (mlview_file_selection_new ()) ;
00808 
00809                 gtk_window_set_wmclass (GTK_WINDOW (PRIVATE (a_app_context)->file_sel), "file-selection-dialog", "MlView") ;
00810                 gtk_widget_realize (GTK_WIDGET (PRIVATE (a_app_context)->file_sel)) ;
00811                 mlview_app_context_set_window_icon (a_app_context,
00812                                                     GTK_WIDGET (PRIVATE (a_app_context)->file_sel)) ;
00813                 
00814         }
00815 
00816         if ( a_title && strcmp (a_title, ""))
00817                 gtk_window_set_title (GTK_WINDOW (PRIVATE (a_app_context)->file_sel), a_title) ;        
00818 
00819         return  PRIVATE (a_app_context)->file_sel ;
00820 }
00821 
00822 
00832 void
00833 mlview_app_context_set_window_icon (MlViewAppContext *a_app_context,
00834                                     GtkWidget * a_widget)
00835                             
00836 {
00837         gchar * icon_path = NULL ;
00838         GdkPixmap * pixmap = NULL ;
00839         GdkBitmap * mask = NULL ;
00840 
00841         g_return_if_fail (a_app_context != NULL) ;
00842         g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context)) ;
00843         g_return_if_fail (a_widget != NULL) ;
00844         g_return_if_fail (a_widget->window != NULL) ;
00845 
00846 
00847         /*load application icon*/
00848         icon_path =
00849                 mlview_app_context_get_settings_value (a_app_context,
00850                                                        MLVIEW_STG_K_ICON_PATH) ;
00851 
00852         if (icon_path) {
00853                 pixmap = gdk_pixmap_create_from_xpm (a_widget->window, &mask,
00854                                                      NULL, icon_path) ;
00855                 if (pixmap)
00856                         gdk_window_set_icon (a_widget->window,
00857                                              a_widget->window, pixmap, mask) ;
00858         }
00859 }
00860 
00861 
00872 gint
00873 mlview_app_context_get_xpm (MlViewAppContext *a_app_context, gchar * a_xpm_name,
00874                             GdkPixmap **a_pixmap, GdkBitmap **a_bitmap)
00875 {
00876         enum ReturnStatus {
00877                 OK,
00878                 BAD_PARAM,
00879                 FILE_NOT_READABLE,
00880                 COULD_NOT_LOAD_PIXMAP
00881         } ;
00882 
00883         gchar *pixmap_dir = NULL ;
00884 
00885         gchar *real_xpm_name = NULL ;
00886 
00887         gchar * pixmap_file = NULL ;
00888 
00889         MlViewFileDescriptor *file_desc=NULL ;
00890 
00891         gboolean is_readable = FALSE ;
00892 
00893         GtkWidget *app = NULL ;
00894 
00895         g_return_val_if_fail (a_app_context != NULL, BAD_PARAM) ;
00896         g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context), BAD_PARAM) ;
00897         g_return_val_if_fail (PRIVATE (a_app_context) != NULL, BAD_PARAM) ;
00898         g_return_val_if_fail (PRIVATE (a_app_context)->pixmaps_cache, BAD_PARAM) ;
00899         g_return_val_if_fail (PRIVATE (a_app_context)->bitmaps_cache, BAD_PARAM) ;
00900         g_return_val_if_fail (a_pixmap != NULL, BAD_PARAM) ;
00901         g_return_val_if_fail (a_bitmap != NULL, BAD_PARAM) ;
00902 
00903         *a_pixmap = NULL ;
00904         *a_bitmap = NULL ;
00905 
00906         real_xpm_name = mlview_app_context_get_settings_value (a_app_context, a_xpm_name) ;
00907 
00908         g_return_val_if_fail (real_xpm_name != NULL, BAD_PARAM) ;
00909 
00910         /*first look in the cache*/
00911         *a_pixmap = g_hash_table_lookup (PRIVATE (a_app_context)->pixmaps_cache, real_xpm_name) ;
00912         *a_bitmap = g_hash_table_lookup (PRIVATE (a_app_context)->bitmaps_cache, real_xpm_name) ;
00913 
00914         if (*a_pixmap == NULL) {
00915 
00916                 app = mlview_app_context_get_element (a_app_context, "GnomeApp") ;
00917 
00918                 g_return_val_if_fail (app != NULL, BAD_PARAM) ;
00919                 g_return_val_if_fail (app->window != NULL, BAD_PARAM) ;
00920 
00921                 pixmap_dir =
00922                         mlview_app_context_get_settings_value (a_app_context, MLVIEW_STG_K_PIXMAPS_DIR) ;
00923 
00924                 pixmap_file = g_strconcat (pixmap_dir,"/", real_xpm_name ,".xpm", NULL) ;
00925 
00926                 file_desc = mlview_file_descriptor_new (pixmap_file) ;
00927                 
00928                 g_return_val_if_fail (file_desc != NULL, BAD_PARAM) ;
00929 
00930                 if (!mlview_file_descriptor_is_readable (file_desc, &is_readable) && is_readable == TRUE)
00931                         *a_pixmap = gdk_pixmap_create_from_xpm (app->window, a_bitmap, NULL, pixmap_file) ;
00932                 else {
00933                         mlview_file_descriptor_destroy (file_desc) ;
00934                         return FILE_NOT_READABLE ;
00935                 }
00936 
00937                 g_free (pixmap_file) ;
00938                 pixmap_file = NULL ;
00939 
00940                 mlview_file_descriptor_destroy (file_desc) ;
00941                 file_desc = NULL ;
00942 
00943                 if (!*a_pixmap)
00944                         return COULD_NOT_LOAD_PIXMAP ;
00945 
00946                 g_hash_table_insert (PRIVATE (a_app_context)->pixmaps_cache, real_xpm_name, *a_pixmap) ;
00947                 g_hash_table_insert (PRIVATE (a_app_context)->bitmaps_cache, real_xpm_name, *a_bitmap) ;
00948         }
00949         return OK ;
00950 }
00951 
00952 
00960 void
00961 mlview_app_context_set_window_transient_for_app (MlViewAppContext *a_app_context,
00962                                                  GtkWindow *a_window)
00963 {
00964         GnomeApp * app = NULL ;
00965 
00966         g_return_if_fail (a_app_context != NULL) ;
00967         g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context)) ;
00968         g_return_if_fail (a_window != NULL) ;
00969         g_return_if_fail (GTK_IS_WINDOW (a_window)) ;
00970 
00971         app = mlview_app_context_get_element (a_app_context, "GnomeApp") ;
00972         g_return_if_fail (app != NULL) ;
00973         g_return_if_fail (GNOME_IS_APP (app)) ;
00974 
00975         gtk_window_set_transient_for (a_window, GTK_WINDOW (app)) ;
00976 }
00977 
00986 void
00987 mlview_app_context_set_xml_catalog (MlViewAppContext *a_app_context,
00988                                     xmlCatalog * a_xml_catalog) 
00989 {
00990         g_return_if_fail (a_app_context != NULL) ;
00991         g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context)) ;
00992         g_return_if_fail (PRIVATE (a_app_context) != NULL) ;
00993 
00994         PRIVATE (a_app_context)->xml_catalog = a_xml_catalog ;
00995 }
00996 
00997 
01006 xmlCatalog *
01007 mlview_app_context_get_xml_catalog (MlViewAppContext *a_app_context)
01008 {
01009         g_return_val_if_fail (a_app_context != NULL, NULL) ;
01010         g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context), NULL) ;
01011         g_return_val_if_fail (PRIVATE (a_app_context) != NULL, NULL) ;
01012 
01013         return (PRIVATE (a_app_context)->xml_catalog) ;
01014 }
01015 
01016 static void
01017 pixmaps_cache_foreach_func (gchar *a_key, GdkPixmap *a_value, gchar *user_data)
01018 {
01019         gdk_pixmap_unref (a_value) ;
01020 }
01021 
01022 static void
01023 bitmaps_cache_foreach_func (gchar *a_key, GdkBitmap *a_value, gchar *user_data)
01024 {
01025         gdk_bitmap_unref (a_value) ;
01026 }
01027 
01028 
01029 /*
01030  *The destroy method associated to this class. 
01031  *
01032  *@param a_object the instance of MlViewAppContext to be destroyed.
01033  *
01034  */
01035 static void
01036 mlview_app_context_destroy (GtkObject *a_object)
01037 {
01038         MlViewAppContext *ctxt ;
01039 
01040         g_return_if_fail (a_object) ;
01041 
01042         ctxt = MLVIEW_APP_CONTEXT (a_object) ;
01043 
01044         g_return_if_fail (PRIVATE(ctxt)) ;
01045 
01046         if ( PRIVATE (ctxt)->context_elements ){
01047                 g_hash_table_destroy (PRIVATE (ctxt)->context_elements) ;
01048         }
01049 
01050         if (PRIVATE (ctxt)->global_settings) {
01051                 g_hash_table_destroy (PRIVATE (ctxt)->global_settings) ;
01052                 PRIVATE (ctxt)->global_settings = NULL ;
01053         }
01054 
01055         if (PRIVATE (ctxt)->pixmaps_cache) {
01056                 g_hash_table_foreach (PRIVATE (ctxt)->pixmaps_cache,
01057                                        (GHFunc)pixmaps_cache_foreach_func, NULL) ;
01058                 PRIVATE (ctxt)->pixmaps_cache = NULL ;
01059         }
01060         
01061         if (PRIVATE (ctxt)->bitmaps_cache) {
01062                 g_hash_table_foreach (PRIVATE (ctxt)->pixmaps_cache,
01063                                        (GHFunc)bitmaps_cache_foreach_func, NULL) ;
01064                 PRIVATE (ctxt)->bitmaps_cache = NULL ;
01065         }
01066 
01067         if ( PRIVATE (ctxt) ){
01068                 g_free (PRIVATE(ctxt)) ;
01069         }
01070 
01071         if ( GTK_OBJECT_CLASS (p_parent_class)->destroy ){
01072                 GTK_OBJECT_CLASS (p_parent_class)->destroy (a_object) ;
01073         }
01074 }

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