~ubuntu-branches/debian/sid/kde-baseapps/sid

« back to all changes in this revision

Viewing changes to dolphin/src/views/dolphinviewcontroller.cpp

  • Committer: Package Import Robot
  • Author(s): Modestas Vainius, Eshat Cakar, Pino Toscano
  • Date: 2012-06-09 22:18:08 UTC
  • mfrom: (4.2.1) (6.1.1 experimental)
  • Revision ID: package-import@ubuntu.com-20120609221808-h1l0ekd5qmb8nefr
Tags: 4:4.8.4-1
* New upstream release.

[ Eshat Cakar ]
* Add watch file.
* Bump kde-sc-dev-latest build dependency to version 4:4.8.4.
* Update installed files.

[ Pino Toscano ]
* Move files of the konqueror documentation from kde-baseapps-data to
  konqueror itself.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/***************************************************************************
2
 
 *   Copyright (C) 2010 by Peter Penz <peter.penz19@gmail.com>             *
3
 
 *                                                                         *
4
 
 *   This program is free software; you can redistribute it and/or modify  *
5
 
 *   it under the terms of the GNU General Public License as published by  *
6
 
 *   the Free Software Foundation; either version 2 of the License, or     *
7
 
 *   (at your option) any later version.                                   *
8
 
 *                                                                         *
9
 
 *   This program is distributed in the hope that it will be useful,       *
10
 
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11
 
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12
 
 *   GNU General Public License for more details.                          *
13
 
 *                                                                         *
14
 
 *   You should have received a copy of the GNU General Public License     *
15
 
 *   along with this program; if not, write to the                         *
16
 
 *   Free Software Foundation, Inc.,                                       *
17
 
 *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
18
 
 ***************************************************************************/
19
 
 
20
 
#include "dolphinviewcontroller.h"
21
 
#include "zoomlevelinfo.h"
22
 
 
23
 
#include <KDirModel>
24
 
#include <KFileItemActions>
25
 
#include <QAbstractProxyModel>
26
 
#include <QApplication>
27
 
#include <QClipboard>
28
 
#include <QDir>
29
 
 
30
 
Qt::MouseButtons DolphinViewController::m_mouseButtons = Qt::NoButton;
31
 
 
32
 
DolphinViewController::DolphinViewController(DolphinView* dolphinView) :
33
 
    QObject(dolphinView),
34
 
    m_dolphinView(dolphinView),
35
 
    m_itemView(0),
36
 
    m_versionControlActions()
37
 
{
38
 
}
39
 
 
40
 
DolphinViewController::~DolphinViewController()
41
 
{
42
 
}
43
 
 
44
 
const DolphinView* DolphinViewController::view() const
45
 
{
46
 
    return m_dolphinView;
47
 
}
48
 
 
49
 
void DolphinViewController::requestUrlChange(const KUrl& url)
50
 
{
51
 
    emit urlChangeRequested(url);
52
 
}
53
 
 
54
 
void DolphinViewController::setItemView(QAbstractItemView* view)
55
 
{
56
 
    if (m_itemView) {
57
 
        disconnect(m_itemView, SIGNAL(pressed(const QModelIndex&)),
58
 
                   this, SLOT(updateMouseButtonState()));
59
 
    }
60
 
 
61
 
    m_itemView = view;
62
 
 
63
 
    if (m_itemView) {
64
 
        // TODO: this is a workaround until  Qt-issue 176832 has been fixed
65
 
        connect(m_itemView, SIGNAL(pressed(const QModelIndex&)),
66
 
                this, SLOT(updateMouseButtonState()));
67
 
    }
68
 
}
69
 
 
70
 
QAbstractItemView* DolphinViewController::itemView() const
71
 
{
72
 
    return m_itemView;
73
 
}
74
 
 
75
 
void DolphinViewController::triggerContextMenuRequest(const QPoint& pos,
76
 
                                                  const QList<QAction*>& customActions)
77
 
{
78
 
    emit activated();
79
 
    emit requestContextMenu(pos, customActions);
80
 
}
81
 
 
82
 
void DolphinViewController::requestActivation()
83
 
{
84
 
    emit activated();
85
 
}
86
 
 
87
 
void DolphinViewController::indicateDroppedUrls(const KFileItem& destItem, QDropEvent* event)
88
 
{
89
 
    emit urlsDropped(destItem, m_dolphinView->url(), event);
90
 
}
91
 
 
92
 
 
93
 
void DolphinViewController::indicateSortingChange(DolphinView::Sorting sorting)
94
 
{
95
 
    emit sortingChanged(sorting);
96
 
}
97
 
 
98
 
void DolphinViewController::indicateSortOrderChange(Qt::SortOrder order)
99
 
{
100
 
    emit sortOrderChanged(order);
101
 
}
102
 
 
103
 
void DolphinViewController::indicateSortFoldersFirstChange(bool foldersFirst)
104
 
{
105
 
    emit sortFoldersFirstChanged(foldersFirst);
106
 
}
107
 
 
108
 
void DolphinViewController::indicateAdditionalInfoChange(const KFileItemDelegate::InformationList& info)
109
 
{
110
 
    emit additionalInfoChanged(info);
111
 
}
112
 
 
113
 
void DolphinViewController::setVersionControlActions(QList<QAction*> actions)
114
 
{
115
 
    m_versionControlActions = actions;
116
 
}
117
 
 
118
 
QList<QAction*> DolphinViewController::versionControlActions(const KFileItemList& items)
119
 
{
120
 
    emit requestVersionControlActions(items);
121
 
    // All view implementations are connected with the signal requestVersionControlActions()
122
 
    // (see ViewExtensionFactory) and will invoke DolphinViewController::setVersionControlActions(),
123
 
    // so that the context dependent actions can be returned.
124
 
    return m_versionControlActions;
125
 
}
126
 
 
127
 
