00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef KO_TOOL_MANAGER
00021 #define KO_TOOL_MANAGER
00022
00023 #include <koffice_export.h>
00024 #include <QMap>
00025 #include <QObject>
00026 #include <QCursor>
00027 #include <QStack>
00028
00029 #include <KoToolProxy.h>
00030 #include <KoInputDevice.h>
00031
00032 class ToolHelper;
00033 class KoCanvasController;
00034 class KoCanvasBase;
00035 class KoTool;
00036 class KoShapeControllerBase;
00037 class KoToolBox;
00038 class KoShapeController;
00039 class KActionCollection;
00040 class KoShape;
00041
00042
00097 class KOFFICEUI_EXPORT KoToolManager : public QObject, public KoToolProxy {
00098 Q_OBJECT
00099
00100 public:
00102 static KoToolManager* instance();
00103 ~KoToolManager();
00104
00105
00106 public:
00107
00108 KoToolProxy * toolProxy() { return this; }
00109
00110 private:
00111
00112 void paint( QPainter &painter, KoViewConverter &converter );
00113 void repaintDecorations();
00114 void tabletEvent( QTabletEvent *event, const QPointF &pnt );
00115 void mousePressEvent( QMouseEvent *event, const QPointF &pnt );
00116 void mouseDoubleClickEvent( QMouseEvent *event, const QPointF &pnt );
00117 void mouseMoveEvent( QMouseEvent *event, const QPointF &pnt );
00118 void mouseReleaseEvent( QMouseEvent *event, const QPointF &pnt );
00119 void keyPressEvent(QKeyEvent *event );
00120 void keyReleaseEvent(QKeyEvent *event);
00121 void wheelEvent ( QWheelEvent * event, const QPointF &pnt );
00122
00123 public:
00135 KoToolBox *toolBox(const QString &applicationName = QString());
00136
00137 void registerTools(KActionCollection *ac);
00138
00145 void addControllers(KoCanvasController *controller, KoShapeControllerBase *sc);
00146
00154 void removeCanvasController(KoCanvasController *controller);
00155
00157 KoCanvasController *activeCanvasController() const;
00158
00160 KoShapeController *shapeCreatorTool(KoCanvasBase *canvas) const;
00168 KoShapeController *shapeController(KoCanvasBase *canvas) const;
00169
00171 KoInputDevice currentInputDevice() const;
00172
00173 public slots:
00178 void switchToolRequested(const QString &id);
00179
00180 signals:
00185 void changedTool(int uniqueToolId);
00186
00192 void toolCodesSelected(QList<QString> types);
00193
00198 void inputDeviceChanged( const KoInputDevice & );
00199
00200 private:
00201
00202 KoToolManager();
00203 KoToolManager(const KoToolManager&);
00204 KoToolManager operator=(const KoToolManager&);
00205 void setup();
00206 void switchTool(KoTool *tool);
00207 void switchTool(const QString &id, bool temporary);
00208
00209 private slots:
00210
00211 void toolActivated(ToolHelper *tool);
00212 void detachCanvas(KoCanvasController *controller);
00213 void attachCanvas(KoCanvasController *controller);
00214 void movedFocus(QWidget *from, QWidget *to);
00215 void updateCursor(QCursor cursor);
00216 void switchToolTemporaryRequested(const QString &id);
00217 void switchBackRequested();
00218 void selectionChanged(QList<KoShape*> shapes);
00219
00220 private:
00221
00222 static KoToolManager* s_instance;
00223
00224 QList<ToolHelper*> m_tools;
00225 QMap<KoCanvasController*, KoShapeControllerBase*> m_shapeControllers;
00226 QList<KoCanvasController*> m_canvases;
00227 KoCanvasController *m_activeCanvas;
00228 KoTool *m_activeTool, *m_dummyTool;
00229 ToolHelper *m_defaultTool;
00230 QString m_activeToolId;
00231
00232 QMap<KoTool*, int> m_uniqueToolIds;
00233 QMap<KoCanvasController*, QMap<QString, KoTool*> > m_allTools;
00234 QStack<QString> m_stack;
00235
00236 QList<KoShape*> m_lastSelectedShapes;
00237 };
00238
00239 #endif