~ubuntu-branches/ubuntu/lucid/kdebase/lucid

« back to all changes in this revision

Viewing changes to apps/plasma/applets/folderview/itemeditor.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Thomas
  • Date: 2009-12-02 13:28:20 UTC
  • mto: This revision was merged to the branch mainline in revision 258.
  • Revision ID: james.westby@ubuntu.com-20091202132820-tpxn348l9frx5zd5
Tags: upstream-4.3.80
Import upstream version 4.3.80

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *   Copyright © 2009 Fredrik Höglund <fredrik@kde.org>
 
3
 *
 
4
 *   This library is free software; you can redistribute it and/or
 
5
 *   modify it under the terms of the GNU Library General Public
 
6
 *   License as published by the Free Software Foundation; either
 
7
 *   version 2 of the License, or (at your option) any later version.
 
8
 *
 
9
 *   This library 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 GNU
 
12
 *   Library General Public License for more details.
 
13
 *
 
14
 *   You should have received a copy of the GNU Library General Public License
 
15
 *   along with this library; see the file COPYING.LIB.  If not, write to
 
16
 *   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 
17
 *   Boston, MA 02110-1301, USA.
 
18
 */
 
19
 
 
20
#include "itemeditor.h"
 
21
 
 
22
#include <KTextEdit>
 
23
#include <QAbstractItemView>
 
24
#include <QAbstractItemModel>
 
25
#include <QAbstractItemDelegate>
 
26
 
 
27
#include <KMimeType>
 
28
 
 
29
 
 
30
ItemEditor::ItemEditor(QGraphicsWidget *parent, const QStyleOptionViewItemV4 &option,
 
31
                       const QModelIndex &index)
 
32
    : QGraphicsProxyWidget(parent),
 
33
      m_index(index)
 
34
{
 
35
    // Create the editor
 
36
    m_editor = new KTextEdit();
 
37
    m_editor->setAttribute(Qt::WA_NoSystemBackground);
 
38
    m_editor->setAcceptRichText(false);
 
39
    m_editor->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
 
40
    m_editor->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
 
41
    m_editor->setAlignment(option.displayAlignment);
 
42
    m_editor->installEventFilter(this);
 
43
 
 
44
    // Set the editor data
 
45
    const QVariant value = index.data(Qt::EditRole);
 
46
    const QString text = value.toString();
 
47
    m_editor->insertPlainText(text);
 
48
    m_editor->selectAll();
 
49
 
 
50
    const QString extension = KMimeType::extractKnownExtension(text);
 
51
    if (!extension.isEmpty()) {
 
52
        // The filename contains an extension. Assure that only the filename
 
53
        // gets selected.
 
54
        const int selectionLength = text.length() - extension.length() - 1;
 
55
        QTextCursor cursor = m_editor->textCursor();
 
56
        cursor.movePosition(QTextCursor::StartOfBlock);
 
57
        cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, selectionLength);
 
58
        m_editor->setTextCursor(cursor);
 
59
    }
 
60
 
 
61
    setWidget(m_editor);
 
62
}
 
63
 
 
64
ItemEditor::~ItemEditor()
 
65
{
 
66
}
 
67
 
 
68
void ItemEditor::commitData()
 
69
{
 
70
    const_cast<QAbstractItemModel*>(m_index.model())->setData(m_index, m_editor->toPlainText(), Qt::EditRole);
 
71
}
 
72
 
 
73
bool ItemEditor::eventFilter(QObject *watched, QEvent *event)
 
74
{
 
75
    KTextEdit *editor = qobject_cast<KTextEdit*>(watched);
 
76
    if (!editor)
 
77
        return false;
 
78
 
 
79
    switch (event->type())
 
80
    {
 
81
    case QEvent::KeyPress:
 
82
    {
 
83
        QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
 
84
        switch (keyEvent->key())
 
85
        {
 
86
        case Qt::Key_Tab:
 
87
        case Qt::Key_Backtab:
 
88
            commitData();
 
89
            emit closeEditor(this, QAbstractItemDelegate::NoHint);
 
90
            return true;
 
91
 
 
92
        case Qt::Key_Enter:
 
93
        case Qt::Key_Return:
 
94
            if (!editor->toPlainText().isEmpty()) {
 
95
                commitData();
 
96
                emit closeEditor(this, QAbstractItemDelegate::SubmitModelCache);
 
97
            }
 
98
            return true;
 
99
 
 
100
        case Qt::Key_Escape:
 
101
            emit closeEditor(this, QAbstractItemDelegate::RevertModelCache);
 
102
            return true;
 
103
 
 
104
        default:
 
105
            return false;
 
106
        } // switch (keyEvent->key())
 
107
    } // case QEvent::KeyPress
 
108
 
 
109
    case QEvent::FocusOut:
 
110
    {
 
111
        commitData();
 
112
        emit closeEditor(this, QAbstractItemDelegate::NoHint);
 
113
        return true;
 
114
    }
 
115
 
 
116
    default:
 
117
        return false;
 
118
    } // switch (event->type())
 
119
}
 
120
 
 
121
#include "itemeditor.moc"
 
122