/****************************************************************************************/
/*                                                                                      */
/*              Fichier objstr.h                                                        */
/*              Structure de données des différents objets affichables                  */
/*                                                                                      */
/*              Fred Manisse                                                            */
/*                                                                                      */
/****************************************************************************************/


//
// Modifications History
//
//$ LB (13/06/2002) : changed the objbitmap struct to manage the GDI problem.
//




#ifndef OBJSTR_H
#define OBJSTR_H

#include <commctrl.h>

#define MAX_TEXT        32000
//#define TRACE2D
//#define USE_DRAWDIB 
//#include <vfw.h>

#define BUFFER_FLAG_DOWN 1


/* le buffer est de bas de en haut , et non de haut en bas */

/****************************************************************************************/
/*                                                                                      */
/*              Structure ObjVoid : structure de base, commune a tout les objets        */
/*                                                                                      */
/****************************************************************************************/

struct ObjVoid {

        int     Type            ; /* le type d'objet , voir plus bas                    */       
        int     Father          ; /* le pointeur magma sur le pere                      */
        int     Buffer          ; /* donnee de type TYPEBUF                             */
        int     Tab             ; /* donnee de type TYPETAB                             */
} ;


typedef struct ObjVoid *PtrObjVoid ;

/****************************************************************************************/ 
/*                                                                                      */ 
/*              Structure ObjWindow : structure de donnees buffer d'un objet window     */ 
/*                                                                                      */ 
/****************************************************************************************/ 

struct ObjWindow {

        int     PosX            ; /* position X a l'ecran                               */ 
        int     PosY            ; /* position Y a l'ecran                               */ 
        int     TailleW         ; /* taille horizontale de la fenetre                   */ 
        int     TailleH         ; /* tailel verticale de la fenetre                     */ 
        int     Flags           ; /* flags de la fenetre                                */ 
        HWND    WHandler        ; /* Handler Windows                                    */ 
        int     MinW            ; /* taille minimale horizontale de la fenetre          */ 
        int     MinH            ; /* taille minimale verticale de la fenetre            */ 
        int     MaxW            ; /* taille maximale horizontale de la fenetre          */ 
        int     MaxH            ; /* taille maximale verticale de la fenetre            */ 
        HWND    Child           ; /* fenetre fille pour le scrolling                    */ 
        HCURSOR Cursor           ; /* fenetre fille pour le scrolling                    */ 
        } ;        

typedef struct ObjWindow *PtrObjWindow ;

/****************************************************************************************/
/*                                                                                      */
/*              Structure ObjText : structure de donnees buffer d'un objet texte        */
/*              Note : le champ Tab de l'objet de base pointe vers la chaine de         */
/*              caractere correspondant au texte affiche/edite a l'ecran                */
/*                                                                                      */
/****************************************************************************************/

struct ObjText {

        int     PosX            ; /* position X a l'ecran                               */
        int     PosY            ; /* position Y a l'ecran                               */
        int     TailleW         ; /* taille horizontale de la zone texte                */
        int     TailleH         ; /* taille verticale de la zone texte                  */
        int     Flags           ; /* flags de la zone texte                             */
        HWND    WHandler        ; /* Handler Windows                                    */        

} ;

typedef struct ObjText * PtrObjText ;       

/****************************************************************************************/
/*                                                                                      */
/*              Structure ObjButton : structure de donnees buffer d'un objet            */
/*              de type push button                                                     */
/*                                                                                      */
/****************************************************************************************/

struct ObjButton {

        int PosX                ; /* position X a l'ecran                               */
        int PosY                ; /* position Y a l'ecran                               */
        int TailleW             ; /* taille horizontale du bouton                       */
        int TailleH             ; /* taille verticale du bouton                         */
        int Flags               ; /* flags du push bouton                               */
        HWND WHandler           ; /* handler windows                                    */

} ;

typedef struct ObjButton * PtrObjButton ;

/****************************************************************************************/
/*                                                                                      */
/*   Structure pour les objets Menus                                                    */
/*                                                                                      */
/****************************************************************************************/

struct ObjMenu  {

        HMENU WHandler ;
        HMENU HParent ;
        HWND Handler ;
} ;

typedef struct ObjMenu * PtrObjMenu ;

/****************************************************************************************/
/*                                                                                      */
/*  Structure pour les objets de menu                                                   */
/*                                                                                      */
/****************************************************************************************/

