diff options
author | Norbert Preining <norbert@preining.info> | 2020-09-20 03:03:26 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-09-20 03:03:26 +0000 |
commit | 1f457376b478257b88d4a857f5ec1b6155442dd7 (patch) | |
tree | 2a06a60551dea362cf8cb0cb0ba66c78608717c4 /support/dktools/WxdkdrawFrame.h | |
parent | ac690ca29ad5bf8a5203a65fd6252f7b564f4727 (diff) |
CTAN sync 202009200303
Diffstat (limited to 'support/dktools/WxdkdrawFrame.h')
-rw-r--r-- | support/dktools/WxdkdrawFrame.h | 4200 |
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 |