/*******************************************************************/
/* Fichier contenant les fonctions attachees aux objets graphiques */
/*******************************************************************/

#include "Tools.h"

extern void InitPushButton(struct XObj *xobj);
extern void DestroyPushButton(struct XObj *xobj);
extern void DrawPushButton(struct XObj *xobj);
extern void EvtMousePushButton(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyPushButton(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgPushButton(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitRadioButton(struct XObj *xobj);
extern void DestroyRadioButton(struct XObj *xobj);
extern void DrawRadioButton(struct XObj *xobj);
extern void EvtMouseRadioButton(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyRadioButton(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgRadioButton(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitItemDraw(struct XObj *xobj);
extern void DestroyItemDraw(struct XObj *xobj);
extern void DrawItemDraw(struct XObj *xobj);
extern void EvtMouseItemDraw(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyItemDraw(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgItemDraw(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitCheckBox(struct XObj *xobj);
extern void DestroyCheckBox(struct XObj *xobj);
extern void DrawCheckBox(struct XObj *xobj);
extern void EvtMouseCheckBox(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyCheckBox(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgCheckBox(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitTextField(struct XObj *xobj);
extern void DestroyTextField(struct XObj *xobj);
extern void DrawTextField(struct XObj *xobj);
extern void EvtMouseTextField(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyTextField(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgTextField(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitHScrollBar(struct XObj *xobj);
extern void DestroyHScrollBar(struct XObj *xobj);
extern void DrawHScrollBar(struct XObj *xobj);
extern void EvtMouseHScrollBar(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyHScrollBar(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgHScrollBar(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitVScrollBar(struct XObj *xobj);
extern void DestroyVScrollBar(struct XObj *xobj);
extern void DrawVScrollBar(struct XObj *xobj);
extern void EvtMouseVScrollBar(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyVScrollBar(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgVScrollBar(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitPopupMenu(struct XObj *xobj);
extern void DestroyPopupMenu(struct XObj *xobj);
extern void DrawPopupMenu(struct XObj *xobj);
extern void EvtMousePopupMenu(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyPopupMenu(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgPopupMenu(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitRectangle(struct XObj *xobj);
extern void DestroyRectangle(struct XObj *xobj);
extern void DrawRectangle(struct XObj *xobj);
extern void EvtMouseRectangle(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyRectangle(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgRectangle(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitMiniScroll(struct XObj *xobj);
extern void DestroyMiniScroll(struct XObj *xobj);
extern void DrawMiniScroll(struct XObj *xobj);
extern void EvtMouseMiniScroll(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyMiniScroll(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgMiniScroll(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitSwallow(struct XObj *xobj);
extern void DestroySwallow(struct XObj *xobj);
extern void DrawSwallow(struct XObj *xobj);
extern void EvtMouseSwallow(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeySwallow(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgSwallow(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitHDipstick(struct XObj *xobj);
extern void DestroyHDipstick(struct XObj *xobj);
extern void DrawHDipstick(struct XObj *xobj);
extern void EvtMouseHDipstick(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyHDipstick(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgHDipstick(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitVDipstick(struct XObj *xobj);
extern void DestroyVDipstick(struct XObj *xobj);
extern void DrawVDipstick(struct XObj *xobj);
extern void EvtMouseVDipstick(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyVDipstick(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgVDipstick(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitList(struct XObj *xobj);
extern void DestroyList(struct XObj *xobj);
extern void DrawList(struct XObj *xobj);
extern void EvtMouseList(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyList(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgList(struct XObj *xobj,unsigned long type,unsigned long *body);

extern void InitMenu(struct XObj *xobj);
extern void DestroyMenu(struct XObj *xobj);
extern void DrawMenu(struct XObj *xobj);
extern void EvtMouseMenu(struct XObj *xobj,XButtonEvent *EvtButton);
extern void EvtKeyMenu(struct XObj *xobj,XKeyEvent *EvtKey);
extern void ProcessMsgMenu(struct XObj *xobj,unsigned long type,unsigned long *body);

/***********************************************/
/*Choix des fonctions suivant le type de bouton*/
/***********************************************/

void ChooseFunction(struct XObj *xobj,char *type)
{
 if (strcmp(type,"PushButton")==0)
 {
  xobj->TypeWidget=PushButton;
  xobj->InitObj=InitPushButton;
  xobj->DestroyObj=DestroyPushButton;
  xobj->DrawObj=DrawPushButton;
  xobj->EvtMouse=EvtMousePushButton;
  xobj->EvtKey=EvtKeyPushButton;
  xobj->ProcessMsg=ProcessMsgPushButton;
 }
 else if (strcmp(type,"RadioButton")==0)
 {
  xobj->TypeWidget=RadioButton;
  xobj->InitObj=InitRadioButton;
  xobj->DestroyObj=DestroyRadioButton;
  xobj->DrawObj=DrawRadioButton;
  xobj->EvtMouse=EvtMouseRadioButton;
  xobj->EvtKey=EvtKeyRadioButton;
  xobj->ProcessMsg=ProcessMsgRadioButton;
 }
 else if (strcmp(type,"ItemDraw")==0)
 {
  xobj->TypeWidget=ItemDraw;
  xobj->InitObj=InitItemDraw;
  xobj->DestroyObj=DestroyItemDraw;
  xobj->DrawObj=DrawItemDraw;
  xobj->EvtMouse=EvtMouseItemDraw;
  xobj->EvtKey=EvtKeyItemDraw;
  xobj->ProcessMsg=ProcessMsgItemDraw;
 }
 else if (strcmp(type,"CheckBox")==0)
 {
  xobj->TypeWidget=CheckBox;
  xobj->InitObj=InitCheckBox;
  xobj->DestroyObj=DestroyCheckBox;
  xobj->DrawObj=DrawCheckBox;
  xobj->EvtMouse=EvtMouseCheckBox;
  xobj->EvtKey=EvtKeyCheckBox;
  xobj->ProcessMsg=ProcessMsgCheckBox;
 }
 else if (strcmp(type,"TextField")==0)
 {
  xobj->TypeWidget=TextField;
  xobj->InitObj=InitTextField;
  xobj->DestroyObj=DestroyTextField;
  xobj->DrawObj=DrawTextField;
  xobj->EvtMouse=EvtMouseTextField;
  xobj->EvtKey=EvtKeyTextField;
  xobj->ProcessMsg=ProcessMsgTextField;
 }
 else if (strcmp(type,"HScrollBar")==0)
 {
  xobj->TypeWidget=HScrollBar;
  xobj->InitObj=InitHScrollBar;
  xobj->DestroyObj=DestroyHScrollBar;
  xobj->DrawObj=DrawHScrollBar;
  xobj->EvtMouse=EvtMouseHScrollBar;
  xobj->EvtKey=EvtKeyHScrollBar;
  xobj->ProcessMsg=ProcessMsgHScrollBar;
 }
 else if (strcmp(type,"VScrollBar")==0)
 {
  xobj->TypeWidget=VScrollBar;
  xobj->InitObj=InitVScrollBar;
  xobj->DestroyObj=DestroyVScrollBar;
  xobj->DrawObj=DrawVScrollBar;
  xobj->EvtMouse=EvtMouseVScrollBar;
  xobj->EvtKey=EvtKeyVScrollBar;
  xobj->ProcessMsg=ProcessMsgVScrollBar;
 }
 else if (strcmp(type,"PopupMenu")==0)
 {
  xobj->TypeWidget=PopupMenu;
  xobj->InitObj=InitPopupMenu;
  xobj->DestroyObj=DestroyPopupMenu;
  xobj->DrawObj=DrawPopupMenu;
  xobj->EvtMouse=EvtMousePopupMenu;
  xobj->EvtKey=EvtKeyPopupMenu;
  xobj->ProcessMsg=ProcessMsgPopupMenu;
 }
 else if (strcmp(type,"Rectangle")==0)
 {
  xobj->TypeWidget=Rectangle;
  xobj->InitObj=InitRectangle;
  xobj->DestroyObj=DestroyRectangle;
  xobj->DrawObj=DrawRectangle;
  xobj->EvtMouse=EvtMouseRectangle;
  xobj->EvtKey=EvtKeyRectangle;
  xobj->ProcessMsg=ProcessMsgRectangle;
 }
 else if (strcmp(type,"MiniScroll")==0)
 {
  xobj->TypeWidget=MiniScroll;
  xobj->InitObj=InitMiniScroll;
  xobj->DestroyObj=DestroyMiniScroll;
  xobj->DrawObj=DrawMiniScroll;
  xobj->EvtMouse=EvtMouseMiniScroll;
  xobj->EvtKey=EvtKeyMiniScroll;
  xobj->ProcessMsg=ProcessMsgMiniScroll;
 }
 else if (strcmp(type,"SwallowExec")==0)
 {
  xobj->TypeWidget=SwallowExec;
  xobj->InitObj=InitSwallow;
  xobj->DestroyObj=DestroySwallow;
  xobj->DrawObj=DrawSwallow;
  xobj->EvtMouse=EvtMouseSwallow;
  xobj->EvtKey=EvtKeySwallow;
  xobj->ProcessMsg=ProcessMsgSwallow;
 }
 else if (strcmp(type,"HDipstick")==0)
 {
  xobj->TypeWidget=HDipstick;
  xobj->InitObj=InitHDipstick;
  xobj->DestroyObj=DestroyHDipstick;
  xobj->DrawObj=DrawHDipstick;
  xobj->EvtMouse=EvtMouseHDipstick;
  xobj->EvtKey=EvtKeyHDipstick;
  xobj->ProcessMsg=ProcessMsgHDipstick;
 }
 else if (strcmp(type,"VDipstick")==0)
 {
  xobj->TypeWidget=VDipstick;
  xobj->InitObj=InitVDipstick;
  xobj->DestroyObj=DestroyVDipstick;
  xobj->DrawObj=DrawVDipstick;
  xobj->EvtMouse=EvtMouseVDipstick;
  xobj->EvtKey=EvtKeyVDipstick;
  xobj->ProcessMsg=ProcessMsgVDipstick;
 }
 else if (strcmp(type,"List")==0)
 {
  xobj->TypeWidget=List;
  xobj->InitObj=InitList;
  xobj->DestroyObj=DestroyList;
  xobj->DrawObj=DrawList;
  xobj->EvtMouse=EvtMouseList;
  xobj->EvtKey=EvtKeyList;
  xobj->ProcessMsg=ProcessMsgList;
 }
 else if (strcmp(type,"Menu")==0)
 {
  xobj->TypeWidget=Menu;
  xobj->InitObj=InitMenu;
  xobj->DestroyObj=DestroyMenu;
  xobj->DrawObj=DrawMenu;
  xobj->EvtMouse=EvtMouseMenu;
  xobj->EvtKey=EvtKeyMenu;
  xobj->ProcessMsg=ProcessMsgMenu;
 }
 else
 {
  fprintf(stderr,"Item %s unknow\n",type);
  exit(1);
 }
}