struct ObjMenuItem {

    int     Handler     ;   /* numero d'objet menu      */
    HMENU   WHandler    ;   /* handler du menu win      */
    int     Type        ;   /* type d'objet menu        */
    HWND    HWindow     ;   /* handler de la fenetre    */

} ;

#define OBJ_MENU_ITEM_STRING        1
#define OBJ_MENU_ITEM_BITMAP        2

typedef struct ObjMenuItem * PtrObjMenuItem ;

/****************************************************************************************/
/*                                                                                      */
/*  Structure pour les combo box                                                        */
/*                                                                                      */
/****************************************************************************************/

struct ObjCombo {

        int PosX                ; /* position X a l'ecran                               */
        int PosY                ; /* position Y a l'ecran                               */
        int TailleW             ; /* taille horizontale du bouton                       */
        int TailleH             ; /* taille verticale du bouton                         */
        int Flags               ; /* flags du push bouton                               */
        HWND WHandler           ; /* handler windows                                    */

} ;

typedef struct ObjCombo * PtrObjCombo ;        

/****************************************************************************************/
/*                                                                                      */
/*            Structure pour le type Font                                               */
/*                                                                                      */
/****************************************************************************************/

struct ObjFont {

        int Height ;
        int Direction ;
        int Flags ;
        HFONT WHandler ;
} ;

typedef struct ObjFont * PtrObjFont ;
        
/****************************************************************************************/
/*                                                                                      */
/*     Structure pour le type bitmap                                                    */
/*                                                                                      */
/****************************************************************************************/



//$ LB (13/06/2002) : changed the objbitmap struct to manage the GDI problem.

typedef short int* OBJBITMAP_BUFFER;

struct ObjBitmap {

        int PosX ;
        int PosY ;
        int TailleW ;
        int TailleH ;
        int BPP , BPL ;
        int Flags ;
        HWND WHandler ;        
        int Couleurs ; /* nombre de couleur */

		//$ LB (13/06/2002)
		int ShiftPC;           // (Shift Per Color <=> BPP / 8 / 2) (usefull for buffer access...)

		int handler;           // new global handler
		OBJBITMAP_BUFFER bits; // bitmap buffer
		PALETTEENTRY *table;   // table of colors
        HBITMAP DIBhandler;    // handler of the DIBSection
};

typedef struct ObjBitmap * PtrObjBitmap ;

struct Palette {
    unsigned char R [ 256 ] ;
    unsigned char G [ 256 ] ;
    unsigned char B [ 256 ] ;
} ;

typedef struct Palette * PtrPalette ;
#define GET_RED(pal,num)  ((pal)->R[num]) 
#define GET_GREEN(pal,num) ((pal)->G[num])
#define GET_BLUE(pal,num) ((pal)->B[num])
/****************************************************************************************/
/*                                                                                      */
/*  Structure pour le type push button à bitmap                                         */
/*                                                                                      */
/****************************************************************************************/

struct ObjPushButtonBitmap {

        int PosX ;
        int PosY ;
        int TailleW ;
        int TailleH ;
        int Flags ;
       
        HBITMAP Up ;
        HWND WHandler ;

} ;

typedef struct ObjPushButtonBitmap * PtrObjPushButtonBitmap ;

/****************************************************************************************/
/*                                                                                      */
/*      Structure pour le type cursor                                                   */
/*                                                                                      */
/****************************************************************************************/

struct ObjCursor {

    HCURSOR HCursor ;
    int X ;
    int Y ;  
} ;

typedef struct ObjCursor * PtrObjCursor ;


/****************************************************************************************/
/*                                                                                      */
/*      Structure pour le type Tree                                                     */
/*                                                                                      */
/****************************************************************************************/

struct ObjTree {

        int     PosX            ; /* position X a l'ecran                               */ 
        int     PosY            ; /* position Y a l'ecran                               */ 
        int     TailleW         ; /* taille horizontale de la zone texte                */ 
        int     TailleH         ; /* taille verticale de la zone texte                  */ 
        int     Flags           ; /* flags de la zone texte                             */ 
        HWND    WHandler        ; /* Handler Windows                                    */                
        HTREEITEM Dragged       ; /* objet en train d'etre dragge                       */ 

} ;

