diff options
author | Francois Ferrand <thetypz@gmail.com> | 2012-03-12 17:38:54 +0100 |
---|---|---|
committer | Leandro Melo <leandro.melo@nokia.com> | 2012-06-05 12:08:00 +0200 |
commit | 6defb83d0362be6b8910b81733c7f4d7895c6b2d (patch) | |
tree | 206f307707fae72a76f97f0ca11e8de47a68ab19 /src/plugins/texteditor/circularclipboardassist.cpp | |
parent | 80180ba714e3945c6e23f2c1eec38c4f2fea3ee9 (diff) |
TextEditor: menu for pasting from clipboard history.
Add new action to show a menu of recent clipboard history. When an item
is selected, the item is pasted.
Change-Id: Id7e1a90730404fb63762bf1f20678484ec34cd2b
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
Diffstat (limited to 'src/plugins/texteditor/circularclipboardassist.cpp')
-rw-r--r-- | src/plugins/texteditor/circularclipboardassist.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/plugins/texteditor/circularclipboardassist.cpp b/src/plugins/texteditor/circularclipboardassist.cpp new file mode 100644 index 0000000000..8ba1f9bb81 --- /dev/null +++ b/src/plugins/texteditor/circularclipboardassist.cpp @@ -0,0 +1,127 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ + +#include "circularclipboardassist.h" +#include "codeassist/iassistprovider.h" +#include "codeassist/iassistinterface.h" +#include "codeassist/iassistprocessor.h" +#include "codeassist/iassistproposal.h" +#include "codeassist/basicproposalitem.h" +#include "codeassist/basicproposalitemlistmodel.h" +#include "codeassist/genericproposal.h" +#include "basetexteditor.h" +#include "circularclipboard.h" + +#include <coreplugin/coreconstants.h> + +#include <QApplication> +#include <QClipboard> + +using namespace TextEditor; +using namespace TextEditor::Internal; + +namespace TextEditor { +namespace Internal { + +class ClipboardProposalItem: public BasicProposalItem { +public: + enum { maxLen = 80 }; + + ClipboardProposalItem(QSharedPointer<const QMimeData> mimeData): m_mimeData(mimeData) + { + QString text = mimeData->text().simplified(); + if (text.length() > maxLen) { + text.truncate(maxLen); + text.append(QLatin1String("...")); + } + setText(text); + } + + virtual void apply(BaseTextEditor *editor, int /*basePosition*/) const + { + BaseTextEditorWidget *editwidget = editor->editorWidget(); + + //Move to last in circular clipboard + if (CircularClipboard * clipboard = CircularClipboard::instance()) { + clipboard->collect(m_mimeData); + clipboard->toLastCollect(); + } + + //Copy the selected item + QApplication::clipboard()->setMimeData(editwidget->duplicateMimeData(m_mimeData.data())); + + //Paste + editwidget->paste(); + } + +private: + QSharedPointer<const QMimeData> m_mimeData; +}; + +class ClipboardAssistProcessor: public IAssistProcessor +{ +public: + IAssistProposal *perform(const IAssistInterface *interface) + { + if (!interface) + return 0; + + QScopedPointer<const IAssistInterface> assistInterface(interface); + + QIcon icon = QIcon::fromTheme(QLatin1String("edit-paste"), QIcon(QLatin1String(Core::Constants::ICON_PASTE))).pixmap(16); + CircularClipboard * clipboard = CircularClipboard::instance(); + QList<BasicProposalItem *> items; + for (int i = 0; i < clipboard->size(); ++i) { + QSharedPointer<const QMimeData> data = clipboard->next(); + + BasicProposalItem *item = new ClipboardProposalItem(data); + item->setIcon(icon); + item->setOrder(clipboard->size() - 1 - i); + items.append(item); + } + + return new GenericProposal(interface->position(), new BasicProposalItemListModel(items)); + } +}; + +} // namespace Internal +} // namespace TextEditor + +bool ClipboardAssistProvider::supportsEditor(const Core::Id &/*editorId*/) const +{ + return true; +} + +IAssistProcessor *ClipboardAssistProvider::createProcessor() const +{ + return new ClipboardAssistProcessor; +} |