File indexing completed on 2024-04-28 05:52:36

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 }