00001
00046 #ifndef INC_MGUI_TOOLTEXT_H
00047 #define INC_MGUI_TOOLTEXT_H
00048
00049 #ifndef INC_MGUI_TOOLBASE_H
00050 #include <mgui/toolbase.h>
00051 #endif
00052
00053 #ifndef INC_MI32_POLYLINE_H
00054 #include <mi32/polyline.h>
00055 #endif
00056
00057 #ifndef INC_MI32_ELEMSTYL_H
00058 #include <mi32/elemstyl.h>
00059 #endif
00060
00061 #ifndef INC_MI32_ELEMTYPE_H
00062 #include <mi32/elemtype.h>
00063 #endif
00064
00065 namespace MGUI {
00066
00067
00069 class TOOL_TEXT : public TOOL_BASE {
00070 public:
00071
00072 enum TOOLSTYLE {
00073 TOOLSTYLE_Default = 0x0000,
00074 TOOLSTYLE_NoEditBaseLine = 0x0001,
00075 TOOLSTYLE_NoLeaderLines = 0x0002,
00076 TOOLSTYLE_NoStyleControls = 0x0004,
00077 TOOLSTYLE_NoStyleAdvanced = 0x0008,
00078 TOOLSTYLE_ControlFormEditHeight = 0x0010,
00079 };
00080
00081 enum BASECURVE {
00082 BASECURVE_Straight,
00083 BASECURVE_Exact,
00084 BASECURVE_Spline
00085 };
00086
00087 enum EDITMODE {
00088 EDITMODE_Automatic,
00089 EDITMODE_AddEnd,
00090 EDITMODE_AddStart,
00091 EDITMODE_InsertVertex,
00092 EDITMODE_DragVertex,
00093 EDITMODE_DeleteVertex,
00094 EDITMODE_Move
00095 };
00096
00097 class LEADER {
00098 public:
00099
00100 LEADER ();
00101
00102 LEADER (
00103 const POLYLINE& Line,
00104 INT32 ElemNum = -1,
00105 ELEMTYPE ElemType = ELEMTYPE_Empty
00106 );
00107
00108 ~LEADER ();
00109
00110 INT32 GetElemNum (
00111 ) const { return (m_ElemNum); }
00112
00113 ELEMTYPE GetElemType (
00114 ) const { return (m_ElemType); }
00115
00116 const POLYLINE& GetLine (
00117 ) const { return (m_Line); }
00118
00119 POLYLINE& GetLine (
00120 ) { return (m_Line); }
00121
00122 const DPOINT3D& GetTiePoint (
00123 ) const { return (m_TiePoint); }
00124
00125 void SetElement (
00126 INT32 ElemNum,
00127 ELEMTYPE ElemType = ELEMTYPE_Empty
00128 ) { m_ElemNum = ElemNum; m_ElemType = ElemType; }
00129
00130 void SetLine (
00131 const POLYLINE& Line
00132 ) { m_Line = Line; }
00133
00134 void SetStartPoint (
00135 const DPOINT3D& point
00136 ) { m_Line.SetVertex(0,point); }
00137
00138 void SetTiePoint (
00139 const DPOINT2D& TiePoint
00140 ) { m_TiePoint = TiePoint; }
00141
00142 private:
00143 #ifndef GENERATING_DOXYGEN_OUTPUT
00144 POLYLINE m_Line;
00145 DPOINT3D m_TiePoint;
00146 INT32 m_ElemNum;
00147 ELEMTYPE m_ElemType;
00148 #endif
00149 };
00150 typedef MILIST<LEADER> LEADERLIST;
00151
00153 explicit TOOL_TEXT (
00154 TOOLCANVAS *canvas
00155 );
00156
00158 virtual ~TOOL_TEXT ();
00159
00161 void ClearString (
00162 );
00163
00165 void ClearLeaderList (
00166 );
00167
00170 void ClearSourceLine (
00171 );
00172
00174 BASECURVE GetBaseCurve (
00175 ) const { return (m_BaseCurve); }
00176
00178 const POLYLINE& GetBaseLine (
00179 ) const { return (m_BaseLine); }
00180
00182 EDITMODE GetEditMode (
00183 ) const { return (m_EditMode); }
00184
00186 double GetHeight (
00187 ) const { return (m_Height); }
00188
00190 const LEADERLIST& GetLeaderList (
00191 ) const { return (m_LeaderList); }
00192
00194 const MISTRING& GetText (
00195 ) const { return (m_Text); }
00196
00198 const TEXTSTYLE& GetTextStyle (
00199 ) const { return (m_TextStyle); }
00200
00202 TOOLSTYLE GetToolStyle (
00203 ) const { return (m_ToolStyle); }
00204
00206 void LeaderLineAdd (
00207 );
00208
00210 void LeaderLineAdd (
00211 const LEADER& Leader
00212 );
00213
00215 void LeaderLineRemoveActive (
00216 );
00217
00219 void ReverseBaseLine (
00220 );
00221
00223 void SetActiveNext (
00224 );
00225
00227 void SetActivePrevious (
00228 );
00229
00231 void SetBaseCurve (
00232 BASECURVE BaseCurve
00233 );
00234
00236 void SetBaseLine (
00237 const POLYLINE& BaseLine,
00238 BASECURVE BaseCurve
00239 );
00240
00242 void SetCaretPos (
00243 INT32 row,
00244 INT32 column
00245 );
00246
00248 void SetEditMode (
00249 EDITMODE EditMode
00250 ) { m_EditMode = EditMode; }
00251
00253 void SetHeight (
00254 double height
00255 );
00256
00258 void SetLeaderList (
00259 const LEADERLIST& LeaderList
00260 );
00261
00263 void SetMapScale (
00264 double MapScale
00265 );
00266
00269 void SetSourceLine (
00270 const POLYLINE& SourceLine
00271 );
00272
00274 void SetText (
00275 const MISTRING& text
00276 );
00277
00279 void SetTextStyle (
00280 const TEXTSTYLE& TextStyle
00281 );
00282
00284 void SetToolStyle (
00285 TOOLSTYLE ToolStyle
00286 ) { m_ToolStyle = ToolStyle; }
00287
00288 private:
00289
00290 #ifndef GENERATING_DOXYGEN_OUTPUT
00291
00292 class CONTROLFORM;
00293
00294 enum ZONE {
00295 ZONE_NoFunction = 0,
00296 ZONE_SetBasePoint,
00297 ZONE_MoveBaseLine,
00298 ZONE_Vertex,
00299 ZONE_Height,
00300 ZONE_RotateBaseLine,
00301 ZONE_InsertVertex,
00302 };
00303
00304
00305 TOOLSTYLE m_ToolStyle;
00306
00307 MISTRING m_Text;
00308 TEXTSTYLE m_TextStyle;
00309 double m_Height;
00310 double m_CanvasScale;
00311 BASECURVE m_BaseCurve;
00312 POLYLINE m_BaseLine;
00313 POLYLINE m_SourceLine;
00314 POLYLINE *m_pCurLine;
00315 LEADERLIST m_LeaderList;
00316
00317 ZONE m_PointerZone;
00318 EDITMODE m_EditMode;
00319 bool m_FlipHeight;
00320 INT32 m_CaretRow;
00321 INT32 m_CaretCol;
00322 INT32 m_CurVertex;
00323 DPOINT2D m_prevpt;
00324 double m_LineAngle;
00325 CONTROLFORM *m_pControlForm;
00326
00327
00328 void AdjustBaseLine ();
00329 void AdjustHeight (const DPOINT2D& pt);
00330 void AdjustTool (const DPOINT2D& pt, KEYSTATE keystate, bool firsttime=false);
00331 void ApplyTrans (const TRANS2D_AFFINE& trans);
00332 void ComputeCaretCoords (DPOINT2D& BottomPt, DPOINT2D& TopPt);
00333 void ComputeLineAngle ();
00334 void ComputePointerZone (const DPOINT2D& pt);
00335 void DeleteVertices (const DPOINT2D& pt);
00336 void DrawBaseLine (MGD::CONTEXT *dc);
00337 void DrawLeaderLines (MGD::CONTEXT *dc);
00338 void DrawLine (const POLYLINE& line, MGD::CONTEXT *dc);
00339 void DrawMarkers (MGD::CONTEXT *dc);
00340 void DrawText (MGD::CONTEXT *dc);
00341 void GetActualBaseLine (POLYLINE& baseline);
00342 void GetCurTextStyle (TEXTSTYLE& TextStyle);
00343 void SetActiveLine (POLYLINE *pActiveLine, bool bForce = false);
00344 void SetContextStyle (MGD::CONTEXT *dc);
00345 double TransHeightDtoT (double height) const;
00346 double TransHeightTtoD (double height) const;
00347 void UpdateCursor () const;
00348
00349
00350 virtual MGUI::FORM* v_CreateControlForm (LAYOUT_PANE_BASE& ParentPane, CTRLOPT ctrlopt);
00351 virtual void v_DoDraw ();
00352 virtual void v_DoMove (double dx, double dy, ADJUSTFLAGS flags);
00353 virtual void v_OnClear ();
00354 virtual bool v_OnKey (MGUI::POINT point, KEYCODE keycode, KEYSTATE keystate);
00355 virtual bool v_OnPointerButtonDown (MGUI::POINT point, POINTERBUTTON button, KEYSTATE keystate);
00356 virtual bool v_OnPointerButtonUp (MGUI::POINT point, POINTERBUTTON button, KEYSTATE keystate);
00357 virtual void v_OnPointerMove (MGUI::POINT point, POINTERBUTTON button, KEYSTATE keystate);
00358 virtual void v_OnSetTransToWindow ();
00359
00360 #endif // GENERATING_DOXYGEN_OUTPUT
00361 };
00362
00363
00364 }
00365
00366
00367 #endif // INC_MGUI_TOOLTEXT_H