typedef struct ObjTree * PtrObjTree ;


/****************************************************************************************/
/*                                                                                      */
/*      Structure pour les liste de bitmap                                              */
/*                                                                                      */
/****************************************************************************************/

struct ObjListBitmap {

    HIMAGELIST WHandler         ;   /* handler windows pour la liste                    */
    int TailleW                 ;   /* taille horizontale des bitmaps                   */
    int TailleH                 ;   /* taille verticale des bitmaps                     */
    int TailleI                 ;   /* taille initiale de la liste                      */
    int Taille                  ;   /* taille courante de la liste                      */
    int TailleMax               ;   /* taille maximale de la liste                      */
} ;

typedef struct ObjListBitmap * PtrObjListBitmap ;


/****************************************************************************************/
/*                                                                                      */
/*      structure pour les list tab                                                     */
/*                                                                                      */
/****************************************************************************************/

struct ObjListTab {
    HWND WHandler               ;   /* handler window pour l'objet list view            */ 
    
    int PosX ;
    int PosY ;
    int TailleW ;
    int TailleH ;
    int Flags ;
       

} ;

typedef struct ObjListTab * PtrObjListTab ;


/****************************************************************************************/
/*                                                                                      */
/*              Constantes definissant les differents types d'objets                    */
/*              Ces constantes correspondent au champ type de l'objet de base           */
/*                                                                                      */
/****************************************************************************************/

#define OBJ_TYPE_NULL                   0
#define OBJ_TYPE_WINDOW                 1
#define OBJ_TYPE_TEXT                   2
#define OBJ_TYPE_EDIT_LINE              3
#define OBJ_TYPE_EDIT_TEXT              4
#define OBJ_TYPE_PUSHBUTTON             5
#define OBJ_TYPE_MENU                   6
#define OBJ_TYPE_CHECK_BOX              7
#define OBJ_TYPE_COMBO_BOX              8
#define OBJ_TYPE_FONT                   9
#define OBJ_TYPE_RICH_TEXT              10
#define OBJ_TYPE_BITMAP                 11
#define OBJ_TYPE_PUSH_BUTTON_BITMAP     12
#define OBJ_TYPE_LIST_BOX               14
#define OBJ_TYPE_MENU_ITEM              15
#define OBJ_TYPE_CURSOR                 16
#define OBJ_TYPE_TREE                   17
#define OBJ_TYPE_LISTBITMAP             18
#define OBJ_TYPE_LISTTAB                19
#define OBJ_TYPE_HEADER                 20


#define OBJ_MAX_TYPE 21

/****************************************************************************************/
/*                                                                                      */
/*              Constantes definissant les differents flags pour la creation d'un       */
/*              objet texte ( statique, simple ou multiligne )                          */
/*                                                                                      */
/****************************************************************************************/

#define WINDOW_MINIMIZED                1
#define WINDOW_MAXIMIZED                2
#define WINDOW_RESTORED                 3
#define WINDOW_HIDDEN                   4
#define WINDOW_UNHIDDEN                 5

#define BM_TILED                        2

#define WN_MINIMIZE                     (1<<0)
#define WN_NOBORDER                     (1<<1)
#define WN_NOCAPTION                    (1<<2)
#define WN_NOCLIPCHILDREN               (1<<3)
#define WN_CHILD                        (1<<4)
#define WN_ACTIVEX                      (1<<5)
#define WN_MINBOX                       (1<<6)
#define WN_SIZEBOX                      (1<<7)
#define WN_MENU                         (1<<8)
#define WN_NOCURSOR                     (1<<9)
#define WN_NOFOCUS                      (1<<10)
#define WN_DRAGDROP                     (1<<11)
#define WN_CHILDMENU                    (1<<12)
#define WN_HIDE                         (1<<13)
#define WN_DIALOG                       (1<<14)
#define WN_DOWN                         (1<<15)
#define WN_GROUP                        (1<<16)
#define WN_MAXBOX                       (1<<17)
#define WN_MODAL                        (1<<18)
#define WN_HSCROLL                      (1<<19)
#define WN_VSCROLL                      (1<<20)
#define WN_CHILDSCROLL                  (1<<21)
#define WN_NOBACKGROUND					(1<<22)

