/****************************************************************************************/
/*                                                                                      */
/*              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.
//
//
//$LB (16/12/2003) : add a background bitmap to the ObjWindow struct, in order to simulate
//                   the windows transparency (Win95, 98, Me). (WinXp, win2k : doesn't have to be
//                   simulated). 


#ifndef OBJSTR_H
#define OBJSTR_H

#include <commctrl.h>

#define MAX_TEXT        32000

#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 for bitmap type                                                         */
/*                                                                                      */
/****************************************************************************************/

//$ LB (13/06/2002) : changed the objbitmap struct to manage the GDI problem.
//$ LB (12/07/2003) : 16 bits to 24 bits


typedef unsigned char* OBJBITMAP_BUFFER;

struct ObjBitmap {

        int PosX ;
        int PosY ;
        int TailleW ;
        int TailleH ;
        int BPP , BytesPP, BPL ;
        int Flags ;
        HWND WHandler ;        
        int Couleurs ; /* nombre de couleur */

		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 ObjWindow : structure de donnees buffer d'un objet window     */ 
/*                                                                                      */ 
/****************************************************************************************/ 

//$LB (16/12/2003) : add a background bitmap to the ObjWindow struct, in order to simulate
//                   the windows transparency (Win95, 98, Me). (WinXp, win2k : doesn't have to be
//                   simulated). 
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                   */ 

		//$LB(16/12/2003)
		unsigned char tSimulated; /* 1 if simulated (Win95,98,ME,NT),                    */
		PtrObjBitmap  tBuf      ; /* bitmap buffer for simulated transpary               */
		PtrObjBitmap  tBkg      ; /* point to LIB2DtransBkg                              */
		int           tX, tY    ; /* <=> window coordinates <=> coordinates of the LIB2DtransBkg area to draw */
		unsigned char tColorB   ; /* transparency color R G B                            */
		unsigned char tColorG   ;
		unsigned char tColorR   ; 
		unsigned char tfactor   ; /* alpha blending factor                                    */
		int           tflags    ; /* transparency flags : transparency color | alpha blending */

        };         

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 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 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 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

#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

#endif


