%% options copyright owner = Dirk Krause copyright year = 2019-xxxx SPDX-License-Identifier: BSD-3-Clause %% wx-gui type = frame contents = mainSizer icon = wxdkdraw_icon status bar = 1 sTexts[8] menu bar = mbMain [wxMenuBar mbMain] contents = menuFile contents = menuAdd contents = menuEdit contents = menuView contents = menuOptions contents = menuHelp [wxMenu menuFile] text = sTexts[0] contents = miFileNew contents = miFileOpen contents = miFileSave contents = miFileSaveAs contents = miFileExit [wxMenuItem miFileNew] text = sTexts[20] tip = sTexts[21] id = wxID_NEW [wxMenuItem miFileOpen] text = sTexts[22] tip = sTexts[23] id = wxID_OPEN [wxMenuItem miFileSave] text = sTexts[24] tip = sTexts[25] id = wxID_SAVE [wxMenuItem miFileSaveAs] text = sTexts[26] tip = sTexts[27] id = wxID_SAVEAS [wxMenuItem miFileExit] id = wxID_EXIT text = sTexts[1] tip = sTexts[2] [wxMenu menuAdd] text = sTexts[28] contents = miAddPolyline contents = miAddPolygon contents = miAddRectangle contents = miAddRoundedBox contents = miAddCircle contents = miAddEllipse contents = miAddArcOpen contents = miAddArcClosed contents = miAddSplineAO contents = miAddSplineAC contents = miAddSplineIO contents = miAddSplineIC contents = miAddConnector contents = miAddPin contents = miAddText contents = miAddImage contents = miAddLibelem [wxMenuItem miAddPolyline] text = sTexts[29] tip = sTexts[30] id = ID_ADD_POLYINE [wxMenuItem miAddPolygon] text = sTexts[31] tip = sTexts[32] id = ID_ADD_POLYGON [wxMenuItem miAddRectangle] text = sTexts[33] tip = sTexts[34] id = ID_ADD_RECT [wxMenuItem miAddRoundedBox] text = sTexts[35] tip = sTexts[36] id = ID_ADD_BOX [wxMenuItem miAddCircle] text = sTexts[37] tip = sTexts[38] id = ID_ADD_CIRCLE [wxMenuItem miAddEllipse] text = sTexts[39] tip = sTexts[40] id = ID_ADD_ELLIPSE [wxMenuItem miAddArcOpen] text = sTexts[643] tip = sTexts[644] id = ID_ADD_ARC_O [wxMenuItem miAddArcClosed] text = sTexts[645] tip = sTexts[646] id = ID_ADD_ARC_C [wxMenuItem miAddSplineAO] text = sTexts[41] tip = sTexts[42] id = ID_ADD_SPL_AO [wxMenuItem miAddSplineAC] text = sTexts[43] tip = sTexts[44] id = ID_ADD_SPL_AC [wxMenuItem miAddSplineIO] text = sTexts[45] tip = sTexts[46] id = ID_ADD_SPL_IO [wxMenuItem miAddSplineIC] text = sTexts[47] tip = sTexts[48] id = ID_ADD_SPL_IC [wxMenuItem miAddConnector] text = sTexts[49] tip = sTexts[50] id = ID_ADD_DOT_C [wxMenuItem miAddPin] text = sTexts[51] tip = sTexts[52] id = ID_ADD_DOT_W [wxMenuItem miAddText] text = sTexts[53] tip = sTexts[54] id = ID_ADD_TEXT [wxMenuItem miAddImage] text = sTexts[55] tip = sTexts[56] id = ID_ADD_IMG [wxMenuItem miAddLibelem] text = sTexts[57] tip = sTexts[58] id = ID_ADD_LIBELEM [wxMenu menuEdit] text = sTexts[59] contents = miEditCopy contents = miEditMove contents = miEditDelete contents = miEditPointAdd contents = miEditPointRemove contents = miEditPointMove contents = miEditModifySpline contents = miEditFlipH contents = miEditFlipV contents = miEditRotLeft contents = miEditRotRight contents = miEditDetails contents = mEditGroup contents = miEditUngroup contents = miEditChangeSize contents = mEditConvert [wxMenuItem miEditCopy] text = sTexts[60] tip = sTexts[61] id = ID_EDIT_COPY [wxMenuItem miEditMove] text = sTexts[62] tip = sTexts[63] id = ID_EDIT_MOVE [wxMenuItem miEditDelete] text = sTexts[64] tip = sTexts[65] id = ID_EDIT_DEL [wxMenuItem miEditPointMove] text = sTexts[66] tip = sTexts[67] id = ID_EDIT_PT_MOVE [wxMenuItem miEditModifySpline] text = sTexts[620] tip = sTexts[621] id = ID_MOD_SPLINE [wxMenuItem miEditPointAdd] text = sTexts[68] tip = sTexts[69] id = ID_EDIT_PT_ADD [wxMenuItem miEditPointRemove] text = sTexts[70] tip = sTexts[71] id = ID_EDIT_PT_DEL [wxMenuItem miEditDetails] text = sTexts[72] tip = sTexts[73] id = ID_EDIT_DET [wxMenu mEditGroup] text = sTexts[74] contents = miEditGroupElements # contents = miEditGroupTouching contents = miEditGroupIncluding [wxMenuItem miEditGroupElements] text = sTexts[165] tip = sTexts[106] id = ID_EDIT_GRP1 [wxMenuItem miEditGroupIncluding] text = sTexts[167] tip = sTexts[164] id = ID_EDIT_GRP13 [wxMenuItem miEditUngroup] text = sTexts[76] tip = sTexts[77] id = ID_EDIT_UNGRP [wxMenuItem miEditFlipH] text = sTexts[78] tip = sTexts[79] id = ID_EDIT_FLIPH [wxMenuItem miEditFlipV] text = sTexts[80] tip = sTexts[81] id = ID_EDIT_FLIPV [wxMenuItem miEditRotLeft] text = sTexts[566] tip = sTexts[567] id = ID_EDIT_ROTLEFT [wxMenuItem miEditRotRight] text = sTexts[568] tip = sTexts[569] id = ID_EDIT_ROTRIGHT [wxMenuItem miEditChangeSize] text = sTexts[82] tip = sTexts[83] id = ID_EDIT_DRSZ [wxMenu mEditConvert] text = sTexts[535] contents = miPolygonToPolyline contents = miPolylineToPolygon contents = miClosedToOpenArc contents = miOpenToClosedArc contents = miClosedToOpenSpline contents = miOpenToClosedSpline contents = miClosedToOpenIntSpline contents = miOpenToClosedIntSpline contents = miWhiteFilledToDot contents = miDotToWhiteFilled [wxMenuItem miPolylineToPolygon] text = sTexts[536] tip = sTexts[545] id = ID_EDIT_CONVERT_1 [wxMenuItem miPolygonToPolyline] text = sTexts[537] tip = sTexts[546] id = ID_EDIT_CONVERT_2 [wxMenuItem miOpenToClosedArc] text = sTexts[539] tip = sTexts[548] id = ID_EDIT_CONVERT_4 [wxMenuItem miClosedToOpenArc] text = sTexts[540] tip = sTexts[549] id = ID_EDIT_CONVERT_5 [wxMenuItem miOpenToClosedSpline] text = sTexts[541] tip = sTexts[550] id = ID_EDIT_CONVERT_6 [wxMenuItem miClosedToOpenSpline] text = sTexts[542] tip = sTexts[551] id = ID_EDIT_CONVERT_7 [wxMenuItem miOpenToClosedIntSpline] text = sTexts[538] tip = sTexts[547] id = ID_EDIT_CONVERT_A [wxMenuItem miClosedToOpenIntSpline] text = sTexts[163] tip = sTexts[166] id = ID_EDIT_CONVERT_3 [wxMenuItem miDotToWhiteFilled] text = sTexts[543] tip = sTexts[552] id = ID_EDIT_CONVERT_8 [wxMenuItem miWhiteFilledToDot] text = sTexts[544] tip = sTexts[553] id = ID_EDIT_CONVERT_9 [wxMenu menuView] text = sTexts[84] contents = menuZoom contents = menuLayer contents = miViewCenterView [wxMenu menuOptions] text = sTexts[601] contents = menuColours contents = miOptionsNewObjects contents = miOptionsScreen contents = miOptionsReset [wxMenu menuZoom] text = sTexts[85] contents = miZoomIn contents = miZoomOut contents = miZoomReset [wxMenuItem miZoomIn] text = sTexts[86] tip = sTexts[87] id = wxID_ZOOM_IN [wxMenuItem miZoomOut] text = sTexts[88] tip = sTexts[89] id = wxID_ZOOM_OUT [wxMenuItem miZoomReset] text = sTexts[90] tip = sTexts[91] id = wxID_ZOOM_100 [wxMenu menuLayer] text = sTexts[92] contents = miLayerActivateAll contents = miLayerManager [wxMenuItem miLayerActivateAll] text = sTexts[93] tip = sTexts[94] id = ID_LAYERS_ALL [wxMenuItem miLayerManager] text = sTexts[95] tip = sTexts[96] id = ID_LAYERS_MGR [wxMenuItem miViewCenterView] text = sTexts[97] tip = sTexts[98] id = ID_ZOOM_CENTER [wxMenu menuColours] text = sTexts[606] contents = menuColourBorder contents = menuColourBackground contents = menuColourGrid contents = menuColourPlacement contents = menuColourCopy contents = menuColourMove contents = menuColourDelete contents = menuColourGroup contents = menuColourMissing [wxMenu menuColourBorder] text = sTexts[611] contents = miColourBorderModify contents = miColourBorderReset [wxMenuItem miColourBorderModify] text = sTexts[609] tip = sTexts[610] id = ID_COL_MOD_BORDER [wxMenuItem miColourBorderReset] text = sTexts[607] tip = sTexts[608] id = ID_COL_RES_BORDER [wxMenu menuColourBackground] text = sTexts[612] contents = miColourBackgroundModify contents = miColourBackgroundReset [wxMenuItem miColourBackgroundModify] text = sTexts[609] tip = sTexts[610] id = ID_COL_MOD_BACKGROUND [wxMenuItem miColourBackgroundReset] text = sTexts[607] tip = sTexts[608] id = ID_COL_RES_BACKGROUND [wxMenu menuColourGrid] text = sTexts[613] contents = miColourGridModify contents = miColourGridReset [wxMenuItem miColourGridModify] text = sTexts[609] tip = sTexts[610] id = ID_COL_MOD_GRID [wxMenuItem miColourGridReset] text = sTexts[607] tip = sTexts[608] id = ID_COL_RES_GRID [wxMenu menuColourPlacement] text = sTexts[614] contents = miColourPlacementModify contents = miColourPlacementReset [wxMenuItem miColourPlacementModify] text = sTexts[609] tip = sTexts[610] id = ID_COL_MOD_PH [wxMenuItem miColourPlacementReset] text = sTexts[607] tip = sTexts[608] id = ID_COL_RES_PH [wxMenu menuColourCopy] text = sTexts[615] contents = miColourCopyModify contents = miColourCopyReset [wxMenuItem miColourCopyModify] text = sTexts[609] tip = sTexts[610] id = ID_COL_MOD_COPY [wxMenuItem miColourCopyReset] text = sTexts[607] tip = sTexts[608] id = ID_COL_RES_COPY [wxMenu menuColourMove] text = sTexts[616] contents = miColourMoveModify contents = miColourMoveReset [wxMenuItem miColourMoveModify] text = sTexts[609] tip = sTexts[610] id = ID_COL_MOD_MOVE [wxMenuItem miColourMoveReset] text = sTexts[607] tip = sTexts[608] id = ID_COL_RES_MOVE [wxMenu menuColourDelete] text = sTexts[617] contents = miColourDeleteModify contents = miColourDeleteReset [wxMenuItem miColourDeleteModify] text = sTexts[609] tip = sTexts[610] id = ID_COL_MOD_DELETE [wxMenuItem miColourDeleteReset] text = sTexts[607] tip = sTexts[608] id = ID_COL_RES_DELETE [wxMenu menuColourGroup] text = sTexts[618] contents = miColourGroupModify contents = miColourGroupReset [wxMenuItem miColourGroupModify] text = sTexts[609] tip = sTexts[610] id = ID_COL_MOD_GROUP [wxMenuItem miColourGroupReset] text = sTexts[607] tip = sTexts[608] id = ID_COL_RES_GROUP [wxMenu menuColourMissing] text = sTexts[619] contents = miColourMissingModify contents = miColourMissingReset [wxMenuItem miColourMissingModify] text = sTexts[609] tip = sTexts[610] id = ID_COL_MOD_MISSING [wxMenuItem miColourMissingReset] text = sTexts[607] tip = sTexts[608] id = ID_COL_RES_MISSING [wxMenuItem miOptionsNewObjects] text = sTexts[625] tip = sTexts[626] id = ID_OPT_NEW_OBJECTS [wxMenuItem miOptionsScreen] text = sTexts[630] tip = sTexts[631] id = ID_OPT_SCREEN [wxMenuItem miOptionsReset] text = sTexts[602] tip = sTexts[603] id = ID_RESET_OPTIONS [wxMenu menuHelp] text = sTexts[3] contents = miHelpAbout contents = miHelpContents [wxMenuItem miHelpAbout] id = ID_HELP_ABOUT text = sTexts[4] tip = sTexts[5] [wxMenuItem miHelpContents] id = ID_HELP_CONTENTS text = sTexts[6] tip = sTexts[7] [wxBoxSizer mainSizer] direction = horizontal contents = $space(10) contents = verticalSizer contents = $space(10) [wxBoxSizer verticalSizer] direction = vertical grow = yes proportion = 1 contents = $space(10) contents = szTopBar contents = $space(10) contents = szMiddleBar contents = $space(10) contents = szBottomBar contents = $space(10) contents = szHintsBar # contents = $space(10) # Button bar at top of frame [wxBoxSizer szTopBar] direction = horizontal grow = yes contents = bFileOpen centered-y contents = bFileSave centered-y contents = $stretch(10) contents = lZoomPercent centered-y contents = $space(10) contents = bZoomIn centered-y contents = bZoomOut centered-y contents = bZoomOne centered-y contents = $space(10) contents = cbGridOnOff centered-y contents = $space(5) contents = cbGridUnit centered-y contents = cbGridBase centered-y contents = $space(10) contents = cbPH centered-y # Horizontal box sizer containing left button bar and draw control [wxBoxSizer szMiddleBar] direction = horizontal grow = yes proportion = 1 contents = szLeftBar contents = $space(10) contents = szOperationsAndDraw # Left button bar (add elements) [wxGridBagSizer szLeftBar] contents = bPolyline 0 0 1 1 contents = bPolygon . +1 1 1 contents = bRect +1 0 1 1 contents = bBox . +1 1 1 contents = bCircle +1 0 1 1 contents = bEllipse . +1 1 1 contents = bArcOpen +1 0 1 1 contents = bArcClosed . +1 1 1 contents = bSplineAO +1 0 1 1 contents = bSplineAC . +1 1 1 contents = bSplineIO +1 0 1 1 contents = bSplineIC . +1 1 1 contents = bConnector +1 0 1 1 contents = bPin . +1 1 1 contents = bText +1 0 1 1 contents = bImage . +1 1 1 contents = bLibelem +1 0 1 1 [wxBoxSizer szOperationsAndDraw] direction = vertical grow = yes proportion = 1 contents = szOperationButtons contents = $space(10,10) contents = szDrawco # Button bar at bottom of frame [wxGridBagSizer szBottomBar] # contents = lLayer 0 2 1 2 centered-y # contents = lLine . +2 1 9 centered-y # contents = lFill . +9 1 3 centered-y # contents = lText . +3 1 4 centered-y # contents = $space(5,5) +1 0 1 1 centered-y # contents = bSelectObject +1 0 1 1 centered-y # contents = $space(5,5) . +1 1 1 centered-y # contents = spLayerNumber . +1 1 1 centered-y # contents = $space(5,5) . +1 1 1 centered-y # contents = ccLineColour . +1 1 1 centered-y # contents = $space(5,5) . +1 1 1 centered-y # contents = spLineWidth . +1 1 1 centered-y # contents = bStyleLineStyle . +1 1 1 centered-y # contents = bStyleLineJoins . +1 1 1 centered-y # contents = bStyleLineEnds . +1 1 1 centered-y # contents = bStyleArrowForward . +1 1 1 centered-y # contents = bStyleArrowBackward . +1 1 1 centered-y # contents = $space(5,5) . +1 1 1 centered-y # contents = ccFillColour . +1 1 1 centered-y # contents = bStyleFillPattern . +1 1 1 centered-y # contents = $space(5,5) . +1 1 1 centered-y # contents = cbStyleTextLaTeX . +1 1 1 centered-y # contents = bStyleTextAlign . +1 1 1 centered-y # contents = bStyleFontName . +1 1 1 centered-y # contents = spFontSize . +1 1 1 centered-y contents = lLayer 0 0 1 1 centered-y right contents = $space(5,5) . +1 1 1 centered-y contents = spLayerNumber . +1 1 1 centered-y contents = $space(5,5) . +1 1 1 centered-y contents = lLine . +1 1 1 centered-y right contents = $space(5,5) . +1 1 1 centered-y contents = szLine . +1 1 1 centered-y contents = $space(5,5) . +1 1 1 centered-y contents = lFill . +1 1 1 centered-y right contents = $space(5,5) . +1 1 1 centered-y contents = szFill . +1 1 1 centered-y contents = $space(5,5) +1 0 1 1 centered-y contents = lText +1 0 1 1 centered-y right contents = $space(5,5) . +1 1 1 centered-y contents = szText . +1 1 10 centered-y [wxBoxSizer szLine] direction = horizontal contents = ccLineColour centered-y contents = $space(5,5) contents = spLineWidth centered-y contents = bStyleLineStyle centered-y contents = bStyleLineJoins centered-y contents = bStyleLineEnds centered-y contents = bStyleArrowForward centered-y contents = bStyleArrowBackward centered-y [wxBoxSizer szFill] direction = horizontal contents = ccFillColour centered-y contents = bStyleFillPattern centered-y [wxBoxSizer szText] direction = horizontal grow = yes proportion = 1 contents = cbStyleTextLaTeX centered-y contents = bStyleTextAlign centered-y contents = bStyleFontName centered-y contents = spFontSize centered-y contents = $stretch(10) contents = lRotation centered-y contents = $space(5,5) contents = spRotation centered-y # Mouse key texts and cursor position [wxBoxSizer szHintsBar] direction = horizontal grow = yes contents = tlMouseL contents = msgMouseL contents = tlMouseM contents = msgMouseM contents = tlMouseR contents = msgMouseR contents = tlPosX contents = msgPosX contents = tlPosY contents = msgPosY [wxBoxSizer szOperationButtons] direction = horizontal grow = yes contents = bEditCopy centered-y contents = bEditMove centered-y contents = bEditDelete centered-y contents = $space(10) contents = bEditPointAdd centered-y contents = bEditPointDelete centered-y contents = bEditPointMove centered-y contents = cbPointMoveMode centered-y contents = bModifySplineValue centered-y contents = $space(10) contents = bEditFlipH centered-y contents = bEditFlipV centered-y contents = bEditRotLeft centered-y contents = bEditRotRight centered-y contents = $space(10) contents = bEditDetails centered-y contents = $space(10) contents = bEditGroup centered-y # contents = bEditGroup2 centered-y contents = bEditGroup3 centered-y contents = bEditUngroup centered-y contents = $space(10) contents = bEditChangeSize centered-y [wxGridBagSizer szDrawco] grid = 5 5 grow = yes proportion = 1 growable row = 0 growable column = 0 contents = drawco 0 0 1 1 contents = sbVert . +1 1 1 contents = sbHori +1 0 1 1 [wxBitmapButton bFileOpen] bitmap = xpm_wxd_tb_open id = wxID_OPEN tip = sTexts[99] [wxBitmapButton bFileSave] bitmap = xpm_wxd_tb_save id = wxID_SAVE tip = sTexts[100] [wxBitmapButton bEditCopy] bitmap = xpm_wxd_bcopy id = ID_EDIT_COPY tip = sTexts[101] [wxBitmapButton bEditMove] bitmap = xpm_wxd_bmove id = ID_EDIT_MOVE tip = sTexts[102] [wxBitmapButton bEditDelete] bitmap = xpm_wxd_bdel id = ID_EDIT_DEL tip = sTexts[103] [wxBitmapButton bEditPointMove] bitmap = xpm_wxd_bmvpoint id = ID_EDIT_PT_MOVE tip = sTexts[104] [wxChoice cbPointMoveMode] choices = 2 saPointMoveMode tip = sTexts[413] id = ID_CB_POINT_MOVE_MODE [wxBitmapButton bModifySplineValue] bitmap = xpm_wxd_bmodifys tip = sTexts[621] id = ID_MOD_SPLINE [wxBitmapButton bEditDetails] bitmap = xpm_wxd_bdetails tip = sTexts[105] id = ID_EDIT_DET [wxBitmapButton bEditGroup] bitmap = xpm_wxd_bgroup tip = sTexts[106] id = ID_EDIT_GRP1 [wxBitmapButton bEditGroup3] bitmap = xpm_wxd_bgroup3 tip = sTexts[164] id = ID_EDIT_GRP13 [wxBitmapButton bEditUngroup] bitmap = xpm_wxd_bungroup tip = sTexts[107] id = ID_EDIT_UNGRP [wxBitmapButton bEditFlipH] bitmap = xpm_wxd_bfliph tip = sTexts[108] id = ID_EDIT_FLIPH [wxBitmapButton bEditFlipV] bitmap = xpm_wxd_bflipv tip = sTexts[109] id = ID_EDIT_FLIPV [wxBitmapButton bEditRotLeft] bitmap = xpm_wxd_brotleft tip = sTexts[567] id = ID_EDIT_ROTLEFT [wxBitmapButton bEditRotRight] bitmap = xpm_wxd_brotright tip = sTexts[569] id = ID_EDIT_ROTRIGHT [wxBitmapButton bEditPointAdd] bitmap = xpm_wxd_baddpoint id = ID_EDIT_PT_ADD tip = sTexts[110] [wxBitmapButton bEditPointDelete] bitmap = xpm_wxd_bdelpoint id = ID_EDIT_PT_DEL tip = sTexts[111] [wxBitmapButton bEditChangeSize] bitmap = xpm_wxd_tb_borders tip = sTexts[112] id = ID_EDIT_DRSZ [wxBitmapButton bZoomIn] bitmap = xpm_wxd_tb_zoom_in tip = sTexts[113] id = wxID_ZOOM_IN [wxBitmapButton bZoomOut] bitmap = xpm_wxd_tb_zoom_out tip = sTexts[114] id = wxID_ZOOM_OUT [wxBitmapButton bZoomOne] bitmap = xpm_wxd_tb_zoom_11 tip = sTexts[115] id = wxID_ZOOM_100 [wxStaticText lZoomPercent] text = sNlWx[18] [wxCheckBox cbGridOnOff] text = sTexts[160] tip = sTexts[116] id = ID_GRID_ON_OFF [wxChoice cbGridUnit] choices = 2 saGridChoices tip = sTexts[117] id = ID_GRID_UNIT [wxChoice cbGridBase] choices = 2 saGridBase tip = sTexts[118] id = ID_GRID_BASE [wxCheckBox cbPH] text = sTexts[161] tip = sTexts[119] id = ID_PLACEMENT [wxBitmapButton bPolyline] bitmap = xpm_wxd_bpolyline tip = sTexts[120] id = ID_ADD_POLYINE [wxBitmapButton bPolygon] bitmap = xpm_wxd_bpolygon tip = sTexts[121] id = ID_ADD_POLYGON [wxBitmapButton bRect] bitmap = xpm_wxd_brectangle tip = sTexts[122] id = ID_ADD_RECT [wxBitmapButton bBox] bitmap = xpm_wxd_bbox tip = sTexts[123] id = ID_ADD_BOX [wxBitmapButton bCircle] bitmap = xpm_wxd_bcircle tip = sTexts[124] id = ID_ADD_CIRCLE [wxBitmapButton bEllipse] bitmap = xpm_wxd_bellipse tip = sTexts[125] id = ID_ADD_ELLIPSE [wxBitmapButton bArcOpen] bitmap = xpm_wxd_boarc tip = sTexts[126] id = ID_ADD_ARC_O [wxBitmapButton bArcClosed] bitmap = xpm_wxd_bcarc tip = sTexts[127] id = ID_ADD_ARC_C [wxBitmapButton bSplineAO] bitmap = xpm_wxd_bsplineoa tip = sTexts[128] id = ID_ADD_SPL_AO [wxBitmapButton bSplineAC] bitmap = xpm_wxd_bsplineca tip = sTexts[129] id = ID_ADD_SPL_AC [wxBitmapButton bSplineIO] bitmap = xpm_wxd_bsplineoi tip = sTexts[130] id = ID_ADD_SPL_IO [wxBitmapButton bSplineIC] bitmap = xpm_wxd_bsplineci tip = sTexts[131] id = ID_ADD_SPL_IC [wxBitmapButton bConnector] bitmap = xpm_wxd_bbullet tip = sTexts[132] id = ID_ADD_DOT_C [wxBitmapButton bPin] bitmap = xpm_wxd_bbulletf tip = sTexts[133] id = ID_ADD_DOT_W [wxBitmapButton bText] bitmap = xpm_wxd_btext tip = sTexts[134] id = ID_ADD_TEXT [wxBitmapButton bLibelem] bitmap = xpm_wxd_blib tip = sTexts[135] id = ID_ADD_LIBELEM [wxBitmapButton bImage] bitmap = xpm_wxd_bimg tip = sTexts[136] id = ID_ADD_IMG [wxStaticText lLayer] text = sTexts[137] text style = right [wxStaticText lLine] text = sTexts[138] text style = right [wxStaticText lFill] text = sTexts[139] text style = right [wxStaticText lText] text = sTexts[140] text style = right # [wxBitmapButton bSelectObject] # bitmap = xpm_wxd_bproperties # tip = sTexts[162] # id = wxID_ANY [wxSpinCtrl spLayerNumber] value = 0 range = -32768 32767 tip = sTexts[141] id = ID_STYLE_LAYER [Dk4WxColourView ccLineColour] constructor = applicationHelper,0,0,0,wxDefaultPosition,ColourViewSize() id = ID_STYLE_LINE_COL tip = sTexts[142] [wxSpinCtrl spLineWidth] value = 2 range = 0 65535 tip = sTexts[143] id = ID_STYLE_LINE_WIDTH [wxBitmapButton bStyleLineStyle] bitmap = xpm_wxd_ls1 id = ID_STYLE_LINE_STYLE tip = sTexts[144] [wxBitmapButton bStyleLineEnds] bitmap = xpm_wxd_lc1 id = ID_STYLE_LINE_CAP tip = sTexts[145] [wxBitmapButton bStyleLineJoins] bitmap = xpm_wxd_js1 id = ID_STYLE_LINE_JOIN tip = sTexts[146] [wxBitmapButton bStyleArrowForward] bitmap = xpm_wxd_as00 id = ID_STYLE_ARROW_F tip = sTexts[147] [wxBitmapButton bStyleArrowBackward] bitmap = xpm_wxd_as00 id = ID_STYLE_ARROW_B tip = sTexts[148] [Dk4WxColourView ccFillColour] constructor = applicationHelper,0,0,0,wxDefaultPosition,ColourViewSize() id = ID_STYLE_FILL_COL tip = sTexts[149] [wxBitmapButton bStyleFillPattern] bitmap = xpm_wxd_fs01 id = ID_STYLE_FILL_PATT tip = sTexts[150] [wxCheckBox cbStyleTextLaTeX] text = sTexts[151] tip = sTexts[152] id = ID_STYLE_TEXT_LATEX [wxBitmapButton bStyleTextAlign] bitmap = xpm_wxd_ts00 id = ID_STYLE_TEXT_ALIGN tip = sTexts[153] [wxBitmapButton bStyleFontName] bitmap = xpm_wxd_fn00 id = ID_STYLE_TEXT_FONT tip = sTexts[154] [wxSpinCtrl spFontSize] range = 1 65535 value = 12 tip = sTexts[155] id = ID_STYLE_TEXT_SIZE [wxStaticText lRotation] text = sTexts[416] [wxSpinCtrl spRotation] range = -360 360 value = 0 tip = sTexts[417] id = ID_SPIN_ROTATION [wxStaticText tlMouseL] text = sTexts[13] [wxStaticText msgMouseL] proportion = 3 text = sNlWx[7] [wxStaticText tlMouseM] text = sTexts[14] [wxStaticText msgMouseM] proportion = 3 text = sNlWx[7] [wxStaticText tlMouseR] text = sTexts[15] [wxStaticText msgMouseR] proportion = 3 text = sNlWx[7] [wxStaticText tlPosX] text = sTexts[16] [wxStaticText msgPosX] proportion = 2 text = sNlWx[7] [wxStaticText tlPosY] text = sTexts[17] [wxStaticText msgPosY] proportion = 2 text = sNlWx[7] # The drawing control [Control drawco] grow = yes proportion = 1 constructor = this [wxScrollBar sbVert] direction = vertical grow = yes id = ID_SCROLL_V [wxScrollBar sbHori] grow = yes id = ID_SCROLL_H %% header start #include "wxdkdraw.h" #ifndef DK4WXCOLOURVIEW_H_INCLUDED #include "Dk4WxColourView.h" #define DK4WXCOLOURVIEW_H_INCLUDED 1 #endif %% class start /** 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. */ %% class end 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); }; %% header end /* vim: set ai sw=4 ts=4 : */ %% module start #include "wxdkdraw.h" #ifndef WXDKDRAWAPPH_INCLUDED #include "WxdkdrawApp.h" #endif #ifndef WXDKDRAWFRAME_H_INCLUDED #include "WxdkdrawFrame.h" #endif #if !defined(__WXMSW__) #include "gui-img/icons/wxdkdraw.xpm" #endif /* Bitmaps for Buttons and dialogs. */ #include "gui-img/wxdkdraw/buttons/wxd-bbox.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bbulletf.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bbullet.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bcarc.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bcircle.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bcopy.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bdel.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bellipse.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bfliph.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bflipv.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bgroup.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bgroup3.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bmove.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bmvpoint.xpm" #include "gui-img/wxdkdraw/buttons/wxd-boarc.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bpolygon.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bpolyline.xpm" #include "gui-img/wxdkdraw/buttons/wxd-brectangle.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bsplineca.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bsplineci.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bsplineoa.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bsplineoi.xpm" #include "gui-img/wxdkdraw/buttons/wxd-btext.xpm" #include "gui-img/wxdkdraw/buttons/wxd-blib.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bimg.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bungroup.xpm" #include "gui-img/wxdkdraw/buttons/wxd-baddpoint.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bdelpoint.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bdetails.xpm" #include "gui-img/wxdkdraw/buttons/wxd-tb-borders.xpm" #include "gui-img/wxdkdraw/buttons/wxd-tb-open.xpm" #include "gui-img/wxdkdraw/buttons/wxd-tb-save.xpm" #include "gui-img/wxdkdraw/buttons/wxd-tb-zoom-11.xpm" #include "gui-img/wxdkdraw/buttons/wxd-tb-zoom-in.xpm" #include "gui-img/wxdkdraw/buttons/wxd-tb-zoom-out.xpm" #include "gui-img/wxdkdraw/buttons/wxd-bmodifys.xpm" #include "gui-img/wxdkdraw/buttons/wxd-brotleft.xpm" #include "gui-img/wxdkdraw/buttons/wxd-brotright.xpm" #include "gui-img/wxdkdraw/styles/wxd-as00.xpm" #include "gui-img/wxdkdraw/styles/wxd-as01.xpm" #include "gui-img/wxdkdraw/styles/wxd-as02.xpm" #include "gui-img/wxdkdraw/styles/wxd-as03.xpm" #include "gui-img/wxdkdraw/styles/wxd-as04.xpm" #include "gui-img/wxdkdraw/styles/wxd-as05.xpm" #include "gui-img/wxdkdraw/styles/wxd-as06.xpm" #include "gui-img/wxdkdraw/styles/wxd-as07.xpm" #include "gui-img/wxdkdraw/styles/wxd-as08.xpm" #include "gui-img/wxdkdraw/styles/wxd-as09.xpm" #include "gui-img/wxdkdraw/styles/wxd-as10.xpm" #include "gui-img/wxdkdraw/styles/wxd-as11.xpm" #include "gui-img/wxdkdraw/styles/wxd-as12.xpm" #include "gui-img/wxdkdraw/styles/wxd-as13.xpm" #include "gui-img/wxdkdraw/styles/wxd-as14.xpm" #include "gui-img/wxdkdraw/styles/wxd-as15.xpm" #include "gui-img/wxdkdraw/styles/wxd-as16.xpm" #include "gui-img/wxdkdraw/styles/wxd-as17.xpm" #include "gui-img/wxdkdraw/styles/wxd-as18.xpm" #include "gui-img/wxdkdraw/styles/wxd-as19.xpm" #include "gui-img/wxdkdraw/styles/wxd-as20.xpm" #include "gui-img/wxdkdraw/styles/wxd-as21.xpm" #include "gui-img/wxdkdraw/styles/wxd-as22.xpm" #include "gui-img/wxdkdraw/styles/wxd-as23.xpm" #include "gui-img/wxdkdraw/styles/wxd-as24.xpm" #include "gui-img/wxdkdraw/styles/wxd-as25.xpm" #include "gui-img/wxdkdraw/styles/wxd-as26.xpm" #include "gui-img/wxdkdraw/styles/wxd-as27.xpm" #include "gui-img/wxdkdraw/styles/wxd-as28.xpm" #include "gui-img/wxdkdraw/styles/wxd-as29.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs00.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs01.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs02.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs03.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs04.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs05.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs06.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs07.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs08.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs09.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs10.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs11.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs12.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs13.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs14.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs15.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs16.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs17.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs18.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs19.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs20.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs21.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs22.xpm" #include "gui-img/wxdkdraw/styles/wxd-fs23.xpm" #include "gui-img/wxdkdraw/styles/wxd-js1.xpm" #include "gui-img/wxdkdraw/styles/wxd-js2.xpm" #include "gui-img/wxdkdraw/styles/wxd-js3.xpm" #include "gui-img/wxdkdraw/styles/wxd-ls1.xpm" #include "gui-img/wxdkdraw/styles/wxd-ls2.xpm" #include "gui-img/wxdkdraw/styles/wxd-ls3.xpm" #include "gui-img/wxdkdraw/styles/wxd-ls4.xpm" #include "gui-img/wxdkdraw/styles/wxd-ls5.xpm" #include "gui-img/wxdkdraw/styles/wxd-ls6.xpm" #include "gui-img/wxdkdraw/styles/wxd-lc1.xpm" #include "gui-img/wxdkdraw/styles/wxd-lc2.xpm" #include "gui-img/wxdkdraw/styles/wxd-lc3.xpm" #include "gui-img/wxdkdraw/styles/wxd-ts00.xpm" #include "gui-img/wxdkdraw/styles/wxd-ts01.xpm" #include "gui-img/wxdkdraw/styles/wxd-ts02.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn00.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn01.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn02.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn03.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn04.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn05.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn06.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn07.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn08.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn09.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn10.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn11.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn12.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn13.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn14.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn15.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn16.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn17.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn18.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn19.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn20.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn21.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn22.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn23.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn24.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn25.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn26.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn27.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn28.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn29.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn30.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn31.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn32.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn33.xpm" #include "gui-img/wxdkdraw/font-names/wxd-fn34.xpm" $!trace-include /** Array containing the images to visualize line styles. */ const char ** const WxdkdrawFrame::ms_ls_images[] = { xpm_wxd_ls1, xpm_wxd_ls2, xpm_wxd_ls3, xpm_wxd_ls4, xpm_wxd_ls5, xpm_wxd_ls6 }; /** Array containing the images to visualize line cap styles. */ const char ** const WxdkdrawFrame::ms_lc_images[] = { xpm_wxd_lc1, xpm_wxd_lc2, xpm_wxd_lc3 }; /** Array containing the images to visualize line join styles. */ const char ** const WxdkdrawFrame::ms_lj_images[] = { xpm_wxd_js1, xpm_wxd_js2, xpm_wxd_js3 }; /** Array containing the images to visualize arrow heads. */ const char ** const WxdkdrawFrame::ms_arrow_images[] = { xpm_wxd_as00, xpm_wxd_as01, xpm_wxd_as02, xpm_wxd_as03, xpm_wxd_as04, xpm_wxd_as05, xpm_wxd_as06, xpm_wxd_as07, xpm_wxd_as08, xpm_wxd_as09, xpm_wxd_as10, xpm_wxd_as11, xpm_wxd_as12, xpm_wxd_as13, xpm_wxd_as14, xpm_wxd_as15, xpm_wxd_as16, xpm_wxd_as17, xpm_wxd_as18, xpm_wxd_as19, xpm_wxd_as20, xpm_wxd_as21, xpm_wxd_as22, xpm_wxd_as23, xpm_wxd_as24, xpm_wxd_as25, xpm_wxd_as26, xpm_wxd_as27, xpm_wxd_as28, xpm_wxd_as29 }; /** Array containing the images to visualize fill styles. */ const char ** const WxdkdrawFrame::ms_fs_images[] = { xpm_wxd_fs00, xpm_wxd_fs01, xpm_wxd_fs02, xpm_wxd_fs03, xpm_wxd_fs04, xpm_wxd_fs05, xpm_wxd_fs06, xpm_wxd_fs07, xpm_wxd_fs08, xpm_wxd_fs09, xpm_wxd_fs10, xpm_wxd_fs11, xpm_wxd_fs12, xpm_wxd_fs13, xpm_wxd_fs14, xpm_wxd_fs15, xpm_wxd_fs16, xpm_wxd_fs17, xpm_wxd_fs18, xpm_wxd_fs19, xpm_wxd_fs20, xpm_wxd_fs21, xpm_wxd_fs22, xpm_wxd_fs23, }; /** Array containing the images to visualize text alignments. */ const char ** const WxdkdrawFrame::ms_ta_images[] = { xpm_wxd_ts00, xpm_wxd_ts01, xpm_wxd_ts02 }; /** Array containing the images to visualize fonts. */ const char ** const WxdkdrawFrame::ms_fn_images[] = { xpm_wxd_fn00, xpm_wxd_fn01, xpm_wxd_fn02, xpm_wxd_fn03, xpm_wxd_fn04, xpm_wxd_fn05, xpm_wxd_fn06, xpm_wxd_fn07, xpm_wxd_fn08, xpm_wxd_fn09, xpm_wxd_fn10, xpm_wxd_fn11, xpm_wxd_fn12, xpm_wxd_fn13, xpm_wxd_fn14, xpm_wxd_fn15, xpm_wxd_fn16, xpm_wxd_fn17, xpm_wxd_fn18, xpm_wxd_fn19, xpm_wxd_fn20, xpm_wxd_fn21, xpm_wxd_fn22, xpm_wxd_fn23, xpm_wxd_fn24, xpm_wxd_fn25, xpm_wxd_fn26, xpm_wxd_fn27, xpm_wxd_fn28, xpm_wxd_fn29, xpm_wxd_fn30, xpm_wxd_fn31, xpm_wxd_fn32, xpm_wxd_fn33, xpm_wxd_fn34 }; /** Subdirectory for wxdkdraw library in datadir. */ static const wxChar libsubdir[] = { #if DK4_HAVE_BACKSLASH_AS_SEP wxT("\\dktools\\wxdkdraw\\library") #else wxT("/dktools/wxdkdraw/library") #endif }; %% constructor start WxdkdrawFrame::WxdkdrawFrame( int wxid, Dk4WxApplicationHelper *applicationHelper, Dk4WxHelpController *hc, int argc, wxChar **argv, wxChar const * const *localizedTexts, wxChar const * const *nlWx, dkChar const * const *nlDk ) : Dk4WxFrame(nlWx[0], applicationHelper, hc, wxid), m_sFileFull(wxEmptyString), m_sFileShort(wxEmptyString), m_sFileDir(wxEmptyString), m_sImageDir(wxEmptyString), m_sLibraryDir(wxEmptyString), m_sLibraryShort(wxEmptyString), m_szMousePosPix(0,0) { $? "+ WxdkdrawFrame::WxdkdrawFrame" /* __CHANGE__ 012: Add further local variables. */ wxString saGridChoices[] = { /* Choice texts for grid */ wxString(localizedTexts[156]), wxString(localizedTexts[157]) }; wxString saGridBase[] = { /* Choice texts for grid base */ wxString(localizedTexts[158]), wxString(localizedTexts[159]) }; wxString saPointMoveMode[] = { wxString(localizedTexts[414]), wxString(localizedTexts[415]) }; const wxChar *pShare; /* Shared directory */ double a1; /* Start angle for fish scales */ double a2; /* End angle for fish scales */ double kappa; /* Kappa value for fish scales */ /* __CHANGE__ 012: Initialize further local variables. */ sTexts = localizedTexts; sNlWx = nlWx; sNlDk = nlDk; #if defined(__WXMSW__) wxIcon wxdkdraw_icon(sNlWx[4]); #else wxIcon wxdkdraw_icon(xpm_wxdkdraw); #endif /* __CHANGE__ 011: Initialize further class members. */ $? ". initialize m_oStatusReader" wxdrd_status_init(&m_oStatusReader); wxdwr_status_init(&m_oStatusWriter, pAppHelp->GetWxEncoding()); m_pDrw = NULL; /* Drawing is opened later in first idle event */ m_bIsFirstIdle = true; /* The idle event processed next is first at all */ m_bActive = false; /* Not yet active because no drawing yet */ m_bModified = false; /* No changes applied yet */ m_bHaveName = false; /* File name not known yet */ m_bMousePos = false; /* Mouse position not yet known */ m_bMouseDiff = false; /* Shift vector not yet known */ $? ". m_bMouseDiff = false" m_iState = S_NOOP; /* No operation in progress */ m_iWheelControl = 0; /* No wheel movement with pressed control key */ m_iWheelShift = 0; /* No wheel movement with pressed shift key */ m_iWheelNormal = 0; /* No wheel movement yet */ m_uCurrent = 0U; /* No current point to edit */ m_iObjToCreate = WXD_OT_GROUP_END; /* Object type to create */ m_bSplineInterpolated = false; m_bAcceptablePoint = false; m_bUpdate = false; /* No need to update frame */ m_bAppendPoint = false; m_bHaveCornerPoint = false; m_ptMousePosRaw.x = (int32_t)0L; m_ptMousePosRaw.y = (int32_t)0L; m_ptMousePosGrid.x = (int32_t)0L; m_ptMousePosGrid.y = (int32_t)0L; m_ptMouseMoveStart.x = (int32_t)0L; m_ptMouseMoveStart.y = (int32_t)0L; m_ptMouseMoveDiff.x = (int32_t)0L; m_ptMouseMoveDiff.y = (int32_t)0L; m_ptPointMoveOri.x = (int32_t)0L; m_ptPointMoveOri.y = (int32_t)0L; wxdobj_det_init_ellipse(&m_ellPointMoveOri); m_bSnap = true; m_pStyle = NULL; m_pCurrent = NULL; wxdobj_obj_init(&m_oStyle, WXD_OT_TEXT, NULL); wxdobj_obj_init(&m_oBorder, WXD_OT_BOX, NULL); dk4error_init(&m_oErrorReport); /* Check first filename. */ if (1 < argc) { wxFileName wxfn(argv[1]); if (wxfn.IsFileReadable()) { m_sFileFull = wxfn.GetFullPath(); m_sFileShort = wxfn.GetFullName(); m_sFileDir = wxfn.GetPath(); m_bHaveName = true; } else { m_sFileFull = wxfn.GetFullPath(); m_sFileShort = wxfn.GetFullName(); m_sFileDir = wxfn.GetPath(); m_bHaveName = true; } } %% constructor end if(dkctGUILayoutOK) { pShare = pAppHelp->GetWxsShare(); if (NULL != pShare) { wxString basedir(pShare); wxString subdir(libsubdir); basedir.Append(subdir); m_sLibraryDir = basedir; } ccLineColour->SetPlaceColourChooser(); ccFillColour->SetPlaceColourChooser(); ccLineColour->SetPalettePreferred(); ccFillColour->SetPalettePreferred(); SetTitle(sTexts[18]); cbGridUnit->SetSelection(0); cbGridBase->SetSelection(0); cbGridOnOff->SetValue(true); cbPH->SetValue(false); cbPointMoveMode->SetSelection(0); LoadConfiguration(); m_oStyle.aft = m_oStyle.abt = 0; m_oStyle.afl = m_oStyle.abl = m_iv[IVI_ARROWHEAD_LENGTH]; m_oStyle.afw = m_oStyle.abw = m_iv[IVI_ARROWHEAD_WIDTH]; m_oStyle.sl = m_iv[IVI_STYLE_VALUE]; m_oBorder.pa = NULL; m_oBorder.psti = NULL; m_oBorder.play = NULL; m_oBorder.lw = (uint16_t)2U; m_oBorder.fc[0] = m_iv[IVI_M_MOVE_RED]; m_oBorder.fc[1] = m_iv[IVI_M_MOVE_GREEN]; m_oBorder.fc[2] = m_iv[IVI_M_MOVE_BLUE]; m_oBorder.sc[0] = m_iv[IVI_M_MOVE_RED]; m_oBorder.sc[1] = m_iv[IVI_M_MOVE_GREEN]; m_oBorder.sc[2] = m_iv[IVI_M_MOVE_BLUE]; m_oBorder.cs = DK4_GRA_LC_BUTTED; m_oBorder.fs = WXD_FS_NONE; m_oBorder.ls = WXD_LS_SOLID; m_oBorder.sl = m_iv[IVI_STYLE_VALUE]; m_oBorder.js = WXD_LJ_MITERED; m_oBorder.ml = 8; m_oBorder.aft = m_oBorder.abt = 0; m_oBorder.afl = m_oBorder.abl = m_iv[IVI_ARROWHEAD_LENGTH]; m_oBorder.afw = m_oBorder.abw = m_iv[IVI_ARROWHEAD_WIDTH]; m_oBorder.mark = 0x00; m_oBorder.ot = WXD_OT_BOX; m_oBorder.det.b.r = (uint32_t)0UL; wxSize szscr = ::wxGetDisplayPPI(); drawco->m_ptRes.x = szscr.GetWidth(); drawco->m_ptRes.y = szscr.GetHeight(); #if 0 RestorePosition(); #endif /* Calculate factors later used for fish scale and other fill patterns */ m_dFactors[0] = sqrt(3.0); a1 = (216.1 * M_PI) / 180.0; a2 = (323.9 * M_PI) / 180.0; kappa = dk4gratool_kappa_for_angle(a2 - a1); m_dFactors[1] = (-1.0 * 9.0 * (a2 - a1) * kappa * sin(a1) * drawco->m_ptRes.x) / 72.0; m_dFactors[2] = (-1.0 * 9.0 * (a2 - a1) * kappa * cos(a1) * drawco->m_ptRes.x) / 72.0; m_dFactors[3] = (-1.0 * 9.0 * (a2 - a1) * kappa * sin(a2) * drawco->m_ptRes.x) / 72.0; m_dFactors[4] = (-1.0 * 9.0 * (a2 - a1) * kappa * cos(a2) * drawco->m_ptRes.x) / 72.0; a1 = M_PI; a2 = 2.0 * M_PI; kappa = dk4gratool_kappa_for_angle(a2 - a1); m_dFactors[5] = (-1.0 * 3.6 * (a2 - a1) * kappa * sin(a1) * drawco->m_ptRes.x) / 72.0; m_dFactors[6] = (-1.0 * 3.6 * (a2 - a1) * kappa * cos(a1) * drawco->m_ptRes.x) / 72.0; m_dFactors[7] = (-1.0 * 3.6 * (a2 - a1) * kappa * sin(a2) * drawco->m_ptRes.x) / 72.0; m_dFactors[8] = (-1.0 * 3.6 * (a2 - a1) * kappa * cos(a2) * drawco->m_ptRes.x) / 72.0; #ifndef __WXGTK__ /* Set focus to draw control (for mouse wheel) */ drawco->SetFocus(); #endif /* Transfer style information to GUI components */ StyleToGUI(false); } /* __CHANGE__ 012: Release resources allocated by local variables. */ $? "- WxdkdrawFrame::WxdkdrawFrame" } %% module end WxdkdrawFrame::~WxdkdrawFrame() { $? "+ WxdkdrawFrame::~WxdkdrawFrame" /* __CHANGE__ 011: Release resources allocated by further class members. */ if (NULL != m_pDrw) { wxdobj_drw_delete(m_pDrw); m_pDrw = NULL; } $? "- WxdkdrawFrame::~WxdkdrawFrame" } /* vim: set ai sw=4 ts=4 : */