void DolphinViewController::handleKeyPressEvent(QKeyEvent* event)
128
 
{
129
 
    if (!m_itemView) {
130
 
        return;
131
 
    }
132
 
 
133
 
    const QItemSelectionModel* selModel = m_itemView->selectionModel();
134
 
    const QModelIndex currentIndex = selModel->currentIndex();
135
 
    const bool trigger = currentIndex.isValid()
136
 
                         && ((event->key() == Qt::Key_Return) || (event->key() == Qt::Key_Enter))
137
 
                         && !selModel->selectedIndexes().isEmpty();
138
 
    if (!trigger) {
139
 
        return;
140
 
    }
141
 
 
142
 
    // Collect selected files and selected directories
143
 
    // as two separate lists.
144
 
    QModelIndexList dirQueue;
145
 
    const QModelIndexList indexList = selModel->selectedIndexes();
146
 
    KFileItemList fileOpenList;
147
 
    foreach (const QModelIndex& index, indexList) {
148
 
        if (itemForIndex(index).isDir()) {
149
 
            dirQueue << index;
150
 
        } else {
151
 
            fileOpenList << itemForIndex(index);
152
 
        }
153
 
    }
154
 
 
155
 
    // Handle selected files
156
 
    if (fileOpenList.count() == 1) {
157
 
        emit itemTriggered(fileOpenList.first());
158
 
    } else {
159
 
        KFileItemActions fileItemActions;
160
 
        fileItemActions.runPreferredApplications(fileOpenList, "DesktopEntryName != 'dolphin'");
161
 
    }
162
 
 
163
 
    // Handle selected directories
164
 
    if (dirQueue.count() == 1) {
165
 
        // Open directory in the view
166
 
        emit itemTriggered(itemForIndex(dirQueue[0]));
167
 
    } else {
168
 
        // Open directories in separate tabs
169
 
        foreach(const QModelIndex& dir, dirQueue) {
170
 
            emit tabRequested(itemForIndex(dir).url());
171
 
        }
172
 
    }
173
 
}
174
 
 
175
 
void DolphinViewController::replaceUrlByClipboard()
176
 
{
177
 
    const QClipboard* clipboard = QApplication::clipboard();
178
 
    QString text;
179
 
    if (clipboard->mimeData(QClipboard::Selection)->hasText()) {
180
 
        text = clipboard->mimeData(QClipboard::Selection)->text();
181
 
    } else if (clipboard->mimeData(QClipboard::Clipboard)->hasText()) {
182
 
        text = clipboard->mimeData(QClipboard::Clipboard)->text();
183
 
    }
184
 
    if (!text.isEmpty() && QDir::isAbsolutePath(text)) {
185
 
        m_dolphinView->setUrl(KUrl(text));
186
 
    }
187
 
}
188
 
 
189
 
void DolphinViewController::requestToolTipHiding()
190
 
{
191
 
    emit hideToolTip();
192
 
}
193
 
 
194
 
void DolphinViewController::emitItemTriggered(const KFileItem& item)
195
 
{
196
 
    emit itemTriggered(item);
197
 
}
198
 
 
199
 
KFileItem DolphinViewController::itemForIndex(const QModelIndex& index) const
200
 
{
201
 
    if (m_itemView) {
202
 
        QAbstractProxyModel* proxyModel = static_cast<QAbstractProxyModel*>(m_itemView->model());
203
 
        if (proxyModel) {
204
 
            KDirModel* dirModel = static_cast<KDirModel*>(proxyModel->sourceModel());
205
 
            const QModelIndex dirIndex = proxyModel->mapToSource(index);
206
 
            return dirModel->itemForIndex(dirIndex);
207
 
        }
208
 
    }
209
 
 
210
 
    return KFileItem();
211
 
}
212
 
 
213
 
void DolphinViewController::triggerItem(const QModelIndex& index)
214
 
{
215
 
    if (m_mouseButtons & Qt::LeftButton) {
216
 
        const KFileItem item = itemForIndex(index);
217
 
        if (index.isValid() && (index.column() == KDirModel::Name)) {
218
 
            emit itemTriggered(item);
219
 
        } else if (m_itemView) {
220
 
            m_itemView->clearSelection();
221
 
            emit itemEntered(KFileItem());
222
 
        }
223
 
    }
224
 
}
225
 
 
226
 
void DolphinViewController::requestTab(const QModelIndex& index)
227
 
{
228
 
    if (m_mouseButtons & Qt::MidButton) {
229
 
        const KFileItem item = itemForIndex(index);
230
 
        const bool validRequest = index.isValid() &&
231
 
                                  (index.column() == KDirModel::Name) &&
232
 
                                  (item.isDir() || m_dolphinView->isTabsForFilesEnabled());
233
 
        if (validRequest) {
234
 
            emit tabRequested(item.url());
235
 
        }
236
 
    }
237
 
}
238
 
 
239
 
void DolphinViewController::emitItemEntered(const QModelIndex& index)
240
 
{
241
 
    KFileItem item = itemForIndex(index);
242
 
    if (!item.isNull()) {
243
 
        emit itemEntered(item);
244
 
    }
245
 
}
246
 
 
247
 
void DolphinViewController::emitViewportEntered()
248
 
{
249
 
    emit viewportEntered();
250
 
}
251
 
 
252
 
void DolphinViewController::updateMouseButtonState()
253
 
{
254
 
    m_mouseButtons = QApplication::mouseButtons();
255
 
}
256
 
 
257
 
#include "dolphinviewcontroller.moc"