diff --git a/src/lib_gui/qt/element/code/QtCodeArea.cpp b/src/lib_gui/qt/element/code/QtCodeArea.cpp index 28803d3e..bbdbd070 100644 --- a/src/lib_gui/qt/element/code/QtCodeArea.cpp +++ b/src/lib_gui/qt/element/code/QtCodeArea.cpp @@ -737,6 +737,14 @@ void QtCodeArea::activateLocationId(Id locationId, bool fromMouse) } } +void QtCodeArea::copySelection() +{ + if (textCursor().hasSelection()) + { + copy(); + } +} + void QtCodeArea::resizeEvent(QResizeEvent* e) { QPlainTextEdit::resizeEvent(e); diff --git a/src/lib_gui/qt/element/code/QtCodeArea.h b/src/lib_gui/qt/element/code/QtCodeArea.h index b7a180dd..b43557e3 100644 --- a/src/lib_gui/qt/element/code/QtCodeArea.h +++ b/src/lib_gui/qt/element/code/QtCodeArea.h @@ -94,6 +94,8 @@ public: bool moveFocusInLine(size_t lineNumber, Id locationId, bool forward); void activateLocationId(Id locationId, bool fromMouse); + void copySelection(); + protected: virtual void resizeEvent(QResizeEvent* event) override; virtual void mouseReleaseEvent(QMouseEvent* event) override; diff --git a/src/lib_gui/qt/element/code/QtCodeFile.cpp b/src/lib_gui/qt/element/code/QtCodeFile.cpp index 5cbe68f7..6e418a4b 100644 --- a/src/lib_gui/qt/element/code/QtCodeFile.cpp +++ b/src/lib_gui/qt/element/code/QtCodeFile.cpp @@ -404,6 +404,14 @@ void QtCodeFile::focusBottom() } } +void QtCodeFile::copySelection() +{ + for (QtCodeSnippet* snippet: m_snippets) + { + snippet->copySelection(); + } +} + void QtCodeFile::clickedMinimizeButton() { MessageChangeFileView msg( diff --git a/src/lib_gui/qt/element/code/QtCodeFile.h b/src/lib_gui/qt/element/code/QtCodeFile.h index 5d8438af..47b83eb4 100644 --- a/src/lib_gui/qt/element/code/QtCodeFile.h +++ b/src/lib_gui/qt/element/code/QtCodeFile.h @@ -71,6 +71,8 @@ public: void focusTop(); void focusBottom(); + void copySelection(); + public slots: void clickedMinimizeButton(); void clickedSnippetButton(); diff --git a/src/lib_gui/qt/element/code/QtCodeFileList.cpp b/src/lib_gui/qt/element/code/QtCodeFileList.cpp index 0ee37743..0f788ca1 100644 --- a/src/lib_gui/qt/element/code/QtCodeFileList.cpp +++ b/src/lib_gui/qt/element/code/QtCodeFileList.cpp @@ -370,6 +370,14 @@ void QtCodeFileList::moveFocus(const CodeFocusHandler::Focus& focus, CodeFocusHa } } +void QtCodeFileList::copySelection() +{ + for (QtCodeFile* file: m_files) + { + file->copySelection(); + } +} + void QtCodeFileList::maximizeFirstFile() { if (m_files.size()) diff --git a/src/lib_gui/qt/element/code/QtCodeFileList.h b/src/lib_gui/qt/element/code/QtCodeFileList.h index 32ad69c9..8ec1f8f7 100644 --- a/src/lib_gui/qt/element/code/QtCodeFileList.h +++ b/src/lib_gui/qt/element/code/QtCodeFileList.h @@ -62,6 +62,8 @@ public: void setFocusOnTop() override; void moveFocus(const CodeFocusHandler::Focus& focus, CodeFocusHandler::Direction direction) override; + void copySelection() override; + void maximizeFirstFile(); std::pair getFirstFileWithActiveLocationId() const; diff --git a/src/lib_gui/qt/element/code/QtCodeFileSingle.cpp b/src/lib_gui/qt/element/code/QtCodeFileSingle.cpp index 0581d331..9388c284 100644 --- a/src/lib_gui/qt/element/code/QtCodeFileSingle.cpp +++ b/src/lib_gui/qt/element/code/QtCodeFileSingle.cpp @@ -261,6 +261,14 @@ void QtCodeFileSingle::moveFocus( } } +void QtCodeFileSingle::copySelection() +{ + if (m_area) + { + m_area->copySelection(); + } +} + const FilePath& QtCodeFileSingle::getCurrentFilePath() const { return m_currentFilePath; diff --git a/src/lib_gui/qt/element/code/QtCodeFileSingle.h b/src/lib_gui/qt/element/code/QtCodeFileSingle.h index f6d89c09..ed5847e8 100644 --- a/src/lib_gui/qt/element/code/QtCodeFileSingle.h +++ b/src/lib_gui/qt/element/code/QtCodeFileSingle.h @@ -56,6 +56,8 @@ public: void setFocusOnTop() override; void moveFocus(const CodeFocusHandler::Focus& focus, CodeFocusHandler::Direction direction) override; + void copySelection() override; + const FilePath& getCurrentFilePath() const; bool hasFileCached(const FilePath& filePath) const; diff --git a/src/lib_gui/qt/element/code/QtCodeNavigateable.h b/src/lib_gui/qt/element/code/QtCodeNavigateable.h index 07867873..6982ab80 100644 --- a/src/lib_gui/qt/element/code/QtCodeNavigateable.h +++ b/src/lib_gui/qt/element/code/QtCodeNavigateable.h @@ -44,6 +44,8 @@ public: virtual void moveFocus( const CodeFocusHandler::Focus& focus, CodeFocusHandler::Direction direction) = 0; + virtual void copySelection() = 0; + protected: void ensureWidgetVisibleAnimated( const QWidget* parentWidget, diff --git a/src/lib_gui/qt/element/code/QtCodeNavigator.cpp b/src/lib_gui/qt/element/code/QtCodeNavigator.cpp index db21ef61..f8430073 100644 --- a/src/lib_gui/qt/element/code/QtCodeNavigator.cpp +++ b/src/lib_gui/qt/element/code/QtCodeNavigator.cpp @@ -785,6 +785,13 @@ void QtCodeNavigator::keyPressEvent(QKeyEvent* event) } break; + case Qt::Key_C: + if (ctrl && !alt && !shift) + { + m_current->copySelection(); + } + break; + default: QWidget::keyPressEvent(event); return; diff --git a/src/lib_gui/qt/element/code/QtCodeSnippet.cpp b/src/lib_gui/qt/element/code/QtCodeSnippet.cpp index 430086ed..8e3204b7 100644 --- a/src/lib_gui/qt/element/code/QtCodeSnippet.cpp +++ b/src/lib_gui/qt/element/code/QtCodeSnippet.cpp @@ -227,6 +227,11 @@ void QtCodeSnippet::focusBottom() } } +void QtCodeSnippet::copySelection() +{ + m_codeArea->copySelection(); +} + void QtCodeSnippet::ensureLocationIdVisible(Id locationId, bool animated) { m_codeArea->ensureLocationIdVisible(locationId, width(), animated); diff --git a/src/lib_gui/qt/element/code/QtCodeSnippet.h b/src/lib_gui/qt/element/code/QtCodeSnippet.h index bba05b4b..387469fa 100644 --- a/src/lib_gui/qt/element/code/QtCodeSnippet.h +++ b/src/lib_gui/qt/element/code/QtCodeSnippet.h @@ -59,6 +59,8 @@ public: void focusTop(); void focusBottom(); + void copySelection(); + void ensureLocationIdVisible(Id locationId, bool animated); private slots: