1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Basic OGL classes and definitions
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
16 #pragma interface "basic.h"
19 #define OGL_VERSION 2.0
21 #ifndef DEFAULT_MOUSE_TOLERANCE
22 #define DEFAULT_MOUSE_TOLERANCE 3
25 // Edit these lines if you positively don't want PROLOGIO support
39 #define ARROW_MIDDLE 3
42 // Control point types
43 // Rectangle and most other shapes
44 #define CONTROL_POINT_VERTICAL 1
45 #define CONTROL_POINT_HORIZONTAL 2
46 #define CONTROL_POINT_DIAGONAL 3
49 #define CONTROL_POINT_ENDPOINT_TO 4
50 #define CONTROL_POINT_ENDPOINT_FROM 5
51 #define CONTROL_POINT_LINE 6
53 // Types of formatting: can be combined in a bit list
56 #define FORMAT_CENTRE_HORIZ 1
57 // Centre horizontally
58 #define FORMAT_CENTRE_VERT 2
60 #define FORMAT_SIZE_TO_CONTENTS 4
61 // Resize shape to contents
66 #define SHADOW_RIGHT 2
73 #define SHAPE_BASIC wxTYPE_USER + 1
74 #define SHAPE_RECTANGLE wxTYPE_USER + 2
75 #define SHAPE_ELLIPSE wxTYPE_USER + 3
76 #define SHAPE_POLYGON wxTYPE_USER + 4
77 #define SHAPE_CIRCLE wxTYPE_USER + 5
78 #define SHAPE_LINE wxTYPE_USER + 6
79 #define SHAPE_DIVIDED_RECTANGLE wxTYPE_USER + 8
80 #define SHAPE_COMPOSITE wxTYPE_USER + 9
81 #define SHAPE_CONTROL_POINT wxTYPE_USER + 10
82 #define SHAPE_DRAWN wxTYPE_USER + 11
83 #define SHAPE_DIVISION wxTYPE_USER + 12
84 #define SHAPE_LABEL_OBJECT wxTYPE_USER + 13
85 #define SHAPE_BITMAP wxTYPE_USER + 14
86 #define SHAPE_DIVIDED_OBJECT_CONTROL_POINT wxTYPE_USER + 15
88 #define OBJECT_REGION wxTYPE_USER + 20
90 #define OP_CLICK_LEFT 1
91 #define OP_CLICK_RIGHT 2
92 #define OP_DRAG_LEFT 4
93 #define OP_DRAG_RIGHT 8
95 #define OP_ALL (OP_CLICK_LEFT | OP_CLICK_RIGHT | OP_DRAG_LEFT | OP_DRAG_RIGHT)
97 class wxShapeTextLine
;
100 class wxControlPoint
;
105 class WXDLLEXPORT wxExpr
;
106 class WXDLLEXPORT wxExprDatabase
;
110 #define WXROUND(x) ( (long) (x + 0.5) )
112 class wxShapeEvtHandler
: public wxObject
114 DECLARE_DYNAMIC_CLASS(wxShapeEvtHandler
)
117 wxShapeEvtHandler(wxShapeEvtHandler
*prev
= NULL
, wxShape
*shape
= NULL
);
118 virtual ~wxShapeEvtHandler();
120 inline void SetShape(wxShape
*sh
) { m_handlerShape
= sh
; }
121 inline wxShape
*GetShape() const { return m_handlerShape
; }
123 inline void SetPreviousHandler(wxShapeEvtHandler
* handler
) { m_previousHandler
= handler
; }
124 inline wxShapeEvtHandler
* GetPreviousHandler() const { return m_previousHandler
; }
126 // This is called when the _shape_ is deleted.
127 virtual void OnDelete();
128 virtual void OnDraw(wxDC
& dc
);
129 virtual void OnDrawContents(wxDC
& dc
);
130 virtual void OnMoveLinks(wxDC
& dc
);
131 virtual void OnErase(wxDC
& dc
);
132 virtual void OnEraseContents(wxDC
& dc
);
133 virtual void OnHighlight(wxDC
& dc
);
134 virtual void OnLeftClick(double x
, double y
, int keys
= 0, int attachment
= 0);
135 virtual void OnRightClick(double x
, double y
, int keys
= 0, int attachment
= 0);
136 virtual void OnSize(double x
, double y
);
137 virtual bool OnMovePre(wxDC
& dc
, double x
, double y
, double old_x
, double old_y
, bool display
= TRUE
);
138 virtual void OnMovePost(wxDC
& dc
, double x
, double y
, double old_x
, double old_y
, bool display
= TRUE
);
140 virtual void OnDragLeft(bool draw
, double x
, double y
, int keys
=0, int attachment
= 0); // Erase if draw false
141 virtual void OnBeginDragLeft(double x
, double y
, int keys
=0, int attachment
= 0);
142 virtual void OnEndDragLeft(double x
, double y
, int keys
=0, int attachment
= 0);
143 virtual void OnDragRight(bool draw
, double x
, double y
, int keys
=0, int attachment
= 0); // Erase if draw false
144 virtual void OnBeginDragRight(double x
, double y
, int keys
=0, int attachment
= 0);
145 virtual void OnEndDragRight(double x
, double y
, int keys
=0, int attachment
= 0);
146 virtual void OnDrawOutline(wxDC
& dc
, double x
, double y
, double w
, double h
);
147 virtual void OnDrawControlPoints(wxDC
& dc
);
148 virtual void OnEraseControlPoints(wxDC
& dc
);
149 virtual void OnMoveLink(wxDC
& dc
, bool moveControlPoints
= TRUE
);
151 // Control points ('handles') redirect control to the actual shape, to make it easier
152 // to override sizing behaviour.
153 virtual void OnSizingDragLeft(wxControlPoint
* pt
, bool draw
, double x
, double y
, int keys
=0, int attachment
= 0); // Erase if draw false
154 virtual void OnSizingBeginDragLeft(wxControlPoint
* pt
, double x
, double y
, int keys
=0, int attachment
= 0);
155 virtual void OnSizingEndDragLeft(wxControlPoint
* pt
, double x
, double y
, int keys
=0, int attachment
= 0);
157 virtual void OnBeginSize(double WXUNUSED(w
), double WXUNUSED(h
)) { }
158 virtual void OnEndSize(double WXUNUSED(w
), double WXUNUSED(h
)) { }
160 // Can override this to prevent or intercept line reordering.
161 virtual void OnChangeAttachment(int attachment
, wxLineShape
* line
, wxList
& ordering
);
163 // Creates a copy of this event handler.
164 wxShapeEvtHandler
*CreateNewCopy();
166 // Does the copy - override for new event handlers which might store
167 // app-specific data.
168 virtual void CopyData(wxShapeEvtHandler
& copy
) {};
171 wxShapeEvtHandler
* m_previousHandler
;
172 wxShape
* m_handlerShape
;
175 class wxShape
: public wxShapeEvtHandler
177 DECLARE_ABSTRACT_CLASS(wxShape
)
181 wxShape(wxShapeCanvas
*can
= NULL
);
183 virtual void GetBoundingBoxMax(double *width
, double *height
);
184 virtual void GetBoundingBoxMin(double *width
, double *height
) = 0;
185 virtual bool GetPerimeterPoint(double x1
, double y1
,
186 double x2
, double y2
,
187 double *x3
, double *y3
);
188 inline wxShapeCanvas
*GetCanvas() { return m_canvas
; }
189 void SetCanvas(wxShapeCanvas
*the_canvas
);
190 virtual void AddToCanvas(wxShapeCanvas
*the_canvas
, wxShape
*addAfter
= NULL
);
191 virtual void InsertInCanvas(wxShapeCanvas
*the_canvas
);
193 virtual void RemoveFromCanvas(wxShapeCanvas
*the_canvas
);
194 inline double GetX() const { return m_xpos
; }
195 inline double GetY() const { return m_ypos
; }
196 inline void SetX(double x
) { m_xpos
= x
; }
197 inline void SetY(double y
) { m_ypos
= y
; }
199 inline wxShape
*GetParent() const { return m_parent
; }
200 inline void SetParent(wxShape
*p
) { m_parent
= p
; }
201 wxShape
*GetTopAncestor();
202 inline wxList
& GetChildren() { return m_children
; }
204 virtual void OnDraw(wxDC
& dc
);
205 virtual void OnDrawContents(wxDC
& dc
);
206 virtual void OnMoveLinks(wxDC
& dc
);
207 virtual void Unlink() { };
208 void SetDrawHandles(bool drawH
);
209 inline bool GetDrawHandles() { return m_drawHandles
; }
210 virtual void OnErase(wxDC
& dc
);
211 virtual void OnEraseContents(wxDC
& dc
);
212 virtual void OnHighlight(wxDC
& dc
);
213 virtual void OnLeftClick(double x
, double y
, int keys
= 0, int attachment
= 0);
214 virtual void OnRightClick(double x
, double y
, int keys
= 0, int attachment
= 0);
215 virtual void OnSize(double x
, double y
);
216 virtual bool OnMovePre(wxDC
& dc
, double x
, double y
, double old_x
, double old_y
, bool display
= TRUE
);
217 virtual void OnMovePost(wxDC
& dc
, double x
, double y
, double old_x
, double old_y
, bool display
= TRUE
);
219 virtual void OnDragLeft(bool draw
, double x
, double y
, int keys
=0, int attachment
= 0); // Erase if draw false
220 virtual void OnBeginDragLeft(double x
, double y
, int keys
=0, int attachment
= 0);
221 virtual void OnEndDragLeft(double x
, double y
, int keys
=0, int attachment
= 0);
222 virtual void OnDragRight(bool draw
, double x
, double y
, int keys
=0, int attachment
= 0); // Erase if draw false
223 virtual void OnBeginDragRight(double x
, double y
, int keys
=0, int attachment
= 0);
224 virtual void OnEndDragRight(double x
, double y
, int keys
=0, int attachment
= 0);
225 virtual void OnDrawOutline(wxDC
& dc
, double x
, double y
, double w
, double h
);
226 virtual void OnDrawControlPoints(wxDC
& dc
);
227 virtual void OnEraseControlPoints(wxDC
& dc
);
229 virtual void OnBeginSize(double WXUNUSED(w
), double WXUNUSED(h
)) { }
230 virtual void OnEndSize(double WXUNUSED(w
), double WXUNUSED(h
)) { }
232 // Control points ('handles') redirect control to the actual shape, to make it easier
233 // to override sizing behaviour.
234 virtual void OnSizingDragLeft(wxControlPoint
* pt
, bool draw
, double x
, double y
, int keys
=0, int attachment
= 0); // Erase if draw false
235 virtual void OnSizingBeginDragLeft(wxControlPoint
* pt
, double x
, double y
, int keys
=0, int attachment
= 0);
236 virtual void OnSizingEndDragLeft(wxControlPoint
* pt
, double x
, double y
, int keys
=0, int attachment
= 0);
238 virtual void MakeControlPoints();
239 virtual void DeleteControlPoints(wxDC
*dc
= NULL
);
240 virtual void ResetControlPoints();
242 inline wxShapeEvtHandler
*GetEventHandler() { return m_eventHandler
; }
243 inline void SetEventHandler(wxShapeEvtHandler
*handler
) { m_eventHandler
= handler
; }
245 // Mandatory control points, e.g. the divided line moving handles
246 // should appear even if a child of the 'selected' image
247 virtual void MakeMandatoryControlPoints();
248 virtual void ResetMandatoryControlPoints();
250 inline virtual bool Recompute() { return TRUE
; };
251 // Calculate size recursively, if size changes. Size might depend on children.
252 inline virtual void CalculateSize() { };
253 virtual void Select(bool select
= TRUE
, wxDC
* dc
= NULL
);
254 virtual void SetHighlight(bool hi
= TRUE
, bool recurse
= FALSE
);
255 inline virtual bool IsHighlighted() const { return m_highlighted
; };
256 virtual bool Selected() const;
257 virtual bool AncestorSelected() const;
258 void SetSensitivityFilter(int sens
= OP_ALL
, bool recursive
= FALSE
);
259 int GetSensitivityFilter() const { return m_sensitivity
; }
260 void SetDraggable(bool drag
, bool recursive
= FALSE
);
261 inline void SetFixedSize(bool x
, bool y
) { m_fixedWidth
= x
; m_fixedHeight
= y
; };
262 inline void GetFixedSize(bool *x
, bool *y
) const { *x
= m_fixedWidth
; *y
= m_fixedHeight
; };
263 inline bool GetFixedWidth() const { return m_fixedWidth
; }
264 inline bool GetFixedHeight() const { return m_fixedHeight
; }
265 inline void SetSpaceAttachments(bool sp
) { m_spaceAttachments
= sp
; };
266 inline bool GetSpaceAttachments() const { return m_spaceAttachments
; };
267 void SetShadowMode(int mode
, bool redraw
= FALSE
);
268 inline int GetShadowMode() const { return m_shadowMode
; }
269 virtual bool HitTest(double x
, double y
, int *attachment
, double *distance
);
270 inline void SetCentreResize(bool cr
) { m_centreResize
= cr
; }
271 inline bool GetCentreResize() const { return m_centreResize
; }
272 inline wxList
& GetLines() { return m_lines
; }
273 inline void SetDisableLabel(bool flag
) { m_disableLabel
= flag
; }
274 inline bool GetDisableLabel() const { return m_disableLabel
; }
275 inline void SetAttachmentMode(bool flag
) { m_attachmentMode
= flag
; }
276 inline bool GetAttachmentMode() const { return m_attachmentMode
; }
277 inline void SetId(long i
) { m_id
= i
; }
278 inline long GetId() const { return m_id
; }
280 void SetPen(wxPen
*pen
);
281 void SetBrush(wxBrush
*brush
);
282 inline void SetClientData(wxObject
*client_data
) { m_clientData
= client_data
; };
283 inline wxObject
*GetClientData() const { return m_clientData
; };
285 virtual void Show(bool show
);
286 virtual bool IsShown() const { return m_visible
; }
287 virtual void Move(wxDC
& dc
, double x1
, double y1
, bool display
= TRUE
);
288 virtual void Erase(wxDC
& dc
);
289 virtual void EraseContents(wxDC
& dc
);
290 virtual void Draw(wxDC
& dc
);
291 virtual void Flash();
292 virtual void MoveLinks(wxDC
& dc
);
293 virtual void DrawContents(wxDC
& dc
); // E.g. for drawing text label
294 virtual void SetSize(double x
, double y
, bool recursive
= TRUE
);
295 virtual void SetAttachmentSize(double x
, double y
);
296 void Attach(wxShapeCanvas
*can
);
299 inline virtual bool Constrain() { return FALSE
; } ;
301 void AddLine(wxLineShape
*line
, wxShape
*other
,
302 int attachFrom
= 0, int attachTo
= 0,
304 int positionFrom
= -1, int positionTo
= -1);
306 // Return the zero-based position in m_lines of line.
307 int GetLinePosition(wxLineShape
* line
);
309 void AddText(const wxString
& string
);
311 inline wxPen
*GetPen() const { return m_pen
; }
312 inline wxBrush
*GetBrush() const { return m_brush
; }
315 * Region-specific functions (defaults to the default region
319 // Set the default, single region size to be consistent
320 // with the object size
321 void SetDefaultRegionSize();
322 virtual void FormatText(wxDC
& dc
, const wxString
& s
, int regionId
= 0);
323 virtual void SetFormatMode(int mode
, int regionId
= 0);
324 virtual int GetFormatMode(int regionId
= 0) const;
325 virtual void SetFont(wxFont
*font
, int regionId
= 0);
326 virtual wxFont
*GetFont(int regionId
= 0) const;
327 virtual void SetTextColour(const wxString
& colour
, int regionId
= 0);
328 virtual wxString
GetTextColour(int regionId
= 0) const;
329 virtual inline int GetNumberOfTextRegions() const { return m_regions
.Number(); }
330 virtual void SetRegionName(const wxString
& name
, int regionId
= 0);
332 // Get the name representing the region for this image alone.
333 // I.e. this image's region ids go from 0 to N-1.
334 // But the names might be "0.2.0", "0.2.1" etc. depending on position in composite.
335 // So the last digit represents the region Id, the others represent positions
337 virtual wxString
GetRegionName(int regionId
);
339 // Gets the region corresponding to the name, or -1 if not found.
340 virtual int GetRegionId(const wxString
& name
);
342 // Construct names for regions, unique even for children of a composite.
343 virtual void NameRegions(const wxString
& parentName
= "");
345 // Get list of regions
346 inline wxList
& GetRegions() const { return (wxList
&) m_regions
; }
348 virtual void AddRegion(wxShapeRegion
*region
);
350 virtual void ClearRegions();
352 // Assign new ids to this image and children (if composite)
355 // Returns actual image (same as 'this' if non-composite) and region id
356 // for given region name.
357 virtual wxShape
*FindRegion(const wxString
& regionName
, int *regionId
);
359 // Finds all region names for this image (composite or simple).
360 // Supply empty string list.
361 virtual void FindRegionNames(wxStringList
& list
);
363 virtual void ClearText(int regionId
= 0);
364 void RemoveLine(wxLineShape
*line
);
367 // Prolog database stuff
368 virtual char *GetFunctor();
369 virtual void WritePrologAttributes(wxExpr
*clause
);
370 virtual void ReadPrologAttributes(wxExpr
*clause
);
372 // In case the object has constraints it needs to read in in a different pass
373 inline virtual void ReadConstraints(wxExpr
*WXUNUSED(clause
), wxExprDatabase
*WXUNUSED(database
)) { };
374 virtual void WriteRegions(wxExpr
*clause
);
375 virtual void ReadRegions(wxExpr
*clause
);
379 virtual bool GetAttachmentPosition(int attachment
, double *x
, double *y
,
380 int nth
= 0, int no_arcs
= 1, wxLineShape
*line
= NULL
);
381 virtual int GetNumberOfAttachments();
382 virtual bool AttachmentIsValid(int attachment
);
384 // Assuming the attachment lies along a vertical or horizontal line,
385 // calculate the position on that point.
386 wxRealPoint
CalcSimpleAttachment(const wxRealPoint
& pt1
, const wxRealPoint
& pt2
,
387 int nth
, int noArcs
, wxLineShape
* line
);
389 // Returns TRUE if pt1 <= pt2 in the sense that one point comes before another on an
390 // edge of the shape.
391 // attachmentPoint is the attachment point (= side) in question.
392 bool AttachmentSortTest(int attachmentPoint
, const wxRealPoint
& pt1
, const wxRealPoint
& pt2
);
394 virtual void EraseLinks(wxDC
& dc
, int attachment
= -1, bool recurse
= FALSE
);
395 virtual void DrawLinks(wxDC
& dc
, int attachment
= -1, bool recurse
= FALSE
);
397 virtual void MoveLineToNewAttachment(wxDC
& dc
, wxLineShape
*to_move
,
400 // Reorders the lines coming into the node image at this attachment
401 // position, in the order in which they appear in linesToSort.
402 virtual void SortLines(int attachment
, wxList
& linesToSort
);
404 // Apply an attachment ordering change
405 void ApplyAttachmentOrdering(wxList
& ordering
);
407 // Can override this to prevent or intercept line reordering.
408 virtual void OnChangeAttachment(int attachment
, wxLineShape
* line
, wxList
& ordering
);
410 // This is really to distinguish between lines and other images.
411 // For lines, want to pass drag to canvas, since lines tend to prevent
412 // dragging on a canvas (they get in the way.)
413 virtual bool Draggable() const { return TRUE
; }
415 // Returns TRUE if image is a descendant of this image
416 bool HasDescendant(wxShape
*image
);
418 // Creates a copy of this shape.
419 wxShape
*CreateNewCopy(bool resetMapping
= TRUE
, bool recompute
= TRUE
);
421 // Does the copying for this object
422 virtual void Copy(wxShape
& copy
);
424 // Does the copying for this object, including copying event
425 // handler data if any. Calls the virtual Copy function.
426 void CopyWithHandler(wxShape
& copy
);
428 // Rotate about the given axis by the given amount in radians
429 // (does nothing for most objects)
430 // But even non-rotating objects should record their notional
431 // rotation in case it's important (e.g. in dog-leg code).
432 virtual inline void Rotate(double WXUNUSED(x
), double WXUNUSED(y
), double theta
) { m_rotation
= theta
; }
433 virtual inline double GetRotation() const { return m_rotation
; }
435 void ClearAttachments();
437 // Recentres all the text regions for this object
438 void Recentre(wxDC
& dc
);
440 // Clears points from a list of wxRealPoints
441 void ClearPointList(wxList
& list
);
444 wxObject
* m_clientData
;
447 wxShapeEvtHandler
* m_eventHandler
;
449 double m_xpos
, m_ypos
;
453 wxColour
* m_textColour
;
454 wxString m_textColourName
;
455 wxShapeCanvas
* m_canvas
;
458 wxList m_controlPoints
;
460 wxList m_attachmentPoints
;
465 bool m_highlighted
; // Different from selected: user-defined highlighting,
466 // e.g. thick border.
470 bool m_attachmentMode
; // TRUE if using attachments, FALSE otherwise
471 bool m_spaceAttachments
; // TRUE if lines at one side should be spaced
474 bool m_centreResize
; // Default is to resize keeping the centre constant (TRUE)
475 bool m_drawHandles
; // Don't draw handles if FALSE, usually TRUE
476 wxList m_children
; // In case it's composite
477 wxShape
* m_parent
; // In case it's a child
480 wxBrush
* m_shadowBrush
;
483 int m_textMarginX
; // Gap between text and border
485 wxString m_regionName
;
488 class wxPolygonShape
: public wxShape
490 DECLARE_DYNAMIC_CLASS(wxPolygonShape
)
495 // Takes a list of wxRealPoints; each point is an OFFSET from the centre.
496 // Deletes user's points in destructor.
497 virtual void Create(wxList
*points
);
498 virtual void ClearPoints();
500 void GetBoundingBoxMin(double *w
, double *h
);
501 void CalculateBoundingBox();
502 bool GetPerimeterPoint(double x1
, double y1
,
503 double x2
, double y2
,
504 double *x3
, double *y3
);
505 bool HitTest(double x
, double y
, int *attachment
, double *distance
);
506 void SetSize(double x
, double y
, bool recursive
= TRUE
);
507 void OnDraw(wxDC
& dc
);
508 void OnDrawOutline(wxDC
& dc
, double x
, double y
, double w
, double h
);
510 // Control points ('handles') redirect control to the actual shape, to make it easier
511 // to override sizing behaviour.
512 virtual void OnSizingDragLeft(wxControlPoint
* pt
, bool draw
, double x
, double y
, int keys
=0, int attachment
= 0);
513 virtual void OnSizingBeginDragLeft(wxControlPoint
* pt
, double x
, double y
, int keys
=0, int attachment
= 0);
514 virtual void OnSizingEndDragLeft(wxControlPoint
* pt
, double x
, double y
, int keys
=0, int attachment
= 0);
516 // A polygon should have a control point at each vertex,
517 // with the option of moving the control points individually
518 // to change the shape.
519 void MakeControlPoints();
520 void ResetControlPoints();
522 // If we've changed the shape, must make the original
523 // points match the working points
524 void UpdateOriginalPoints();
526 // Add a control point after the given point
527 virtual void AddPolygonPoint(int pos
= 0);
529 // Delete a control point
530 virtual void DeletePolygonPoint(int pos
= 0);
532 // Recalculates the centre of the polygon
533 virtual void CalculatePolygonCentre();
536 // Prolog database stuff
537 void WritePrologAttributes(wxExpr
*clause
);
538 void ReadPrologAttributes(wxExpr
*clause
);
541 int GetNumberOfAttachments();
542 bool GetAttachmentPosition(int attachment
, double *x
, double *y
,
543 int nth
= 0, int no_arcs
= 1, wxLineShape
*line
= NULL
);
544 bool AttachmentIsValid(int attachment
);
545 // Does the copying for this object
546 void Copy(wxShape
& copy
);
548 inline wxList
*GetPoints() { return m_points
; }
552 wxList
* m_originalPoints
;
554 double m_boundHeight
;
555 double m_originalWidth
;
556 double m_originalHeight
;
559 class wxRectangleShape
: public wxShape
561 DECLARE_DYNAMIC_CLASS(wxRectangleShape
)
563 wxRectangleShape(double w
= 0.0, double h
= 0.0);
564 void GetBoundingBoxMin(double *w
, double *h
);
565 bool GetPerimeterPoint(double x1
, double y1
,
566 double x2
, double y2
,
567 double *x3
, double *y3
);
568 void OnDraw(wxDC
& dc
);
569 void SetSize(double x
, double y
, bool recursive
= TRUE
);
570 void SetCornerRadius(double rad
); // If > 0, rounded corners
573 // Prolog database stuff
574 void WritePrologAttributes(wxExpr
*clause
);
575 void ReadPrologAttributes(wxExpr
*clause
);
578 int GetNumberOfAttachments();
579 bool GetAttachmentPosition(int attachment
, double *x
, double *y
,
580 int nth
= 0, int no_arcs
= 1, wxLineShape
*line
= NULL
);
581 // Does the copying for this object
582 void Copy(wxShape
& copy
);
584 inline double GetWidth() const { return m_width
; }
585 inline double GetHeight() const { return m_height
; }
586 inline void SetWidth(double w
) { m_width
= w
; }
587 inline void SetHeight(double h
) { m_height
= h
; }
592 double m_cornerRadius
;
595 class wxTextShape
: public wxRectangleShape
597 DECLARE_DYNAMIC_CLASS(wxTextShape
)
599 wxTextShape(double width
= 0.0, double height
= 0.0);
601 void OnDraw(wxDC
& dc
);
604 void WritePrologAttributes(wxExpr
*clause
);
607 // Does the copying for this object
608 void Copy(wxShape
& copy
);
611 class wxEllipseShape
: public wxShape
613 DECLARE_DYNAMIC_CLASS(wxEllipseShape
)
615 wxEllipseShape(double w
= 0.0, double h
= 0.0);
617 void GetBoundingBoxMin(double *w
, double *h
);
618 bool GetPerimeterPoint(double x1
, double y1
,
619 double x2
, double y2
,
620 double *x3
, double *y3
);
622 void OnDraw(wxDC
& dc
);
623 void SetSize(double x
, double y
, bool recursive
= TRUE
);
626 // Prolog database stuff
627 void WritePrologAttributes(wxExpr
*clause
);
628 void ReadPrologAttributes(wxExpr
*clause
);
631 int GetNumberOfAttachments();
632 bool GetAttachmentPosition(int attachment
, double *x
, double *y
,
633 int nth
= 0, int no_arcs
= 1, wxLineShape
*line
= NULL
);
635 // Does the copying for this object
636 void Copy(wxShape
& copy
);
638 inline double GetWidth() const { return m_width
; }
639 inline double GetHeight() const { return m_height
; }
646 class wxCircleShape
: public wxEllipseShape
648 DECLARE_DYNAMIC_CLASS(wxCircleShape
)
650 wxCircleShape(double w
= 0.0);
652 bool GetPerimeterPoint(double x1
, double y1
,
653 double x2
, double y2
,
654 double *x3
, double *y3
);
655 // Does the copying for this object
656 void Copy(wxShape
& copy
);