File indexing completed on 2024-05-12 13:56:03
0001 /* 0002 This file is part of the Okteta Gui library, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2019 Friedrich W. H. Kossebau <kossebau@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "clipboardcontroller.hpp" 0010 0011 // lib 0012 #include <abstractbytearrayview.hpp> 0013 #include <abstractbytearraymodel.hpp> 0014 #include <versionable.hpp> 0015 // KF 0016 #include <KLocalizedString> 0017 // Qt 0018 #include <QApplication> 0019 #include <QClipboard> 0020 #include <QKeyEvent> 0021 #include <QMenu> 0022 #include <QAction> 0023 0024 namespace Okteta { 0025 0026 ClipboardController::ClipboardController(AbstractByteArrayView* view, AbstractController* parent) 0027 : AbstractController(parent) 0028 , mView(view) 0029 { 0030 } 0031 0032 bool ClipboardController::handleKeyPress(QKeyEvent* keyEvent) 0033 { 0034 bool keyUsed = false; 0035 0036 if (keyEvent == QKeySequence::Copy) { 0037 mView->copy(); 0038 keyUsed = true; 0039 } else if (!mView->isReadOnly()) { 0040 if (keyEvent == QKeySequence::Cut) { 0041 if (!mView->isOverwriteMode()) { 0042 mView->cut(); 0043 keyUsed = true; 0044 } 0045 } else if (keyEvent == QKeySequence::Paste) { 0046 mView->paste(); 0047 keyUsed = true; 0048 } 0049 } 0050 0051 return keyUsed ? true : AbstractController::handleKeyPress(keyEvent); 0052 } 0053 0054 int ClipboardController::addContextMenuActions(QMenu* menu) 0055 { 0056 QAction* copyAction = menu->addAction(QIcon::fromTheme(QStringLiteral("edit-copy")), 0057 i18nc("@action:inmenu", "&Copy") + QLatin1Char('\t') + QKeySequence(QKeySequence::Copy).toString(QKeySequence::NativeText), 0058 mView, &AbstractByteArrayView::copy); 0059 copyAction->setEnabled(mView->hasSelectedData()); 0060 copyAction->setObjectName(QStringLiteral("edit-copy")); 0061 0062 if (mView->isReadOnly()) { 0063 return 1; 0064 } 0065 0066 QAction* cutAction = menu->addAction(QIcon::fromTheme(QStringLiteral("edit-cut")), 0067 i18nc("@action:inmenu", "Cu&t") + QLatin1Char('\t') + QKeySequence(QKeySequence::Cut).toString(QKeySequence::NativeText), 0068 mView, &AbstractByteArrayView::cut); 0069 const bool canCutData = mView->hasSelectedData() && !mView->isOverwriteMode(); 0070 cutAction->setEnabled(canCutData); 0071 cutAction->setObjectName(QStringLiteral("edit-cut")); 0072 0073 QAction* pasteAction = menu->addAction(QIcon::fromTheme(QStringLiteral("edit-paste")), 0074 i18nc("@action:inmenu", "&Paste") + QLatin1Char('\t') + QKeySequence(QKeySequence::Paste).toString(QKeySequence::NativeText), 0075 mView, &AbstractByteArrayView::paste); 0076 const QMimeData* clipboardMimeData = QApplication::clipboard()->mimeData(QClipboard::Clipboard); 0077 const bool canReadData = mView->canReadData(clipboardMimeData); 0078 pasteAction->setEnabled(canReadData); 0079 pasteAction->setObjectName(QStringLiteral("edit-paste")); 0080 0081 return 3; 0082 } 0083 0084 }