Whole document tree
BonoboPersistStream
Name BonoboPersistStream -- Interface for anything that can save / load itself from a Bonobo stream.
Synopsis
struct BonoboPersistStream ;
void (*BonoboPersistStreamIOFn ) (BonoboPersistStream *ps,
const Bonobo_Stream stream,
Bonobo_Persist_ContentType type,
void *closure,
CORBA_Environment *ev);
CORBA_long (*BonoboPersistStreamMaxFn ) (BonoboPersistStream *ps,
void *closure,
CORBA_Environment *ev);
Bonobo_Persist_ContentTypeList* (*BonoboPersistStreamTypesFn )
(BonoboPersistStream *ps,
void *closure,
CORBA_Environment *ev);
typedef BonoboPersistStreamClass ;
void bonobo_persist_stream_set_dirty (BonoboPersistStream *ps,
gboolean dirty);
BonoboPersistStream* bonobo_persist_stream_new
(BonoboPersistStreamIOFn load_fn,
BonoboPersistStreamIOFn save_fn,
BonoboPersistStreamMaxFn max_fn,
BonoboPersistStreamTypesFn types_fn,
void *closure);
BonoboPersistStream* bonobo_persist_stream_construct
(BonoboPersistStream *ps,
BonoboPersistStreamIOFn load_fn,
BonoboPersistStreamIOFn save_fn,
BonoboPersistStreamMaxFn max_fn,
BonoboPersistStreamTypesFn types_fn,
void *closure);
Description The PersistStream interface is the interface to use for all new
components that are able to load and save themselves to a stream.
It should be associated with any BonoboEmbeddable for use by the
container in creating a compound document.
This interface works by connecting callbacks to the methods, in
a somewhat 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. Implementing the PersistStream callbacks
static void
load_from_stream (BonoboPersistStream *ps,
const Bonobo_Stream stream,
Bonobo_Persist_ContentType type,
void *closure,
CORBA_Environment *ev)
{
EogImageData *image_data = closure;
g_warning ("Load content from stream of type 's '", type);
}
static gint
save_to_stream (BonoboPersistStream *ps,
const Bonobo_Stream stream,
Bonobo_Persist_ContentType type,
void *closure,
CORBA_Environment *ev)
{
EogImageData *image_data = closure;
g_warning ("Save content to stream with type 's '", type);
}
static Bonobo_Persist_ContentTypeList *
get_supported_types (BonoboPersistStream *ps,
void *closure,
CORBA_Environment *ev)
{
return bonobo_persist_generate_content_types (
2, "text/plain", "text/html");
}
Having implemented the callbacks we then have to register them
and aggregate the interface to our object:
Example 2. Aggregating a new PersistStream
EogImageData *
eog_image_data_construct (EogImageData *image_data)
{
BonoboObject *retval;
BonoboPersistStream *ps;
ps = bonobo_persist_stream_new (
load_from_stream, save_to_stream,
get_supported_types, NULL,
image_data);
if (ps == NULL) {
bonobo_object_unref (BONOBO_OBJECT (image_data));
return NULL;
}
bonobo_object_add_interface (BONOBO_OBJECT (image_data),
BONOBO_OBJECT (ps));
return image_data;
}
Details struct BonoboPersistStreamstruct BonoboPersistStream;
BonoboPersistStreamIOFn ()void (*BonoboPersistStreamIOFn) (BonoboPersistStream *ps,
const Bonobo_Stream stream,
Bonobo_Persist_ContentType type,
void *closure,
CORBA_Environment *ev);
BonoboPersistStreamMaxFn ()CORBA_long (*BonoboPersistStreamMaxFn) (BonoboPersistStream *ps,
void *closure,
CORBA_Environment *ev);
BonoboPersistStreamTypesFn ()Bonobo_Persist_ContentTypeList* (*BonoboPersistStreamTypesFn)
(BonoboPersistStream *ps,
void *closure,
CORBA_Environment *ev);
BonoboPersistStreamClasstypedef struct {
BonoboPersistClass parent_class;
POA_Bonobo_PersistStream__epv epv;
/* methods */
void (*load) (BonoboPersistStream *ps,
Bonobo_Stream stream,
Bonobo_Persist_ContentType type,
CORBA_Environment *ev);
void (*save) (BonoboPersistStream *ps,
Bonobo_Stream stream,
Bonobo_Persist_ContentType type,
CORBA_Environment *ev);
CORBA_long (*get_size_max) (BonoboPersistStream *ps,
CORBA_Environment *ev);
Bonobo_Persist_ContentTypeList * (*get_content_types) (BonoboPersistStream *ps,
CORBA_Environment *ev);
} BonoboPersistStreamClass;
bonobo_persist_stream_set_dirty ()void bonobo_persist_stream_set_dirty (BonoboPersistStream *ps,
gboolean dirty);
This routine sets the dirty bit for the PersistStream object.
bonobo_persist_stream_new ()Creates a new BonoboPersistStream object. The various operations
for the object are performed by the provided callback functions,
which are passed closure when they are invoked. If any callback is
NULL , the corresponding operation is performed by the class load
and save routines.
bonobo_persist_stream_construct ()Initializes the BonoboPersistStream object. The load and save
operations for the object are performed by the provided load_fn
and save_fn callback functions, which are passed closure when
they are invoked. If either load_fn or save_fn is NULL , the
corresponding operation is performed by the class load and save
routines.