| Bonobo API Reference Manual | |||
|---|---|---|---|
| <<< Previous Page | Home | Up | Next Page >>> |
struct BonoboPersistFile; int (*BonoboPersistFileIOFn) ( |
|
The PersistFile interface is a useful interface for Bonoboizing
legacy applications, however, for new / correct applications it
is far preferable to implement the
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 1. Persist file implementation
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 */
}
|
Example 2. Aggregating a new PersistFile
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;
}
|
Example 3. Chaining to a
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 */
}
|
int (*BonoboPersistFileIOFn) ( |
| pf : | |
| filename : | |
| ev : | |
| closure : | |
| Returns : |
|
typedef struct {
BonoboPersistClass parent_class;
POA_Bonobo_PersistFile__epv epv;
/* methods */
int (*load) (BonoboPersistFile *ps,
const CORBA_char *filename,
CORBA_Environment *ev);
int (*save) (BonoboPersistFile *ps,
const CORBA_char *filename,
CORBA_Environment *ev);
char *(*get_current_file) (BonoboPersistFile *ps,
CORBA_Environment *ev);
} BonoboPersistFileClass; |
void bonobo_persist_file_set_dirty ( |
| ps : | |
| dirty : |
|
|
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
| load_fn : | Loading routine |
| save_fn : | Saving routine |
| closure : | Data passed to IO routines. |
| Returns : |
|
|
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
| ps : | |
| load_fn : | Loading routine |
| save_fn : | Saving routine |
| closure : | Data passed to IO routines. |
| Returns : |