Shelf Functions
Availability LightWave 6.0
Component Layout, Modeler
Header lwshelf.h
The shelf is a window where users can store and retrieve presets for your plug-in. The
shelf API supplies functions that let you subscribe (connect), set the context (tell the
shelf that your interface is the active one), open the shelf window, and add, load and
save presets.
For some plug-in classes, you don't need to call this global in order to gain access to
the shelf's preset management. Beginning with LightWave 7.0, the user can load and save
presets for your plug-in through the VIPER (Versatile Interactive Preview Render)
interface. Presets can be added to the shelf or loaded into your plug-in through calls to
your regular handler load and save callbacks.
Global Call
LWShelfFuncs *shelff;
shelff = global( LWSHELFFUNCS_GLOBAL, GFUSE_TRANSIENT );
The global function returns a pointer to an LWShelfFuncs.
typedef struct st_LWSHELFFUNCS {
LWShelfCltID (*subscribe)(char *name, char *subName,
void *userData, int flags,
LWShelfLoadOkFunc *,
LWShelfLoadFunc *,
LWShelfSaveFunc *);
void (*unsubscribe) (LWShelfCltID);
void (*open) (LWShelfCltID);
int (*isOpen) (LWShelfCltID clt);
void (*close) (LWShelfCltID);
void (*setContext) (LWShelfCltID);
int (*addPreset) (LWShelfCltID, LWPixmapID img,
LWShelfParmList parms);
void (*load) (LWShelfCltID, char *filename,
int prompt_user);
void (*save) (LWShelfCltID, char *filename,
LWImageID thumimg, LWShelfParmList);
int (*addNamedPreset)(LWShelfCltID clt, LWPixmapID img,
LWShelfParmList parms, const char *name,
const char *comment );
} LWShelfFuncs;
- client = subscribe( class, server, userdata, flags, loadok, load, save
)
- Initialize the interaction between a plug-in instance and the shelf. The client ID
returned by this function is passed as the first argument to all of the others. The user
data, typically the instance data for handlers, will be passed as the first argument to
the three callbacks. The flags argument is a set of flag bits combined using bitwise-or.
They indicate what kind of preset loading and saving the plug-in supports and can be any
combination of the following.
SHLF_BIN
- Saves to and loads from binary files.
- SHLF_ASC
- Saves to and loads from ASCII (text) files
- SHLF_SEP
- Saves to and loads from separate (non-LightWave) files.
unsubscribe( client )
- Conclude your instance's use of the shelf. You should call this before your instance is
destroyed.
open( client )
- Open the preset shelf window and set the context to your plug-in. The window will
display only the presets for your plug-in.
open = isOpen( client )
- Returns true if the shelf window is open.
close( client )
- Close the shelf window.
setContext( client )
- Set the shelf context.
index = addPreset( client, img, params )
- Add a preset to the shelf. The img is the preset's thumbnail in the shelf
window, created using the Image Utility functions. The params
are passed as a NULL-terminated array of strings (tags) that you can use in your shelf
load callback to tell which parameters in this preset should be loaded. In the simplest
case, params will be NULL.
addPreset is implemented as a call to addNamedPreset,
which is passed a default name generated by the shelf system. New code should call addNamedPreset
directly.
- load( client, filename, prompt_user )
save( client, filename, thumb_img, params )
- Load or save a preset in an external file. Presets are ordinarily stored in a file
managed by the shelf system, but you can use these functions to load and save presets in
files you name. For loading, if prompt_user is true and the preset contains a
parameter list (params was non-NULL when save was called for the
preset), the user is prompted for input.
index = addNamedPreset( client, img, params, name, comment )
- Add a named preset to the shelf. Like addPreset, but you can also specify a
name and a comment that will help the user identify the preset.
Callbacks
The last three arguments to the subscribe function are callbacks that the
shelf calls when a preset is to be loaded or saved. The shelf system calls these to
actually load and save the preset. For all three callbacks, the first argument is the user
data you passed to subscribe.
typedef int LWShelfLoadOkFunc (void *userdata);
typedef void LWShelfLoadFunc (void *userdata, const LWLoadState *,
const char *filename,
LWShelfParmList);
typedef void LWShelfSaveFunc (void *userdata, const LWSaveState *,
const char *filename );
- LWShelfLoadOkFunc
- Returns a code that tells the shelf system whether to load the preset and whether the
user should be prompted first. The code can be one of the following.
SHLC_NOWAY
- Do not load. Your plug-in should tell the user why.
- SHLC_DFLT
- Display the default confirmation dialog.
- SHLC_FORCE
- Load without consulting the user.
Your plug-in can display its own confirmation dialog and then return NOWAY or FORCE
as appropriate, but you'll lose the ability to use parameter lists to selectively load
parameters from your presets.
- LWShelfLoadFunc
- Load the preset. The shelf calls this when the user double-clicks on a preset thumbnail
in the shelf window, or when you call the load function to load a preset from a
file. In the first case, the filename argument will be NULL, and you'll read the
preset's parameters by calling the LWLoadState functions.
Typically, handlers pass this job on to their handler load
callback. In the second case, the LWLoadState will be NULL, and you'll read the preset
from the file named in filename. You can still pass this on to your handler's
load callback by creating an LWLoadState for the preset file using the File I/O global.
The parameter list is an array of strings. It
contains a subset of the parameter list you passed to addPreset, addNamedPreset
or save. The default load confirmation dialog presents the list to the user and
allows the user to select parameters. Only selected parameters are passed to your load
callback. You can use the selections to load only portions of a preset.
- LWShelfSaveFunc
- Save the preset. The shelf calls this when you call addPreset, addNamedPreset
or save. When adding a preset to the shelf, the filename argument will
be NULL, and you'll store the preset's parameters by calling the LWSaveState
functions. Typically, handlers pass this job on to their
handler save callback. When saving a preset to a file, the LWSaveState will be NULL, and
you'll write the preset to the file named in filename. You can still pass this on
to your handler's save callback by creating an LWSaveState for the preset file using the File I/O global.
The parameter list is an array of strings
representing parameters or groups of parameters in your preset data. When the preset is
reloaded, the user can select from this list of named parameters, and the user's selection
will be passed to the load callback.
Example
The shelf SDK sample is a Master plug-in that
demonstrates the shelf functions. (This is all it does, in fact.) The plug-in's
"data" is merely a color. The interface lets you add color presets to the shelf
or save them in separate files. You can then load them back into the plug-in's handler
instance. |