1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
/*
* Kivio - Visual Modelling and Flowcharting
* Copyright (C) 2000-2001 theKompany.com & Dave Marotti
* Copyright (C) 2003-2005 Peter Simonsson <[email protected]>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef TOOL_SELECT_H
#define TOOL_SELECT_H
#include <qptrlist.h>
#include <KoPoint.h>
#include <KoRect.h>
#include "kivio_mousetool.h"
class KivioView;
class KivioPage;
class QMouseEvent;
class QKeyEvent;
class KPopupMenu;
class KRadioAction;
class KAction;
class KivioStencil;
class KivioSelectDragData
{
public:
KoRect rect;
};
enum {
stCut=1,
stCopy,
stPaste,
stSendToBack,
stBringToFront,
stGroup,
stUngroup
};
class SelectTool : public Kivio::MouseTool
{
Q_OBJECT
public:
SelectTool( KivioView* parent );
~SelectTool();
virtual bool processEvent(QEvent* e);
void select(const QRect&);
public slots:
void setActivated(bool a);
signals:
void operationDone();
protected slots:
void editText(QPtrList<KivioStencil>* stencils);
void showProperties();
void editStencilText();
protected:
void mousePress(const QPoint&);
void mouseMove(QMouseEvent*);
void mouseRelease(const QPoint&);
void leftDoubleClick(const QPoint&);
bool startResizing(const QPoint&);
bool startDragging(const QPoint&, bool);
bool startCustomDragging(const QPoint&, bool);
bool startRubberBanding(const QPoint&);
void continueDragging(const QPoint&, bool ignoreGridGuides = false);
void continueCustomDragging(const QPoint&);
void continueResizing(const QPoint&, bool ignoreGridGuides = false);
void continueRubberBanding(const QPoint&);
void endResizing(const QPoint&);
void endDragging(const QPoint&);
void endCustomDragging(const QPoint&);
void endRubberBanding(const QPoint&);
void showPopupMenu(const QPoint&);
void changeMouseCursor(const QPoint&);
int isOverResizeHandle( KivioStencil *pStencil, const double x, const double y );
void keyPress(QKeyEvent* e);
QPoint m_startPoint, m_releasePoint;
KoPoint m_lastPoint;
KoPoint m_origPoint;
// Select Tool Mode
enum {
stmNone,
stmDrawRubber,
stmDragging,
stmCustomDragging,
stmResizing
};
private:
int m_mode; // Flag to indicate that we are drawing a rubber band
KivioStencil *m_pResizingStencil;
KivioStencil *m_pCustomDraggingStencil;
int m_resizeHandle;
bool m_controlKey;
int m_customDragID;
QPtrList <KivioSelectDragData> m_lstOldGeometry;
KoRect m_selectedRect;
KoPoint m_customDragOrigPoint;
KRadioAction* m_selectAction;
KAction* m_arrowHeadAction;
KAction* m_textEditAction;
bool m_firstTime;
};
#endif
|