/* 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