/******************************************************************************
 *
 * RCS ID
 * $Id: smbconfig,v 1.4 2000/04/22 14:50:28 david Exp $
 *
 * HISTORY
 * $Log: smbconfig,v $
 * Revision 1.4  2000/04/22 14:50:28  david
 * Updates for nmbd module debugging.
 * Updates for integrating nmbd with main smbserver application
 *
 * Revision 1.3  2000/01/29 17:18:21  david
 * Updates to support passwords
 *
 * Revision 1.2  2000/01/11 20:13:23  david
 * added FLAG_FILE_CREATE and FLAG_FILE_READ
 *
 * Revision 1.1  1999/11/07 15:00:30  david
 * proto: updated prototypes
 * smb: added file descriptor to connection struct
 * smbconfig: new file for WIMP config stuff
 *
 *
 *
 *****************************************************************************/                    

#define MyRedrawEvent          2
#define LargeIconsRequestEvent 3
#define SmallIconsRequestEvent 4
#define FullInfoRequestEvent   5
#define SelectAllEvent         6
#define ClearSelectionEvent    7
#define DeleteShareEvent       8
#define CloseShareEvent        9
#define DontCloseShareEvent   10
#define ErrorBoxCloseEvent    11
#define NmbdDebugEvent        12

#define IGNORE(A) A=A       

typedef struct sGadgetList 
{ 
  Gadget             agadget;   
  union {
    int              paramIndex; 
    int              serviceIndex;
  } index; 
  char               label[255];
  ObjectId           childWindow;
  struct sGadgetList *infoGadgets;
  struct sGadgetList *childGadgets;
  struct parm_struct *parmStruct;
  struct sGadgetList *prev;            
  struct sGadgetList *next;   
} tGadgetList, *tpGadgetList;

#define ADD_GADGET_FUNC_PARAMS (tpGadgetList*,int,ObjectId,int*,struct parm_struct *,int*,int*,int, int*,int)
#define ADD_GADGET_FUNC_PARAMS_DEF (tpGadgetList* gadgetList,              \
                                    int           index,                   \
                                    ObjectId      objectId,                \
                                    int           *compId,                 \
                                    struct parm_struct *parmStruct,        \
                                    int           *x,                      \
                                    int           *y,                      \
                                    int           width,                   \
                                    int           *esg,                    \
                                    int           serviceNum )

typedef struct sAddGadgetFncs
{
  parm_type parmType;
  void (*addGadgetFnc)ADD_GADGET_FUNC_PARAMS;
} tAddGadgetFncs, *tpAddGadgetFncs;
                    
typedef struct sCreatedObjects
{
   char *templateName;
   ObjectId *objId;
   int (*createdObjFnc)(ObjectId, ObjectId*, int);
} tCreatedObjects, *tpCreatedObjects;

typedef struct sWimpHandlers
{
   ObjectId *objId;
   int      eventCode;
   WimpEventHandler *handler;
} tWimpHandlers, *tpWimpHandlers;

typedef struct sToolboxHandlers
{
   ObjectId *objId;
   int      eventCode;
   ToolboxEventHandler *handler;
} tToolboxHandlers, *tpToolboxHandlers;

/* wimp */
int nmbdDumpInfoEvent(int event_code,
                      ToolboxEvent *event,
                      IdBlock *id_block,
                      void *handle);
int topWindMouseClick(int event_code, 
                      WimpPollBlock *event,
                      IdBlock *id_block,
                      void *v);
int discardConfigEvent(int event_code,
                       ToolboxEvent *event,
                       IdBlock *id_block,
                       void *handle);
int saveConfigEvent(int event_code,
                    ToolboxEvent *event,
                    IdBlock *id_block,
                    void *handle);
/* gadgets */    
              
void addWriteableFieldGadget ADD_GADGET_FUNC_PARAMS;
void addOptionButtonGadget ADD_GADGET_FUNC_PARAMS;
void addNumberRangeGadget ADD_GADGET_FUNC_PARAMS;
void addRadioGadget ADD_GADGET_FUNC_PARAMS;
void addTextFieldGadget ADD_GADGET_FUNC_PARAMS;
void sortGadgetList(tpGadgetList* , 
                    int ,
                    int (*)(const void *, const void *));
void addWindowGadgets(tpGadgetList *, 
                      ObjectId     , 
                      int          , 
                      parm_class   );
