/* This file is part of the KDE project Copyright (C) 2001, 2002, 2003 The Karbon Developers This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef __VTOOL_H__ #define __VTOOL_H__ #include #include #include #include #include class TDERadioAction; class KarbonPart; class KarbonView; class TQEvent; class TQWidget; class VPainter; class VToolController; enum enumToolType { TOOL_SELECT = 0, // TOOL_FREEHAND = 1, // TOOL_SHAPE = 2, // Geometric shapes like ellipses and lines TOOL_MANIPULATION = 3, // TOOL_MISC = 4 // }; /** * The base class for all karbon tools. * * Each tool has an icon, name and category. Basic mouse event and key handling is * implemented here. */ class KARBONBASE_EXPORT VTool : public TQObject { TQ_OBJECT public: /** * Constructs a new tool connected to the specified karbon view. * * @param view the karbon view the tool is connected to * @param name unused */ VTool( KarbonView *view, const char* name ); // Make VTool "abstract": /** * Destroys the tool and unregisters it from the connected part. */ virtual ~VTool(); /** * Registers the specified tool at the connected part. * * Tools should register themselves by calling this function. * * @param tool the tool to register */ virtual void registerTool( VTool *tool ); /** * Deactivates the tool. */ virtual void deactivate() {} /** * Shows the tools option dialog. */ virtual bool showDialog() const { return false; } /** * The name of the tool. */ virtual TQString uiname() { return i18n( "Unnamed Tool" ); } /** * The context help of the tool. */ virtual TQString contextHelp() { return i18n( "This tool has no description." ); } /** * The tool type. */ virtual enumToolType toolType() { return TOOL_MISC; } /** * The tool status text. */ virtual TQString statusText() { return ""; } /** * Position in toolbox. Zero means no preferred position, other * values indicate the true position. */ virtual uint priority() { return 0; } /** * The tool icon name. */ TQString icon() { return m_action->icon(); } /** * This function processes every important mouse event. * It then calls suiting functions like mouseMoved() so deriving tools * don't need to directly deal with events themselves. */ bool mouseEvent( TQMouseEvent* event, const KoPoint& ); /** * This function processes every important key event. * It then calls suiting functions like mouseButtonPress() so deriving tools * don't need to directly deal with events themselves. */ bool keyEvent( TQEvent* event ); /** * This function is called when the documents unit setting were changed. */ virtual void refreshUnit() {} /** * Called after tool creation. A tool is supposed to hook its associated action * into the specified action collection here. */ virtual void setup(TDEActionCollection *) {} /** * Returns the tool's associated action object. * * @return the associated action */ TDERadioAction *action() const { return m_action; } /** * Draws the actual tool state. * * @param painter the painter on which to paint */ virtual void draw( VPainter* painter ) { Q_UNUSED( painter ); } public slots: /** * Called during the tool activation. A tool is supposed to set a mouse cursor and/or * the statusbar properly here. */ virtual void activate(); protected: /** * Returns the current dagging state. * * @return true if the mouse is currently dragged, else false */ bool isDragging() const { return m_isDragging; } virtual void draw( /*VPainter* painter*/ ) {} /** * This function is called on each mouse event the tool receives. */ virtual void setCursor() const {} /** * Left mouse button press. */ virtual void mouseButtonPress() {} /** * Right mouse button press. */ virtual void rightMouseButtonPress() {} /** * Left mouse button release. The mouse wasn't moved. */ virtual void mouseButtonRelease() {} /** * Right mouse button release. The mouse wasn't moved. */ virtual void rightMouseButtonRelease() {} /** * Mouse button double click. */ virtual void mouseButtonDblClick() {} /** * Mouse move. No mouse button is pressed. */ virtual void mouseMove() {} /** * Mouse drag. */ virtual void mouseDrag() {} /** * Mouse button release. The mouse was moved before. */ virtual void mouseDragRelease() {} /** * Mouse drag with "Shift" key pressed at the same time. */ virtual void mouseDragShiftPressed() {} /** * Mouse drag with "Ctrl" key pressed at the same time. */ virtual void mouseDragCtrlPressed() {} /** * "Shift" key released while mouse drag. */ virtual void mouseDragShiftReleased() {} /** * "Ctrl" key released while mouse drag. */ virtual void mouseDragCtrlReleased() {} /** * "Arrow" key released up, down, left, right */ virtual void arrowKeyReleased( TQt::Key ) {} /** * Specified key released. */ virtual bool keyReleased( TQt::Key ) { return false; } /** * Cancels all tool operations. This event is invoked when ESC is pressed. */ virtual void cancel() {} /** * Cancels the last tool step (if any). This event is invoked when Backspace is pressed. */ virtual void cancelStep() {} /** * Terminates the current tool drawing (if any). This event is invoked when Enter/Return is pressed. */ virtual void accept() {} /** * Returns the connected karbon part. */ // KarbonPart* part() const { return m_part; } /** * Returns the connected karbon view. */ KarbonView* view() const; /** * Most tools need to know the first mouse coordinate. */ const KoPoint& first() const { return m_firstPoint; } /** * The last mouse coordinate. */ const KoPoint& last() const { return m_lastPoint; } /** * The status of the shift key. * * @return true if key is pressed, else false */ bool shiftPressed() const { return m_shiftPressed; } /** * The status of the ctrl key. * * @return true if key is pressed, else false */ bool ctrlPressed() const { return m_ctrlPressed; } /** * The status of the alt key. * * @return true if key is pressed, else false */ bool altPressed() const { return m_altPressed; } /** The tool's action object. */ TDERadioAction *m_action; /** Helper function. Returns the parent view's toolcontroller. */ VToolController *toolController() const; private: /** */ KarbonView *m_view; /** * First input mouse coordinate. */ KoPoint m_firstPoint; /** * Last input mouse coordinate. */ KoPoint m_lastPoint; /** * A tool state. */ bool m_mouseButtonIsDown; /** * A tool state. */ bool m_isDragging; /** * Indicates if shift is pressed. */ bool m_shiftPressed; /** * Indicates if ctrl is pressed. */ bool m_ctrlPressed; /** * Indicates if Alt is pressed. */ bool m_altPressed; }; #endif