/*
 * LWSDK Header File
 * Copyright 1999, NewTek, Inc.
 *
 * LWTXTRED.H -- LightWave Texture Editor
 */
 
#ifndef LWSDK_TXTRED_H
#define LWSDK_TXTRED_H

#include        <lwtxtr.h>

#define         LWTXTREDFUNCS_GLOBAL    "Texture Editor 2"

/*
 * Clients can edit textures by subscribing to the texture editor services.
 * The subscription returns an identifier this identifier holds information 
 * about the client, some UI flags, etc, that are used in function calls.
 */
typedef struct st_TxtrEdClient  *LWTECltID;

/*
 * Clients can set call backs for the 'Remove Texture',
 * and the 'Automatic Sizing' buttons.
 * For the AutoSize call back, the client needs to fill in bbox
 * with the corners of the texture's bounding box:
 * bbox[][0] = min[],  bbox[][1] = max[]
 */
typedef void    LW_TxtrRemoveFunc(LWTextureID, void     *userData);
typedef int             LW_TxtrAutoSizeFunc(LWTextureID, void   *userData,double        bbox[3][2]);
typedef int             LW_TxtrEventFunc(LWTextureID, void      *userData,int   eventCode);
typedef int             LW_GradAutoSizeFunc(LWTxtrParamDesc     *param,int      paramNb, void   *userData);//,double    *start,double   *end);

typedef struct  st_LWTxtrEdFuncs {
        LWTECltID               (*subscribe)(char       *title,int      flags,void      *userData,LW_TxtrRemoveFunc     *,LW_TxtrAutoSizeFunc   *,LW_TxtrEventFunc      *);
        void                    (*unsubscribe)(LWTECltID);

        void                    (*open)(LWTECltID, LWTextureID,char     *title);
        void                    (*setTexture)(LWTECltID, LWTextureID, char      *title);
        void                    (*setPosition)(LWTECltID, int, int);
        void                    (*close)(LWTECltID);
        int                             (*isOpen)(LWTECltID);                                   
        int                             (*refresh)(LWTECltID);                                  // forces editor refresh
        LWTLayerID              (*currentLayer)(LWTECltID);                             // returns currently selected texture layer

        int                             (*selectAdd)(LWTECltID, LWTextureID);   // adds texture to multiselection
        int                             (*selectRem)(LWTECltID, LWTextureID);   // removes texture from multiselection  
        int                             (*selectClr)(LWTECltID);                                // clears multiselection
        LWTextureID             (*selectFirst)(LWTECltID);                              // returns first texture in the selection
        LWTextureID             (*selectNext)(LWTECltID, LWTextureID);  // returns next texture in the selection

        void                    (*setGradientAutoSize) (LWTECltID,LW_GradAutoSizeFunc *);
} LWTxtrEdFuncs;

/*
Editor Flags
*/
#define TEF_USEBTN              (1<<0)  // adds use/remove buttons at the bottom of the pane.
#define TEF_OPACITY             (1<<1)  // adds layer opacity settings
#define TEF_BLEND               (1<<2)  // adds blend options to the layer global settings
#define TEF_TYPE                (1<<3)  // adds layer type control on top of pane.
#define TEF_LAYERS              (1<<4)  // adds layer list pane on left side of the pane.
#define TEF_ALL                 31              // standard set of flags for the texture editor

/*
Event Codes passed to the event callback
*/
#define TXEV_ALTER               1
#define TXEV_TRACK               2
#define TXEV_DELETE              4

#endif