25
26
#define CANCEL_TWO_CLICK_RENAME {_singleClicked = false;_renameTimer.stop();}
27
KrMouseHandler::KrMouseHandler( KrView * view, int contextMenuShift ) : _view( view ), _rightClickedItem( 0 ),
28
_contextMenuTimer(), _contextMenuShift( contextMenuShift ), _singleClicked( false ), _singleClickTime(),
29
_renameTimer(), _dragStartPos( -1, -1 ), _emptyContextMenu( false )
31
KConfigGroup grpSvr( krConfig, "Look&Feel" );
32
// decide on single click/double click selection
33
_singleClick = grpSvr.readEntry( "Single Click Selects", _SingleClickSelects ) && KGlobalSettings::singleClick();
34
connect( &_contextMenuTimer, SIGNAL (timeout()), this, SLOT (showContextMenu()));
35
connect( &_renameTimer, SIGNAL( timeout() ), this, SIGNAL( renameCurrentItem() ) );
38
bool KrMouseHandler::mousePressEvent( QMouseEvent *e )
40
_rightClickedItem = _clickedItem = 0;
41
KrViewItem * item = _view->getKrViewItemAt( e->pos() );
42
if( !_view->isFocused() )
43
_view->op()->emitNeedFocus();
44
if (e->button() == Qt::LeftButton)
46
_dragStartPos = e->pos();
47
if( e->modifiers() == Qt::NoModifier )
51
if( KrSelectionMode::getSelectionHandler()->leftButtonSelects() )
53
if( KrSelectionMode::getSelectionHandler()->leftButtonPreservesSelection() )
54
item->setSelected(!item->isSelected());
56
if( item->isSelected() )
60
// clear the current selection
61
_view->changeSelection( KRQuery( "*" ), false, true);
62
item->setSelected( true );
66
_view->setCurrentKrViewItem( item );
71
else if( e->modifiers() == Qt::ControlModifier )
73
if( item && (KrSelectionMode::getSelectionHandler()->shiftCtrlLeftButtonSelects() ||
74
KrSelectionMode::getSelectionHandler()->leftButtonSelects() ) )
76
item->setSelected(!item->isSelected());
79
_view->setCurrentKrViewItem( item );
83
else if( e->modifiers() == Qt::ShiftModifier )
85
if( item && (KrSelectionMode::getSelectionHandler()->shiftCtrlLeftButtonSelects() ||
86
KrSelectionMode::getSelectionHandler()->leftButtonSelects() ) )
88
KrViewItem * current = _view->getCurrentKrViewItem();
90
_view->selectRegion( item, current, true );
93
_view->setCurrentKrViewItem( item );
98
if (e->button() == Qt::RightButton)
100
//dragStartPos = e->pos();
101
if( e->modifiers() == Qt::NoModifier )
105
if( KrSelectionMode::getSelectionHandler()->rightButtonSelects() )
107
if( KrSelectionMode::getSelectionHandler()->rightButtonPreservesSelection() ) {
108
if (KrSelectionMode::getSelectionHandler()->showContextMenu() >= 0)
110
_rightClickSelects = !item->isSelected();
111
_rightClickedItem = item;
113
item->setSelected(!item->isSelected());
115
if( item->isSelected() ) {
118
// clear the current selection
119
_view->changeSelection( KRQuery( "*" ), false, true);
120
item->setSelected( true );
124
_view->setCurrentKrViewItem( item );
126
handleContextMenu( item, e->globalPos() );
130
else if( e->modifiers() == Qt::ControlModifier )
132
if( item && (KrSelectionMode::getSelectionHandler()->shiftCtrlRightButtonSelects() ||
133
KrSelectionMode::getSelectionHandler()->rightButtonSelects() ) )
135
item->setSelected(!item->isSelected());
138
_view->setCurrentKrViewItem( item );
142
else if( e->modifiers() == Qt::ShiftModifier )
144
if( item && (KrSelectionMode::getSelectionHandler()->shiftCtrlRightButtonSelects() ||
145
KrSelectionMode::getSelectionHandler()->rightButtonSelects() ) )
147
KrViewItem * current = _view->getCurrentKrViewItem();
149
_view->selectRegion( item, current, true );
152
_view->setCurrentKrViewItem( item );
160
bool KrMouseHandler::mouseReleaseEvent( QMouseEvent *e )
162
if( e->button() == Qt::LeftButton )
163
_dragStartPos = QPoint( -1, -1 );
164
KrViewItem * item = _view->getKrViewItemAt( e->pos() );
166
if( item && item == _clickedItem )
168
if(((e->button() == Qt::LeftButton) && ( e->modifiers() == Qt::NoModifier ) &&
169
( KrSelectionMode::getSelectionHandler()->leftButtonSelects() ) &&
170
!( KrSelectionMode::getSelectionHandler()->leftButtonPreservesSelection() ) ) ||
171
((e->button() == Qt::RightButton) && ( e->modifiers() == Qt::NoModifier ) &&
172
( KrSelectionMode::getSelectionHandler()->rightButtonSelects() ) &&
173
!( KrSelectionMode::getSelectionHandler()->rightButtonPreservesSelection() )))
175
// clear the current selection
176
_view->changeSelection( KRQuery( "*" ), false, true);
177
item->setSelected( true );
181
if( e->button() == Qt::RightButton ) {
182
_rightClickedItem = 0;
183
_contextMenuTimer.stop();
185
if( _singleClick && e->button() == Qt::LeftButton )
187
CANCEL_TWO_CLICK_RENAME;
191
QString tmp = item->name();
192
_view->op()->emitExecuted(tmp);
194
} else if( !_singleClick && e->button() == Qt::LeftButton )
196
if( item && e->modifiers() == Qt::NoModifier )
198
if ( _singleClicked && !_renameTimer.isActive() && _singleClickedItem == item ) {
199
KSharedConfigPtr config = KGlobal::config();
200
KConfigGroup group( krConfig, "KDE" );
201
int doubleClickInterval = group.readEntry( "DoubleClickInterval", 400 );
203
int msecsFromLastClick = _singleClickTime.msecsTo( QTime::currentTime() );
205
if ( msecsFromLastClick > doubleClickInterval && msecsFromLastClick < 5 * doubleClickInterval ) {
206
_singleClicked = false;
207
_renameTimer.setSingleShot( true );
208
_renameTimer.start( doubleClickInterval );
213
CANCEL_TWO_CLICK_RENAME;
214
_singleClicked = true;
215
_singleClickedItem = item;
216
_singleClickTime = QTime::currentTime();
222
CANCEL_TWO_CLICK_RENAME;
224
if ( e->button() == Qt::MidButton && item != 0 )
229
_view->op()->emitMiddleButtonClicked( item );
235
bool KrMouseHandler::mouseDoubleClickEvent( QMouseEvent *e )
237
CANCEL_TWO_CLICK_RENAME;
239
KrViewItem * item = _view->getKrViewItemAt( e->pos() );
242
if( e->button() == Qt::LeftButton && item != 0 )
245
QString tmp = item->name();
246
_view->op()->emitExecuted(tmp);
252
bool KrMouseHandler::mouseMoveEvent( QMouseEvent *e )
254
KrViewItem * item = _view->getKrViewItemAt( e->pos() );
255
if ( ( _singleClicked || _renameTimer.isActive() ) && item != _singleClickedItem )
256
CANCEL_TWO_CLICK_RENAME;
261
QString desc = item->description();
262
_view->op()->emitItemDescription(desc);
264
if ( _dragStartPos != QPoint( -1, -1 ) &&
265
( e->buttons() & Qt::LeftButton ) && ( _dragStartPos - e->pos() ).manhattanLength() > QApplication::startDragDistance() )
267
_view->op()->startDrag();
271
if (KrSelectionMode::getSelectionHandler()->rightButtonPreservesSelection()
272
&& KrSelectionMode::getSelectionHandler()->rightButtonSelects()
273
&& KrSelectionMode::getSelectionHandler()->showContextMenu() >= 0 && e->buttons() == Qt::RightButton)
276
if (item != _rightClickedItem && item && _rightClickedItem)
278
_view->selectRegion( item, _rightClickedItem, _rightClickSelects );
279
_rightClickedItem = item;
280
_view->setCurrentKrViewItem( item );
281
_contextMenuTimer.stop();
288
bool KrMouseHandler::wheelEvent ( QWheelEvent * )
290
if( !_view->isFocused() )
291
_view->op()->emitNeedFocus();
28
KrMouseHandler::KrMouseHandler(KrView * view, int contextMenuShift) : _view(view), _rightClickedItem(0),
29
_contextMenuTimer(), _contextMenuShift(contextMenuShift), _singleClicked(false), _singleClickTime(),
30
_renameTimer(), _dragStartPos(-1, -1), _emptyContextMenu(false)
32
KConfigGroup grpSvr(krConfig, "Look&Feel");
33
// decide on single click/double click selection
34
_singleClick = grpSvr.readEntry("Single Click Selects", _SingleClickSelects) && KGlobalSettings::singleClick();
35
connect(&_contextMenuTimer, SIGNAL(timeout()), this, SLOT(showContextMenu()));
36
connect(&_renameTimer, SIGNAL(timeout()), this, SIGNAL(renameCurrentItem()));
39
bool KrMouseHandler::mousePressEvent(QMouseEvent *e)
41
_rightClickedItem = _clickedItem = 0;
42
KrViewItem * item = _view->getKrViewItemAt(e->pos());
43
if (!_view->isFocused())
44
_view->op()->emitNeedFocus();
45
if (e->button() == Qt::LeftButton) {
46
_dragStartPos = e->pos();
47
if (e->modifiers() == Qt::NoModifier) {
49
if (KrSelectionMode::getSelectionHandler()->leftButtonSelects()) {
50
if (KrSelectionMode::getSelectionHandler()->leftButtonPreservesSelection())
51
item->setSelected(!item->isSelected());
53
if (item->isSelected())
56
// clear the current selection
57
_view->changeSelection(KRQuery("*"), false, true);
58
item->setSelected(true);
62
_view->setCurrentKrViewItem(item);
66
} else if (e->modifiers() == Qt::ControlModifier) {
67
if (item && (KrSelectionMode::getSelectionHandler()->shiftCtrlLeftButtonSelects() ||
68
KrSelectionMode::getSelectionHandler()->leftButtonSelects())) {
69
item->setSelected(!item->isSelected());
72
_view->setCurrentKrViewItem(item);
75
} else if (e->modifiers() == Qt::ShiftModifier) {
76
if (item && (KrSelectionMode::getSelectionHandler()->shiftCtrlLeftButtonSelects() ||
77
KrSelectionMode::getSelectionHandler()->leftButtonSelects())) {
78
KrViewItem * current = _view->getCurrentKrViewItem();
80
_view->selectRegion(item, current, true);
83
_view->setCurrentKrViewItem(item);
88
if (e->button() == Qt::RightButton) {
89
//dragStartPos = e->pos();
90
if (e->modifiers() == Qt::NoModifier) {
92
if (KrSelectionMode::getSelectionHandler()->rightButtonSelects()) {
93
if (KrSelectionMode::getSelectionHandler()->rightButtonPreservesSelection()) {
94
if (KrSelectionMode::getSelectionHandler()->showContextMenu() >= 0) {
95
_rightClickSelects = !item->isSelected();
96
_rightClickedItem = item;
98
item->setSelected(!item->isSelected());
100
if (item->isSelected()) {
103
// clear the current selection
104
_view->changeSelection(KRQuery("*"), false, true);
105
item->setSelected(true);
109
_view->setCurrentKrViewItem(item);
111
handleContextMenu(item, e->globalPos());
114
} else if (e->modifiers() == Qt::ControlModifier) {
115
if (item && (KrSelectionMode::getSelectionHandler()->shiftCtrlRightButtonSelects() ||
116
KrSelectionMode::getSelectionHandler()->rightButtonSelects())) {
117
item->setSelected(!item->isSelected());
120
_view->setCurrentKrViewItem(item);
123
} else if (e->modifiers() == Qt::ShiftModifier) {
124
if (item && (KrSelectionMode::getSelectionHandler()->shiftCtrlRightButtonSelects() ||
125
KrSelectionMode::getSelectionHandler()->rightButtonSelects())) {
126
KrViewItem * current = _view->getCurrentKrViewItem();
128
_view->selectRegion(item, current, true);
131
_view->setCurrentKrViewItem(item);
139
bool KrMouseHandler::mouseReleaseEvent(QMouseEvent *e)
141
if (e->button() == Qt::LeftButton)
142
_dragStartPos = QPoint(-1, -1);
143
KrViewItem * item = _view->getKrViewItemAt(e->pos());
145
if (item && item == _clickedItem) {
146
if (((e->button() == Qt::LeftButton) && (e->modifiers() == Qt::NoModifier) &&
147
(KrSelectionMode::getSelectionHandler()->leftButtonSelects()) &&
148
!(KrSelectionMode::getSelectionHandler()->leftButtonPreservesSelection())) ||
149
((e->button() == Qt::RightButton) && (e->modifiers() == Qt::NoModifier) &&
150
(KrSelectionMode::getSelectionHandler()->rightButtonSelects()) &&
151
!(KrSelectionMode::getSelectionHandler()->rightButtonPreservesSelection()))) {
152
// clear the current selection
153
_view->changeSelection(KRQuery("*"), false, true);
154
item->setSelected(true);
158
if (e->button() == Qt::RightButton) {
159
_rightClickedItem = 0;
160
_contextMenuTimer.stop();
162
if (_singleClick && e->button() == Qt::LeftButton) {
163
CANCEL_TWO_CLICK_RENAME;
167
QString tmp = item->name();
168
_view->op()->emitExecuted(tmp);
170
} else if (!_singleClick && e->button() == Qt::LeftButton) {
171
if (item && e->modifiers() == Qt::NoModifier) {
172
if (_singleClicked && !_renameTimer.isActive() && _singleClickedItem == item) {
173
KSharedConfigPtr config = KGlobal::config();
174
KConfigGroup group(krConfig, "KDE");
175
int doubleClickInterval = group.readEntry("DoubleClickInterval", 400);
177
int msecsFromLastClick = _singleClickTime.msecsTo(QTime::currentTime());
179
if (msecsFromLastClick > doubleClickInterval && msecsFromLastClick < 5 * doubleClickInterval) {
180
_singleClicked = false;
181
_renameTimer.setSingleShot(true);
182
_renameTimer.start(doubleClickInterval);
187
CANCEL_TWO_CLICK_RENAME;
188
_singleClicked = true;
189
_singleClickedItem = item;
190
_singleClickTime = QTime::currentTime();
196
CANCEL_TWO_CLICK_RENAME;
198
if (e->button() == Qt::MidButton && item != 0) {
202
_view->op()->emitMiddleButtonClicked(item);
208
bool KrMouseHandler::mouseDoubleClickEvent(QMouseEvent *e)
210
CANCEL_TWO_CLICK_RENAME;
212
KrViewItem * item = _view->getKrViewItemAt(e->pos());
215
if (e->button() == Qt::LeftButton && item != 0) {
217
QString tmp = item->name();
218
_view->op()->emitExecuted(tmp);
224
bool KrMouseHandler::mouseMoveEvent(QMouseEvent *e)
226
KrViewItem * item = _view->getKrViewItemAt(e->pos());
227
if ((_singleClicked || _renameTimer.isActive()) && item != _singleClickedItem)
228
CANCEL_TWO_CLICK_RENAME;
233
QString desc = item->description();
234
_view->op()->emitItemDescription(desc);
236
if (_dragStartPos != QPoint(-1, -1) &&
237
(e->buttons() & Qt::LeftButton) && (_dragStartPos - e->pos()).manhattanLength() > QApplication::startDragDistance()) {
238
_view->op()->startDrag();
242
if (KrSelectionMode::getSelectionHandler()->rightButtonPreservesSelection()
243
&& KrSelectionMode::getSelectionHandler()->rightButtonSelects()
244
&& KrSelectionMode::getSelectionHandler()->showContextMenu() >= 0 && e->buttons() == Qt::RightButton) {
246
if (item != _rightClickedItem && item && _rightClickedItem) {
247
_view->selectRegion(item, _rightClickedItem, _rightClickSelects);
248
_rightClickedItem = item;
249
_view->setCurrentKrViewItem(item);
250
_contextMenuTimer.stop();
257
bool KrMouseHandler::wheelEvent(QWheelEvent *)
259
if (!_view->isFocused())
260
_view->op()->emitNeedFocus();
295
264
void KrMouseHandler::showContextMenu()
297
if (_rightClickedItem)
298
_rightClickedItem->setSelected(true);
299
if( _emptyContextMenu )
300
_view->op()->emitEmptyContextMenu( _contextMenuPoint );
302
_view->op()->emitContextMenu( _contextMenuPoint );
305
void KrMouseHandler::handleContextMenu( KrViewItem * it, const QPoint & pos ) {
306
if ( !_view->isFocused() )
307
_view->op()->emitNeedFocus();
308
int i = KrSelectionMode::getSelectionHandler()->showContextMenu();
309
_contextMenuPoint = QPoint( pos.x(), pos.y() - _contextMenuShift );
311
if ( !it || it->isDummy() )
312
_view->op()->emitEmptyContextMenu( _contextMenuPoint );
314
_view->setCurrentKrViewItem( it );
315
_view->op()->emitContextMenu( _contextMenuPoint );
319
_emptyContextMenu = !it || it->isDummy();
320
_contextMenuTimer.setSingleShot( true );
321
_contextMenuTimer.start(i);
325
void KrMouseHandler::otherEvent( QEvent * e ) {
326
switch ( e->type() ) {
328
case QEvent::MouseMove:
329
case QEvent::MouseButtonPress:
330
case QEvent::MouseButtonRelease:
333
CANCEL_TWO_CLICK_RENAME;
266
if (_rightClickedItem)
267
_rightClickedItem->setSelected(true);
268
if (_emptyContextMenu)
269
_view->op()->emitEmptyContextMenu(_contextMenuPoint);
271
_view->op()->emitContextMenu(_contextMenuPoint);
274
void KrMouseHandler::handleContextMenu(KrViewItem * it, const QPoint & pos)
276
if (!_view->isFocused())
277
_view->op()->emitNeedFocus();
278
int i = KrSelectionMode::getSelectionHandler()->showContextMenu();
279
_contextMenuPoint = QPoint(pos.x(), pos.y() - _contextMenuShift);
281
if (!it || it->isDummy())
282
_view->op()->emitEmptyContextMenu(_contextMenuPoint);
284
_view->setCurrentKrViewItem(it);
285
_view->op()->emitContextMenu(_contextMenuPoint);
288
_emptyContextMenu = !it || it->isDummy();
289
_contextMenuTimer.setSingleShot(true);
290
_contextMenuTimer.start(i);
294
void KrMouseHandler::otherEvent(QEvent * e)
298
case QEvent::MouseMove:
299
case QEvent::MouseButtonPress:
300
case QEvent::MouseButtonRelease:
303
CANCEL_TWO_CLICK_RENAME;
337
307
void KrMouseHandler::cancelTwoClickRename()
339
CANCEL_TWO_CLICK_RENAME;
309
CANCEL_TWO_CLICK_RENAME;
342
312
bool KrMouseHandler::dragEnterEvent(QDragEnterEvent *e)
344
KUrl::List URLs = KUrl::List::fromMimeData( e->mimeData() );
345
e->setAccepted( !URLs.isEmpty() );
314
KUrl::List URLs = KUrl::List::fromMimeData(e->mimeData());
315
e->setAccepted(!URLs.isEmpty());
349
319
bool KrMouseHandler::dragMoveEvent(QDragMoveEvent *e)
351
KUrl::List URLs = KUrl::List::fromMimeData( e->mimeData() );
352
e->setAccepted( !URLs.isEmpty() );
321
KUrl::List URLs = KUrl::List::fromMimeData(e->mimeData());
322
e->setAccepted(!URLs.isEmpty());
356
326
bool KrMouseHandler::dragLeaveEvent(QDragLeaveEvent *e)
361
bool KrMouseHandler::dropEvent ( QDropEvent *e )
331
bool KrMouseHandler::dropEvent(QDropEvent *e)
363
_view->op()->emitGotDrop( e );
333
_view->op()->emitGotDrop(e);