From a178971835f7e6788e9e1ff24bd2991b65958fa5 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Sat, 4 Mar 2023 09:00:54 +0100 Subject: [PATCH] Add Copy to Clipboard button for file paths --- .../cafPdmUiCore/Resources/caf.qrc | 1 + .../cafPdmUiCore/Resources/duplicate.svg | 1 + .../cafPdmUiFilePathEditor.cpp | 22 ++++++++++++++++++- .../cafUserInterface/cafPdmUiFilePathEditor.h | 2 ++ 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/Resources/duplicate.svg diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/Resources/caf.qrc b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/Resources/caf.qrc index 5675d88a0c..75c375085f 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/Resources/caf.qrc +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/Resources/caf.qrc @@ -2,5 +2,6 @@ Down16x16.png Up16x16.png + duplicate.svg diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/Resources/duplicate.svg b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/Resources/duplicate.svg new file mode 100644 index 0000000000..8dd77938c6 --- /dev/null +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/Resources/duplicate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiFilePathEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiFilePathEditor.cpp index 23b28ad6f2..4f601bc12c 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiFilePathEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiFilePathEditor.cpp @@ -46,6 +46,7 @@ #include "cafQShortenedLabel.h" #include +#include #include #include #include @@ -69,7 +70,7 @@ void PdmUiFilePathEditor::configureAndUpdateUi( const QString& uiConfigName ) PdmUiLineEditor::updateLineEditFromReadOnlyState( m_lineEdit, uiField()->isUiReadOnly( uiConfigName ) ); m_lineEdit->setToolTip( uiField()->uiToolTip( uiConfigName ) ); - m_button->setEnabled( !uiField()->isUiReadOnly( uiConfigName ) ); + m_button->setHidden( uiField()->isUiReadOnly( uiConfigName ) ); caf::PdmUiObjectHandle* uiObject = uiObj( uiField()->fieldHandle()->ownerObject() ); if ( uiObject ) @@ -102,10 +103,17 @@ QWidget* PdmUiFilePathEditor::createEditorWidget( QWidget* parent ) m_button->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Preferred ) ); m_button->setText( QLatin1String( "..." ) ); + m_copyToClipboardButton = new QToolButton( parent ); + m_copyToClipboardButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Preferred ) ); + m_copyToClipboardButton->setToolTip( QLatin1String( "Copy to Clipboard" ) ); + m_copyToClipboardButton->setIcon( QIcon( ":/caf/duplicate.svg" ) ); + layout->addWidget( m_lineEdit ); layout->addWidget( m_button ); + layout->addWidget( m_copyToClipboardButton ); connect( m_button, SIGNAL( clicked() ), this, SLOT( fileSelectionClicked() ) ); + connect( m_copyToClipboardButton, SIGNAL( clicked() ), this, SLOT( copyToClipboard() ) ); connect( m_lineEdit, SIGNAL( editingFinished() ), this, SLOT( slotEditingFinished() ) ); return placeholder; @@ -217,4 +225,16 @@ void PdmUiFilePathEditor::fileSelectionClicked() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiFilePathEditor::copyToClipboard() +{ + QClipboard* clipboard = QApplication::clipboard(); + if ( clipboard ) + { + clipboard->setText( m_lineEdit->text() ); + } +} + } // end namespace caf diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiFilePathEditor.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiFilePathEditor.h index 9049ec8d2b..8871258010 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiFilePathEditor.h +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiFilePathEditor.h @@ -95,11 +95,13 @@ protected: protected slots: void slotEditingFinished(); void fileSelectionClicked(); + void copyToClipboard(); private: QPointer m_lineEdit; QPointer m_label; QPointer m_button; + QPointer m_copyToClipboardButton; PdmUiFilePathEditorAttribute m_attributes; };