File indexing completed on 2024-04-28 05:52:37
0001 /* 0002 This file is part of the Okteta Gui library, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2008-2009 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 "mousepaster.hpp" 0010 0011 // lib 0012 #include <bytearraycolumnview.hpp> 0013 #include <bytearraytableranges.hpp> 0014 #include <bytearraytablecursor.hpp> 0015 #include <bytearraytablelayout.hpp> 0016 // Qt 0017 #include <QMouseEvent> 0018 0019 namespace Okteta { 0020 0021 MousePaster::MousePaster(AbstractByteArrayView* view, AbstractMouseController* parent) 0022 : AbstractMouseController(view, parent) 0023 { 0024 } 0025 0026 MousePaster::~MousePaster() = default; 0027 0028 bool MousePaster::handleMousePressEvent(QMouseEvent* mouseEvent) 0029 { 0030 bool eventUsed = false; 0031 0032 if (mouseEvent->button() == Qt::MiddleButton && !mView->isReadOnly()) { 0033 mView->pauseCursor(); 0034 mView->finishByteEdit(); 0035 0036 ByteArrayTableRanges* tableRanges = mView->tableRanges(); 0037 tableRanges->removeSelection(); 0038 0039 if (tableRanges->isModified()) { 0040 mView->updateChanged(); 0041 mView->viewport()->setCursor(mView->isReadOnly() ? Qt::ArrowCursor : Qt::IBeamCursor); 0042 } 0043 mView->unpauseCursor(); 0044 0045 eventUsed = true; 0046 } 0047 0048 return eventUsed ? true : AbstractMouseController::handleMousePressEvent(mouseEvent); 0049 } 0050 0051 bool MousePaster::handleMouseReleaseEvent(QMouseEvent* mouseEvent) 0052 { 0053 bool eventUsed = false; 0054 // middle mouse button paste? 0055 if (mouseEvent->button() == Qt::MiddleButton && !mView->isReadOnly()) { 0056 const QPoint releasePoint = mView->viewportToColumns(mouseEvent->pos()); 0057 0058 mView->pauseCursor(); 0059 mView->finishByteEdit(); 0060 0061 mView->placeCursor(releasePoint); 0062 0063 ByteArrayTableRanges* tableRanges = mView->tableRanges(); 0064 ByteArrayTableCursor* tableCursor = mView->tableCursor(); 0065 // replace no selection? 0066 if (tableRanges->hasSelection() && !tableRanges->selectionIncludes(tableCursor->index())) { 0067 tableRanges->removeSelection(); 0068 } 0069 0070 mView->pasteFromClipboard(QClipboard::Selection); 0071 0072 mView->ensureCursorVisible(); 0073 0074 if (tableRanges->selectionJustStarted()) { 0075 tableRanges->removeSelection(); 0076 } 0077 0078 // ensure selection changes to be drawn TODO: create a insert/pasteAtCursor that leaves out drawing 0079 mView->updateChanged(); 0080 mView->unpauseCursor(); 0081 mView->emitSelectionSignals(); 0082 0083 eventUsed = true; 0084 } 0085 0086 return eventUsed ? true : AbstractMouseController::handleMouseReleaseEvent(mouseEvent); 0087 } 0088 0089 }