1 // SPDX-FileCopyrightText: 2002 Dominique Devriese <devriese@kde.org>
2
3 // SPDX-License-Identifier: GPL-2.0-or-later
4
5 #include "base_mode.h"
6
7 #include "popup/popup.h"
8 #include "popup/objectchooserpopup.h"
9
10 #include "../kig/kig_view.h"
11 #include "../kig/kig_part.h"
12 #include "../kig/kig_document.h"
13
14 #include <QEvent>
15 #include <KCursor>
16 #include <QMouseEvent>
17
BaseMode(KigPart & d)18 BaseMode::BaseMode( KigPart& d )
19 : KigMode( d )
20 {
21 }
22
~BaseMode()23 BaseMode::~BaseMode()
24 {
25 }
26
leftClicked(QMouseEvent * e,KigWidget * v)27 void BaseMode::leftClicked( QMouseEvent* e, KigWidget* v )
28 {
29 // touch screens don't send a mouseMoved event before a click event,
30 // apparently, so we simulate it.
31 mouseMoved( e, v );
32
33 // get rid of text still showing...
34 v->updateCurPix();
35 v->updateWidget();
36
37 mplc = e->pos();
38 moco = mdoc.document().whatAmIOn( v->fromScreen( mplc ), *v );
39
40 if( moco.empty() )
41 {
42 // clicked on an empty spot --> we show the rectangle for
43 // selecting stuff...
44 dragRect( mplc, *v );
45 }
46 else
47 {
48 // the user clicked on some object.. --> this could either mean
49 // that he/she wants to select the object or that he wants to
50 // start moving it. We assume nothing here, we wait till he
51 // either moves some 4 pixels, or till he releases his mouse
52 // button in leftReleased() or mouseMoved()...
53 };
54 }
55
leftMouseMoved(QMouseEvent * e,KigWidget * w)56 void BaseMode::leftMouseMoved( QMouseEvent* e, KigWidget* w )
57 {
58 if( !moco.empty() && ( mplc - e->pos() ).manhattanLength() > 3 )
59 dragObject( moco, mplc, *w,
60 ( e->modifiers() & (Qt::ShiftModifier | Qt::ControlModifier ) ) != 0
61 );
62 }
63
leftReleased(QMouseEvent * e,KigWidget * v)64 void BaseMode::leftReleased( QMouseEvent* e, KigWidget* v )
65 {
66 if( (mplc - e->pos()).manhattanLength() > 4 ) return;
67
68 ObjectHolder* o = 0;
69 bool keyCtrl = ( e->modifiers() & Qt::ControlModifier ) != 0;
70 bool keyShift = ( e->modifiers() & Qt::ShiftModifier ) != 0;
71 if ( ! moco.empty() )
72 {
73 if ( keyShift )
74 {
75 int id = ObjectChooserPopup::getObjectFromList( e->pos(), v, moco );
76 if ( id >= 0 )
77 o = moco[id];
78 }
79 else
80 o = moco.front();
81 }
82 leftClickedObject( o, e->pos(), *v, keyCtrl );
83 }
84
midClicked(QMouseEvent * e,KigWidget * v)85 void BaseMode::midClicked( QMouseEvent* e, KigWidget* v )
86 {
87 // get rid of text still showing...
88 v->updateCurPix();
89 v->updateWidget();
90
91 mplc = e->pos();
92 moco = mdoc.document().whatAmIOn( v->fromScreen( e->pos() ), *v );
93 }
94
midReleased(QMouseEvent * e,KigWidget * v)95 void BaseMode::midReleased( QMouseEvent* e, KigWidget* v )
96 {
97 if( (e->pos() - mplc).manhattanLength() > 4 ) return;
98
99 midClicked( mplc, *v );
100 }
101
rightClicked(QMouseEvent * e,KigWidget * w)102 void BaseMode::rightClicked( QMouseEvent* e, KigWidget* w )
103 {
104 // get rid of text still showing...
105 w->updateCurPix();
106 w->updateWidget();
107 // set a normal cursor...
108 w->setCursor( Qt::ArrowCursor );
109
110 mplc = e->pos();
111 moco = mdoc.document().whatAmIOn( w->fromScreen( mplc ), *w );
112
113 rightClicked( moco, mplc, *w );
114 }
115
mouseMoved(QMouseEvent * e,KigWidget * w)116 void BaseMode::mouseMoved( QMouseEvent* e, KigWidget* w )
117 {
118 std::vector<ObjectHolder*> os = mdoc.document().whatAmIOn( w->fromScreen( e->pos() ), *w );
119 mouseMoved( os, e->pos(), *w, e->modifiers() & Qt::ShiftModifier );
120 }
121
dragRect(const QPoint &,KigWidget &)122 void BaseMode::dragRect( const QPoint&, KigWidget& )
123 {
124 }
125
leftClickedObject(ObjectHolder *,const QPoint &,KigWidget &,bool)126 void BaseMode::leftClickedObject( ObjectHolder*, const QPoint&,
127 KigWidget&, bool )
128 {
129 }
130
dragObject(const std::vector<ObjectHolder * > &,const QPoint &,KigWidget &,bool)131 void BaseMode::dragObject( const std::vector<ObjectHolder*>&, const QPoint&,
132 KigWidget&, bool )
133 {
134 }
135
enableActions()136 void BaseMode::enableActions()
137 {
138 KigMode::enableActions();
139 }
140
oco()141 std::vector<ObjectHolder*> BaseMode::oco()
142 {
143 return moco;
144 }
145
pointLocation()146 QPoint BaseMode::pointLocation()
147 {
148 return mplc;
149 }
150