#define ET_HSCROLL                      (1<<0)
#define ET_VSCROLL                      (1<<1)
#define ET_ALIGN_CENTER                 (1<<2)
#define ET_ALIGN_LEFT                   (1<<3)
#define ET_LOWERCASE                    (1<<4)
#define ET_NUMBER                       (1<<5)
#define ET_PASSWORD                     (1<<6)
#define ET_BORDER                       (1<<7)
#define ET_ALIGN_RIGHT                  (1<<8)
#define ET_AHSCROLL                     (1<<9)
#define ET_AVSCROLL                     (1<<10)
#define ET_TABFOCUS                     (1<<11)
#define ET_UPBORDER                     (1<<12)
#define ET_TRANSPARENT                  (1<<13)
#define ET_SIZEBOX                      (1<<14)
#define ET_HIDDEN                       (1<<15)
#define ET_DOWN                         (1<<16)
#define ET_DRAGDROP                     (1<<17)
#define ET_NOEDIT                       (1<<18)

#define ME_SEPARATOR                    1
#define ME_CHECKED                      2
#define ME_UNCHECKED                    4
#define ME_ENABLED                      8
#define ME_DISABLED                     16

#define PB_DEFAULT                      1
#define PB_TABFOCUS                     2
#define PB_DOWN                         4
#define PB_DRAGDROP                     8

#define CH_TABFOCUS                     1
#define CH_DOWN                         2
#define CH_RADIO                        4
#define CH_LEFT                         8

#define CB_AHSCROLL                     1
#define CB_SORT                         2
#define CB_NOEDIT                       4
#define CB_TABFOCUS                     8
#define CB_DOWN                         16

#define FF_ITALIC                       1
#define FF_WEIGHT                       2
#define FF_UNDERLINE                    4
#define FF_STRIKED                      8
#define FF_PIXEL                        16
//$BLG - v5.11: Add
#define FF_CLEARTYPE									 32
//$BLG - v5.24: Add
//This flag is for _SDRAWtext() 3D API function.
//It lets you display hollow text instead of plain text.
#define FF_HOLLOW											64

#define DRAW_SOLID                      1
#define DRAW_INVISIBLE                  2

#define TD_BASELINE                     1
#define TD_BOTTOM                       2
#define TD_TOP                          4
#define TD_CENTER                       8
#define TD_LEFT                        16
#define TD_RIGHT                       32

//$BLG - v5.24: Add
//This flag is for _SDRAWtext() 3D API function.
//It lets you display hollow text instead of plain text.
//The value of 64 is there because the flag is used in
//conjunction with the TD_xxx flags.
#define SDT_HOLLOW											64

#define FMB_ABORT_RETRY_IGNORE           1
#define FMB_OK                           2
#define FMB_OK_CANCEL                    4
#define FMB_RETRY_CANCEL                 8
#define FMB_YES_NO                       16
#define FMB_YES_NO_CANCEL                32
#define FMB_MODAL                        64

#define RMB_ABORT                       1
#define RMB_CANCEL                      2
#define RMB_IGNORE                      3
#define RMB_NO                          4
#define RMB_OK                          5
#define RMB_RETRY                       6
#define RMB_YES                         7

#define LBF_VSCROLL                      1
#define LBF_NOSELECTION                  2
#define LBF_MULTICOLUMN                  4
#define LBF_BORDER                       8
#define LBF_TABFOCUS                     16
#define LBF_HSCROLL                      32
#define LBF_DOWN                         64
#define LBF_MULTIPLE                    128
#define LBF_DRAGDROP                    256

#define RTF_FLAG_UNDERLINE               1
#define RTF_FLAG_BOLD                    2
#define RTF_FLAG_ITALIC                  4
#define RTF_FLAG_STRIKED                 8
#define RTF_FLAG_OFFSET                  16

#define PM_SCREEN                           1
#define PM_HCENTER_ALIGN                    2
#define PM_LEFT_ALIGN                       4
#define PM_RIGHT_ALIGN                      8
#define PM_BOTTOM_ALIGN                     16
#define PM_TOP_ALIGN                        32
#define PM_VCENTER_ALIGN                    64

#define TREE_INSERT_FIRST                   1
#define TREE_INSERT_SORT                    2
#define TREE_INSERT_LAST                    4

#define TV_BORDER                           1
#define TV_DOWN                             2
#define TV_HSCROLL                          4
#define TV_VSCROLL                          8
#define TV_BUTTON                           16

