Libbonobo Reference Manual | ||||
---|---|---|---|---|
Top | Description | Object Hierarchy |
BonoboPersistFileBonoboPersistFile — Interface for anything that can save / load itself from a file. |
Synopsis
BonoboPersistFile; int (*BonoboPersistFileIOFn) (BonoboPersistFile *pf
,const CORBA_char *uri
,CORBA_Environment *ev
,void *closure
); BonoboPersistFileClass; BonoboPersistFile * bonobo_persist_file_new (BonoboPersistFileIOFn load_fn
,BonoboPersistFileIOFn save_fn
,const gchar *iid
,void *closure
); BonoboPersistFile * bonobo_persist_file_construct (BonoboPersistFile *pf
,BonoboPersistFileIOFn load_fn
,BonoboPersistFileIOFn save_fn
,const gchar *iid
,void *closure
);
Description
The PersistFile interface is a useful interface for Bonoboizing legacy applications, however, for new / correct applications it is far preferable to implement the BonoboPersistStream interface, since this will not only result in a nice clean to your application architecture, but also allow the transparent use of local, remote, and synthetic streams.
This interface works by connecting callbacks to the methods, in a pretty deprecated fashion, it is probably better nowadays to simply sub-class the BonoboXObject and override the epv methods. Either way, after all the caveats here is an example use:
Example 25. Persist file implementation
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
static gint load_from_file (BonoboPersistFile *pf, const CORBA_char *filename, CORBA_Environment *ev, void *closure) { EogImageData *image_data = closure; g_warning ("Load from '%s'", filename); return 0; /* Return 0 on success */ } static gint save_to_file (BonoboPersistFile *pf, const CORBA_char *filename, CORBA_Environment *ev, void *closure) { EogImageData *image_data = closure; g_warning ("Save to '%s'", filename); return 0; /* Return 0 on success */ } |
Having implemented the callbacks we then have to register them
and aggregate the interface to our object:
Example 26. Aggregating a new PersistFile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
EogImageData * eog_image_data_construct (EogImageData *image_data) { BonoboObject *retval; BonoboPersistFile *file; file = bonobo_persist_file_new ( load_from_file, save_to_file, image_data); if (file == NULL) { bonobo_object_unref (BONOBO_OBJECT (image_data)); return NULL; } bonobo_object_add_interface (BONOBO_OBJECT (image_data), BONOBO_OBJECT (file)); return image_data; } |
Note again, that you should be writing a BonoboPersistStream
interface, however if you have already done this you might like
to just have hooks through so that old apps can use the PersistFile
interface:
Example 27. Chaining to a PersistStream implementation
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
static gint load_from_file (BonoboPersistFile *pf, const CORBA_char *filename, CORBA_Environment *ev, void *closure) { Bonobo_PersistStream ps = closure; BonoboStream *stream; stream = bonobo_stream_open ( BONOBO_IO_DRIVER_FS, filename, Bonobo_STORAGE_READ, 0); if (!stream) return 0; .. extract content type from file ... Bonobo_PersistStream_load (ps, type, ev); return 0; /* Return 0 on success */ } static gint save_to_file (BonoboPersistFile *pf, const CORBA_char *filename, CORBA_Environment *ev, void *closure) { Bonobo_PersistStream ps = closure; BonoboStream *stream; stream = bonobo_stream_open ( BONOBO_IO_DRIVER_FS, filename, Bonobo_STORAGE_WRITE | Bonobo_STORAGE_CREATE, S_IRUSR | S_IWUSR | S_IRGRP); if (!stream) return 0; .. work out content type we want to save ... Bonobo_PersistStream_save (ps, type, ev); return 0; /* Return 0 on success */ } |
The mime type data can be extracted from gnome-vfs or gnome-mime.
Details
BonoboPersistFile
typedef struct _BonoboPersistFile BonoboPersistFile;
Warning
BonoboPersistFile
is deprecated and should not be used in newly-written code.
BonoboPersistFileIOFn ()
int (*BonoboPersistFileIOFn) (BonoboPersistFile *pf
,const CORBA_char *uri
,CORBA_Environment *ev
,void *closure
);
Warning
BonoboPersistFileIOFn
is deprecated and should not be used in newly-written code.
|
|
|
|
|
|
|
|
Returns : |
BonoboPersistFileClass
typedef struct { BonoboPersistClass parent_class; POA_Bonobo_PersistFile__epv epv; /* methods */ int (*load) (BonoboPersistFile *ps, const CORBA_char *uri, CORBA_Environment *ev); int (*save) (BonoboPersistFile *ps, const CORBA_char *uri, CORBA_Environment *ev); char *(*get_current_file) (BonoboPersistFile *ps, CORBA_Environment *ev); } BonoboPersistFileClass;
Warning
BonoboPersistFileClass
is deprecated and should not be used in newly-written code.
bonobo_persist_file_new ()
BonoboPersistFile * bonobo_persist_file_new (BonoboPersistFileIOFn load_fn
,BonoboPersistFileIOFn save_fn
,const gchar *iid
,void *closure
);
Warning
bonobo_persist_file_new
is deprecated and should not be used in newly-written code.
Creates a BonoboPersistFile object. The load_fn
and save_fn
parameters might be NULL. If this is the case, the load and save
operations are performed by the class load and save methods
|
Loading routine |
|
Saving routine |
|
OAF IID of the object this interface is aggregated to |
|
Data passed to IO routines. |
Returns : |
the BonoboPersistFile. |
bonobo_persist_file_construct ()
BonoboPersistFile * bonobo_persist_file_construct (BonoboPersistFile *pf
,BonoboPersistFileIOFn load_fn
,BonoboPersistFileIOFn save_fn
,const gchar *iid
,void *closure
);
Warning
bonobo_persist_file_construct
is deprecated and should not be used in newly-written code.
Initializes the BonoboPersistFile object. The load_fn
and save_fn
parameters might be NULL. If this is the case, the load and save
operations are performed by the class load and save methods
|
A BonoboPersistFile |
|
Loading routine |
|
Saving routine |
|
OAF IID of the object this interface is aggregated to |
|
Data passed to IO routines. |
Returns : |
the BonoboPersistFile. |