Skip to content

Commit f63d5ad

Browse files
committed
[FEATURE] Copy statistics panel content to clipboard button
1 parent eb7f755 commit f63d5ad

File tree

3 files changed

+57
-4
lines changed

3 files changed

+57
-4
lines changed

src/app/qgsstatisticalsummarydockwidget.cpp

+35-4
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@
1212
* (at your option) any later version. *
1313
* *
1414
***************************************************************************/
15-
#include "qgsstatisticalsummarydockwidget.h"
16-
#include "qgsstatisticalsummary.h"
17-
#include "qgsproject.h"
15+
1816
#include "qgisapp.h"
17+
#include "qgsclipboard.h"
1918
#include "qgsmapcanvas.h"
20-
#include "qgsvectorlayer.h"
19+
#include "qgsproject.h"
2120
#include "qgssettings.h"
21+
#include "qgsstatisticalsummarydockwidget.h"
22+
#include "qgsstatisticalsummary.h"
23+
#include "qgsvectorlayer.h"
2224

2325
#include <QTableWidget>
2426
#include <QAction>
@@ -93,6 +95,7 @@ QgsStatisticalSummaryDockWidget::QgsStatisticalSummaryDockWidget( QWidget *paren
9395
connect( mLayerComboBox, &QgsMapLayerComboBox::layerChanged, this, &QgsStatisticalSummaryDockWidget::layerChanged );
9496
connect( mFieldExpressionWidget, static_cast<void ( QgsFieldExpressionWidget::* )( const QString & )>( &QgsFieldExpressionWidget::fieldChanged ), this, &QgsStatisticalSummaryDockWidget::fieldChanged );
9597
connect( mSelectedOnlyCheckBox, &QAbstractButton::toggled, this, &QgsStatisticalSummaryDockWidget::refreshStatistics );
98+
connect( mButtonCopy, &QAbstractButton::clicked, this, &QgsStatisticalSummaryDockWidget::copyStatistics );
9699
connect( mButtonRefresh, &QAbstractButton::clicked, this, &QgsStatisticalSummaryDockWidget::refreshStatistics );
97100
connect( QgsProject::instance(), static_cast<void ( QgsProject::* )( const QStringList & )>( &QgsProject::layersWillBeRemoved ), this, &QgsStatisticalSummaryDockWidget::layersRemoved );
98101

@@ -121,6 +124,34 @@ void QgsStatisticalSummaryDockWidget::fieldChanged()
121124
}
122125
}
123126

127+
void QgsStatisticalSummaryDockWidget::copyStatistics()
128+
{
129+
QStringList rows;
130+
QStringList columns;
131+
for ( int i = 0; i < mStatisticsTable->rowCount(); i++ )
132+
{
133+
for ( int j = 0; j < mStatisticsTable->columnCount(); j++ )
134+
{
135+
QTableWidgetItem *item = mStatisticsTable->item( i, j );
136+
columns += item->text();
137+
}
138+
rows += columns.join( QStringLiteral( "\t" ) );
139+
columns.clear();
140+
}
141+
142+
if ( !rows.isEmpty() )
143+
{
144+
QString text = QString( "%1\t%2\n%3" ).arg( mStatisticsTable->horizontalHeaderItem( 0 )->text(),
145+
mStatisticsTable->horizontalHeaderItem( 1 )->text(),
146+
rows.join( QStringLiteral( "\n" ) ) );
147+
QString html = QString( "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"/></head><body><table border=\"1\"><tr><td>%1</td></tr></table></body></html>" ).arg( text );
148+
html.replace( QStringLiteral( "\t" ), QStringLiteral( "</td><td>" ) ).replace( QStringLiteral( "\n" ), QStringLiteral( "</td></tr><tr><td>" ) );
149+
150+
QgsClipboard clipboard;
151+
clipboard.setData( QStringLiteral( "text/html" ), html.toUtf8(), text );
152+
}
153+
}
154+
124155
void QgsStatisticalSummaryDockWidget::refreshStatistics()
125156
{
126157
if ( !mLayer || ( mFieldExpressionWidget->isExpression() && !mFieldExpressionWidget->isValidExpression() ) )

src/app/qgsstatisticalsummarydockwidget.h

+5
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,11 @@ class APP_EXPORT QgsStatisticalSummaryDockWidget : public QgsDockWidget, private
125125

126126
public slots:
127127

128+
/**
129+
* Copy the displayed statistics to the clipboard
130+
*/
131+
void copyStatistics();
132+
128133
/**
129134
* Recalculates the displayed statistics
130135
*/

src/ui/qgsstatisticalsummarybase.ui

+17
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,23 @@
102102
</property>
103103
</widget>
104104
</item>
105+
<item>
106+
<widget class="QToolButton" name="mButtonCopy">
107+
<property name="toolTip">
108+
<string>Copy Statistics to Clipboard</string>
109+
</property>
110+
<property name="text">
111+
<string>…</string>
112+
</property>
113+
<property name="icon">
114+
<iconset resource="../../images/images.qrc">
115+
<normaloff>:/images/themes/default/mActionEditCopy.svg</normaloff>:/images/themes/default/mActionEditCopy.svg</iconset>
116+
</property>
117+
<property name="autoRaise">
118+
<bool>true</bool>
119+
</property>
120+
</widget>
121+
</item>
105122
<item>
106123
<widget class="QToolButton" name="mButtonRefresh">
107124
<property name="toolTip">

0 commit comments

Comments
 (0)