/***********************************************************************************************/ /* Texte MultiLigne Editable ecrit par J.DUMAY */ /***********************************************************************************************/ /* MEDL_New */ /* MEDL_Del */ /* MEDL_SetlineOkReflex */ /* MEDL_SetTextReflex */ /* MEDL_GetObject */ /* MEDL_ChangeDisplayFlags */ /* MEDL_ChangeCoordinates */ /* MEDL_GetCoordinates */ /* MEDL_SetText */ /* MEDL_GetLine */ /* MEDL_DelLine */ /* MEDL_GetLineCount */ /* MEDL_GetFirstLine */ /* MEDL_ScrollText */ /* MEDL_SetFirstLine */ /* */ /* */ /***********************************************************************************************/ /* struct MultiEditLineType=[ MEDLObj2D:Obj2D, MEDLedl:ObjText, MEDLfont:ObjFont, MEDLCBText:fun [MultiEditLineType] MultiEditLineType, MEDLCBlineOK:fun [MultiEditLineType S] MultiEditLineType ] MkMultiEditLineType;; */ /*******************************************************************************************************************************/ /* Fonctions Intrinseques au Bitmap */ /*******************************************************************************************************************************/ fun IsMouseOnMultiEditLine(MouseCol,MouseLgn,l)=1 ;; fun IsUserClickAllowedInMultiEditLine()=1;; fun IsUserUnClickAllowedInMultiEditLine()=1;; fun CBTextMultiEdt(objtext,medt)= exec medt.MEDLCBText with [medt]; medt;; fun CBlineOkMultiEdt(objtext,medt,s)= exec medt.MEDLCBlineOK with [medt s]; medt;; fun DsMultiEditLine(elt)= { _DSfont elt.MEDLfont; _DStext elt.MEDLedl; set elt.MEDLCBText=nil; set elt.MEDLCBlineOK=nil; 1 };; /*****************************************************************************************************************************/ /* Les fonctions externes */ /******************************************************************************************************************************/ /* Constructeur de la MultiEditLine 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 MultiLineFlags : 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: MultiEditLineType fun [Chn ContainerType Obj2D [I I] I I I I S] */ fun MEDL_New( Channel, Container, ObjPere, Coordinates, xsize, ysize, MultiLineFlags, FontName, FontSize, FontFlags, Text, Name )= if (Channel==nil) || (Container==nil) || (Coordinates==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 MultiLineFlags -> Obj in if Obj==nil then nil else let Coordinates -> [posx posy] in let MkMultiEditLineType [Obj (_CReditText Channel Container.CoObjWin posx posy xsize ysize (if MultiLineFlags&O2D_HIDE then ET_ALIGN_LEFT|ET_VSCROLL|ET_HIDDEN|ET_DOWN else ET_ALIGN_LEFT|ET_VSCROLL|ET_DOWN ) Text ) (_CRfont Channel FontSize 0 FontFlags FontName) nil nil ] -> edl in { _AFFfontText edl.MEDLedl edl.MEDLfont; if (MultiLineFlags&~O2D_ENABLE)&&(MultiLineFlags&~O2D_HIDE) then _ENtext edl.MEDLedl 0 else nil; /* les methodes */ O2D_CBIsMouseOnDisplayObject Obj edl @IsMouseOnMultiEditLine; O2D_CBUserClickAllowed Obj edl @IsUserClickAllowedInMultiEditLine; O2D_CBUserUnClickAllowed Obj edl @IsUserUnClickAllowedInMultiEditLine; O2D_CBDsObject Obj edl @DsMultiEditLine; _CBtext edl.MEDLedl @CBTextMultiEdt edl; _CBlineOk edl.MEDLedl @CBlineOkMultiEdt edl; edl };; /* Destructeur def: MultiEditLineType fun [MultiEditLineType] */ fun MEDL_Del(elt)= O2D_DelObject elt.MEDLObj2D;elt;; fun MEDL_SetlineOkReflex(elt,Reflexe,Param)= if elt==nil then nil else { set elt.MEDLCBText=mkfun2 Reflexe Param; elt };; fun MEDL_SetTextReflex(elt,Reflexe,Param)= if elt==nil then nil else { set elt.MEDLCBlineOK=mkfun3 Reflexe Param; elt };; /* renvoie l'Obj2D associe a l'objet MultiEditLine */ /* def : Obj2D fun [MultiEditLineType] */ fun MEDL_GetObject(elt)= elt.MEDLObj2D;; /* 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: MultiEditLineType fun [MultiEditLineType I I I] */ fun MEDL_ChangeDisplayFlags(elt,NewFlag,RedrawFlag,RepaintFlag)= if NewFlag&O2D_HIDE then _SHOWtext elt.MEDLedl WINDOW_HIDDEN else if NewFlag&O2D_ENABLE then { _SHOWtext elt.MEDLedl WINDOW_UNHIDDEN; _ENtext elt.MEDLedl 1; nil } else if (NewFlag&~O2D_ENABLE)&&(NewFlag&~O2D_HIDE) then { _ENtext elt.MEDLedl 0; nil } else nil; O2D_ChangeObjDisplayFlag elt.MEDLObj2D NewFlag RedrawFlag RepaintFlag; elt;; /* 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: MultiEditLineType fun [MultiEditLineType [I I] I I] */ fun MEDL_ChangeCoordinates(elt,NewCoordinates,RedrawFlag,RepaintFlag)= let _GETtextPositionSize elt.MEDLedl -> [_ _ w h] in let NewCoordinates -> [x y] in _POSITIONtext elt.MEDLedl x y w h; O2D_ChangeObjCoordinates elt.MEDLObj2D NewCoordinates RedrawFlag RepaintFlag; elt;; /* renvoie les coordonnees de la MultiEditLine par rapport a son pere [I I] */ /* def : [I I] fun [MultiEditLineType] */ fun MEDL_GetCoordinates(elt)= O2D_GetObjCoordinates elt.MEDLObj2D;; /* Cette fonction permet de changer le texte de la ligne editable nil equivaut a une chaine vide def : MultiEditLineType fun [MultiEditLineType S] */ fun MEDL_SetText(elt,txt)= _SETtext elt.MEDLedl txt;elt;; /* Cette fonction permet de concatener le texte avec celui de la ligne editable nil equivaut a une chaine vide def : MultiEditLineType fun [MultiEditLineType S] */ fun MEDL_AddText(elt,txt)= _ADDtext elt.MEDLedl txt;elt;; /* Cette fonction permet de fixer la taille maximale en charactere de la ligne. Le parametre taille doit etre compris entre 0 et 32657 def : MultiEditLineType fun [MultiEditLineType I] */ fun MEDL_SetTextSize(elt,taille)= _SETtextSize elt.MEDLedl taille;elt;; /* Cette fonction permet de lire la n-eme ligne de la ligne editable def : S fun [MultiEditLineType I] */ fun MEDL_GetLine(elt,n)= _GETline elt.MEDLedl n;; /* Cette fonction permet d'obtenir le contenu texte de la ligne editable def : S fun [MultiEditLineType] */ fun MEDL_GetText(elt)= _GETtext elt.MEDLedl;; /* Cette fonction permet de supprimer l i-eme ligne de la ligne editable elt def : MultiEditLineType fun [MultiEditLineType] */ fun MEDL_DelLine(elt,i)= _DELline elt.MEDLedl i;elt;; /* Cette fonction retourne le nombre de lignes de la ligne editable elt def : I fun [MultiEditLineType] */ fun MEDL_GetLineCount(elt)= _GETlineCount elt.MEDLedl;; /* Cette fonction permet de connaitre le numero de la premiere ligne visible de la ligene editable def : I fun [MultiEditLineType] */ fun MEDL_GetFirstLine(elt)= _GETfirstLine elt.MEDLedl;; /* Cette fonction positionne la curseur faisant jouer le mecanisme d'autoscroll et d'ascenseur de la ligne editable pour scroller le curseur de [charx chary] characteres def : MultiEditLineType fun [MultiEditLineType I I] */ fun MEDL_ScrollText(elt,charx,chary)= _SCROLLtext elt.MEDLedl charx chary;elt;; /* Cette fonction permet de faire scroller le texte de amniere a ce que la ligne i soit la premiere visible def : MultiEditLineType fun [MultiEditLineType I] */ fun MEDL_SetFirstLine(elt,i)= _SETfirstLine elt.MEDLedl i;elt;;