summaryrefslogtreecommitdiffstats
path: root/kivio/plugins/kivioselecttool/tool_select.h
blob: 07d4a25b0bcc14ec1f29418611ca360212a7cff2 (plain)
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
136
/*
 * Kivio - Visual Modelling and Flowcharting
 * Copyright (C) 2000-2001 theKompany.com & Dave Marotti
 * Copyright (C) 2003-2005 Peter Simonsson <psn@linux.se>
 *
 * 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 <tqptrlist.h>
#include <KoPoint.h>
#include <KoRect.h>
#include "kivio_mousetool.h"

class KivioView;
class KivioPage;
class TQMouseEvent;
class TQKeyEvent;
class TDEPopupMenu;
class TDERadioAction;
class TDEAction;

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(TQEvent* e);

    void select(const TQRect&);

  public slots:
    void setActivated(bool a);

  signals:
    void operationDone();

  protected slots:
    void editText(TQPtrList<KivioStencil>* stencils);
    void showProperties();
    void editStencilText();

  protected:
    void mousePress(const TQPoint&);
    void mouseMove(TQMouseEvent*);
    void mouseRelease(const TQPoint&);
    void leftDoubleClick(const TQPoint&);

    bool startResizing(const TQPoint&);
    bool startDragging(const TQPoint&, bool);
    bool startCustomDragging(const TQPoint&, bool);
    bool startRubberBanding(const TQPoint&);

    void continueDragging(const TQPoint&, bool ignoreGridGuides = false);
    void continueCustomDragging(const TQPoint&);
    void continueResizing(const TQPoint&, bool ignoreGridGuides = false);
    void continueRubberBanding(const TQPoint&);

    void endResizing(const TQPoint&);
    void endDragging(const TQPoint&);
    void endCustomDragging(const TQPoint&);
    void endRubberBanding(const TQPoint&);

    void showPopupMenu(const TQPoint&);

    void changeMouseCursor(const TQPoint&);
    int isOverResizeHandle( KivioStencil *pStencil, const double x, const double y );
    
    void keyPress(TQKeyEvent* e);
    
    TQPoint 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;
    TQPtrList <KivioSelectDragData> m_lstOldGeometry;
    KoRect m_selectedRect;
    KoPoint m_customDragOrigPoint;

    TDERadioAction* m_selectAction;
    TDEAction* m_arrowHeadAction;
    TDEAction* m_textEditAction;

    bool m_firstTime;
};

#endif