1/*
2 * Author:      William Chia-Wei Cheng (bill.cheng@acm.org)
3 *
4 * Copyright (C) 2001-2009, William Chia-Wei Cheng.
5 *
6 * This file may be distributed under the terms of the Q Public License
7 * as defined by Trolltech AS of Norway and appearing in the file
8 * LICENSE.QPL included in the packaging of this file.
9 *
10 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING
11 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
12 * PURPOSE.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
13 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
14 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
15 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
16 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 *
18 * @(#)$Header: /mm2/home/cvs/bc-src/tgif/poly.e,v 1.11 2011/05/16 16:21:59 william Exp $
19 */
20
21#ifndef _POLY_E_
22#define _POLY_E_
23
24#include "list.e"
25
26typedef struct tagWiringInfo {
27   int num_ports_to_connect; /* this used to be drawPolyToEndInANode */
28
29   struct ObjRec *first_port_obj, *first_port_owner_obj;
30   char first_port_name[MAXSTRING]; /* this used to be drawPolyFirstNodeName */
31
32   struct ObjRec *last_port_obj, *last_port_owner_obj;
33   char last_port_name[MAXSTRING]; /* this used to be drawPolyLastNodeName */
34} WiringInfo;
35
36extern WiringInfo	gstWiringInfo;
37
38extern int	polyDrawn;
39extern int	queryPolyNameOnConnect;
40
41extern short	origWidthOfLine[];
42extern short	origArrowHeadH[];
43extern short	origArrowHeadW[];
44
45extern short	*curWidthOfLine;
46extern short	*curArrowHeadH;
47extern short	*curArrowHeadW;
48
49extern char	**curWidthOfLineSpec;
50extern char	**curArrowHeadHSpec;
51extern char	**curArrowHeadWSpec;
52
53extern int	numPtsInPoly;
54extern CVList	gStructSplineList;
55
56extern struct PtRec	*lastPtPtr;
57extern struct ObjRec	* drawPolyHighlightedNode;
58
59#ifdef _INCLUDE_FROM_POLY_C_
60#undef extern
61#define extern
62#endif /*_INCLUDE_FROM_POLY_C_*/
63
64extern IntPoint	*GetPolyOrPolygonAbsVs ARGS_DECL((int *pnReturn,
65                                                  int *pnAllocated,
66                                                  struct ObjRec *));
67extern XPoint	*MakePolyVertex ARGS_DECL((int XOff, int YOff, int NumVs,
68		                            IntPoint*));
69extern void	CalcPolyBBox ARGS_DECL((struct ObjRec *));
70extern void	UpdPolyBBox ARGS_DECL((struct ObjRec *, int NumPts,
71		                       IntPoint*));
72extern void	UpdNonIntSplinePolyBBox ARGS_DECL((struct ObjRec *, int NumPts,
73		                                   IntPoint*));
74extern void	UpdPolyOrPolygonBBox ARGS_DECL((struct ObjRec *));
75extern void	CreatePolyObj ARGS_DECL((int NumPts, int CreateAbsolute));
76extern void	ResetCreatePoly ARGS_DECL((void));
77extern void	AddPtToCreatePoly ARGS_DECL((int AbsX, int AbsY));
78extern void	FreePointsForCont ARGS_DECL((int *pn_ltx, int *pn_lty,
79		                             int *pn_rbx, int *pn_rby));
80extern int	SetFirstPoint ARGS_DECL((int grid_x, int grid_y,
81		                         IntPointTriplet*));
82extern int	AddPointForCont ARGS_DECL((int grid_x, int grid_y,
83		                           IntPointTriplet*));
84extern void	UpdateLastPointForCont ARGS_DECL((IntPointTriplet*));
85extern void	DrawAllStructSplinePointsForCont ARGS_DECL((int num_pts));
86extern void	UpdatePrevToLastPointForCont ARGS_DECL((IntPointTriplet*));
87extern void	DrawPoly ARGS_DECL((XEvent*));
88extern void	SetWiringNodeInfo ARGS_DECL((struct ObjRec *port_obj,
89		                             struct ObjRec *port_owner_obj,
90		                             char *port_name, int first));
91extern void	ResetWiringNodeInfo ARGS_DECL((void));
92extern void	InputPolyPts ARGS_DECL((void));
93extern void	JoinPoly ARGS_DECL((void));
94extern void	CutPoly ARGS_DECL((void));
95extern double	GetWidthInDouble ARGS_DECL((int nVal, char *pszSpec,
96		                            int *pnIsInt));
97extern void	SetWidthAndSpec ARGS_DECL((double dWidth, int *pnWidth,
98		                           char *pszWidthSpec));
99extern void	ScaleWidthAndSpec ARGS_DECL((double dScale, int *pnWidth,
100		                             char *pszWidthSpec));
101extern void	DumpArrow ARGS_DECL((FILE*, IntPoint *TailV, IntPoint *HeadV,
102		                     int ArrowW, int ArrowH, char *AWSpec,
103		                     char *AHSpec, int Pen, int TransPat,
104		                     int ColorIndex));
105extern void	DumpPolyObj ARGS_DECL((FILE*, struct ObjRec *));
106extern int	NeedsToCachePolyObj ARGS_DECL((struct ObjRec *));
107extern void	DrawPolyObj ARGS_DECL((Window, int XOff, int YOff,
108		                       struct ObjRec *));
109extern void	SaveSmoothHinge ARGS_DECL((FILE*, int Curved, int NumPts,
110		                           char *Smooth));
111extern void	SavePolyObj ARGS_DECL((FILE*, struct ObjRec *));
112extern int	ReadSmoothHinge ARGS_DECL((FILE*, int Curved, int NumPts,
113		                           char *Smooth));
114extern void	ReadPolyObj ARGS_DECL((FILE*, char *Inbuf, struct ObjRec **));
115extern void	SetPolyPropMask ARGS_DECL((struct ObjRec *, long *plMask,
116		                           long *plSkip,
117		                           struct PropertiesRec *pProp));
118extern void	FreePolyObj ARGS_DECL((struct ObjRec *));
119extern void	InitPoly ARGS_DECL((void));
120
121#ifdef _INCLUDE_FROM_POLY_C_
122#undef extern
123#ifndef _NO_RECURSIVE_EXTERN
124#define extern extern
125#endif /* ~_NO_RECURSIVE_EXTERN */
126#endif /*_INCLUDE_FROM_POLY_C_*/
127
128#endif /*_POLY_E_*/
129