/**********************************************************************************/ /* COMBO type API 2D written by J.DUMAY */ /**********************************************************************************/ /* COMBO_New */ /* COMBO_Del */ /* COMBO_ChangeDisplayFlags */ /* COMBO_ChangeCoordinates */ /* COMBO_GetCoordinates */ /* COMBO_ADDcombo */ /* COMBO_DELcombo */ /* COMBO_SDELcombo */ /* COMBO_POScombo */ /* COMBO_GETcomboCount */ /* COMBO_RSTcombo */ /* COMBO_SELcombo */ /* COMBO_SSELcombo */ /* COMBO_GETcombo */ /* COMBO_SetReflex */ /**********************************************************************************/ /* struct ComboType=[ COMBOObj2D:Obj2D, COMBOwindow:ObjWin, COMBObox:ObjBox, COMBOfont:ObjFont, COMBOchangeSelectionReflex:fun [ComboType I S] ComboType ] MkComboType;; */ /*******************************************************************************************************************************/ /* Fonctions Intrinseques au Bitmap */ /*******************************************************************************************************************************/ fun IsMouseOnCombo(MouseCol,MouseLgn,c)=1;; fun IsUserClickAllowedInCombo()=1;; fun IsUserUnClickAllowedInCombo()=1;; fun DsCombo(c)= { _DSfont c.COMBOfont; _DScombo c.COMBObox; _DSwindow c.COMBOwindow; set c.COMBOchangeSelectionReflex=nil; 1 };; fun CBChangeSelectionCombo(Combo,c,i,s)= exec c.COMBOchangeSelectionReflex with [c i s]; 1;; /*****************************************************************************************************************************/ /* Les fonctions externes */ /******************************************************************************************************************************/ /* Constructeur de la COMBO Channel : canal de construction Chn Container : container auquel appartient la Comboebox ContainerType ObjPere : l'objet pere Obj2D Coordinates : coordonnees de l'objet par rapport au pere [I I] xsize : largeur de la Comboebox I ysize : hauteur de la Comboebox I Font : la font de la Comboebox ComboFlags : flags de construction de l'objet (O2D_ENABLE actif O2D_HIDE cache) ConstructionFlags : flags de construction de la ComboBox (Cf Flags de ObjBox de l'API 2D) Name : Nom de l'objet S def: ComboType fun [Chn ContainerType Obj2D [I I] I I I I S] */ fun COMBO_New( Channel, Container, ObjPere, Coordinates, xsize, ysize, ComboFlags, ConstructionFlags, FontName, FontSize, FontFlags, Name )= if (Channel==nil) || (Container==nil) || (Coordinates==nil) || (Name==nil) || (xsize==nil) || (ysize== nil) || (FontName==nil) || (FontSize==nil) || (FontFlags==nil) || (Name==nil) then nil else let O2D_NewObject Container ObjPere Name xsize ysize Coordinates ComboFlags -> Obj in if Obj==nil then nil else let Coordinates -> [posx posy] in let _CRwindow Channel Container.CoObjWin posx posy xsize /*ysize */FontSize+6 (if ComboFlags&O2D_ENABLE then WN_NOCAPTION|WN_CHILDINSIDE else WN_NOCAPTION|WN_HIDDEN|WN_CHILDINSIDE ) Name -> window in let MkComboType [ Obj window (_CRcombo Channel window 0 0 xsize ysize ConstructionFlags "") (_CRfont Channel FontSize 0 FontFlags FontName) nil ] -> c in { _AFFfontCombo c.COMBObox c.COMBOfont; if (ComboFlags&~O2D_ENABLE)&&(ComboFlags&~O2D_HIDE) then _ENcombo c.COMBObox 0 else nil; /* les methodes */ O2D_CBIsMouseOnDisplayObject Obj c @IsMouseOnCombo; O2D_CBUserClickAllowed Obj c @IsUserClickAllowedInCombo; O2D_CBUserUnClickAllowed Obj c @IsUserUnClickAllowedInCombo; O2D_CBDsObject Obj c @DsCombo; _CBcombo c.COMBObox @CBChangeSelectionCombo c; c };; /* Destructeur def: ComboType fun [ComboType] */ fun COMBO_Del(Combo)= O2D_DelObject Combo.COMBOObj2D;Combo;; /* Definit le reflexe Click de la Comboebox */ fun COMBO_SetClickReflex(c,Reflexe,Param)= if c==nil then nil else { set c.COMBOchangeSelectionReflex=mkfun4 Reflexe Param; c };; /* renvoie l'Obj2D associe a l'objet COMBO */ /* def : Obj2D fun [ComboType] */ fun COMBO_GetObject(c)= c.COMBOObj2D;; /* change le flag d'affichage de la Combobox l : Combobox dont il faut changer le flag NewFlag : nouveau flag (O2D_ENABLE O2D_HIDE) RedrawFlag : 1 si l'objet doit etre redessine dans le buffer d'affichage 0 sinon RepaintFlag : 1 si le container doit etre redessine 0 sinon def: ComboType fun [ComboType I I I] */ fun COMBO_ChangeDisplayFlags(c,NewFlag,RedrawFlag,RepaintFlag)= if NewFlag&O2D_HIDE then _SHOWwindow c.COMBOwindow WINDOW_HIDDEN else if NewFlag&O2D_ENABLE then { _SHOWwindow c.COMBOwindow WINDOW_UNHIDDEN; _ENcombo c.COMBObox 1; nil } else if (NewFlag&~O2D_ENABLE)&&(NewFlag&~O2D_HIDE) then { _ENcombo c.COMBObox 0; nil } else nil; O2D_ChangeObjDisplayFlag c.COMBOObj2D NewFlag RedrawFlag RepaintFlag; c;; /* change les coordonnees de la Combobox par rapport a son objet pere l : Combobox dont il faut changer les coordonnees NewCoordinates : nouvelles coordonnees [I I] RedrawFlag : 1 si l'objet doit etre redessine dans le buffer d'affichage 0 sinon RepaintFlag : 1 si le container doit etre redessine 0 sinon def: ComboType fun [ComboType [I I] I I] */ fun COMBO_ChangeCoordinates(c,NewCoordinates,RedrawFlag,RepaintFlag)= let NewCoordinates -> [x y] in _MVwindow c.COMBOwindow x y; O2D_ChangeObjCoordinates c.COMBOObj2D NewCoordinates RedrawFlag RepaintFlag; c;; /* renvoie les coordonnes de la COMBO par rapport a son pere [I I] */ /* def : [I I] fun [ComboType] */ fun COMBO_GetCoordinates(c)= O2D_GetObjCoordinates c.COMBOObj2D;; /* Cette fonction permet d'ajouter un element dans une ComboBox c: ComboBox i: position d'insertion de l'elt dans la liste. Insertion en tete de liste 0. Insertion en queue un nbre superieur a la taille de la liste elt : elt a jouter a la liste de type S def : ListBoxType fun [ListBoxType I S] */ fun COMBO_ADDcombo(c,i,elt)= _ADDcombo c.COMBObox i elt;c;; /* Supprime le i-eme elt de la Comboe l def ComboType fun [ComboType I] */ fun COMBO_DELcombo(c,i)= _DELcombo c.COMBObox i;c;; /* Detruit un elt de la Combo en fonction de sa valeur l:Comboebox elt:valeur de l'elet a supprimer de type S def ComboType fun [ComboType S] */ fun COMBO_SDELcombo(c,elt)= _SDELcombo c.COMBObox elt;c;; /* Renvoie la position de l'element de la COMBO l dont la valeur est elt de type S def: ComboType fun [ComboType S] */ fun COMBO_POScombo(c,elt)= _POScombo c.COMBObox elt;; /* renvoie le nombre d'element de la COMBO def: I fun [ComboType] */ fun COMBO_GETcomboCount(c)= _GETcomboCount c.COMBObox;; /* cette fonction vide la Comboebox def: ComboType fun [ComboType] */ fun COMBO_RSTcombo(c)= _RSTcombo c.COMBObox;c;; /* Selectionne le i-eme elt de la Comboebox l def: ComboType fun [ComboType I] */ fun COMBO_SELcombo(c,i)= _SELcombo c.COMBObox i;c;; /* Selectionne l'elt de la COMBO dont la valeur est elt de type S def: ComboType fun [ComboType S] */ fun COMBO_SSELcombo(c,elt)= _SSELcombo c.COMBObox elt;c;; /* Cette fonction retourne un couple [I S] contenant l'index et le libelle du choix actuellement en selection dans la COMBO.Si aucun choix n'est selectionne ou si le parametre est non valide la fonction retourne nil def: [I S] fun [ComboType] */ fun COMBO_GETcombo(c)= _GETcombo c.COMBObox;;