STRUCTURE Draw3;


DEFPRES  Draw3P;

ATTR
	Plan = INTEGER;


CONST
	CstRenvoi = ' ';

STRUCT
	Draw3 (ATTR	GrilleX = Integer;
			GrilleY = Integer;
			Sens	= Portrait, Paysage)
		= 	LIST OF (Objet);

	LienSimple
		(ATTR	!Origine_lien = REFERENCE (Objet);
			!Terminaison_lien = REFERENCE (Objet);
			PositionV = Integer;
			PositionH = Integer;
			Hauteur = Integer;
			Largeur = Integer;
			AncreVO = Integer;
			AncreHO = Integer;
			AncreVD = Integer;
			AncreHD = Integer;
			Epaisseur = Integer;
			Extremites = Simple, FlecheMono, FlecheBi, CercleMono,
				     CercleBi)
		=	BEGIN
			{GRAPHICS =} GRAPHICS;
			? AnnotationOrigine = TEXT;
			? AnnotationCentrale = TEXT;
			? AnnotationDestination = TEXT;
			END WITH Largeur ?= 40, Epaisseur ?= 2,
				 Extremites ?= FlecheMono;

    FlecheCreuse
                (ATTR   !Origine_lien;
                        !Terminaison_lien;
                        PositionV;
                        PositionH;
                        Hauteur;
                        Largeur;
                        AncreVO;
                        AncreHO;
                        AncreVD;
                        AncreHD;
                        Epaisseur)
                =       BEGIN
                        GRAPHICS;
                        ? AnnotationOrigine;
                        ? AnnotationCentrale;
                        ? AnnotationDestination;
                        END WITH Largeur ?= 40, Epaisseur ?= 12;


	LienComposite
		(ATTR	PositionV;
			PositionH;
			Hauteur;
			Largeur)
		=	BEGIN
			GRAPHICS;
			END WITH Largeur ?= 10, Hauteur ?= 10,
				 PositionV ?= 0, PositionH ?= 100;

	PartieLienComposite = CASE OF
			LienSimple;
			FlecheCreuse;
			END;
	
	OrigineRenvoi
		(ATTR	PositionV;
			PositionH;
			Hauteur;
			Largeur)
		=	CONSTANT CstRenvoi
			WITH 	PositionV ?= 0, PositionH ?= 100;

	DestinationRenvoi
		(ATTR	PositionV;
			PositionH;
			Hauteur;
			Largeur)
		=	BEGIN
			RefOrigineRenvoi = REFERENCE (OrigineRenvoi);
			CONSTANT CstRenvoi;
			END
			WITH 	PositionV ?= 0, PositionH ?= 100;

	Objet = CASE  OF
		Rectangle 
			(ATTR	PositionV;
				PositionH;
				Hauteur;
				Largeur)
			=	BEGIN 
					GRAPHICS;
					Label
					 (ATTR 	Position_label = 
							Haut_gauche,
							Centre,
							Haut_droit,
							Bas_gauche,
							Bas_droit) = Text
					  with Position_label ?= Centre;
					Ombre 
					 (ATTR SensOmbre = NOuest, Nord, NEst,
					 		Est, SEst, Sud,
							SOuest, Ouest,
							Sans) = GRAPHICS
					  with SensOmbre ?= Sans;
				END
				WITH 	Hauteur ?= 50, Largeur ?= 50,
					PositionV ?= 0, PositionH ?= 100;

		Ellipse
			(ATTR	PositionV;
				PositionH;
				Hauteur;
				Largeur)
			=	BEGIN 
					GRAPHICS;
					Label;
					Ombre;
				END
				WITH 	Hauteur ?= 50, Largeur ?= 50,
					PositionV ?= 0, PositionH ?= 100;

		Trait
			(ATTR	PositionV;
				PositionH;
				Hauteur;
				Largeur;
				Extremites)
			=	GRAPHICS
				WITH 	Hauteur ?= 50, Largeur ?= 80,
					PositionV ?= 0, PositionH ?= 100;

		Polygone
			(ATTR	PositionV;
				PositionH;
				Hauteur;
				Largeur)
			=	BEGIN 
					GRAPHICS;
					Label;
					Ombre;
				END
				WITH 	Hauteur ?= 50, Largeur ?= 80,
					PositionV ?= 0, PositionH ?= 100;

		Texte
			(ATTR	PositionV;
				PositionH;
				Hauteur;
				Largeur)
			=	Paragraphe
				WITH 	Hauteur ?= 50, Largeur ?= 80,
					PositionV ?= 0, PositionH ?= 100;
		
		Groupe
			(ATTR	PositionV;
				PositionH;
				Hauteur;
				Largeur)
			=	LIST OF (Objet)
				WITH 	PositionV ?= 0, PositionH ?= 100;

		Fleche
			(ATTR	PositionV;
				PositionH;
				Hauteur;
				Largeur)
			=	BEGIN 
					GRAPHICS;
					Label;
					Ombre;
				END
				WITH 	Hauteur ?= 40, Largeur ?= 80,
					PositionV ?= 0, PositionH ?= 100;
		Renvoi	=	CASE OF
				OrigineRenvoi;
				DestinationRenvoi;
				END;

		Image
			(ATTR	PositionV;
				PositionH;
				Hauteur;
				Largeur)
			=	PICTURE
				WITH 	PositionV ?= 0, PositionH ?= 100;

		Lien	=	CASE OF
				LienSimple;
				LienComposite;
				FlecheCreuse;
				END;

		Autre_forme
			(ATTR	PositionV;
				PositionH;
				Hauteur;
				Largeur)
			=	BEGIN 
					GRAPHICS;
					Label;
					Ombre;
				END
				WITH 	Hauteur ?= 50, Largeur ?= 50,
					PositionV ?= 0, PositionH ?= 100;

		END;

EXCEPT

        Draw3:			ExtendedSelection;
	PositionV: 		NewVPos;
	PositionH: 		NewHPos;
	Hauteur:		NewHeight;
	Largeur:		NewWidth;
	Rectangle:		MoveResize;
	Ellipse:		MoveResize; {ExtendedSelection;}
	Trait:			MoveResize; {ExtendedSelection;}
	Polygone:		MoveResize; {ExtendedSelection;}
	Fleche:			MoveResize; {ExtendedSelection;}
	Autre_forme:		MoveResize; {ExtendedSelection;}
	Origine_lien:		{361,} ActiveRef;
	Terminaison_lien:	{362,} ActiveRef;
	Groupe:			MoveResize; {ExtendedSelection;}
	Texte:			MoveResize; {ExtendedSelection;}
	Image:			MoveResize; {ExtendedSelection;}
	OrigineRenvoi:		MoveResize; {ExtendedSelection;}
	DestinationRenvoi:	MoveResize; {ExtendedSelection;}
	FlecheCreuse:		MoveResize; {ExtendedSelection;}
	LienSimple:		MoveResize; {ExtendedSelection;}
	LienComposite:		MoveResize; {ExtendedSelection;}


	GRAPHICS:		NoSelect, NoCreate, NoMove, NoResize;
	PICTURE:		NoMove, NoResize;
	Ombre:			NoSelect, NoCreate,
				Hidden, NoCut;
	Label:			{ExtendedSelection} NoResize;
	CstRenvoi:		NoSelect;
END
