/**********************************************************************************/ /* ListBox type API 2D written by J.DUMAY */ /**********************************************************************************/ /* LISTBOX_New */ /* LISTBOX_Del */ /* LISTBOX_ChangeDisplayFlags */ /* LISTBOX_ChangeCoordinates */ /* LISTBOX_GetCoordinates */ /* LISTBOX_ADDlist */ /* LISTBOX_DELlist */ /* LISTBOX_SDELlist */ /* LISTBOX_POSlist */ /* LISTBOX_GETlistCount */ /* LISTBOX_RSTlist */ /* LISTBOX_SELlist */ /* LISTBOX_SSELlist */ /* LISTBOX_GETlist */ /* LISTBOX_SetClickReflex */ /* LISTBOX_SetDblClickReflex */ /**********************************************************************************/ /* struct ListBoxType=[ LISTObj2D:Obj2D, LISTwindow:ObjWin, LISTlist:ObjList, LISTfont:ObjFont, LISTClickReflex:fun [ListBoxType I S] ListBoxType, LISTDblClickReflex:fun [ListBoxType I S] ListBoxType ] MkListBoxType;; */ /*******************************************************************************************************************************/ /* Fonctions Intrinseques au Bitmap */ /*******************************************************************************************************************************/ fun IsMouseOnListBox(MouseCol,MouseLgn,l)=1 ;; fun IsUserClickAllowedInListBox()=1;; fun IsUserUnClickAllowedInListBox()=1;; fun DsListBox(l)= { _DSfont l.LISTfont; _DSlist l.LISTlist; _DSwindow l.LISTwindow; set l.LISTClickReflex=nil; set l.LISTDblClickReflex=nil; 1 };; fun CBClickListBox(listbox,l,i,s)= exec l.LISTClickReflex with [l i s]; 1;; fun CBDblClickListBox(listbox,l,i,s)= exec l.LISTDblClickReflex with [l i s]; 1;; /*****************************************************************************************************************************/ /* Les fonctions externes */ /******************************************************************************************************************************/ /* Constructeur de la ListBox Channel : canal de construction Chn Container : container auquel appartient la listebox ContainerType ObjPere : l'objet pere Obj2D Coordinates : coordonnees de l'objet par rapport au pere [I I] xsize : largeur de la listebox I ysize : hauteur de la listebox I Font : la font de la listebox ListBoxFlags : flags de construction de l'objet (O2D_ENABLE actif O2D_HIDE cache) ConstructionFlags : flags de construction de la listebox (Cf Flags de ObjList de l'API 2D) Name : Nom de l'objet S def: ListBoxType fun [Chn ContainerType Obj2D [I I] I I I I S] */ fun LISTBOX_New( Channel, Container, ObjPere, Coordinates, xsize, ysize, ListBoxFlags, 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 ListBoxFlags -> Obj in if Obj==nil then nil else let Coordinates -> [posx posy] in let _CRwindow Channel Container.CoObjWin posx posy xsize ysize (if ListBoxFlags&O2D_ENABLE then WN_NOCAPTION|WN_CHILDINSIDE else WN_NOCAPTION|WN_HIDDEN|WN_CHILDINSIDE ) Name -> window in let MkListBoxType [Obj window (_CRlist Channel window 0 0 xsize ysize ConstructionFlags) (_CRfont Channel FontSize 0 FontFlags FontName) nil nil ] -> l in { _AFFfontList l.LISTlist l.LISTfont; if (ListBoxFlags&~O2D_ENABLE)&&(ListBoxFlags&~O2D_HIDE) then _ENlist l.LISTlist 0 else nil; /* les methodes */ O2D_CBIsMouseOnDisplayObject Obj l @IsMouseOnListBox; O2D_CBUserClickAllowed Obj l @IsUserClickAllowedInListBox; O2D_CBUserUnClickAllowed Obj l @IsUserUnClickAllowedInListBox; O2D_CBDsObject Obj l @DsListBox; _CBlistClick l.LISTlist @CBClickListBox l; _CBlistDclick l.LISTlist @CBDblClickListBox l; l };; /* Destructeur def: ListBoxType fun [ListBoxType] */ fun LISTBOX_Del(list)= O2D_DelObject list.LISTObj2D;list;; /* Definit le reflexe Click de la listebox */ fun LISTBOX_SetClickReflex(l,ReflexeClick,ParamClick)= if l==nil then nil else { set l.LISTClickReflex=mkfun4 ReflexeClick ParamClick; l };; /* Definit le reflexe Double Click de la listebox */ fun LISTBOX_SetDblClickReflex(l,ReflexeDblClick,ParamDblClick)= if l==nil then nil else { set l.LISTDblClickReflex=mkfun4 ReflexeDblClick ParamDblClick; l };; /* renvoie l'Obj2D associe a l'objet ListBox */ /* def : Obj2D fun [ListBoxType] */ fun LISTBOX_GetObject(l)= l.LISTObj2D;; /* change le flag d'affichage de la listebox l : listebox 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: ListBoxType fun [ListBoxType I I I] */ fun LISTBOX_ChangeDisplayFlags(l,NewFlag,RedrawFlag,RepaintFlag)= if NewFlag&O2D_HIDE then _SHOWwindow l.LISTwindow WINDOW_HIDDEN else if NewFlag&O2D_ENABLE then { _SHOWwindow l.LISTwindow WINDOW_UNHIDDEN; _ENlist l.LISTlist 1; nil } else if (NewFlag&~O2D_ENABLE)&&(NewFlag&~O2D_HIDE) then { _ENlist l.LISTlist 0; nil } else nil; O2D_ChangeObjDisplayFlag l.LISTObj2D NewFlag RedrawFlag RepaintFlag; l;; /* change les coordonnees de la listebox par rapport a son objet pere l : listebox 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: ListBoxType fun [ListBoxType [I I] I I] */ fun LISTBOX_ChangeCoordinates(l,NewCoordinates,RedrawFlag,RepaintFlag)= let NewCoordinates -> [x y] in _MVwindow l.LISTwindow x y; O2D_ChangeObjCoordinates l.LISTObj2D NewCoordinates RedrawFlag RepaintFlag; l;; /* renvoie les coordonnes de la listbox par rapport a son pere [I I] */ /* def : [I I] fun [ListBoxType] */ fun LISTBOX_GetCoordinates(l)= O2D_GetObjCoordinates l.LISTObj2D;; /* Cette fonction permet d'ajouter un element dans une listebox l: listebox 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 LISTBOX_ADDlist(l,i,elt)= _ADDlist l.LISTlist i elt;l;; /* Supprime le i-eme elt de la liste l def ListBoxType fun [ListBoxType I] */ fun LISTBOX_DELlist(l,i)= _DELlist l.LISTlist i;l;; /* Detruit un elt de la liste en fonction de sa valeur l:listebox elt:valeur de l'elet a supprimer de type S def ListBoxType fun [ListBoxType S] */ fun LISTBOX_SDELlist(l,elt)= _SDELlist l.LISTlist elt;l;; /* Renvoie la position de l'element de la listbox l dont la valeur est elt de type S def: ListBoxType fun [ListBoxType S] */ fun LISTBOX_POSlist(l,elt)= _POSlist l.LISTlist elt;l;; /* renvoie le nombre d'element de la listbox def: I fun [ListBoxType] */ fun LISTBOX_GETlistCount(l)= _GETlistCount l.LISTlist;; /* cette fonction vide la listebox def: ListBoxType fun [ListBoxType] */ fun LISTBOX_RSTlist(l)= _RSTlist l.LISTlist;l;; /* Selectionne le i-eme elt de la listebox l def: ListBoxType fun [ListBoxType I] */ fun LISTBOX_SELlist(l,i)= _SELlist l.LISTlist i;l;; /* Selelctionne l'elt de la listbox dont la valeur est elt de type S def: ListBoxType fun [ListBoxType S] */ fun LISTBOX_SSELlist(l,elt)= _SSELlist l.LISTlist elt;l;; /* Cette fonction retourne un couple [I S] contenant l'index et le libelle du choix actuellement en selection dans la listbox.Si aucun choix n'est selectionne ou si le parametre est non valide la fonction retourne nil def: [I S] fun [ListBoxType] */ fun LISTBOX_GETlist(l)= _GETlist l.LISTlist;; /* Cette fonction retourne un [[I S] r1] contenant la liste des selections d'une listebox crée avec le flag LB_MULTIPLE.La fonction retourne nil si la litebox n'a pas de selection multiple ou si le parametre l est non valide def: [[I S] r1] fun [ListBoxType] */ fun LISTBOX_GETlistMSel(l)= _GETlistMSel l.LISTlist;;