pentool.h

Go to the documentation of this file.
00001 // $Id: pentool.h 1282 2006-06-09 09:46:49Z alex $
00002 /* @@tag:xara-cn@@ DO NOT MODIFY THIS LINE
00003 ================================XARAHEADERSTART===========================
00004  
00005                Xara LX, a vector drawing and manipulation program.
00006                     Copyright (C) 1993-2006 Xara Group Ltd.
00007        Copyright on certain contributions may be held in joint with their
00008               respective authors. See AUTHORS file for details.
00009 
00010 LICENSE TO USE AND MODIFY SOFTWARE
00011 ----------------------------------
00012 
00013 This file is part of Xara LX.
00014 
00015 Xara LX is free software; you can redistribute it and/or modify it
00016 under the terms of the GNU General Public License version 2 as published
00017 by the Free Software Foundation.
00018 
00019 Xara LX and its component source files are distributed in the hope
00020 that it will be useful, but WITHOUT ANY WARRANTY; without even the
00021 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00022 See the GNU General Public License for more details.
00023 
00024 You should have received a copy of the GNU General Public License along
00025 with Xara LX (see the file GPL in the root directory of the
00026 distribution); if not, write to the Free Software Foundation, Inc., 51
00027 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
00028 
00029 
00030 ADDITIONAL RIGHTS
00031 -----------------
00032 
00033 Conditional upon your continuing compliance with the GNU General Public
00034 License described above, Xara Group Ltd grants to you certain additional
00035 rights. 
00036 
00037 The additional rights are to use, modify, and distribute the software
00038 together with the wxWidgets library, the wxXtra library, and the "CDraw"
00039 library and any other such library that any version of Xara LX relased
00040 by Xara Group Ltd requires in order to compile and execute, including
00041 the static linking of that library to XaraLX. In the case of the
00042 "CDraw" library, you may satisfy obligation under the GNU General Public
00043 License to provide source code by providing a binary copy of the library
00044 concerned and a copy of the license accompanying it.
00045 
00046 Nothing in this section restricts any of the rights you have under
00047 the GNU General Public License.
00048 
00049 
00050 SCOPE OF LICENSE
00051 ----------------
00052 
00053 This license applies to this program (XaraLX) and its constituent source
00054 files only, and does not necessarily apply to other Xara products which may
00055 in part share the same code base, and are subject to their own licensing
00056 terms.
00057 
00058 This license does not apply to files in the wxXtra directory, which
00059 are built into a separate library, and are subject to the wxWindows
00060 license contained within that directory in the file "WXXTRA-LICENSE".
00061 
00062 This license does not apply to the binary libraries (if any) within
00063 the "libs" directory, which are subject to a separate license contained
00064 within that directory in the file "LIBS-LICENSE".
00065 
00066 
00067 ARRANGEMENTS FOR CONTRIBUTION OF MODIFICATIONS
00068 ----------------------------------------------
00069 
00070 Subject to the terms of the GNU Public License (see above), you are
00071 free to do whatever you like with your modifications. However, you may
00072 (at your option) wish contribute them to Xara's source tree. You can
00073 find details of how to do this at:
00074   http://www.xaraxtreme.org/developers/
00075 
00076 Prior to contributing your modifications, you will need to complete our
00077 contributor agreement. This can be found at:
00078   http://www.xaraxtreme.org/developers/contribute/
00079 
00080 Please note that Xara will not accept modifications which modify any of
00081 the text between the start and end of this header (marked
00082 XARAHEADERSTART and XARAHEADEREND).
00083 
00084 
00085 MARKS
00086 -----
00087 
00088 Xara, Xara LX, Xara X, Xara X/Xtreme, Xara Xtreme, the Xtreme and Xara
00089 designs are registered or unregistered trademarks, design-marks, and/or
00090 service marks of Xara Group Ltd. All rights in these marks are reserved.
00091 
00092 
00093       Xara Group Ltd, Gaddesden Place, Hemel Hempstead, HP2 6EX, UK.
00094                         http://www.xara.com/
00095 
00096 =================================XARAHEADEREND============================
00097  */
00098 // The Pen Tool
00099 // Created by Mike on 19/9/94
00100 
00101 #ifndef INC_PENTOOL
00102 #define INC_PENTOOL
00103 
00104 //#include "tool.h" - in camtypes.h [AUTOMATICALLY REMOVED]
00105 //#include "doccoord.h" - in camtypes.h [AUTOMATICALLY REMOVED]
00106 #include "wrkrect.h"
00107 //#include "binds.h" - in camtypes.h [AUTOMATICALLY REMOVED]
00108 //#include "bars.h" - in camtypes.h [AUTOMATICALLY REMOVED]
00109 //#include "viewrc.h"
00110 #include "penedit.h"
00111 
00112 class NodePath;
00113 class Cursor;
00114 class PenToolInfoBarOp;
00115 
00116 #define OPTOKEN_PENTOOL _T("PenTool")
00117 
00118 
00119 enum penstate
00120 {
00121     IS_Undefined,
00122     IS_MoveTo,
00123     IS_DragTo,
00124 };
00125 
00126 enum penopstate
00127 {
00128     OS_Undefined,
00129     OS_EditInternal,
00130     OS_CreatePath,
00131     OS_AddElement,
00132     OS_ClosePath
00133 };
00134 
00135 typedef enum penclick
00136 {
00137     PenNewPath, 
00138     PenOnPoint,
00139     PenAddSegment,
00140     PenEditInternalMove,
00141     PenClosePath,
00142     PenReshapeLine
00143 };
00144 
00145 
00146 
00147 /********************************************************************************************
00148 
00149 >   class PenTool : public Tool_v1
00150 
00151     Author:     Mike_Kenny (Xara Group Ltd) <camelotdev@xara.com>
00152     Created:    19/9/94
00153     Purpose:    This class handles the Pen Tool that is used to draw lines and curves via
00154                 clicking and draging on the workarea.
00155 
00156 ********************************************************************************************/
00157 
00158 class CCAPI PenTool : public Tool_v1
00159 {
00160 // Give my name in memory dumps
00161 CC_DECLARE_MEMDUMP(PenTool);
00162 
00163 public:
00164     PenTool();
00165     ~PenTool();
00166     
00167     BOOL Init();
00168     void Describe(void* InfoPtr);
00169     UINT32 GetID() { return TOOLID_PEN; };
00170     
00171     // Event Handlers
00172     void SelectChange(BOOL);
00173     virtual void OnClick( DocCoord, ClickType, ClickModifiers, Spread* );
00174     virtual void RenderToolBlobs(Spread*, DocRect*);
00175     virtual BOOL GetStatusLineText(String_256*, Spread*, DocCoord, ClickModifiers);
00176     virtual void OnMouseMove(DocCoord, Spread*, ClickModifiers);
00177     virtual BOOL OnKeyPress(KeyPress* pKeyPress);
00178     void GenerateStatusLineText(NodePath* pNodePath, penclick WhatToDo, String_256* pStatusMsg);
00179     
00180     void SetInternalState();
00181     void ClearInternalState();
00182 
00183     BOOL OverPathEnd(DocCoord, Spread*, NodePath**);
00184     penclick DetermineClickEffect(DocCoord, Spread*, NodePath**);
00185     void RemoveSelection(DocCoord PointerPos, Spread *pSpread, NodePath* pNodePath=NULL);
00186     void ClearPath();
00187     void ClearOp();
00188     void CreateNewPath();
00189     void AddElementToPath();
00190     void CloseWithPath();
00191 
00192     penopstate GetPenOpState() const;
00193 
00194 private:
00195     void ClickOnEndPoint(ClickType Click, ClickModifiers ClickMods, Spread *pSpread, NodePath* pNodePath );
00196     BOOL CreatePenCursors();
00197     void DeletePenCursors();
00198 
00199 private:
00200     static  TCHAR* FamilyName;      // The Tools Family Name
00201     static  TCHAR* ToolName;        // The Tool Name
00202     static  TCHAR* Purpose;         // What the tool is for
00203     static  TCHAR* Author;          // Who wrote it
00204 
00205     penstate    CurrPenState;       // current internal tool state
00206     penopstate  CurrPenOpState;     // current internal tool op state
00207 
00208     Path        EditPath;           // temporary path for eor editing
00209     ControlPts  EditHandles;        // handle coordinates for eoring
00210 
00211     NodePath*   pNodePath;
00212     INT32       NodeIndex;
00213 
00214     // The tools cursors
00215     Cursor*     pcPenCursor;
00216     Cursor*     pcPenAdjustCursor;
00217     Cursor*     pcPenReshapeCursor;
00218     Cursor*     pcMoveBezCursor;
00219     Cursor*     MyCurrentCursor;
00220 
00221     INT32       CurrentCursorID;                // ID of the current cursor on the stack
00222     void        ChangeCursor(Cursor* cursor);   // function to change cursor
00223 
00224     // The info bar
00225     PenToolInfoBarOp* pPenInfoBarOp;
00226 
00227 
00228 };
00229 
00230 
00231 
00232 /********************************************************************************************
00233 
00234 >   class PenToolInfoBarOp : public InformationBarOp
00235 
00236     Author:     Mike_Kenny (Xara Group Ltd) <camelotdev@xara.com>
00237     Created:    19/9/94
00238     Purpose:    Class for handling the pen tool's information bar.
00239 
00240 ********************************************************************************************/
00241 
00242 class PenToolInfoBarOp : public InformationBarOp
00243 {
00244     CC_DECLARE_DYNCREATE(PenToolInfoBarOp)
00245 public:
00246     PenToolInfoBarOp() {DlgResID = _R(IDD_PENTOOLBAR);};    // Dummy default constructor for DYNCREATE
00247     MsgResult Message(Msg*);            // All messages to the info bar come through here
00248     // void InitControls();             // Initialises the controls in the info bar
00249     // void EnableControls();           // Enables/disables the controls in the info bar
00250     // virtual void UpdateState();      // Overrides the empty function in InformationBarOp
00251 
00252     PenTool* pPenTool;                  // Pointer to instance of pen tool
00253 
00254 };
00255 
00256 
00257 /********************************************************************************************
00258 
00259 >   class PenToolInfoBarOpCreate : public BarCreate
00260 
00261     Author:     Mike_Kenny (Xara Group Ltd) <camelotdev@xara.com>
00262     Created:    19/9/94
00263     Purpose:    Class for creating PenToolInfoBarOps.
00264                 Derived classes of BarCreate are used by DialogBarOp::ReadBarsFromFile()
00265 
00266 ********************************************************************************************/
00267 
00268 class PenToolInfoBarOpCreate : public BarCreate
00269 {
00270 public:
00271     DialogBarOp*    Create() { return (new PenToolInfoBarOp); }
00272 };
00273 
00274 
00275 
00276 #endif  //INC_PENTOOL

Generated on Sat Nov 10 03:47:52 2007 for Camelot by  doxygen 1.4.4