void addGadget(tpGadgetList*, tpGadgetList );
int fillInGadgetFields(ObjectId     ,
                       tpGadgetList ,
                       int          );
int storeInGadgetFields(ObjectId     ,
                        tpGadgetList ,
                        int          );
void deleteGadget(tpGadgetList* , tpGadgetList);
BOOL haveGadgetFieldsChanged(ObjectId     ,
                             tpGadgetList ,
                             int          );

/* shares */
int sharesResizeEvent(int ,
                      ToolboxEvent *,
                      IdBlock *,
                      void *);
int sharesWindMouseClick(int event_code, 
                         WimpPollBlock *event,
                         IdBlock *id_block,
                         void *v);
int redrawSharesWindow(int           , 
                       WimpPollBlock *,
                       IdBlock       *,
                       void *);
int isSharesWindOk(ObjectId);
int sharesDataLoadMessage(WimpMessage *);
int addNewShare(ObjectId);
int copyShare(ObjectId);
int renameShare(ObjectId);
int selectAllEvent(int event_code,
                   ToolboxEvent *event,
                   IdBlock *id_block,
                   void *handle);
int sharesWindAboutToBeShown(int event_code,
                             ToolboxEvent *event,
                             IdBlock *id_block,
                             void *handle);
int sharesMenuAboutToBeShown(int event_code,
                             ToolboxEvent *event,
                             IdBlock *id_block,
                             void *handle);
int deleteShareEvent(int event_code,
                     ToolboxEvent *event,
                     IdBlock *id_block,
                     void *handle);
int sharesLargeEvent(int event_code,
                     ToolboxEvent *event,
                     IdBlock *id_block,
                     void *handle);
int sharesSmallEvent(int event_code,
                     ToolboxEvent *event,
                     IdBlock *id_block,
                     void *handle);
int sharesFullInfoEvent(int event_code,
                        ToolboxEvent *event,
                        IdBlock *id_block,
                        void *handle);
int sharesResizeEvent(int event_code,
                      ToolboxEvent *event,
                      IdBlock *id_block,
                      void *handle);
int dontCloseShareEvent(int event_code,
                        ToolboxEvent *event,
                        IdBlock *id_block,
                        void *handle);
int closeShareEvent(int event_code,
                    ToolboxEvent *event,
                    IdBlock *id_block,
                    void *handle);

/* utils */
int fontStrWidth(char *);
void screenToWorkCoords(BBox *,WimpGetWindowStateBlock *);
BOOL boxexOverlap(BBox *, BBox *);
int objectType(char *, int *);

/* globals */
int globWindAboutToBeShown(int ,
                           ToolboxEvent *,
                           IdBlock *,
                           void *);
void globWindOk(ObjectId);

int sharesWindCreated(ObjectId, ObjectId*, int );
int progInfoCreated(ObjectId, ObjectId*, int );
int errorBoxIdCreated(ObjectId, ObjectId*, int );


int genericObjectCreated(ObjectId, ObjectId*, int );

extern void *getParamValuePtr(struct parm_struct *, int    );

extern struct parm_struct * lpGetParamStruct(int);
extern int WimpInitialise(char *, char *);
extern void WimpPoll(void);
                         
void showObjectInMiddle(ObjectId);

/* params */
void ParamIntialise(void);

extern tAddGadgetFncs addGadgetFncs[];

extern char *date_string ;
extern char *time_string ;
extern char *ver_string  ;
extern char versionString[100];

extern ObjectId MainWindowId; 
extern ObjectId ProgInfoId; 
extern ObjectId TopWindId;
extern ObjectId GlobWindId;
extern ObjectId SharesWindId;
extern ObjectId SharesMenuId;
extern ObjectId SharesMenu2Id;
extern ObjectId SharesMenu3Id;
extern ObjectId renameMenuId;
extern ObjectId copyMenuId;
extern ObjectId newShareMenuId;
extern ObjectId DCSId;
extern ObjectId closeShareWindId;
extern ObjectId errorBoxId;
extern ObjectId setSharePasswordId;

extern tpGadgetList GlobWindGadgets;
extern tpGadgetList SharesWindGadgets;

extern int lastWidth;

extern char *help_message;
extern char *Sharddisc;
extern char *Sprinters;   
extern char *Ssmharddisc;
extern char *Ssmprinters;

extern BOOL optionsChanged;