#define LV_BORDER                           1
#define LV_DOWN                             2
#define LV_ICON                             4
#define LV_LIST                             8
#define LV_SINGLESEL                        16

extern int OBJTYPWINDOW;
extern int OBJTYPBUTTON;
extern int OBJTYPTEXT;
extern int OBJTYPFONT;
extern int OBJTYPCHECK;
extern int OBJTYPMENU;
extern int OBJTYPMENUITEM;
extern int OBJTYPCOMBOBOX;
extern int OBJTYPBITMAP;
extern int OBJTYPCURSOR;
extern int OBJTYPLISTBOX;
extern int OBJTYPRICHTEXT;
extern int OBJTYPTREE;
extern int OBJTYPLISTBITMAP;
extern int OBJTYPLISTTAB;
extern int OBJTYPHEADER;

/* definition des reflexes pour le type 'fenetre 2d' */
#define RFLWINDOW_NB        17
#define RFLWINDOW_PAINT     0
#define RFLWINDOW_MOVE      1
#define RFLWINDOW_SIZE      2
#define RFLWINDOW_CLICK     3
#define RFLWINDOW_UNCLICK   4
#define RFLWINDOW_KEYDOWN   5
#define RFLWINDOW_KEYUP     6
#define RFLWINDOW_DESTROY   7
#define RFLWINDOW_MOVEMOUSE 8
#define RFLWINDOW_FOCUS     9
#define RFLWINDOW_KILLFOCUS 10
#define RFLWINDOW_DCLICK    11
#define RFLWINDOW_DROPFILE  12
#define RFLWINDOW_CLOSE     13
#define RFLWINDOW_WHEEL     14
#define RFLWINDOW_SUSPEND   15
#define RFLWINDOW_RESUME    16


/* definition des reflexes pour le type bouton */
#define RFLBUTTON_NB        2
#define RFLBUTTON_EVENT     0
#define RFLBUTTON_DROPFILE  1

/* definition des reflexes pour le type objet texte */
#define RFLTEXT_NB          5
#define RFLTEXT_EVENT       0
#define RFLTEXT_MOVE        1
#define RFLTEXT_SIZE        2
#define RFLTEXT_LINEOK      3
#define RFLTEXT_DROPFILE    4

/* definition des reflexes pour le type police de caractere */
#define RFLFONT_NB          0

/* definition des reflexes pour le type xase a cocher */
#define RFLCHECK_NB         1
#define RFLCHECK_EVENT      0

/* definition des reflexes pour le type menu */
#define RFLMENU_NB          0

/* definition des reflexes pour les menu items  */
#define RFLMENUITEM_NB          1
#define RFLMENUITEM_SELECT      0

/* definition des reflexes pour les combo box */
#define RFLCOMBOBOX_NB          1
#define RFLCOMBOBOX_SELECT      0

/* definition des reflexes pour le type bitmap */
#define RFLBITMAP_NB            0
/* definition des reflexes pour les curseurs */
#define RFLCURSOR_NB            0

/* definition des reflexes pour les listes box   */
#define RFLLISTBOX_NB           3
#define RFLLISTBOX_CLICK        0
#define RFLLISTBOX_DCLICK       1
#define RFLLISTBOX_DROPFILE     2

/* definitions des reflexes pour les objets riche text */
#define RFLRICHTEXT_NB      2
#define RFLRICHTEXT_CLICK   0
#define RFLRICHTEXT_DROPFILE 1

/* definition des reflexes pour les arbres */
#define RFLTREE_NB  6
#define RFLTREE_EXPAND  0
#define RFLTREE_SELECT  1
#define RFLTREE_DRAG    2
#define RFLTREE_CLICK   3
#define RFLTREE_UNCLICK 4
#define RFLTREE_DCLICK  5

/* definition des reflexes pour les list de bitmaps */
#define RFLLISTBITMAP_NB    0

/* definition des reflexes pour les listtab */
#define RFLLISTTAB_NB       5
#define RFLLISTTAB_SORT     0
#define RFLLISTTAB_COLUMN   1
#define RFLLISTTAB_DCLICK   2
#define RFLLISTTAB_SELECT   3
#define RFLLISTTAB_RSELECT  4

/* definition des reflexes pour les header   */ 
#define RFLHEADER_NB        0


#endif


