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:
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 3. Chaining to a PersistStream implementation
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.
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
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