summaryrefslogtreecommitdiff
path: root/support/dktools/WxdkdrawFrame.h
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-09-20 03:03:26 +0000
committerNorbert Preining <norbert@preining.info>2020-09-20 03:03:26 +0000
commit1f457376b478257b88d4a857f5ec1b6155442dd7 (patch)
tree2a06a60551dea362cf8cb0cb0ba66c78608717c4 /support/dktools/WxdkdrawFrame.h
parentac690ca29ad5bf8a5203a65fd6252f7b564f4727 (diff)
CTAN sync 202009200303
Diffstat (limited to 'support/dktools/WxdkdrawFrame.h')
-rw-r--r--support/dktools/WxdkdrawFrame.h4200
1 files changed, 4200 insertions, 0 deletions
diff --git a/support/dktools/WxdkdrawFrame.h b/support/dktools/WxdkdrawFrame.h
new file mode 100644
index 0000000000..70d0b0ce95
--- /dev/null
+++ b/support/dktools/WxdkdrawFrame.h
@@ -0,0 +1,4200 @@
+/*
+Copyright (C) 2019-2020, Dirk Krause
+SPDX-License-Identifier: BSD-3-Clause
+*/
+
+/*
+ WARNING: This file was generated by the dkct program (see
+ http://dktools.sourceforge.net/ for details).
+ Changes you make here will be lost if dkct is run again!
+ You should modify the original source and run dkct on it.
+ Original source: WxdkdrawFrame.wxc
+*/
+
+/** @file WxdkdrawFrame.h Header file for the WxdkdrawFrame module.
+*/
+
+#ifndef WXDKDRAWFRAME_H_INCLUDED
+/** Avoid multiple inclusions. */
+#define WXDKDRAWFRAME_H_INCLUDED 1
+
+
+#line 1149 "WxdkdrawFrame.wxc"
+
+#include "wxdkdraw.h"
+
+#ifndef DK4WXCOLOURVIEW_H_INCLUDED
+#include "Dk4WxColourView.h"
+#define DK4WXCOLOURVIEW_H_INCLUDED 1
+#endif
+
+
+
+#line 1159 "WxdkdrawFrame.wxc"
+/** The programs main window.
+*/
+class WxdkdrawFrame : public Dk4WxFrame
+{
+ /* ----- start of control class ----- */
+
+ /** The draw control.
+ Defined as nested class to make both classes friend of each other.
+ */
+ class Control : public wxControl
+ {
+ /** Allow frame class full access to all members.
+ */
+ friend class WxdkdrawFrame;
+
+ /** Class responds to events.
+ */
+#if wxCHECK_VERSION(3,0,0)
+ wxDECLARE_DYNAMIC_CLASS(Control);
+#else
+ DECLARE_DYNAMIC_CLASS(Control)
+#endif
+
+ private:
+
+ /* control private members */
+
+ /** This class uses an event table.
+ */
+#if wxCHECK_VERSION(3,0,0)
+ wxDECLARE_EVENT_TABLE();
+#else
+ DECLARE_EVENT_TABLE()
+#endif
+
+ protected:
+
+ /* control protected members */
+
+ /** Name of control, used in initialization.
+ */
+ static wxChar const ms_controlname[];
+
+ /** Draw control size.
+ Only available within OnPaint handler.
+ */
+ wxSize m_szDrawco;
+
+ /** Screen resolution in dpi for x and y direction.
+ */
+ dk4_gra_point_t m_ptRes;
+
+ /** Coefficients for coordinate transformations.
+ Only available within OnPaint handler.
+ */
+ dk4_gra_point_t m_ptM;
+
+ /** Coefficients for coordinate transformations.
+ Only available within OnPaint handler.
+ */
+ dk4_gra_point_t m_ptN;
+
+ /** Parent frame, containing pointer to the drawing.
+ */
+ WxdkdrawFrame *m_pParent;
+
+ /** Bitmap 1 contains border, viewport and grid.
+ */
+ wxBitmap *m_pB1;
+
+ /** Bitmap 2 contains the graphics elements on top of bitmap 1.
+ */
+ wxBitmap *m_pB2;
+
+ /** Bitmap 3 contains the markup on top of bitmap 2.
+ */
+ wxBitmap *m_pB3;
+
+ /** Zoom factor, depends on zoom level.
+ */
+ double m_dZoom;
+
+ /** Optical grid distance.
+ */
+ uint32_t m_uGridOptical;
+
+ /** Snap grid distance.
+ */
+ uint32_t m_uGridSnap;
+
+ /** Control is allowed to allocate bitmaps.
+ */
+ bool m_bCanAllocate;
+
+ public:
+
+ /* control public methods */
+
+ /** Default constructor.
+ Here for completeness
+ */
+ Control();
+
+ /** Constructor
+ */
+ Control(
+ wxWindow *pParent,
+ wxWindowID wxid,
+ WxdkdrawFrame *pFrame,
+ wxPoint const & pos = wxDefaultPosition,
+ wxSize const & sz = wxDefaultSize,
+ long st = wxBORDER_NONE,
+ wxChar const *name = ms_controlname
+ );
+
+ /** Create control.
+ This method is here for completeness, it is not used
+ by the wxdkdraw program.
+ @param pParent Parent frame.
+ @param wxid Window ID.
+ @param pFrame Parent frame.
+ @param pos Position.
+ @param sz Size.
+ @param st Control style.
+ @param name Control name.
+ */
+ bool
+ Create(
+ wxWindow *pParent,
+ wxWindowID wxid,
+ WxdkdrawFrame *pFrame,
+ wxPoint const & pos = wxDefaultPosition,
+ wxSize const & sz = wxDefaultSize,
+ long st = wxBORDER_NONE,
+ wxChar const *name = ms_controlname
+ );
+
+ /** Destructor.
+ */
+ ~Control();
+
+ /** Prepare control for destruction.
+ Release bitmaps and avoid re-allocation.
+ */
+ void
+ PrepareForDestruction(void);
+
+ /** Handler for erase event.
+ @param event Event to handle.
+ */
+ void
+ OnErase(wxEraseEvent & event);
+
+ /** Handler for paint event.
+ @param event Event to handle.
+ */
+ void
+ OnPaint(wxPaintEvent & event);
+
+ /** Handler for resize event.
+ @param event Event to handle.
+ */
+ void
+ OnSize(wxSizeEvent & event);
+
+ /** Handler for mouse enter event.
+ @param event Event to handle.
+ */
+ void
+ OnMouseEnter(wxMouseEvent & event);
+
+ /** Handler for mouse leave event.
+ @param event Event to handle.
+ */
+ void
+ OnMouseLeave(wxMouseEvent & event);
+
+ /** Handler for mouse motion event.
+ @param event Event to handle.
+ */
+ void
+ OnMouseMove(wxMouseEvent & event);
+
+ /** Handler for left mouse button event.
+ @param event Event to handle.
+ */
+ void
+ OnLeftMouseButtonDown(wxMouseEvent & event);
+
+ /** Handler for right mouse button event.
+ @param event Event to handle.
+ */
+ void
+ OnRightMouseButtonDown(wxMouseEvent & event);
+
+ /** Handler for middle mouse button event.
+ @param event Event to handle.
+ */
+ void
+ OnMiddleMouseButtonDown(wxMouseEvent & event);
+
+ /** Handler for mouse wheel event.
+ @param event Event to handle.
+ */
+ void
+ OnMouseWheel(wxMouseEvent & event);
+
+ protected:
+
+ /** Check for completed initialization.
+ @return True if ready to handle events, false otherwise.
+ */
+ bool
+ CanHandleEvents(void);
+
+ /** Fill entire control using border colour.
+ @param dc Drawing context.
+ */
+ void
+ PaintOperation0(wxDC & dc);
+
+ /** Draw background for drawing canvas.
+ @param gc Graphics context to use.
+ */
+ void
+ PaintOperationCanvas(
+ wxGraphicsContext *gc
+ );
+
+ /** Draw grid in a calculated bounding box.
+ @param gc Graphics context to use.
+ @param g_end Bounding box data for grid.
+ */
+ void
+ PaintOperationBoundingBoxGrid(
+ wxGraphicsContext *gc,
+ Wxd_bb_t const & g_end
+ );
+
+ /** Draw grid.
+ @param gc Graphics context to use.
+ */
+ void
+ PaintOperationGrid(
+ wxGraphicsContext *gc
+ );
+
+ /** Decide whether or not to use placement help in current state.
+ @return True to show placement help, false otherwise.
+ */
+ bool
+ StateUsesPlacementHelp(void);
+
+ /** Draw border, drawable area and grid.
+ @param gc Graphics context to use.
+ */
+ void
+ PaintOperation1(wxGraphicsContext *gc);
+
+ /** Draw drawing objects.
+ @param gc Graphics context to use.
+ @param event Event to process.
+ */
+ void
+ PaintOperation2(wxGraphicsContext *gc);
+
+ /** Draw markup on top of drawing.
+ @param gc Graphics context to use.
+ @param event Event to process.
+ */
+ void
+ PaintOperation3(wxGraphicsContext *gc);
+
+ /** Calculate zoom factor and grid distances after zooming in
+ or out or after changing graphics.
+ */
+ void
+ CalculateZoomFactor(void);
+
+ /** Calculate grid distances after changing grid settings.
+ */
+ void
+ CalculateGridDistances(void);
+
+ /** Calculate conversion coefficients.
+ */
+ void
+ CalculateConversionCoefficients(void);
+
+ /** Convert x distance from wxd to pixels.
+ @param d Distance to convert.
+ @return Conversion result.
+ */
+ double
+ ConvDist(double d);
+
+ /** Convert x distance from wxd to pixels.
+ @param d Distance to convert.
+ @return Conversion result.
+ */
+ double
+ ConvDist(int32_t d);
+
+ /** Convert x coordinate from wxd to pixels.
+ @param x X coordinate value in wxd.
+ @return X coordinate value in pixels.
+ */
+ double
+ ConvX(double x);
+
+ /** Convert x coordinate from wxd to pixels.
+ @param x X coordinate value in wxd.
+ @return X coordinate value in pixels.
+ */
+ double
+ ConvX(int32_t x);
+
+ /** Convert y coordinate from wxd to pixels.
+ @param y Y coordinate value in wxd.
+ @return Y coordinate value in pixels.
+ */
+ double
+ ConvY(double y);
+
+ /** Convert y coordinate from wxd to pixels.
+ @param y Y coordinate value in wxd.
+ @return Y coordinate value in pixels.
+ */
+ double
+ ConvY(int32_t y);
+
+ /** Convert x coordinate back from pixels to wxd.
+ @param x X coordinate in pixels.
+ @return X coordinate in wxd.
+ */
+ double
+ InvX(double x);
+
+ /** Convert y coordinate back from pixels to wxd.
+ @param y Y coordinate in pixels.
+ @return Y coordinate in wxd.
+ */
+ double
+ InvY(double y);
+
+ /** Convert x coordinate back from pixels to wxd.
+ @param x X coordinate in pixels.
+ @param ok Success flag to reset on error.
+ @return Backward conversion value on success, 0L on error.
+ */
+ int32_t
+ InvX(double x, bool & ok);
+
+ /** Convert y coordinate back from pixels to wxd.
+ @param y Y coordinate in pixels.
+ @param ok Success flag to reset on error.
+ @return Backward conversion value on success, 0L on error.
+ */
+ int32_t
+ InvY(double y, bool & ok);
+
+#if 0
+
+ /** Convert x coordinate back from pixels to wxd.
+ @param dptr Address of result variable.
+ @param x X coordinate in pixels.
+ @return True on success, false on error (x out of range).
+ */
+ bool
+ InvX(int32_t *dptr, double x);
+
+ /** Convert y coordinate back from pixels to wxd.
+ @param dptr Address of result variable.
+ @param y Y coordinate in pixels.
+ @return True on success, false on error (y out of range).
+ */
+ bool
+ InvY(int32_t *dptr, double y);
+
+ /** Convert x coordinate back from pixels to wxd.
+ @param dptr Address of result variable.
+ @param x X coordinate in pixels.
+ @return True on success, false on error (x out of range).
+ */
+ bool
+ InvX(int32_t *dptr, int x);
+
+ /** Convert y coordinate back from pixels to wxd.
+ @param dptr Address of result variable.
+ @param y Y coordinate in pixels.
+ @return True on success, false on error (y out of range).
+ */
+ bool
+ InvY(int32_t *dptr, int y);
+
+#endif
+
+
+ /** Round grid coordinate downward.
+ @param x Original coordinate.
+ @param gr Grid distance.
+ @param ok Success variable to reset on numerical errors.
+ @param fo Force downward rounding.
+ @return Result.
+ */
+ int32_t
+ GridRoundDown(
+ int32_t x,
+ uint32_t gr,
+ bool & ok,
+ bool fo = false
+ );
+
+ /** Round grid coordinate upward.
+ @param x Original coordinate.
+ @param gr Grid distance.
+ @param ok Success variable to reset on numerical errors.
+ @param fo Force upward rounding.
+ @return Result.
+ */
+ int32_t
+ GridRoundUp(
+ int32_t x,
+ uint32_t gr,
+ bool & ok,
+ bool fo = false
+ );
+
+ /** Round grid coordinate to nearest grid point.
+ @param x Original coordinate.
+ @param gr Grid distance.
+ @param ok Success variable to reset on numerical errors.
+ @return Result.
+ */
+ int32_t
+ GridRoundNearest(int32_t x, uint32_t gr, bool & ok);
+
+ /** Check whether object contains all required data for drawing.
+ @param pobj Object to check.
+ @return True to draw the object, false to skip object.
+ */
+ bool
+ CanDrawElement(Wxd_object_t const *pobj);
+
+ /** Check whether to draw an object in normal drawing pass.
+ @param pobj Object to check.
+ @return True to draw the object, false to skip drawing.
+ */
+ bool
+ MustDrawElementInNormalPass(Wxd_object_t const *pobj);
+
+ /** Check whether to draw an object in markup pass.
+ @param pobj Object to check.
+ @return True to draw the object, false to skip drawing.
+ */
+ bool
+ MustDrawElementInMarkupPass(Wxd_object_t const *pobj);
+
+ /** Check whether to highlight an object in markup pass.
+ @param pobj Object to check.
+ @return True to draw the object, false to skip drawing.
+ */
+ bool
+ MustHighlightElementInMarkupPass(Wxd_object_t const *pobj);
+
+ /** Check whether to highlight an object in markup pass.
+ @param pobj Object to check.
+ @return True to draw the object, false to skip drawing.
+ */
+ bool
+ MustHighlight2ElementInMarkupPass(Wxd_object_t const *pobj);
+
+ /** Check whether there are objects under construction in
+ current state.
+ @return True for states with objects under construction.
+ */
+ bool
+ StateHasObjectsUnderModification(void);
+
+ /** Check whether there are objects to highlight in current state.
+ @return True for states with objects under construction.
+ */
+ bool
+ StateHasObjectsToHighlight(void);
+
+ /** Check whether there are objects to highlight in current state.
+ @return True for states with objects under construction.
+ */
+ bool
+ StateHasObjectsToHighlight2(void);
+
+ /** Choose stroke colour, either the objects stroke colour
+ or a colour for markup.
+ @param sc Destination array for colour components.
+ @param pObj Object to draw.
+ @param iMarkup Markup type to use.
+ */
+ void
+ ChooseStrokeColour(int *sc, Wxd_object_t const *pObj, int iMarkup);
+
+ /** Draw one graphics object to graphics context.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ DrawElement(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Draw one text object to graphics context.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ DrawTextElement(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Create path for polyline or polygon.
+ @param p Path to construct.
+ @param pObj Object.
+ @param pShift Vector to shift object.
+ */
+ void
+ PathPolyline(
+ wxGraphicsPath & p,
+ Wxd_object_t const *pObj,
+ Wxd_point_t const *pShift
+ );
+
+ /** Create path for one X-spline segment consisting
+ of multiple sub-segments.
+ @param p Graphics path to modify.
+ @param pt Spline points array.
+ @param xsp X-spline data.
+ @param segno Number of current segment.
+ @param subsegs Number of sub-segments to produce.
+ @param divisor Divisor for derivative values.
+ @param shiftx X shift value.
+ @param shifty Y shift value.
+ @param ib Index of point B in pt.
+ @param ic Index of point C in pt.
+ */
+ void
+ SplineSegment(
+ wxGraphicsPath & p,
+ Wxd_spline_point_t *pt,
+ dk4_xsp_2d_t *xsp,
+ uint16_t segno,
+ size_t subsegs,
+ double divisor,
+ double shiftx,
+ double shifty,
+ uint16_t ib,
+ uint16_t ic
+ );
+
+ /** Create path for spline.
+ @param p Path to construct.
+ @param pObj Object.
+ @param pShift Vector to shift object.
+ */
+ void
+ PathSpline(
+ wxGraphicsPath & p,
+ Wxd_object_t const *pObj,
+ Wxd_point_t const *pShift
+ );
+
+ /** Create path for arc.
+ @param p Path to construct.
+ @param pObj Object.
+ @param pShift Vector to shift object.
+ */
+ void
+ PathArc(
+ wxGraphicsPath & p,
+ Wxd_object_t const *pObj,
+ Wxd_point_t const *pShift
+ );
+
+ /** Create path for circle.
+ @param p Path to construct.
+ @param pObj Object.
+ @param pShift Vector to shift object.
+ */
+ void
+ PathCircle(
+ wxGraphicsPath & p,
+ Wxd_object_t const *pObj,
+ Wxd_point_t const *pShift
+ );
+
+ /** Create path for ellipse.
+ @param p Path to construct.
+ @param pObj Object.
+ @param pShift Vector to shift object.
+ */
+ void
+ PathEllipse(
+ wxGraphicsPath & p,
+ Wxd_object_t const *pObj,
+ Wxd_point_t const *pShift
+ );
+
+ /** Create path for box.
+ @param p Path to construct.
+ @param pObj Object.
+ @param pShift Vector to shift object.
+ */
+ void
+ PathBox(
+ wxGraphicsPath & p,
+ Wxd_object_t const *pObj,
+ Wxd_point_t const *pShift
+ );
+
+ /** Mark up one polyline object.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ MarkupPolyline(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Mark up one spline object.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ MarkupSpline(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Mark up one arc object.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ MarkupArc(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Mark up one circle object.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ MarkupCircle(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Mark up one ellipse object.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ MarkupEllipse(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Mark up one box object.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ MarkupBoundingBox(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ Wxd_bb_t const *pbb,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Mark up one box object.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ MarkupBox(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Draw one open path graphics object to graphics context.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ DrawOpenPathElement(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Draw one closed path graphics object to graphics context.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ DrawClosedPathElement(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Draw one image creation region to graphics context.
+ @param gc Graphics context.
+ */
+ void
+ DrawImageRegion(
+ wxGraphicsContext *gc
+ );
+
+ /** Draw one image object to graphics context.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ DrawImageElement(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Draw one dot object to graphics context.
+ @param gc Graphics context.
+ @param pObj Object to draw.
+ @param iMarkup Markup to apply.
+ @param pShift Optional shift vector.
+ */
+ void
+ DrawDotElement(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pObj,
+ int iMarkup,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Set up pen attributes for object.
+ @param pen Pen to modify.
+ @param pObj Object to draw.
+ @param pDash Address of dash lengths array.
+ @param pNdash Address of variable for number of elements.
+ */
+ void
+ SetupPenForObject(
+ wxPen & pen,
+ Wxd_object_t const *pObj,
+ wxDash *pDash,
+ int *pNdash
+ );
+
+ /** Calculate point radius for markup point.
+ @param lw Line width of object to markup, may be 0.
+ @return Markup radius to use.
+ */
+ double
+ MarkupPointRadius(uint16_t lw);
+
+ /** Draw a markup point.
+ @param gc Grahics context to draw to.
+ @param sc Stroke colour.
+ @param x X position of point.
+ @param y Y position of point.
+ @param lw Line width of object markup point belongs to.
+ @param pShift Shift vector, may be NULL.
+ */
+ void
+ DrawMarkupPoint(
+ wxGraphicsContext *gc,
+ int const *sc,
+ double x,
+ double y,
+ uint16_t lw,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Draw a markup point.
+ @param gc Grahics context to draw to.
+ @param sc Stroke colour.
+ @param x X position of point.
+ @param y Y position of point.
+ @param lw Line width of object markup point belongs to.
+ @param pShift Shift vector, may be NULL.
+ */
+ void
+ DrawMarkupPoint(
+ wxGraphicsContext *gc,
+ int const *sc,
+ int32_t x,
+ int32_t y,
+ uint16_t lw,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Calculate vertices for arrowhead.
+ @param pt Address of result array.
+ @param pDrw Drawing.
+ @param pObj Object to add arrowheads to.
+ @param xpos X position of arrow end.
+ @param ypos Y position of arrow end.
+ @param rot Arrow rotation.
+ @param atype Arrow type.
+ @param alength Arrow length.
+ @param awidth Arrow width.
+ */
+ void
+ ArrowVertices(
+ dk4_gra_point_t *pt,
+ Wxd_drawing_t const *pDrw,
+ Wxd_object_t const *pObj,
+ double xpos,
+ double ypos,
+ double rot,
+ uint8_t atype,
+ uint8_t alength,
+ uint8_t awidth
+ );
+
+ /** Draw one arrowhead.
+ @param gc Grahpics context to use for drawing.
+ @param pDrw Drawing.
+ @param pObj Object to add arrowhead to.
+ @param sc Stroke colour.
+ @param xpos X position of arrowhead end.
+ @param ypos Y position of arrowhead end.
+ @param rot Arrowhead rotation.
+ @param atype Arrowhead type.
+ @param alength Arrowhead length.
+ @param awidth Arrowhead width.
+ */
+ void
+ DrawOneArrowhead(
+ wxGraphicsContext *gc,
+ Wxd_drawing_t const *pDrw,
+ Wxd_object_t const *pObj,
+ int const *sc,
+ double xpos,
+ double ypos,
+ double rot,
+ uint8_t atype,
+ uint8_t alength,
+ uint8_t awidth
+ );
+
+ /** Add arrowheads to object.
+ @param gc Graphics context to use for drawing.
+ @param pDrw Drawing.
+ @param pObj Object to add arrows to.
+ @param sc Stroke colour.
+ @param pShift Shift vector.
+ */
+ void
+ AddArrowheads(
+ wxGraphicsContext *gc,
+ Wxd_drawing_t const *pDrw,
+ Wxd_object_t const *pObj,
+ int const *sc,
+ Wxd_point_t const *pShift = NULL
+ );
+
+ /** Calculate line width in pixels for object.
+ @param pDrw Drawing.
+ @param pObj Object.
+ @return Line width to use on screen.
+ */
+ int
+ LineWidthForObject(
+ Wxd_drawing_t const *pDrw,
+ Wxd_object_t const *pObj,
+ int iMarkup = WXD_MARKUP_NONE
+ );
+
+ /** Highlight the point to move.
+ @param gc Graphics context to draw to.
+ @param pobj Object to highlight.
+ @param pno Point number.
+ */
+ void
+ HighlightPointToMove(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pobj,
+ uint16_t pno
+ );
+
+ /** Highlight the point to delete.
+ @param gc Graphics context to draw to.
+ @param pobj Object to highlight.
+ @param pno Point number.
+ */
+ void
+ HighlightPointToDelete(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pobj,
+ uint16_t pno
+ );
+
+ /** Highlight the point to delete.
+ @param gc Graphics context to draw to.
+ @param pobj Object to highlight.
+ @param pno Point number.
+ @param bAppend New point must be appended after pno.
+ */
+ void
+ HighlightPointToAdd(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pobj,
+ uint16_t pno,
+ bool bAppend
+ );
+
+ /** Highlight one point of the element for style changes.
+ @param gc Graphics context to use.
+ @param x X position (in WXD coordinates).
+ @param y Y position (in WXD coordinates).
+ @param r Radius (half square length).
+ @param sc Colour components.
+ */
+ void
+ HighlightStylePoint(
+ wxGraphicsContext *gc,
+ double x,
+ double y,
+ double r,
+ int const *sc
+ );
+
+ /** Highlight one point of the element for style changes.
+ @param gc Graphics context to use.
+ @param x X position (in WXD coordinates).
+ @param y Y position (in WXD coordinates).
+ @param r Radius (half square length).
+ @param sc Colour components.
+ */
+ void
+ HighlightStylePoint(
+ wxGraphicsContext *gc,
+ int32_t x,
+ int32_t y,
+ double r,
+ int const *sc
+ );
+
+ /** Highlight the element for style changes.
+ @param gc Graphics context to use.
+ @param pobj Object to highlight.
+ */
+ void
+ HighlightStyleElement(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pobj
+ );
+
+ /** Retrieve point coordinates from a bounding box.
+ @param x Result variable for x coordinate.
+ @param y Result variable for y coordinate.
+ @param pbb Bounding box (box or image).
+ @param pno Point number.
+ */
+ void
+ GetPointFromBox(
+ double & x,
+ double & y,
+ Wxd_bb_t const *pbb,
+ uint16_t pno
+ );
+
+ /** Highlight the point to move.
+ @param gc Graphics context to draw to.
+ @param pobj Object to highlight.
+ @param pno Point number.
+ @param ci Color index for highlighting.
+ */
+ void
+ HighlightPointForOperation(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pobj,
+ uint16_t pno,
+ int ci
+ );
+
+ /** Highlight line from mouse position to control point.
+ @param gc Graphics context to draw to.
+ @param pobj Object to highlight.
+ @param pno Point number.
+ @param ci Color index for highlighting.
+ */
+ void
+ HighlightLineToPoint(
+ wxGraphicsContext *gc,
+ Wxd_object_t const *pobj,
+ uint16_t pno,
+ int ci
+ );
+
+ };
+
+ /* ----- End of control class ----- */
+
+ /** The control has full access to all members of the frame class.
+ */
+ friend class Control;
+
+ public:
+
+ /** IDs for menu items, buttons and other elements.
+ */
+ enum {
+ ID_FRAME = ((wxID_HIGHEST) + 1) , /**< Main window. */
+ ID_HELP_ABOUT , /**< Show version dialog box. */
+ ID_HELP_CONTENTS , /**< Open online help table of contents. */
+ ID_ADD_POLYINE , /**< Add polyline. */
+ ID_ADD_POLYGON , /**< Add polygon. */
+ ID_ADD_RECT , /**< Add rectangle. */
+ ID_ADD_BOX , /**< Add box (rounded corner rectangle). */
+ ID_ADD_CIRCLE , /**< Add circle. */
+ ID_ADD_ELLIPSE , /**< Add ellipse. */
+ ID_ADD_ARC_O , /**< Add open arc. */
+ ID_ADD_ARC_C , /**< Add closed arc. */
+ ID_ADD_SPL_AO , /**< Add open approximated spline. */
+ ID_ADD_SPL_AC , /**< Add closed approximated spline. */
+ ID_ADD_SPL_IO , /**< Add open interpolated spline. */
+ ID_ADD_SPL_IC , /**< Add closed interpolated spline. */
+ ID_ADD_DOT_C , /**< Add colour filled dot. */
+ ID_ADD_DOT_W , /**< Add white filled dot. */
+ ID_ADD_TEXT , /**< Add text label. */
+ ID_ADD_IMG , /**< Add image. */
+ ID_ADD_LIBELEM , /**< Add library element. */
+ ID_EDIT_COPY , /**< Copy object. */
+ ID_EDIT_MOVE , /**< Move object. */
+ ID_EDIT_DEL , /**< Delete object. */
+ ID_EDIT_PT_MOVE , /**< Move point. */
+ ID_EDIT_PT_ADD , /**< Add point. */
+ ID_EDIT_PT_DEL , /**< Delete point. */
+ ID_EDIT_DET , /**< Edit details. */
+ ID_EDIT_GRP1 , /**< Group objects (elements one by one). */
+#if 0
+ ID_EDIT_GRP12 , /**< Group objects (touching rectangle). */
+#endif
+ ID_EDIT_GRP13 , /**< Group objects (including rectangle). */
+ ID_EDIT_UNGRP , /**< Ungroup objects. */
+ ID_EDIT_FLIPH , /**< Flip ojects horizontally. */
+ ID_EDIT_FLIPV , /**< Flip objects vertically. */
+ ID_EDIT_ROTLEFT , /**< Rotate 90 degree to left. */
+ ID_EDIT_ROTRIGHT , /**< Rotate 90 degree to right. */
+ ID_EDIT_DRSZ , /**< Change drawing size. */
+ ID_LAYERS_ALL , /**< Activate all layers. */
+ ID_LAYERS_MGR , /**< Run layer manager. */
+ ID_ZOOM_CENTER , /**< Center view. */
+ ID_GRID_ON_OFF , /**< Activate or deactivate grid. */
+ ID_GRID_UNIT , /**< Grid unit changed. */
+ ID_GRID_BASE , /**< Grid base changed. */
+ ID_PLACEMENT , /**< Placement help changed. */
+#if 0
+ ID_SELECT_OBJ, /**< Select object to change style .*/
+#endif
+ ID_STYLE_LAYER , /**< Layer spin control. */
+ ID_STYLE_LINE_COL , /**< Line colour button. */
+ ID_STYLE_LINE_WIDTH , /**< Line width spin control. */
+ ID_STYLE_LINE_STYLE , /**< Line style button. */
+ ID_STYLE_LINE_CAP , /**< Line cap button. */
+ ID_STYLE_LINE_JOIN , /**< Line joint button. */
+ ID_STYLE_ARROW_F , /**< Arrowhead forward button. */
+ ID_STYLE_ARROW_B , /**< Arrowhead backward button. */
+ ID_STYLE_FILL_COL , /**< Fill colour button. */
+ ID_STYLE_FILL_PATT , /**< Fill pattern button. */
+ ID_STYLE_TEXT_LATEX , /**< LaTeX special text checkbox. */
+ ID_STYLE_TEXT_ALIGN , /**< Text align button. */
+ ID_STYLE_TEXT_FONT , /**< Text font button. */
+ ID_STYLE_TEXT_SIZE , /**< Text size spin control. */
+ ID_SCROLL_H , /**< Horizontal scrollbar. */
+ ID_SCROLL_V , /**< Vertical scrollbar. */
+ ID_CB_POINT_MOVE_MODE , /**< Checkbox for point move mode. */
+ ID_SPIN_ROTATION , /**< Spin control for rotation. */
+ ID_EDIT_CONVERT_1 , /**< Convert to polygon. */
+ ID_EDIT_CONVERT_2 , /**< Convert to polyline. */
+ ID_EDIT_CONVERT_3 , /**< Convert to open interpolated spline. */
+ ID_EDIT_CONVERT_4 , /**< Convert to closed arc. */
+ ID_EDIT_CONVERT_5 , /**< Convert to open arc. */
+ ID_EDIT_CONVERT_6 , /**< Convert to closed approximated spl. */
+ ID_EDIT_CONVERT_7 , /**< Convert to open approximated spline. */
+ ID_EDIT_CONVERT_8 , /**< Convert to white filled dot. */
+ ID_EDIT_CONVERT_9 , /**< Convert to simple dot. */
+ ID_EDIT_CONVERT_A , /**< Convert to closed interpolated spl. */
+ ID_RESET_OPTIONS , /**< Reset options to default values. */
+ ID_COL_MOD_BORDER , /**< Modify border colour. */
+ ID_COL_RES_BORDER , /**< Reset border colour. */
+ ID_COL_MOD_BACKGROUND , /**< Modify background colour. */
+ ID_COL_RES_BACKGROUND , /**< Reset background colour. */
+ ID_COL_MOD_GRID , /**< Modify grid colour. */
+ ID_COL_RES_GRID , /**< Reset grid colour. */
+ ID_COL_MOD_PH , /**< Modify placement help colour. */
+ ID_COL_RES_PH , /**< Reset placement help colour. */
+ ID_COL_MOD_COPY , /**< Modify copy operation colour. */
+ ID_COL_RES_COPY , /**< Reset copy operation colour. */
+ ID_COL_MOD_MOVE , /**< Modify move operation colour. */
+ ID_COL_RES_MOVE , /**< Reset move operation colour. */
+ ID_COL_MOD_DELETE , /**< Modify delete operation colour. */
+ ID_COL_RES_DELETE , /**< Reset delete operation colour. */
+ ID_COL_MOD_GROUP , /**< Modify group candidates colour. */
+ ID_COL_RES_GROUP , /**< Reset group candidates colour. */
+ ID_COL_MOD_MISSING , /**< Modify missing image colour. */
+ ID_COL_RES_MISSING , /**< Reset missing image colour. */
+ ID_MOD_SPLINE , /**< Modify spline s value. */
+ ID_OPT_NEW_OBJECTS , /**< Options for new objects. */
+ ID_OPT_SCREEN , /**< Options for screen representation. */
+ };
+
+ /** Zoom level range.
+ */
+ enum {
+ ZOOM_LEVEL_MIN = -14 , /**< Minimum zoom level. */
+ ZOOM_LEVEL_MAX = 14 /**< Maximum zoom level. */
+ };
+
+ /* IMPORTANT: Number and order of entries (except IVI_MAX) must match
+ the number and order of entries in the default_values and
+ iv_keys arrays in the WxdkdrawFrameTools module!
+ */
+ /** Names for indices into the m_iv array.
+ */
+ enum {
+ IVI_BORDER_RED = 0 , /**< Border colour red component. */
+ IVI_BORDER_GREEN , /**< Border colour green component. */
+ IVI_BORDER_BLUE , /**< Border colour blue component. */
+ IVI_BG_RED , /**< Background colour red. */
+ IVI_BG_GREEN , /**< Background colour green. */
+ IVI_BG_BLUE , /**< Background colour blue. */
+ IVI_GRID_RED , /**< Grid colour red. */
+ IVI_GRID_GREEN , /**< Grid colour green. */
+ IVI_GRID_BLUE , /**< Grid colour blue. */
+ IVI_PH_RED , /**< Placement help colour red. */
+ IVI_PH_GREEN , /**< Placement help colour green. */
+ IVI_PH_BLUE , /**< Placement help colour blue. */
+ IVI_M_COPY_RED , /**< Copy markup colour red. */
+ IVI_M_COPY_GREEN , /**< Copy markup colour green. */
+ IVI_M_COPY_BLUE , /**< Copy markup colour blue. */
+ IVI_M_MOVE_RED , /**< Move markup colour red. */
+ IVI_M_MOVE_GREEN , /**< Move markup colour green. */
+ IVI_M_MOVE_BLUE , /**< Move markup colour blue. */
+ IVI_M_DEL_RED , /**< Delete markup colour red. */
+ IVI_M_DEL_GREEN , /**< Delete markup colour green. */
+ IVI_M_DEL_BLUE , /**< Delete markup colour blue. */
+ IVI_M_GROUP_RED , /**< Group markup colour red. */
+ IVI_M_GROUP_GREEN , /**< Group markup colour green. */
+ IVI_M_GROUP_BLUE , /**< Group markup colour blue. */
+ IVI_MISSIMG_RED , /**< Missing image border red. */
+ IVI_MISSIMG_GREEN , /**< Missing image border green. */
+ IVI_MISSIMG_BLUE , /**< Missing image border blue. */
+ IVI_XS_SUBSEGS , /**< X-spline sub segments. */
+ IVI_FONT_EXACT , /**< Flag: Use exact fonts. */
+ IVI_DOT_DIAMETER_FILLED , /**< Diameter filled dots. */
+ IVI_DOT_DIAMETER_WHITE , /**< Diameter white filled dots. */
+ IVI_ARROWHEAD_LENGTH , /**< Default arrowhead length. */
+ IVI_ARROWHEAD_WIDTH , /**< Default arrowhead width. */
+ IVI_STYLE_VALUE , /**< Default style value. */
+ IVI_MITER_LIMIT , /**< Miter limit. */
+ IVI_REDUCE_MARKUP_POINTS , /**< Reduce markup point radius. */
+ IVI_D_LAYER , /**< Default layer for new objects. */
+ IVI_D_LINE_COL_RED , /**< Default line colour red comp. */
+ IVI_D_LINE_COL_GREEN , /**< Default line colour green comp. */
+ IVI_D_LINE_COL_BLUE , /**< Default line colour blue comp. */
+ IVI_D_LINEWIDTH , /**< Default line width. */
+ IVI_D_LINESTYLE , /**< Default line style. */
+ IVI_D_STYLE_VALUE , /**< Default style value. */
+ IVI_D_JOIN_STYLE , /**< Default line join style. */
+ IVI_D_MITER_LIMIT , /**< Default miter limit. */
+ IVI_D_CAP_STYLE , /**< Default line cap style. */
+ IVI_D_AHF_TYPE , /**< Default arrowhead forward type. */
+ IVI_D_AHF_LENGTH , /**< Default arrowhead forward lgt. */
+ IVI_D_AHF_WIDTH , /**< Default arrowhead forward width. */
+ IVI_D_AHB_TYPE , /**< Default arrowhead backward type. */
+ IVI_D_AHB_LENGTH , /**< Default arrowhead backward lgt. */
+ IVI_D_AHB_WIDTH , /**< Default arrowhead backward wdth. */
+ IVI_D_FILL_COL_RED , /**< Default fill colour red comp. */
+ IVI_D_FILL_COL_GREEN , /**< Default fill colour green comp. */
+ IVI_D_FILL_COL_BLUE , /**< Default fill colour blue comp. */
+ IVI_D_FILL_STYLE , /**< Default fill style. */
+ IVI_D_TEXT_LATEX , /**< Default LaTeX option for text. */
+ IVI_D_TEXT_ALIGN , /**< Default text align. */
+ IVI_D_TEXT_FONT , /**< Default text font. */
+ IVI_D_TEXT_SIZE , /**< Default text size. */
+ IVI_C_GRID , /**< Enable or disable grid. */
+ IVI_C_PH , /**< Enable or disable place help. */
+ IVI_C_COR_POSITION , /**< Correct position after zoom out. */
+ IVI_MAX /**< Number of indices in the list. */
+ };
+ /* IMPORTANT: Number and order of entries (except IVI_MAX) must match
+ the number and order of entries in the default_values and
+ iv_keys arrays in the WxdkdrawFrameTools module!
+ */
+
+ private:
+
+ /* Frame private members */
+
+ /** Event table for frame.
+ */
+#if wxCHECK_VERSION(3,0,0)
+ wxDECLARE_EVENT_TABLE();
+#else
+ DECLARE_EVENT_TABLE()
+#endif
+
+ protected:
+
+ /* frame protected members */
+
+ /** Drawing object containing default style information.
+ */
+ Wxd_object_t m_oStyle;
+
+ /** Border object to show drawing size.
+ */
+ Wxd_object_t m_oBorder;
+
+ /** Status structure to read WXD file.
+ */
+ wxdrd_status_t m_oStatusReader;
+
+ /** Status structure to write WXD file.
+ */
+ wxdwr_status_t m_oStatusWriter;
+
+ /** Integer values for different purposes, configurable.
+ */
+ int m_iv[IVI_MAX];
+
+ /** Coefficients used to create stipple bitmaps,
+ recalculated on zoom level changes or file reload.
+ 0: Length equivalent for 3.6 / sqrt(3)
+ 1: Length equivalent for 7.2
+ 2: Length equivalent for 3.6 * sqrt(2)
+ 3: Length equivalent for 14.4
+ 4: Length equivalent for 3.6
+ 5: Length equivalent for 21.6
+ 6: Length equivalent for 14.54 (width of large fish scale)
+ 7: Length equivalent for 3.7 (height of large fish scale)
+ 8: Length equivalent for 14.4 * sqrt(3)
+ 9: X difference at start of large fish scale
+ 10: Y difference at start of large fish scale
+ 11: X difference at end of large fish scale
+ 12: Y difference at end of large fish scale
+ 13: X difference at start of small fish scale
+ 14: Y difference at start of small fish scale
+ 15: X difference at end of small fish scale
+ 16: Y difference at end of small fish scale
+ 17...19 unused
+ */
+ double m_dPatterns[20];
+
+ /** Constant factors calculated once in the constructor.
+ 0: sqrt(3)
+ 1: dx/dt at 0 factor for large fish scales
+ 2: dy/dt at 0 factor for large fish scales
+ 3: dx/dt at 1 factor for large fish scales
+ 4: dy/dt at 1 factor for large fish scales
+ 5: dx/dt at 0 factor for small fish scales
+ 6: dy/dt at 0 factor for small fish scales
+ 7: dx/dt at 1 factor for small fish scales
+ 8: dy/dt at 1 factor for small fish scales
+ 9...15 unused
+ */
+ double m_dFactors[16];
+
+ /** Error report used in event processing.
+ */
+ dk4_er_t m_oErrorReport;
+
+ /** Protect m_bIsFirstIdle against multiple access.
+ */
+ wxCriticalSection csIsFirstIdle;
+
+ /** Original ellipse/circle data before moving a point.
+ */
+ Wxd_det_ellipse_t m_ellPointMoveOri;
+
+ /** Full path name.
+ */
+ wxString m_sFileFull;
+
+ /** Short file name without leading directory.
+ */
+ wxString m_sFileShort;
+
+ /** Directory file resides in.
+ */
+ wxString m_sFileDir;
+
+ /** Directory previous embedded image was taken from.
+ */
+ wxString m_sImageDir;
+
+ /** Directory previous library element was taken from.
+ */
+ wxString m_sLibraryDir;
+
+ /** Short name of previous library element.
+ */
+ wxString m_sLibraryShort;
+
+ /** Original drawing size.
+ */
+ Wxd_bb_t m_oOldSize;
+
+ /** Raw mouse position (not aligned to grid).
+ */
+ Wxd_point_t m_ptMousePosRaw;
+
+ /** Mouse position aligned to grid.
+ */
+ Wxd_point_t m_ptMousePosGrid;
+
+ /** Start point of copy or move operation.
+ */
+ Wxd_point_t m_ptMouseMoveStart;
+
+ /** Difference in copy or move operation,
+ (m_ptMousePosGrid - m_ptMouseMoveStart).
+ */
+ Wxd_point_t m_ptMouseMoveDiff;
+
+ /** Original position of the point currently moved.
+ Required to compute differences or to restore
+ position on abort.
+ */
+ Wxd_point_t m_ptPointMoveOri;
+
+ /** Mouse position on control in pixels.
+ */
+ wxSize m_szMousePosPix;
+
+ /** Object currently to edit with style elements.
+ */
+ Wxd_object_t *m_pStyle;
+
+ /** Current object, used for several purposes:
+ * S_NOOP: Selection candidate.
+ * S_POLY_FURTHER: Polyline we are editing.
+ */
+ Wxd_object_t *m_pCurrent;
+
+ /** Localized texts.
+ */
+ wxChar const * const *sTexts;
+
+ /** Non-localized texts.
+ */
+ wxChar const * const *sNlWx;
+
+ /** Non-localized texts.
+ */
+ dkChar const * const *sNlDk;
+
+ /** Drawing opened in this frame.
+ */
+ Wxd_drawing_t *m_pDrw;
+
+ /** Current operation state.
+ */
+ int m_iState;
+
+ /** Accumulated wheel rotation with control key pressed.
+ */
+ int m_iWheelControl;
+
+ /** Accumulated wheel rotation with shift key pressed.
+ */
+ int m_iWheelShift;
+
+ /** Accumulated wheel rotation with not key pressed.
+ */
+ int m_iWheelNormal;
+
+ /** Index of current point to edit.
+ */
+ uint16_t m_uCurrent;
+
+ /** Object we are about to create or to convert to.
+ */
+ int8_t m_iObjToCreate;
+
+ /** Flag for different purposes:
+ * Spline just created is interpolated (otherwise approximated).
+ * Box just created is a rounded box (otherwise rectangular).
+ * Rotation in negative direction.
+ */
+ bool m_bSplineInterpolated;
+
+ /** Flag: Current mouse position is an acceptable point.
+ */
+ bool m_bAcceptablePoint;
+
+ /** Flag: Is first idle.
+ */
+ bool m_bIsFirstIdle;
+
+ /** Flag: Windows is active an event handlers can be executed.
+ This flag is set in the reaction on the first idle event
+ and reset on closing the application.
+ */
+ bool m_bActive;
+
+ /** Flag: Drawing was modified (there are unsaved changes).
+ */
+ bool m_bModified;
+
+ /** Flag: File name known for output file.
+ */
+ bool m_bHaveName;
+
+ /** Flag: Mouse position is known.
+ */
+ bool m_bMousePos;
+
+ /** Flag: Successfully calculated difference for copy/shift operation.
+ */
+ bool m_bMouseDiff;
+
+ /** Snap point to move to the mouse position (otherwise relative
+ movement).
+ */
+ bool m_bSnap;
+
+ /** Flag: Update frame at end of event handler.
+ */
+ bool m_bUpdate;
+
+ /** Flag: Append new point after current point (true)
+ or insert before current point (false).
+ */
+ bool m_bAppendPoint;
+
+ /** Flag: Have corner point to move when changing drawing size.
+ */
+ bool m_bHaveCornerPoint;
+
+ /** Flip vertically (true) or horizontally (false).
+ */
+ bool m_bVerticalFlip;
+
+ /* __CHANGE__ 011: Add further member variables.
+ */
+
+ /** Flag: GUI ok.
+ */
+ bool dkctGUILayoutOK;
+
+ /** Contents panel.
+ */
+ wxPanel *dkctGUIContentsPanel;
+
+ /** GUI element mainSizer.
+ */
+#line 567 "WxdkdrawFrame.wxc"
+ wxBoxSizer *mainSizer;
+
+ /** GUI element mbMain.
+ */
+#line 17 "WxdkdrawFrame.wxc"
+ wxMenuBar *mbMain;
+
+ /** GUI element menuFile.
+ */
+#line 25 "WxdkdrawFrame.wxc"
+ wxMenu *menuFile;
+
+ /** GUI element menuAdd.
+ */
+#line 58 "WxdkdrawFrame.wxc"
+ wxMenu *menuAdd;
+
+ /** GUI element menuEdit.
+ */
+#line 164 "WxdkdrawFrame.wxc"
+ wxMenu *menuEdit;
+
+ /** GUI element menuView.
+ */
+#line 335 "WxdkdrawFrame.wxc"
+ wxMenu *menuView;
+
+ /** GUI element menuOptions.
+ */
+#line 341 "WxdkdrawFrame.wxc"
+ wxMenu *menuOptions;
+
+ /** GUI element menuHelp.
+ */
+#line 552 "WxdkdrawFrame.wxc"
+ wxMenu *menuHelp;
+
+ /** GUI element miFileNew.
+ */
+#line 33 "WxdkdrawFrame.wxc"
+ wxMenuItem *miFileNew;
+
+ /** GUI element miFileOpen.
+ */
+#line 38 "WxdkdrawFrame.wxc"
+ wxMenuItem *miFileOpen;
+
+ /** GUI element miFileSave.
+ */
+#line 43 "WxdkdrawFrame.wxc"
+ wxMenuItem *miFileSave;
+
+ /** GUI element miFileSaveAs.
+ */
+#line 48 "WxdkdrawFrame.wxc"
+ wxMenuItem *miFileSaveAs;
+
+ /** GUI element miFileExit.
+ */
+#line 53 "WxdkdrawFrame.wxc"
+ wxMenuItem *miFileExit;
+
+ /** GUI element miAddPolyline.
+ */
+#line 79 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddPolyline;
+
+ /** GUI element miAddPolygon.
+ */
+#line 84 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddPolygon;
+
+ /** GUI element miAddRectangle.
+ */
+#line 89 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddRectangle;
+
+ /** GUI element miAddRoundedBox.
+ */
+#line 94 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddRoundedBox;
+
+ /** GUI element miAddCircle.
+ */
+#line 99 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddCircle;
+
+ /** GUI element miAddEllipse.
+ */
+#line 104 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddEllipse;
+
+ /** GUI element miAddArcOpen.
+ */
+#line 109 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddArcOpen;
+
+ /** GUI element miAddArcClosed.
+ */
+#line 114 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddArcClosed;
+
+ /** GUI element miAddSplineAO.
+ */
+#line 119 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddSplineAO;
+
+ /** GUI element miAddSplineAC.
+ */
+#line 124 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddSplineAC;
+
+ /** GUI element miAddSplineIO.
+ */
+#line 129 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddSplineIO;
+
+ /** GUI element miAddSplineIC.
+ */
+#line 134 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddSplineIC;
+
+ /** GUI element miAddConnector.
+ */
+#line 139 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddConnector;
+
+ /** GUI element miAddPin.
+ */
+#line 144 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddPin;
+
+ /** GUI element miAddText.
+ */
+#line 149 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddText;
+
+ /** GUI element miAddImage.
+ */
+#line 154 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddImage;
+
+ /** GUI element miAddLibelem.
+ */
+#line 159 "WxdkdrawFrame.wxc"
+ wxMenuItem *miAddLibelem;
+
+ /** GUI element miEditCopy.
+ */
+#line 184 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditCopy;
+
+ /** GUI element miEditMove.
+ */
+#line 189 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditMove;
+
+ /** GUI element miEditDelete.
+ */
+#line 194 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditDelete;
+
+ /** GUI element miEditPointAdd.
+ */
+#line 209 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditPointAdd;
+
+ /** GUI element miEditPointRemove.
+ */
+#line 214 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditPointRemove;
+
+ /** GUI element miEditPointMove.
+ */
+#line 199 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditPointMove;
+
+ /** GUI element miEditModifySpline.
+ */
+#line 204 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditModifySpline;
+
+ /** GUI element miEditFlipH.
+ */
+#line 246 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditFlipH;
+
+ /** GUI element miEditFlipV.
+ */
+#line 251 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditFlipV;
+
+ /** GUI element miEditRotLeft.
+ */
+#line 256 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditRotLeft;
+
+ /** GUI element miEditRotRight.
+ */
+#line 261 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditRotRight;
+
+ /** GUI element miEditDetails.
+ */
+#line 219 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditDetails;
+
+ /** GUI element mEditGroup.
+ */
+#line 224 "WxdkdrawFrame.wxc"
+ wxMenu *mEditGroup;
+
+ /** GUI element miEditUngroup.
+ */
+#line 241 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditUngroup;
+
+ /** GUI element miEditChangeSize.
+ */
+#line 267 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditChangeSize;
+
+ /** GUI element mEditConvert.
+ */
+#line 272 "WxdkdrawFrame.wxc"
+ wxMenu *mEditConvert;
+
+ /** GUI element miEditGroupElements.
+ */
+#line 230 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditGroupElements;
+
+ /** GUI element miEditGroupIncluding.
+ */
+#line 235 "WxdkdrawFrame.wxc"
+ wxMenuItem *miEditGroupIncluding;
+
+ /** GUI element miPolygonToPolyline.
+ */
+#line 290 "WxdkdrawFrame.wxc"
+ wxMenuItem *miPolygonToPolyline;
+
+ /** GUI element miPolylineToPolygon.
+ */
+#line 285 "WxdkdrawFrame.wxc"
+ wxMenuItem *miPolylineToPolygon;
+
+ /** GUI element miClosedToOpenArc.
+ */
+#line 300 "WxdkdrawFrame.wxc"
+ wxMenuItem *miClosedToOpenArc;
+
+ /** GUI element miOpenToClosedArc.
+ */
+#line 295 "WxdkdrawFrame.wxc"
+ wxMenuItem *miOpenToClosedArc;
+
+ /** GUI element miClosedToOpenSpline.
+ */
+#line 310 "WxdkdrawFrame.wxc"
+ wxMenuItem *miClosedToOpenSpline;
+
+ /** GUI element miOpenToClosedSpline.
+ */
+#line 305 "WxdkdrawFrame.wxc"
+ wxMenuItem *miOpenToClosedSpline;
+
+ /** GUI element miClosedToOpenIntSpline.
+ */
+#line 320 "WxdkdrawFrame.wxc"
+ wxMenuItem *miClosedToOpenIntSpline;
+
+ /** GUI element miOpenToClosedIntSpline.
+ */
+#line 315 "WxdkdrawFrame.wxc"
+ wxMenuItem *miOpenToClosedIntSpline;
+
+ /** GUI element miWhiteFilledToDot.
+ */
+#line 330 "WxdkdrawFrame.wxc"
+ wxMenuItem *miWhiteFilledToDot;
+
+ /** GUI element miDotToWhiteFilled.
+ */
+#line 325 "WxdkdrawFrame.wxc"
+ wxMenuItem *miDotToWhiteFilled;
+
+ /** GUI element menuZoom.
+ */
+#line 348 "WxdkdrawFrame.wxc"
+ wxMenu *menuZoom;
+
+ /** GUI element menuLayer.
+ */
+#line 369 "WxdkdrawFrame.wxc"
+ wxMenu *menuLayer;
+
+ /** GUI element miViewCenterView.
+ */
+#line 384 "WxdkdrawFrame.wxc"
+ wxMenuItem *miViewCenterView;
+
+ /** GUI element menuColours.
+ */
+#line 389 "WxdkdrawFrame.wxc"
+ wxMenu *menuColours;
+
+ /** GUI element miOptionsNewObjects.
+ */
+#line 537 "WxdkdrawFrame.wxc"
+ wxMenuItem *miOptionsNewObjects;
+
+ /** GUI element miOptionsScreen.
+ */
+#line 542 "WxdkdrawFrame.wxc"
+ wxMenuItem *miOptionsScreen;
+
+ /** GUI element miOptionsReset.
+ */
+#line 547 "WxdkdrawFrame.wxc"
+ wxMenuItem *miOptionsReset;
+
+ /** GUI element miZoomIn.
+ */
+#line 354 "WxdkdrawFrame.wxc"
+ wxMenuItem *miZoomIn;
+
+ /** GUI element miZoomOut.
+ */
+#line 359 "WxdkdrawFrame.wxc"
+ wxMenuItem *miZoomOut;
+
+ /** GUI element miZoomReset.
+ */
+#line 364 "WxdkdrawFrame.wxc"
+ wxMenuItem *miZoomReset;
+
+ /** GUI element miLayerActivateAll.
+ */
+#line 374 "WxdkdrawFrame.wxc"
+ wxMenuItem *miLayerActivateAll;
+
+ /** GUI element miLayerManager.
+ */
+#line 379 "WxdkdrawFrame.wxc"
+ wxMenuItem *miLayerManager;
+
+ /** GUI element menuColourBorder.
+ */
+#line 401 "WxdkdrawFrame.wxc"
+ wxMenu *menuColourBorder;
+
+ /** GUI element menuColourBackground.
+ */
+#line 416 "WxdkdrawFrame.wxc"
+ wxMenu *menuColourBackground;
+
+ /** GUI element menuColourGrid.
+ */
+#line 432 "WxdkdrawFrame.wxc"
+ wxMenu *menuColourGrid;
+
+ /** GUI element menuColourPlacement.
+ */
+#line 447 "WxdkdrawFrame.wxc"
+ wxMenu *menuColourPlacement;
+
+ /** GUI element menuColourCopy.
+ */
+#line 462 "WxdkdrawFrame.wxc"
+ wxMenu *menuColourCopy;
+
+ /** GUI element menuColourMove.
+ */
+#line 477 "WxdkdrawFrame.wxc"
+ wxMenu *menuColourMove;
+
+ /** GUI element menuColourDelete.
+ */
+#line 492 "WxdkdrawFrame.wxc"
+ wxMenu *menuColourDelete;
+
+ /** GUI element menuColourGroup.
+ */
+#line 507 "WxdkdrawFrame.wxc"
+ wxMenu *menuColourGroup;
+
+ /** GUI element menuColourMissing.
+ */
+#line 522 "WxdkdrawFrame.wxc"
+ wxMenu *menuColourMissing;
+
+ /** GUI element miColourBorderModify.
+ */
+#line 406 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourBorderModify;
+
+ /** GUI element miColourBorderReset.
+ */
+#line 411 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourBorderReset;
+
+ /** GUI element miColourBackgroundModify.
+ */
+#line 422 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourBackgroundModify;
+
+ /** GUI element miColourBackgroundReset.
+ */
+#line 427 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourBackgroundReset;
+
+ /** GUI element miColourGridModify.
+ */
+#line 437 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourGridModify;
+
+ /** GUI element miColourGridReset.
+ */
+#line 442 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourGridReset;
+
+ /** GUI element miColourPlacementModify.
+ */
+#line 452 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourPlacementModify;
+
+ /** GUI element miColourPlacementReset.
+ */
+#line 457 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourPlacementReset;
+
+ /** GUI element miColourCopyModify.
+ */
+#line 467 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourCopyModify;
+
+ /** GUI element miColourCopyReset.
+ */
+#line 472 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourCopyReset;
+
+ /** GUI element miColourMoveModify.
+ */
+#line 482 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourMoveModify;
+
+ /** GUI element miColourMoveReset.
+ */
+#line 487 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourMoveReset;
+
+ /** GUI element miColourDeleteModify.
+ */
+#line 497 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourDeleteModify;
+
+ /** GUI element miColourDeleteReset.
+ */
+#line 502 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourDeleteReset;
+
+ /** GUI element miColourGroupModify.
+ */
+#line 512 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourGroupModify;
+
+ /** GUI element miColourGroupReset.
+ */
+#line 517 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourGroupReset;
+
+ /** GUI element miColourMissingModify.
+ */
+#line 527 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourMissingModify;
+
+ /** GUI element miColourMissingReset.
+ */
+#line 532 "WxdkdrawFrame.wxc"
+ wxMenuItem *miColourMissingReset;
+
+ /** GUI element miHelpAbout.
+ */
+#line 557 "WxdkdrawFrame.wxc"
+ wxMenuItem *miHelpAbout;
+
+ /** GUI element miHelpContents.
+ */
+#line 562 "WxdkdrawFrame.wxc"
+ wxMenuItem *miHelpContents;
+
+ /** GUI element verticalSizer.
+ */
+#line 573 "WxdkdrawFrame.wxc"
+ wxBoxSizer *verticalSizer;
+
+ /** GUI element szTopBar.
+ */
+#line 588 "WxdkdrawFrame.wxc"
+ wxBoxSizer *szTopBar;
+
+ /** GUI element szMiddleBar.
+ */
+#line 609 "WxdkdrawFrame.wxc"
+ wxBoxSizer *szMiddleBar;
+
+ /** GUI element szBottomBar.
+ */
+#line 648 "WxdkdrawFrame.wxc"
+ wxGridBagSizer *szBottomBar;
+
+ /** GUI element szHintsBar.
+ */
+#line 721 "WxdkdrawFrame.wxc"
+ wxBoxSizer *szHintsBar;
+
+ /** GUI element bFileOpen.
+ */
+#line 773 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bFileOpen;
+
+ /** GUI element bFileSave.
+ */
+#line 778 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bFileSave;
+
+ /** GUI element lZoomPercent.
+ */
+#line 884 "WxdkdrawFrame.wxc"
+ wxStaticText *lZoomPercent;
+
+ /** GUI element bZoomIn.
+ */
+#line 869 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bZoomIn;
+
+ /** GUI element bZoomOut.
+ */
+#line 874 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bZoomOut;
+
+ /** GUI element bZoomOne.
+ */
+#line 879 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bZoomOne;
+
+ /** GUI element cbGridOnOff.
+ */
+#line 887 "WxdkdrawFrame.wxc"
+ wxCheckBox *cbGridOnOff;
+
+ /** GUI element cbGridUnit.
+ */
+#line 892 "WxdkdrawFrame.wxc"
+ wxChoice *cbGridUnit;
+
+ /** GUI element cbGridBase.
+ */
+#line 897 "WxdkdrawFrame.wxc"
+ wxChoice *cbGridBase;
+
+ /** GUI element cbPH.
+ */
+#line 903 "WxdkdrawFrame.wxc"
+ wxCheckBox *cbPH;
+
+ /** GUI element szLeftBar.
+ */
+#line 618 "WxdkdrawFrame.wxc"
+ wxGridBagSizer *szLeftBar;
+
+ /** GUI element szOperationsAndDraw.
+ */
+#line 638 "WxdkdrawFrame.wxc"
+ wxBoxSizer *szOperationsAndDraw;
+
+ /** GUI element bPolyline.
+ */
+#line 908 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bPolyline;
+
+ /** GUI element bPolygon.
+ */
+#line 913 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bPolygon;
+
+ /** GUI element bRect.
+ */
+#line 918 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bRect;
+
+ /** GUI element bBox.
+ */
+#line 923 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bBox;
+
+ /** GUI element bCircle.
+ */
+#line 928 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bCircle;
+
+ /** GUI element bEllipse.
+ */
+#line 933 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEllipse;
+
+ /** GUI element bArcOpen.
+ */
+#line 938 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bArcOpen;
+
+ /** GUI element bArcClosed.
+ */
+#line 943 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bArcClosed;
+
+ /** GUI element bSplineAO.
+ */
+#line 948 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bSplineAO;
+
+ /** GUI element bSplineAC.
+ */
+#line 953 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bSplineAC;
+
+ /** GUI element bSplineIO.
+ */
+#line 958 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bSplineIO;
+
+ /** GUI element bSplineIC.
+ */
+#line 963 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bSplineIC;
+
+ /** GUI element bConnector.
+ */
+#line 968 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bConnector;
+
+ /** GUI element bPin.
+ */
+#line 973 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bPin;
+
+ /** GUI element bText.
+ */
+#line 978 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bText;
+
+ /** GUI element bImage.
+ */
+#line 988 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bImage;
+
+ /** GUI element bLibelem.
+ */
+#line 983 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bLibelem;
+
+ /** GUI element szOperationButtons.
+ */
+#line 735 "WxdkdrawFrame.wxc"
+ wxBoxSizer *szOperationButtons;
+
+ /** GUI element szDrawco.
+ */
+#line 762 "WxdkdrawFrame.wxc"
+ wxGridBagSizer *szDrawco;
+
+ /** GUI element lLayer.
+ */
+#line 994 "WxdkdrawFrame.wxc"
+ wxStaticText *lLayer;
+
+ /** GUI element spLayerNumber.
+ */
+#line 1015 "WxdkdrawFrame.wxc"
+ wxSpinCtrl *spLayerNumber;
+
+ /** GUI element lLine.
+ */
+#line 998 "WxdkdrawFrame.wxc"
+ wxStaticText *lLine;
+
+ /** GUI element szLine.
+ */
+#line 690 "WxdkdrawFrame.wxc"
+ wxBoxSizer *szLine;
+
+ /** GUI element lFill.
+ */
+#line 1002 "WxdkdrawFrame.wxc"
+ wxStaticText *lFill;
+
+ /** GUI element szFill.
+ */
+#line 701 "WxdkdrawFrame.wxc"
+ wxBoxSizer *szFill;
+
+ /** GUI element lText.
+ */
+#line 1006 "WxdkdrawFrame.wxc"
+ wxStaticText *lText;
+
+ /** GUI element szText.
+ */
+#line 706 "WxdkdrawFrame.wxc"
+ wxBoxSizer *szText;
+
+ /** GUI element ccLineColour.
+ */
+#line 1021 "WxdkdrawFrame.wxc"
+ Dk4WxColourView *ccLineColour;
+
+ /** GUI element spLineWidth.
+ */
+#line 1026 "WxdkdrawFrame.wxc"
+ wxSpinCtrl *spLineWidth;
+
+ /** GUI element bStyleLineStyle.
+ */
+#line 1032 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bStyleLineStyle;
+
+ /** GUI element bStyleLineJoins.
+ */
+#line 1042 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bStyleLineJoins;
+
+ /** GUI element bStyleLineEnds.
+ */
+#line 1037 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bStyleLineEnds;
+
+ /** GUI element bStyleArrowForward.
+ */
+#line 1047 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bStyleArrowForward;
+
+ /** GUI element bStyleArrowBackward.
+ */
+#line 1052 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bStyleArrowBackward;
+
+ /** GUI element ccFillColour.
+ */
+#line 1057 "WxdkdrawFrame.wxc"
+ Dk4WxColourView *ccFillColour;
+
+ /** GUI element bStyleFillPattern.
+ */
+#line 1062 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bStyleFillPattern;
+
+ /** GUI element cbStyleTextLaTeX.
+ */
+#line 1067 "WxdkdrawFrame.wxc"
+ wxCheckBox *cbStyleTextLaTeX;
+
+ /** GUI element bStyleTextAlign.
+ */
+#line 1072 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bStyleTextAlign;
+
+ /** GUI element bStyleFontName.
+ */
+#line 1077 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bStyleFontName;
+
+ /** GUI element spFontSize.
+ */
+#line 1082 "WxdkdrawFrame.wxc"
+ wxSpinCtrl *spFontSize;
+
+ /** GUI element lRotation.
+ */
+#line 1088 "WxdkdrawFrame.wxc"
+ wxStaticText *lRotation;
+
+ /** GUI element spRotation.
+ */
+#line 1091 "WxdkdrawFrame.wxc"
+ wxSpinCtrl *spRotation;
+
+ /** GUI element tlMouseL.
+ */
+#line 1097 "WxdkdrawFrame.wxc"
+ wxStaticText *tlMouseL;
+
+ /** GUI element msgMouseL.
+ */
+#line 1100 "WxdkdrawFrame.wxc"
+ wxStaticText *msgMouseL;
+
+ /** GUI element tlMouseM.
+ */
+#line 1104 "WxdkdrawFrame.wxc"
+ wxStaticText *tlMouseM;
+
+ /** GUI element msgMouseM.
+ */
+#line 1107 "WxdkdrawFrame.wxc"
+ wxStaticText *msgMouseM;
+
+ /** GUI element tlMouseR.
+ */
+#line 1111 "WxdkdrawFrame.wxc"
+ wxStaticText *tlMouseR;
+
+ /** GUI element msgMouseR.
+ */
+#line 1114 "WxdkdrawFrame.wxc"
+ wxStaticText *msgMouseR;
+
+ /** GUI element tlPosX.
+ */
+#line 1118 "WxdkdrawFrame.wxc"
+ wxStaticText *tlPosX;
+
+ /** GUI element msgPosX.
+ */
+#line 1121 "WxdkdrawFrame.wxc"
+ wxStaticText *msgPosX;
+
+ /** GUI element tlPosY.
+ */
+#line 1125 "WxdkdrawFrame.wxc"
+ wxStaticText *tlPosY;
+
+ /** GUI element msgPosY.
+ */
+#line 1128 "WxdkdrawFrame.wxc"
+ wxStaticText *msgPosY;
+
+ /** GUI element bEditCopy.
+ */
+#line 783 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditCopy;
+
+ /** GUI element bEditMove.
+ */
+#line 788 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditMove;
+
+ /** GUI element bEditDelete.
+ */
+#line 793 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditDelete;
+
+ /** GUI element bEditPointAdd.
+ */
+#line 854 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditPointAdd;
+
+ /** GUI element bEditPointDelete.
+ */
+#line 859 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditPointDelete;
+
+ /** GUI element bEditPointMove.
+ */
+#line 798 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditPointMove;
+
+ /** GUI element cbPointMoveMode.
+ */
+#line 803 "WxdkdrawFrame.wxc"
+ wxChoice *cbPointMoveMode;
+
+ /** GUI element bModifySplineValue.
+ */
+#line 808 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bModifySplineValue;
+
+ /** GUI element bEditFlipH.
+ */
+#line 834 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditFlipH;
+
+ /** GUI element bEditFlipV.
+ */
+#line 839 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditFlipV;
+
+ /** GUI element bEditRotLeft.
+ */
+#line 844 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditRotLeft;
+
+ /** GUI element bEditRotRight.
+ */
+#line 849 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditRotRight;
+
+ /** GUI element bEditDetails.
+ */
+#line 813 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditDetails;
+
+ /** GUI element bEditGroup.
+ */
+#line 819 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditGroup;
+
+ /** GUI element bEditGroup3.
+ */
+#line 824 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditGroup3;
+
+ /** GUI element bEditUngroup.
+ */
+#line 829 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditUngroup;
+
+ /** GUI element bEditChangeSize.
+ */
+#line 864 "WxdkdrawFrame.wxc"
+ wxBitmapButton *bEditChangeSize;
+
+ /** GUI element drawco.
+ */
+#line 1133 "WxdkdrawFrame.wxc"
+ Control *drawco;
+
+ /** GUI element sbVert.
+ */
+#line 1138 "WxdkdrawFrame.wxc"
+ wxScrollBar *sbVert;
+
+ /** GUI element sbHori.
+ */
+#line 1143 "WxdkdrawFrame.wxc"
+ wxScrollBar *sbHori;
+
+
+#line 2656 "WxdkdrawFrame.wxc"
+
+ public:
+
+ /* frame public members */
+
+ /** Names for bitmaps to visualize line styles.
+ */
+ static const char ** const ms_ls_images[];
+
+ /** Names for bitmaps to visualize line cap styles.
+ */
+ static const char ** const ms_lc_images[];
+
+ /** Names for bitmaps to visualize line join styles.
+ */
+ static const char ** const ms_lj_images[];
+
+ /** Names for bitmaps to visualize arrow types.
+ */
+ static const char ** const ms_arrow_images[];
+
+ /** Names for bitmaps to visualize fill patterns.
+ */
+ static const char ** const ms_fs_images[];
+
+ /** Names for bitmaps to visualize text alignments.
+ */
+ static const char ** const ms_ta_images[];
+
+ /** Names for bitmaps to visualize fonts.
+ */
+ static const char ** const ms_fn_images[];
+
+ /** Constructor.
+ @param wxid Window ID.
+ @param applicationHelper Application helper object.
+ @param hc Help controller for online help.
+ @param argc Number of command line arguments.
+ @param argv Command line arguments array.
+ @param localizedTexts Localized wxChar texts.
+ @param nlWx Non-localized wxChar texts.
+ @param nlDk Non-localized dkChar texts.
+ */
+ WxdkdrawFrame(
+ int wxid,
+ Dk4WxApplicationHelper *applicationHelper,
+ Dk4WxHelpController *hc,
+ int argc,
+ wxChar **argv,
+ wxChar const * const *localizedTexts,
+ wxChar const * const *nlWx,
+ dkChar const * const *nlDk
+ );
+
+ /** Destructor.
+ */
+ ~WxdkdrawFrame();
+
+ /** Check whether we can close the window.
+ @param isLast Flag: Last main window to close.
+ */
+ bool
+ CanClose(bool isFinal);
+
+ /** Handler for File/Exit.
+ @param event Event to process.
+ */
+ void
+ OnQuit(wxCommandEvent & event);
+
+ /** Handler for Help/About.
+ @param event Event to process.
+ */
+ void
+ OnAbout(wxCommandEvent & event);
+
+ /** Handler for Help/Contents.
+ @param event Event to process.
+ */
+ void
+ OnHelpContents(wxCommandEvent & event);
+
+ /** Handler for idle events.
+ @param event Event to process.
+ */
+ void
+ OnIdle(wxIdleEvent & event);
+
+ /** Handler File / New.
+ @param event Event to process.
+ */
+ void
+ OnFileNew(wxCommandEvent & event);
+
+ /** Handler File / Open.
+ @param event Event to process.
+ */
+ void
+ OnFileOpen(wxCommandEvent & event);
+
+ /** Save drawing to file.
+ @return True on success, false on error.
+ */
+ bool
+ SaveToFile(void);
+
+ /** Mark the drawing as modified or not modified.
+ @param f New flag value.
+ */
+ void
+ SetModified(bool f = true);
+
+ /** Handler File / Save.
+ @param event Event to process.
+ */
+ void
+ OnFileSave(wxCommandEvent & event);
+
+ /** Handler File / Save as.
+ @param event Event to process.
+ */
+ void
+ OnFileSaveAs(wxCommandEvent & event);
+
+ /** On zoom out correct the center point if necessary.
+ */
+ void
+ CorrectCenterPointIfNecessary(void);
+
+ /** Zoom level was changed.
+ @param bZoomOut Zoom change was "zoom out".
+ */
+ void
+ ZoomChanged(bool bZoomOut = false);
+
+ /** Adjust scrollbars after zoom or position change.
+ */
+ void
+ AdjustScrollbars(void);
+
+ /** Handler Zoom / In.
+ @param event Event to process.
+ */
+ void
+ OnZoomIn(wxCommandEvent & event);
+
+ /** Handler Zoom / Out.
+ @param event Event to process.
+ */
+ void
+ OnZoomOut(wxCommandEvent & event);
+
+ /** Handler Zoom / Reset.
+ @param event Event to process.
+ */
+ void
+ OnZoom100(wxCommandEvent & event);
+
+ /** Start polygon or polyline.
+ @param ot Object type to start, WXD_OT_POLYLINE or WXD_OT_POLYGON.
+ */
+ void
+ OnPolygonPolyline(int8_t ot);
+
+ /** Handler for Add polyline.
+ @param event Event to process.
+ */
+ void
+ OnAddPolyline(wxCommandEvent & event);
+
+
+ /** Handler for Add polygon.
+ @param event Event to process.
+ */
+ void
+ OnAddPolygon(wxCommandEvent & event);
+
+ /** Start creation of rectangular box.
+ @param bRounded Rounded corners (rectangular otherwise).
+ */
+ void
+ OnRectangleBox(bool bRounded);
+
+ /** Handler for Add rectangle.
+ @param event Event to process.
+ */
+ void
+ OnAddRectangle(wxCommandEvent & event);
+
+ /** Handler for Add box.
+ @param event Event to process.
+ */
+ void
+ OnAddBox(wxCommandEvent & event);
+
+ /** Handler for Add circle.
+ @param event Event to process.
+ */
+ void
+ OnAddCircle(wxCommandEvent & event);
+
+ /** Handler for Add ellipse.
+ @param event Event to process.
+ */
+ void
+ OnAddEllipse(wxCommandEvent & event);
+
+ /** Handler for Add open arc.
+ @param event Event to process.
+ */
+ void
+ OnAddArcOpen(wxCommandEvent & event);
+
+ /** Handler for Add closed arc.
+ @param event Event to process.
+ */
+ void
+ OnAddArcClosed(wxCommandEvent & event);
+
+ /** Start creation of new spline.
+ @param ot Object type (open or closed spline).
+ @param bInterpolated Interpolated or approximated.
+ */
+ void
+ OnSpline(int8_t ot, bool bInterpolated);
+
+ /** Handler for Add open approximated spline.
+ @param event Event to process.
+ */
+ void
+ OnAddSplineAO(wxCommandEvent & event);
+
+ /** Handler for Add closed approximated spline.
+ @param event Event to process.
+ */
+ void
+ OnAddSplineAC(wxCommandEvent & event);
+
+ /** Handler for Add open interpolated spline.
+ @param event Event to process.
+ */
+ void
+ OnAddSplineIO(wxCommandEvent & event);
+
+ /** Handler for Add closed interpolated spline.
+ @param event Event to process.
+ */
+ void
+ OnAddSplineIC(wxCommandEvent & event);
+
+ /** Handler for Add dot.
+ @param event Event to process.
+ */
+ void
+ OnAddDot(wxCommandEvent & event);
+
+ /** Handler for Add white filled dot.
+ @param event Event to process.
+ */
+ void
+ OnAddWhiteDot(wxCommandEvent & event);
+
+ /** Handler for Add text label.
+ @param event Event to process.
+ */
+ void
+ OnAddTextlabel(wxCommandEvent & event);
+
+ /** Handler for Add image.
+ @param event Event to process.
+ */
+ void
+ OnAddImage(wxCommandEvent & event);
+
+ /** Inner function to add library element.
+ */
+ void
+ AddLibelem(void);
+
+ /** Handler for Add library element.
+ @param event Event to process.
+ */
+ void
+ OnAddLibelem(wxCommandEvent & event);
+
+ /** Handler for Edit / copy.
+ @param event Event to process.
+ */
+ void
+ OnEditCopy(wxCommandEvent & event);
+
+ /** Handler for Edit / move.
+ @param event Event to process.
+ */
+ void
+ OnEditMove(wxCommandEvent & event);
+
+ /** Handler for Edit / delete.
+ @param event Event to process.
+ */
+ void
+ OnEditDelete(wxCommandEvent & event);
+
+ /** Handler for Edit / Move point.
+ @param event Event to process.
+ */
+ void
+ OnEditPointMove(wxCommandEvent & event);
+
+ /** Handler for Edit / Add point.
+ @param event Event to process.
+ */
+ void
+ OnEditPointAdd(wxCommandEvent & event);
+
+ /** Handler for Edit / Delete point.
+ @param event Event to process.
+ */
+ void
+ OnEditPointDelete(wxCommandEvent & event);
+
+ /** Handler for Edit / Details.
+ @param event Event to process.
+ */
+ void
+ OnEditDetails(wxCommandEvent & event);
+
+ /** Handler for Edit / Group.
+ @param event Event to process.
+ */
+ void
+ OnEditGroup(wxCommandEvent & event);
+
+ /** Handler for Edit / Group.
+ @param event Event to process.
+ */
+ void
+ OnEditGroup3(wxCommandEvent & event);
+
+ /** Handler for Edit / Ungroup.
+ @param event Event to process.
+ */
+ void
+ OnEditUngroup(wxCommandEvent & event);
+
+ /** Handler for Edit / Flip horizontally.
+ @param event Event to process.
+ */
+ void
+ OnEditFlipH(wxCommandEvent & event);
+
+ /** Handler for Edit / Flip vertically.
+ @param event Event to process.
+ */
+ void
+ OnEditFlipV(wxCommandEvent & event);
+
+ /** Handler for Rotate left.
+ @param event Event to process.
+ */
+ void
+ OnEditRotateLeft(wxCommandEvent & event);
+
+ /** Handler for Rotate right.
+ @param event Event to process.
+ */
+ void
+ OnEditRotateRight(wxCommandEvent & event);
+
+ /** Handler for Edit / Change drawing size.
+ @param event Event to process.
+ */
+ void
+ OnEditChangeSize(wxCommandEvent & event);
+
+ /** Handler for View / Layers / Activate all.
+ @param event Event to process.
+ */
+ void
+ OnLayersAll(wxCommandEvent & event);
+
+ /** Handler for View / Layers / Layer manager.
+ @param event Event to process.
+ */
+ void
+ OnLayerManager(wxCommandEvent & event);
+
+ /** Center view.
+ */
+ void
+ OnCenterViewFunction(void);
+
+ /** Handler for View / center view.
+ @param event Event to process.
+ */
+ void
+ OnCenterView(wxCommandEvent & event);
+
+ /** Handler for conversion.
+ @param event Event to process.
+ */
+ void
+ OnConvert1(wxCommandEvent & event);
+
+ /** Handler for conversion.
+ @param event Event to process.
+ */
+ void
+ OnConvert2(wxCommandEvent & event);
+
+ /** Handler for conversion.
+ @param event Event to process.
+ */
+ void
+ OnConvert3(wxCommandEvent & event);
+
+ /** Handler for conversion.
+ @param event Event to process.
+ */
+ void
+ OnConvert4(wxCommandEvent & event);
+
+ /** Handler for conversion.
+ @param event Event to process.
+ */
+ void
+ OnConvert5(wxCommandEvent & event);
+
+ /** Handler for conversion.
+ @param event Event to process.
+ */
+ void
+ OnConvert6(wxCommandEvent & event);
+
+ /** Handler for conversion.
+ @param event Event to process.
+ */
+ void
+ OnConvert7(wxCommandEvent & event);
+
+ /** Handler for conversion.
+ @param event Event to process.
+ */
+ void
+ OnConvert8(wxCommandEvent & event);
+
+ /** Handler for conversion.
+ @param event Event to process.
+ */
+ void
+ OnConvert9(wxCommandEvent & event);
+
+ /** Handler for conversion.
+ @param event Event to process.
+ */
+ void
+ OnConvertA(wxCommandEvent & event);
+
+ /** Handler for options reset.
+ @param event Event to process.
+ */
+ void
+ OnResetOptions(wxCommandEvent & event);
+
+ /** Handler for "modify spline s value" button or menu item.
+ */
+ void
+ OnModifySplineValue(wxCommandEvent & event);
+
+ /** Handler for "defaults for new objects" menu item.
+ @param event Event to process.
+ */
+ void
+ OnOptionsNewObjects(wxCommandEvent & event);
+
+ /** Handler for "screen representation options" menu item.
+ @param event Event to process.
+ */
+ void
+ OnOptionsScreenRepresentation(wxCommandEvent & event);
+
+ /** Handler for colour modification.
+ @param event Event to process.
+ */
+ void
+ OnColourBorderModify(wxCommandEvent & event);
+
+ /** Handler for colour reset.
+ @param event Event to process.
+ */
+ void
+ OnColourBorderReset(wxCommandEvent & event);
+
+ /** Handler for colour modification.
+ @param event Event to process.
+ */
+ void
+ OnColourBackgroundModify(wxCommandEvent & event);
+
+ /** Handler for colour reset.
+ @param event Event to process.
+ */
+ void
+ OnColourBackgroundReset(wxCommandEvent & event);
+
+ /** Handler for colour modification.
+ @param event Event to process.
+ */
+ void
+ OnColourGridModify(wxCommandEvent & event);
+
+ /** Handler for colour reset.
+ @param event Event to process.
+ */
+ void
+ OnColourGridReset(wxCommandEvent & event);
+
+ /** Handler for colour modification.
+ @param event Event to process.
+ */
+ void
+ OnColourPlacementModify(wxCommandEvent & event);
+
+ /** Handler for colour reset.
+ @param event Event to process.
+ */
+ void
+ OnColourPlacementReset(wxCommandEvent & event);
+
+ /** Handler for colour modification.
+ @param event Event to process.
+ */
+ void
+ OnColourCopyModify(wxCommandEvent & event);
+
+ /** Handler for colour reset.
+ @param event Event to process.
+ */
+ void
+ OnColourCopyReset(wxCommandEvent & event);
+
+ /** Handler for colour modification.
+ @param event Event to process.
+ */
+ void
+ OnColourMoveModify(wxCommandEvent & event);
+
+ /** Handler for colour reset.
+ @param event Event to process.
+ */
+ void
+ OnColourMoveReset(wxCommandEvent & event);
+
+ /** Handler for colour modification.
+ @param event Event to process.
+ */
+ void
+ OnColourDeleteModify(wxCommandEvent & event);
+
+ /** Handler for colour reset.
+ @param event Event to process.
+ */
+ void
+ OnColourDeleteReset(wxCommandEvent & event);
+
+ /** Handler for colour modification.
+ @param event Event to process.
+ */
+ void
+ OnColourGroupModify(wxCommandEvent & event);
+
+ /** Handler for colour reset.
+ @param event Event to process.
+ */
+ void
+ OnColourGroupReset(wxCommandEvent & event);
+
+ /** Handler for colour modification.
+ @param event Event to process.
+ */
+ void
+ OnColourMissingModify(wxCommandEvent & event);
+
+ /** Handler for colour reset.
+ @param event Event to process.
+ */
+ void
+ OnColourMissingReset(wxCommandEvent & event);
+
+ /** Handler for Grid on/off.
+ @param event Event to process.
+ */
+ void
+ OnGridOnOff(wxCommandEvent & event);
+
+ /** Handler for Grid unit.
+ @param event Event to process.
+ */
+ void
+ OnGridUnit(wxCommandEvent & event);
+
+ /** Handler for Grid base.
+ @param event Event to process.
+ */
+ void
+ OnGridBase(wxCommandEvent & event);
+
+ /** Handler for placement help checkbox.
+ @param event Event to process.
+ */
+ void
+ OnPlacementHelp(wxCommandEvent & event);
+
+ /** Handler for layer change.
+ @param event Event to process.
+ */
+ void
+ OnStyleLayer(wxSpinEvent & event);
+
+ /** Handler for line colour change.
+ @param event Event to process.
+ */
+ void
+ OnStyleLineColour(wxCommandEvent & event);
+
+ /** Handler for line width change.
+ @param event Event to process.
+ */
+ void
+ OnStyleLineWidth(wxSpinEvent & event);
+
+ /** Handler for line style button.
+ @param event Event to process.
+ */
+ void
+ OnStyleLineStyle(wxCommandEvent & event);
+
+ /** Handler for line cap.
+ @param event Event to process.
+ */
+ void
+ OnStyleLineCap(wxCommandEvent & event);
+
+ /** Handler for line width change.
+ @param event Event to process.
+ */
+ void
+ OnStyleLineJoin(wxCommandEvent & event);
+
+ /** Handler for arrowhead forward button.
+ @param event Event to process.
+ */
+ void
+ OnStyleLineArrowF(wxCommandEvent & event);
+
+ /** Handler for arrowhead backward button.
+ @param event Event to process.
+ */
+ void
+ OnStyleLineArrowB(wxCommandEvent & event);
+
+ /** Handler for line width change.
+ @param event Event to process.
+ */
+ void
+ OnStyleFillColour(wxCommandEvent & event);
+
+ /** Handler for fill pattern change.
+ @param event Event to process.
+ */
+ void
+ OnStyleFillPattern(wxCommandEvent & event);
+
+ /** Handler for line width change.
+ @param event Event to process.
+ */
+ void
+ OnStyleTextLatex(wxCommandEvent & event);
+
+ /** Handler for text align change.
+ @param event Event to process.
+ */
+ void
+ OnStyleTextAlign(wxCommandEvent & event);
+
+ /** Handler for text font change.
+ @param event Event to process.
+ */
+ void
+ OnStyleTextFont(wxCommandEvent & event);
+
+ /** Handler for text size change.
+ @param event Event to process.
+ */
+ void
+ OnStyleTextSize(wxSpinEvent & event);
+
+ /** Handler for rotation spin control.
+ @param event Event to process.
+ */
+ void
+ OnSpinRotation(wxSpinEvent & event);
+
+ /** Horizontal scrollbar handler.
+ @param event Event to process.
+ */
+ void
+ OnScrollH(wxScrollEvent & event);
+
+ /** Vertical scrollbar handler.
+ @param event Event to process.
+ */
+ void
+ OnScrollV(wxScrollEvent & event);
+
+ /** Require a redraw.
+ Only to be executed between BeginEventHandling()
+ and EndEventHandling().
+ @param level Redraw level to require.
+ */
+ void
+ RequireRedraw(int level);
+
+ /** Update text if new font was choosen.
+ @param pobj Modified text object.
+ @param bRedraw Schedule redraw.
+ */
+ void
+ UpdateTextForFont(Wxd_object_t *pobj, bool bRedraw = true);
+
+ /** Set text for mouse messages when entering a new state.
+ @param st New state to enter.
+ */
+ void
+ SetMouseAndStatusTexts(int st);
+
+ /* __CHANGE__ 014: Add further methods.
+ */
+
+ /** Attempt to update all fonts.
+ */
+ void
+ UpdateFonts(void);
+
+ protected:
+
+ /* frame protected methods */
+
+ /** Transfer style information from object to GUI elements.
+ @param refresh Flag: Refresh GUI elements explicitly.
+ */
+ void
+ StyleToGUI(bool refresh = true);
+
+ /** Set style object (object to modify using the style GUI elements).
+ @param pObj Object to modify.
+ */
+ void
+ SetStyleObject(Wxd_object_t *pObj = NULL, bool bUpdate = true);
+
+ /** Check whether the frame is up and initialized to handle events.
+ On success, initialize things to handle one event.
+ @return True to start event handling, false to skip.
+ */
+ bool
+ BeginEventHandling(void);
+
+ /** Start handling of events from control.
+ */
+ void
+ StartEventHandling(void);
+
+ /** Report modifications while reading a file at the end
+ of event processing.
+ */
+ void
+ ModificationReportingAtEventEnd(void);
+
+ /** Do error reporting at end of event handling.
+ */
+ void
+ ErrorReportingAtEventEnd(void);
+
+ /** End handling one event. If necessary call Update() on the frame.
+ */
+ void
+ EndEventHandling(void);
+
+ /** Update one stipple structure.
+ @param psti Stipple structure to update.
+ */
+ void
+ UpdateOneStipple(Wxd_stipple_t *psti);
+
+ /** Update internal pattern coefficients in m_dPatterns.
+ Recalculation necessary after changing zoom factor and/or
+ loading a new file.
+ */
+ void
+ UpdatePatternCoefficients(void);
+
+ /** Update stipple bitmaps after changing zoom or loading
+ a file.
+ */
+ void
+ UpdateStipples(void);
+
+ /** Attempt to read all images not yet read.
+ */
+ void
+ UpdateImages(void);
+
+ /** Update one font.
+ @param pfont Font to update.
+ */
+ void
+ UpdateOneFont(Wxd_font_t *pfont);
+
+ /** Find font structure, create new one if necessary.
+ @param find Font index.
+ @param fsz Font size in pt.
+ @return Valid pointer to font structure on success, NULL on error.
+ */
+ Wxd_font_t *
+ FindFont(uint8_t find, uint16_t fsz);
+
+ /** Read a drawing from file.
+ @param fn File name to read.
+ @return Pointer to new drawing on success, NULL on error.
+ */
+ Wxd_drawing_t *
+ ReadDrawingFromFile(wxString & fn);
+
+ /** A new drawing was loaded, adjust GUI.
+ */
+ void
+ DrawingLoaded(void);
+
+ /** Find suitable size for colour viewers, derived from
+ the height of the layer number spin control.
+ @return Size suggestion for colour viewer.
+ */
+ wxSize
+ ColourViewSize(void);
+
+ /** Complete setup on first idle event.
+ Using the first idle event ensures the window is already
+ shown on screen.
+ */
+ void
+ OnFirstIdle(void);
+
+ /** Copy default style values to m_iv array.
+ */
+ void
+ DefaultStyleToArray(void);
+
+ /** Get default style values from m_iv array.
+ */
+ void
+ DefaultStyleFromArray(void);
+
+ /** Load defaults.
+ */
+ void
+ LoadDefaults(void);
+
+ /** Load configuration.
+ */
+ void
+ LoadConfiguration(void);
+
+ /** Save configuration.
+ */
+ void
+ SaveConfiguration(void);
+
+ /** Reset configuration settings to default values.
+ */
+ void
+ ResetConfiguration(void);
+
+ /** Update the position labels.
+ @param havepos Flag: Position is known.
+ @param x X position if position is known.
+ @param y Y position if position is known.
+ */
+ void
+ UpdatePositionLabels(bool havepos, int32_t x, int32_t y);
+
+ /** Calculate drawing and grid position from mouse position.
+ @return True if position was changed, false if no change.
+ */
+ bool
+ UpdateGridPosition(void);
+
+ /** Retrieve mouse position, calculate drawing and grid position.
+ @param event Event to process.
+ @return True if position was changed, false if everything
+ unchanged.
+ */
+ bool
+ UpdateMousePosition(wxMouseEvent & event);
+
+ /** Move scrollbar position as action on mouse wheel.
+ @param sb Scrollbar to modify.
+ @param lines Number of lines to move.
+ @param vert Flag: Moving the vertical bar.
+ */
+ void
+ MoveScrollbar(wxScrollBar *sb, int lines, bool vert);
+
+ /** Check whether an object is selectable in the current state.
+ @param pobj Object to check.
+ @return True if object is selectable, false otherwise.
+ */
+ bool
+ ObjectSelectableInState(Wxd_object_t const *pobj);
+
+ /** Find object nearest to raw mouse coordinates (not grid-aligned).
+ @param gr Return group object instead of simple object.
+ @return Object if found or NULL.
+ */
+ Wxd_object_t *
+ FindNearestObject(bool gr = false);
+
+ /** End polyline drawing operation while waiting for first point.
+ @param bComplete End completely.
+ @param bSkip Skip data entered so far in operation.
+ */
+ void
+ EndOperationPolyFirst(void);
+
+ /** End polyline drawing operation if points exist.
+ @param bComplete End completely.
+ @param bSkip Skip data entered so far in operation.
+ */
+ void
+ EndOperationPolyFurther(bool bComplete, bool bSkip);
+
+ /** End spline drawing operation while waiting for first point.
+ */
+ void
+ EndOperationSplineFirst(void);
+
+ /** End spline drawing operation if points exist.
+ @param bComplete End completely.
+ @param bSkip Skip data entered so far in operation.
+ */
+ void
+ EndOperationSplineFurther(bool bComplete, bool bSkip);
+
+ /** End 2-point operation while waiting for second point.
+ @param ns Next state.
+ @param bComplete End completely.
+ */
+ void
+ EndOperationTwoPointsSecond(int ns, bool bComplete);
+
+ /** End box drawing while waiting for first point.
+ */
+ void
+ EndOperationBoxFirst(void);
+
+ /** End box drawing while waiting for opposite point.
+ @param bComplete End completely.
+ */
+ void
+ EndOperationBoxOpposite(bool bComplete);
+
+ /** End circle drawing while waiting for center point.
+ */
+ void
+ EndOperationCircleCenter(void);
+
+ /** End circle drawing while waiting for radius point.
+ @param bComplete End completely.
+ */
+ void
+ EndOperationCircleRadius(bool bComplete);
+
+ /** End ellipse drawing while waiting for center point.
+ */
+ void
+ EndOperationEllipseCenter(void);
+
+ /** End ellipse drawing while waiting for bounding box corner point.
+ @param bComplete End completely.
+ */
+ void
+ EndOperationEllipseCorner(bool bComplete);
+
+ /** End arc drawing while waiting for start point.
+ */
+ void
+ EndOperationArc1(void);
+
+ /** End arc drawing while waiting for intermediate point.
+ @param bComplete End completely.
+ */
+ void
+ EndOperationArc2(bool bComplete);
+
+ /** End arc drawing while waiting for end point.
+ @param bComplete End completely.
+ */
+ void
+ EndOperationArc3(bool bComplete);
+
+ /** End dot drawing while waiting for point.
+ */
+ void
+ EndOperationDot(void);
+
+ /** End library element placement operation while waiting for point.
+ */
+ void
+ EndOperationLibelemPlace(void);
+
+ /** End point move operation while placing point.
+ */
+ void
+ EndOperationPointMovePlace(void);
+
+ /** End point add operation while placing point.
+ @param bComplete End completely.
+ */
+ void
+ EndOperationPointAddPlace(bool bComplete);
+
+ /** End point add operation while placing drawing corner point.
+ @param bComplete End completely.
+ */
+ void
+ EndOperationDrawingSizePlace(bool bComplete);
+
+ /** End recent operation.
+ @param bComplete End completely.
+ @param bSkip Skip data entered so far in operation.
+ */
+ void
+ EndOperation(bool bComplete = false, bool bSkip = false);
+
+ /** Move marker 2 marked objects into new group.
+ */
+ void
+ GroupNewForMarkedObjects(void);
+
+ /** Ungroup objects from group (resolve group).
+ @param pgrp Group to resolve.
+ */
+ void
+ UngroupObjects(Wxd_object_t *pgrp);
+
+ /** Check whether the current point is an acceptable point.
+ @return Test result.
+ */
+ bool
+ IsAcceptablePoint(void);
+
+ /** Reaction on mouse move in S_NOOP state.
+ */
+ void
+ MouseMoveNoop(void);
+
+ /** Reaction on mouse move in S_DELETE state.
+ */
+ void
+ MouseMoveDelete(void);
+
+ /** Reaction on mouse move in S_REGION_DELETE state.
+ */
+ void
+ MouseMoveRegionDelete(void);
+
+ /** Reaction on mouse move while selecting objects to move.
+ */
+ void
+ MouseMoveMoveSelect(void);
+
+ /** Reaction on mouse move while placing objects to move.
+ */
+ void
+ MouseMoveMovePlace(void);
+
+ /** Reaction on mouse move while selecting objects to copy.
+ */
+ void
+ MouseMoveCopySelect(void);
+
+ /** Reaction on mouse move while placing objects to copy.
+ */
+ void
+ MouseMoveCopyPlace(void);
+
+ /** Reaction on middle mouse key.
+ */
+ void
+ MouseMiddleDelete(void);
+
+ /** Reaction on left mouse click in S_NOOP state.
+ */
+ void
+ MouseLeftNoop(void);
+
+ /** Reaction on left mouse click in S_DELETE state.
+ */
+ void
+ MouseLeftDelete(void);
+
+ /** Reaction on left mouse click in S_REGION_DELETE state.
+ */
+ void
+ MouseLeftRegionDelete(void);
+
+ /** Reaction on left mouse click while selecting objects to move.
+ */
+ void
+ MouseLeftMoveSelect(void);
+
+ /** Reaction on left mouse click while placing objects to move.
+ */
+ void
+ MouseLeftMovePlace(void);
+
+ /** Reaction on left mouse click while selecting objects to copy.
+ */
+ void
+ MouseLeftCopySelect(void);
+
+ /** Reaction on left mouse click while placing objects to copy.
+ */
+ void
+ MouseLeftCopyPlace(void);
+
+ /** Reaction on mouse move in S_POLY_FIRST state.
+ */
+ void
+ MouseMovePolyFirst(void);
+
+ /** Reaction on mouse move in S_POLY_FURTHER state.
+ */
+ void
+ MouseMovePolyFurther(void);
+
+ /** Reaction on mouse left click in S_POLY_FIRST state.
+ */
+ void
+ MouseLeftPolyFirst(void);
+
+ /** Reaction on mouse left click in S_POLY_FURTHER state.
+ */
+ void
+ MouseLeftPolyFurther(void);
+
+ /** X-spline s value at end points.
+ @return S value.
+ */
+ double
+ SValueAtEnd(void);
+
+ /** Reaction on mouse movement in S_SPLINE_FIRST state.
+ */
+ void
+ MouseMoveSplineFirst(void);
+
+ /** Reaction on mouse movement in S_SPLINE_FURTHER state.
+ */
+ void
+ MouseMoveSplineFurther(void);
+
+ /** Reaction on mouse left click in S_SPLINE_FIRST state.
+ */
+ void
+ MouseLeftSplineFirst(void);
+
+ /** Reaction on mouse left click in S_SPLINE_FURTHER state.
+ */
+ void
+ MouseLeftSplineFurther(void);
+
+ /** Reaction on mouse move in S_ELLIPSE_CENTER state.
+ */
+ void
+ MouseMoveEllipseCenter(void);
+
+ /** Reaction on mouse left click in S_ELLIPSE_CENTER state.
+ */
+ void
+ MouseLeftEllipseCenter(void);
+
+ /** Reaction on mouse move in S_ELLIPSE_CORNER state.
+ */
+ void
+ MouseMoveEllipseCorner(void);
+
+ /** Reaction on mouse left click in S_ELLIPSE_CORNER state.
+ */
+ void
+ MouseLeftEllipseCorner(void);
+
+ /** Reaction on mouse move in S_ARC_1 state.
+ */
+ void
+ MouseMoveArc1(void);
+
+ /** Reaction on mouse left click in S_ARC_1 state.
+ */
+ void
+ MouseLeftArc1(void);
+
+ /** Reaction on mouse move in S_ARC_2 state.
+ */
+ void
+ MouseMoveArc2(void);
+
+ /** Reaction on mouse left click in S_ARC_2 state.
+ */
+ void
+ MouseLeftArc2(void);
+
+ /** Reaction on mouse move in S_ARC_3 state.
+ */
+ void
+ MouseMoveArc3(void);
+
+ /** Reaction on mouse left click in S_ARC_3 state.
+ */
+ void
+ MouseLeftArc3(void);
+
+ /** Set box details (bounding box from start point and current point).
+ The radius should be updated only while constructing a box,
+ not while moving a point.
+ @param bUpdateRadius Update radius.
+ */
+ void
+ SetBoxDetails(bool bUpdateRadius);
+
+ /** Reaction on mouse move in S_BOX_FIRST state.
+ */
+ void
+ MouseMoveBoxFirst(void);
+
+ /** Reaction on mouse move in S_BOX_OPPOSITE state.
+ */
+ void
+ MouseMoveBoxOpposite(void);
+
+ /** Reaction on mouse left click in S_BOX_FIRST state.
+ */
+ void
+ MouseLeftBoxFirst(void);
+
+ /** Reaction on mouse left click in S_BOX_OPPOSITE state.
+ */
+ void
+ MouseLeftBoxOpposite(void);
+
+ /** Reaction on mouse move in S_CIRCLE_CENTER state.
+ */
+ void
+ MouseMoveCircleCenter(void);
+
+ /** Calculate circle radius from center point to current point.
+ */
+ void
+ CalculateCircleRadius(uint32_t & rx, dk4_er_t *erp);
+
+ /** Calculate ellipse radii from center point to current point.
+ */
+ void
+ CalculateEllipseRadii(uint32_t & rx, uint32_t & ry, dk4_er_t *erp);
+
+ /** Reaction on mouse move in S_CIRCLE_RADIUS state.
+ */
+ void
+ MouseMoveCircleRadius(void);
+
+ /** Reaction on mouse left click in S_CIRCLE_CENTER state.
+ */
+ void
+ MouseLeftCircleCenter(void);
+
+ /** Reaction on mouse left click in S_CIRCLE_RADIUS state.
+ */
+ void
+ MouseLeftCircleRadius(void);
+
+ /** Reaction on mouse move in S_DOT state.
+ */
+ void
+ MouseMoveDot(void);
+
+ /** Reaction on mouse left click in S_DOT state.
+ */
+ void
+ MouseLeftDot(void);
+
+ /** Reaction on mouse move in S_TEXT state.
+ */
+ void
+ MouseMoveText(void);
+
+ /** Reaction on mouse left click in S_TEXT state.
+ */
+ void
+ MouseLeftText(void);
+
+ /** Reaction on mouse move in S_IMG_1 state.
+ */
+ void
+ MouseMoveImage1(void);
+
+ /** Reaction on mouse move in S_IMG_2 state.
+ */
+ void
+ MouseMoveImage2(void);
+
+ /** Reaction on mouse left click in S_IMG_1 state.
+ */
+ void
+ MouseLeftImage1(void);
+
+ /** Reaction on mouse left click in S_IMG_2 state.
+ */
+ void
+ MouseLeftImage2(void);
+
+ /** Reaction on mouse move in S_LIBELEM_PLACE state.
+ */
+ void
+ MouseMoveLibelemPlace(void);
+
+ /** Reaction on mouse left click in S_LIBELEM_PLACE state.
+ */
+ void
+ MouseLeftLibelemPlace(void);
+
+ /** Reaction on mouse move in S_MOVEPT_SELECT state.
+ */
+ void
+ MouseMovePointMoveSelect(void);
+
+ /** Reaction on mouse left click in S_MOVEPT_SELECT state.
+ */
+ void
+ MouseLeftPointMoveSelect(void);
+
+ /** Reaction on mouse move in S_MOVEPT_PLACE state.
+ */
+ void
+ MouseMovePointMovePlace(void);
+
+ /** Modify spline s value after moving a spline point.
+ @param pCurrent Spline object to modify.
+ @param uCurrent Index of point to modify.
+ */
+ void
+ ModifySplineValue(Wxd_object_t *pCurrent, uint16_t uCurrent);
+
+ /** Reaction on mouse left click in S_MOVEPT_PLACE state.
+ */
+ void
+ MouseLeftPointMovePlace(void);
+
+ /** Reaction on mouse move in S_DELPT state.
+ */
+ void
+ MouseMovePointDelete(void);
+
+ /** Reaction on mouse left click in S_DELPT state.
+ */
+ void
+ MouseLeftPointDelete(void);
+
+ /** Reaction on mouse move in S_ADDPT_SELECT state.
+ */
+ void
+ MouseMovePointAddSelect(void);
+
+ /** Reaction on mouse left click in S_ADDPT_SELECT state.
+ */
+ void
+ MouseLeftPointAddSelect(void);
+
+ /** Reaction on mouse move in S_ADDPT_PLACE state.
+ */
+ void
+ MouseMovePointAddPlace(void);
+
+ /** Reaction on mouse move in S_DRWSZ_SELECT state.
+ */
+ void
+ MouseMoveDrawingSizeSelect(void);
+
+ /** Reaction on mouse move in S_DRWSZ_PLACE state.
+ */
+ void
+ MouseMoveDrawingSizePlace(void);
+
+ /** Reaction on mouse left click in S_ADDPT_PLACE state.
+ */
+ void
+ MouseLeftPointAddPlace(void);
+
+ /** Reaction on mouse left click in S_DRWSZ_SELECT state.
+ */
+ void
+ MouseLeftDrawingSizeSelect(void);
+
+ /** Reaction on mouse left click in S_DRWSZ_PLACE state.
+ */
+ void
+ MouseLeftDrawingSizePlace(void);
+
+ /** Reaction on mouse movement click in S_FLIP state.
+ */
+ void
+ MouseMoveFlip(void);
+
+ /** Reaction on mouse left click in S_FLIP state.
+ */
+ void
+ MouseLeftFlip(void);
+
+ /** Reaction on mouse movement in S_GROUP_ONE state.
+ */
+ void
+ MouseMoveGroupOne(void);
+
+ /** Reaction on mouse left click in S_GROUP_ONE state.
+ */
+ void
+ MouseLeftGroupOne(void);
+
+ /** Mark objects in the selected rectangle for grouping.
+ */
+ void
+ MarkObjectsForRectangleGrouping(void);
+
+ /** Mark objects in the selected rectangle for deletion.
+ */
+ void
+ MarkObjectsForRectangleDeletion(void);
+
+ /** Reaction on mouse movement in S_GROUP_RECT_1 state.
+ */
+ void
+ MouseMoveGroupRect1(void);
+
+ /** Reaction on mouse left click in S_GROUP_RECT_1 state.
+ */
+ void
+ MouseLeftGroupRect1(void);
+
+ /** Reaction on mouse movement in S_GROUP_RECT_2 state.
+ */
+ void
+ MouseMoveGroupRect2(void);
+
+ /** Reaction on mouse left click in S_GROUP_RECT_2 state.
+ */
+ void
+ MouseLeftGroupRect2(void);
+
+ /** Reaction on mouse movement in S_UNGROUP state.
+ */
+ void
+ MouseMoveUngroup(void);
+
+ /** Reaction on mouse left click in S_UNGROUP state.
+ */
+ void
+ MouseLeftUngroup(void);
+
+ /** Reaction on mouse movement in S_DETAILS state.
+ */
+ void
+ MouseMoveDetails(void);
+
+ /** Reaction on mouse left click in S_DETAILS state.
+ */
+ void
+ MouseLeftDetails(void);
+
+ /** Object type conversion: spline to polyline or polygon.
+ @param pobj Object to convert.
+ */
+ void
+ ConvertSplineToPoly(Wxd_object_t *pobj);
+
+ /** Object type conversion: arc to polyline or polygon.
+ @param pobj Object to convert.
+ */
+ void
+ ConvertArcToPoly(Wxd_object_t *pobj);
+
+ /** Object type conversion: box to polyline or polygon.
+ @param pobj Object to convert.
+ */
+ void
+ ConvertBoxToPoly(Wxd_object_t *pobj);
+
+ /** Object type conversion: polyline or polygon to spline.
+ @param pobj Object to convert.
+ */
+ void
+ ConvertPolyToSpline(Wxd_object_t *pobj);
+
+ /** Object type conversion: spline to spline.
+ @param pobj Object to convert.
+ */
+ void
+ ConvertSplineToSpline(Wxd_object_t *pobj);
+
+ /** Object type conversion: arc to spline.
+ @param pobj Object to convert.
+ */
+ void
+ ConvertArcToSpline(Wxd_object_t *pobj);
+
+ /** Object type conversion: box to spline.
+ @param pobj Object to convert.
+ */
+ void
+ ConvertBoxToSpline(Wxd_object_t *pobj);
+
+ /** Object type conversion: polyline or polygon to arc.
+ @param pobj Object to convert.
+ */
+ void
+ ConvertPolyToArc(Wxd_object_t *pobj);
+
+ /** Object type conversion: spline to arc.
+ @param pobj Object to convert.
+ */
+ void
+ ConvertSplineToArc(Wxd_object_t *pobj);
+
+ /** Object type conversion: circle to dot.
+ @param pobj Object to convert.
+ */
+ void
+ ConvertCircleToDot(Wxd_object_t *pobj);
+
+ /** Convert object to specified type.
+ */
+ void
+ ObjectTypeConversion(Wxd_object_t *pobj);
+
+ /** Reaction on mouse move in S_CONVERT state.
+ */
+ void
+ MouseMoveConvert(void);
+
+ /** Reaction on left mouse button in S_CONVERT state.
+ */
+ void
+ MouseLeftConvert(void);
+
+ /** Reaction on mouse move in S_ROTATE state.
+ */
+ void
+ MouseMoveRotate(void);
+
+ /** Reaction on left mouse button in S_ROTATE state.
+ */
+ void
+ MouseLeftRotate(void);
+
+ /** Reaction on mouse move in S_MOD_SPLINE state.
+ */
+ void
+ MouseMoveModspline(void);
+
+ /** Reaction on left mouse button in S_MOD_SPLINE state.
+ */
+ void
+ MouseLeftModspline(void);
+
+ /** Retrieve input from one text control, set pointer to
+ a dynamic copy of the input text.
+ @param ptxt Address of pointer to modify.
+ @param ptc Text control containing users input.
+ @param bKeepOld Keep old text if new text is empty.
+ */
+ void
+ ChangeOneLabelText(
+ wxChar **ptxt,
+ wxTextCtrl *ptc,
+ bool bKeepOld = true
+ );
+
+ /** Retrieve the input from text controls for export text and
+ screen text, save text to m_pCurrent.
+ @param ptce Text control for export text.
+ @param ptcs Text control for screen text.
+ @param bLaTeX LaTeX or non-LaTeX text.
+ */
+ void
+ RetrieveTextDetails(
+ wxTextCtrl *ptce,
+ wxTextCtrl *ptcs,
+ bool bLaTeX
+ );
+
+ /** Modify text label details (texts).
+ */
+ void
+ ModifyDetailsText(void);
+
+ /** Modify box details (corner radius).
+ */
+ void
+ ModifyDetailsBox(void);
+
+ /** Change image file for image object.
+ @param pa New file name to use.
+ */
+ void
+ ChangeImageFile(wxString & pa);
+
+ /** Modify image details (image file name and flags).
+ */
+ void
+ ModifyDetailsImage(void);
+
+ /** Modify filled dot details (diameter).
+ */
+ void
+ ModifyDetailsDotFilled(void);
+
+ /** Modify white dot details (diameter and line width).
+ */
+ void
+ ModifyDetailsDotWhite(void);
+
+ /** Handler for mouse entering control area.
+ @param event Event to process.
+ */
+ void
+ ControlMouseEnter(wxMouseEvent & event);
+
+ /** Handler for mouse leaving the control area.
+ @param event Event to process.
+ */
+ void
+ ControlMouseLeave(wxMouseEvent & event);
+
+ /** Handler for mouse move.
+ @param event Event to process.
+ */
+ void
+ ControlMouseMove(wxMouseEvent & event);
+
+ /** Handler for left mouse button click.
+ @param event Event to process.
+ */
+ void
+ ControlLeftMouseButton(wxMouseEvent & event);
+
+ /** Handler for right mouse button click.
+ @param event Event to process.
+ */
+ void
+ ControlRightMouseButton(wxMouseEvent & event);
+
+ /** Handler for middle mouse button click.
+ @param event Event to process.
+ */
+ void
+ ControlMiddleMouseButton(wxMouseEvent & event);
+
+ /** Handler for mouse wheell move.
+ @param event Event to process.
+ */
+ void
+ ControlMouseWheel(wxMouseEvent & event);
+
+ /** Use values from horizontal scrollbar.
+ */
+ void
+ UseScrollH(void);
+
+ /** Use values from vertical scrollbar.
+ */
+ void
+ UseScrollV(void);
+
+ /** Find directory where current file is saved.
+ @param dnb Buffer for directory.
+ @param dnsz Size of dnb (number of wxChar).
+ @param fn File name to find directory for.
+ @return True on success, false on error.
+ */
+ bool
+ FindDirectoryForFile(wxChar *dnb, size_t dnsz, wxString & fn);
+
+ /** Modify a colour.
+ @param ivi Index of color start in m_iv array.
+ @param rdl Redraw level required by operation.
+ */
+ void
+ ColorModify(size_t ivi, int rdl);
+
+ /** Modify a colour.
+ @param ivi Index of color start in m_iv array.
+ @param rdl Redraw level required by operation.
+ */
+ void
+ ColorReset(size_t ivi, int rdl);
+};
+
+
+#line 4371 "WxdkdrawFrame.wxc"
+
+
+/* vim: set ai sw=4 ts=4 : */
+
+#endif