123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- /*
- * LWSDK Header File
- * Copyright 1999, NewTek, Inc.
- *
- * LWMONITOR.H -- LightWave Progress Monitor
- *
- * Monitors are simple data structures defining an interface which the
- * server can use to give feedback to the host on its progress in
- * performing some task. They are sometimes passed servers to give
- * feedback on the progress of the particular operation, and can sometimes
- * be accessed from within a server that wants to show its progress on a
- * slow operation using the host's normal feedback display.
- */
- #ifndef LWSDK_MONITOR_H
- #define LWSDK_MONITOR_H
- /*
- * An LWMonitor struct consists of some generic data and three functions:
- * init, step and done. The 'init' function is called first with the
- * number of steps in the process to be monitored, which is computed by
- * the server. As the task is processed, the 'step' function is called
- * with the number of steps just completed (often one). These step
- * increments should eventually add up to the total number and then the
- * 'done' function is called, but 'done' may be called early if there was
- * a problem or the process was aborted. The 'step' function will return
- * one if the user requested an abort and zero otherwise.
- *
- * The server is masked from any errors in the monitor that may occur on
- * the host side of the interface. If there is a problem with putting up
- * a monitor, the functions will still return normally, since the monitor
- * is for user feedback and is not that critical.
- */
- typedef struct st_LWMonitor {
- void *data;
- void (*init) (void *, unsigned int);
- int (*step) (void *, unsigned int);
- void (*done) (void *);
- } LWMonitor;
- /*
- * Macros are provided to call a monitor which will do nothing if the
- * monitor pointer is null. MON_INCR is used for step sizes greater than
- * one and MON_STEP is used for step sizes exactly one.
- */
- #define MON_INIT(mon,count) if (mon) (*mon->init) (mon->data, count)
- #define MON_INCR(mon,d) (mon ? (*mon->step) (mon->data, d) : 0)
- #define MON_STEP(mon) MON_INCR (mon, 1)
- #define MON_DONE(mon) if (mon) (*mon->done) (mon->data)
- #define LWLMONFUNCS_GLOBAL "LWLMonFuncs"
- /****
- * create:
- * Creates a new monitor instance
- *
- * setup:
- * Configures the progress monitor
- * title - Monitor Title
- * uiflags - a bitmask of desired LMO_* flags
- * histfile - if given, filename where messages will also be written
- * uiflags - takes a bitmask of ui options
- *
- * setwinpos:
- * xywh - position and size of monitor window
- *
- * init:
- * Sets total number of steps and OOpens the monitor progress window
- * total - Total number of steps
- * msg - Initial message string for user
- *
- * step:
- * Increments the current step and sets the display message
- * incr - Increment to increase counter (0 is valid)
- * msg - Message string for user
- *
- * done:
- * Indicates the processing is complete. If review option enabled,
- * monitor remains open in a modal state for user review of output.
- * Control will not return to caller until the user dismisses the window.
- *
- * destroy:
- * Closes the window (if open) and destroys the instance.
- *
- ****
- */
- /* defines */
- /****
- * UI Option Flags
- * NOABORT:
- * Abort button is disabled. Default is operation can be aborted.
- * REVIEW:
- * Monitor remains open after 'done' method is called. This allows user
- * to review messages. Default is no review and mediately from done method
- * HISTAPPEND:
- * History file is appended with new messages. Default is overwrite.
- * IMMUPD:
- * Enables immediate update of the monitor on every step. The default
- * is to delay updates to avoid incurring too much overhead for rapid
- * step events.
- ****
- */
- #define LMO_NOABORT (1<<0)
- #define LMO_REVIEW (1<<1)
- #define LMO_HISTAPPEND (1<<2)
- #define LMO_IMMUPD (1<<3)
- /* TypeDefs */
- typedef struct st_LMONDATA *LWLMonID;
- typedef struct st_LWLMonFuncs {
- LWLMonID (*create) ( void );
- void (*setup) ( LWLMonID mon, char *title,
- unsigned int uiflags, const char *histfile );
- void (*setwinpos) ( LWLMonID mon, int x, int y, int w, int h );
- void (*init) ( LWLMonID mon, unsigned int total, const char *msg );
- int (*step) ( LWLMonID mon, unsigned int incr, const char *msg );
- void (*done) ( LWLMonID mon );
- void (*destroy) ( LWLMonID mon );
- } LWLMonFuncs;
- /****
- * Macros to simplify some common operations.
- ****
- */
- /* Creates a monitor instance */
- #define LMON_NEW(fun) ((*fun->create)())
- /* Initailizes a default monitor */
- #define LMON_DFLT(fun,mon,tot) {(*fun->setup)(mon,"Processing...",0,NULL);\
- (*fun->init)(mon,tot,NULL);}
- #define LMON_WPOS(fun,mon,x,y,w,h) ((*fun->setwinpos)(mon,x,y,w,h))
- #define LMON_INIT(fun,mon,tot) ((*fun->init)(mon,tot,NULL))
- /* The following are various incrementing macros */
- #define LMON_STEP(fun,mon) ((*fun->step)(mon,1,NULL))
- #define LMON_INCR(fun,mon,s) ((*fun->step)(mon,s,NULL))
- #define LMON_MSG(fun,mon,msg) ((*fun->step)(mon,0,msg))
- #define LMON_MSGS(fun,mon,msg) ((*fun->step)(mon,1,msg))
- #define LMON_MSGI(fun,mon,s,msg) ((*fun->step)(mon,s,msg))
- /* These finish and destroy the monitor */
- #define LMON_DONE(fun,mon) ((*fun->done)(mon))
- #define LMON_KILL(fun,mon) ((*fun->destroy)(mon))
- #endif
|