]> cloud.milkyroute.net Git - dolphin.git/blob - src/dolphindropcontroller.cpp
Fix the problem of the elements being rendered as hovered when a dragging was being...
[dolphin.git] / src / dolphindropcontroller.cpp
1 /***************************************************************************
2 * Copyright (C) 2006 by Peter Penz <peter.penz@gmx.at> *
3 * Copyright (C) 2007 by David Faure <faure@kde.org> *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
19 ***************************************************************************/
20
21 #include "dolphindropcontroller.h"
22 #include <klocale.h>
23 #include <kicon.h>
24 #include <QApplication>
25 #include <kdebug.h>
26 #include <kmenu.h>
27 #include <konq_operations.h>
28
29 // TODO replace with KonqOperations::doDrop [or move doDrop code into this class]
30 // Note that this means changing the DolphinDropController controller usage
31 // to "create with new and let it autodelete" instead of on stack, since doDrop is async.
32
33 DolphinDropController::DolphinDropController(QWidget* parentWidget)
34 : QObject(parentWidget), m_parentWidget(parentWidget)
35 {
36 }
37
38 DolphinDropController::~DolphinDropController()
39 {
40 }
41
42 void DolphinDropController::dropUrls(const KUrl::List& urls,
43 const KUrl& destination)
44 {
45 kDebug() << "Source" << urls;
46 kDebug() << "Destination:" << destination;
47
48 Qt::DropAction action = Qt::CopyAction;
49
50 Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers();
51 const bool shiftPressed = modifier & Qt::ShiftModifier;
52 const bool controlPressed = modifier & Qt::ControlModifier;
53 if (shiftPressed && controlPressed) {
54 // shortcut for 'Link Here' is used
55 action = Qt::LinkAction;
56 } else if (shiftPressed) {
57 // shortcut for 'Move Here' is used
58 action = Qt::MoveAction;
59 } else if (controlPressed) {
60 // shortcut for 'Copy Here' is used
61 action = Qt::CopyAction;
62 } else {
63 // open a context menu which offers the following actions:
64 // - Move Here
65 // - Copy Here
66 // - Link Here
67 // - Cancel
68
69 KMenu popup(m_parentWidget);
70
71 QString seq = QKeySequence(Qt::ShiftModifier).toString();
72 seq.chop(1); // chop superfluous '+'
73 QAction* moveAction = popup.addAction(KIcon("go-jump"),
74 i18nc("@action:inmenu",
75 "&Move Here\t<shortcut>%1</shortcut>", seq));
76
77 seq = QKeySequence(Qt::ControlModifier).toString();
78 seq.chop(1);
79 QAction* copyAction = popup.addAction(KIcon("edit-copy"),
80 i18nc("@action:inmenu",
81 "&Copy Here\t<shortcut>%1</shortcut>", seq));
82
83 seq = QKeySequence(Qt::ControlModifier + Qt::ShiftModifier).toString();
84 seq.chop(1);
85 QAction* linkAction = popup.addAction(KIcon("insert-link"),
86 i18nc("@action:inmenu",
87 "&Link Here\t<shortcut>%1</shortcut>", seq));
88
89 popup.addSeparator();
90 popup.addAction(KIcon("process-stop"), i18nc("@action:inmenu", "Cancel"));
91
92 QAction* activatedAction = popup.exec(QCursor::pos());
93 if (activatedAction == moveAction) {
94 action = Qt::MoveAction;
95 } else if (activatedAction == copyAction) {
96 action = Qt::CopyAction;
97 } else if (activatedAction == linkAction) {
98 action = Qt::LinkAction;
99 } else {
100 return;
101 }
102 }
103
104 switch (action) {
105 case Qt::MoveAction:
106 KonqOperations::copy(m_parentWidget, KonqOperations::MOVE, urls, destination);
107 emit doingOperation(KonqFileUndoManager::MOVE);
108 break;
109
110 case Qt::CopyAction:
111 KonqOperations::copy(m_parentWidget, KonqOperations::COPY, urls, destination);
112 emit doingOperation(KonqFileUndoManager::COPY);
113 break;
114
115 case Qt::LinkAction:
116 KonqOperations::copy(m_parentWidget, KonqOperations::LINK, urls, destination);
117 emit doingOperation(KonqFileUndoManager::LINK);
118 break;
119
120 default:
121 break;
122 }
123 }
124
125 #include "dolphindropcontroller.moc"