33#include "moc_qgsdbqueryhistoryprovider.cpp"
35using namespace Qt::StringLiterals;
42 DatabaseQueryHistoryNode(
const QgsHistoryEntry &entry, QgsDatabaseQueryHistoryProvider *provider )
43 : QgsHistoryEntryGroup()
45 , mProvider( provider )
50 QgsHistoryEntry mEntry;
51 QgsDatabaseQueryHistoryProvider *mProvider =
nullptr;
54class DatabaseQueryValueNode :
public DatabaseQueryHistoryNode
57 DatabaseQueryValueNode(
const QgsHistoryEntry &entry, QgsDatabaseQueryHistoryProvider *provider,
const QString &value )
58 : DatabaseQueryHistoryNode( entry, provider )
62 QVariant data(
int role = Qt::DisplayRole )
const override
75 QString html(
const QgsHistoryWidgetContext & )
const override
84class DatabaseQueryRootNode :
public DatabaseQueryHistoryNode
87 DatabaseQueryRootNode(
const QgsHistoryEntry &entry, QgsDatabaseQueryHistoryProvider *provider )
88 : DatabaseQueryHistoryNode( entry, provider )
92 mProviderKey = mEntry.entry.value( u
"provider"_s ).toString();
95 QVariant data(
int role = Qt::DisplayRole )
const override
100 case Qt::ToolTipRole:
101 return mEntry.entry.value( u
"query"_s );
103 case Qt::DecorationRole:
105 if ( !mProviderIcon.isNull() )
106 return mProviderIcon;
110 mProviderIcon = md->icon();
112 return mProviderIcon;
121 void setEntry(
const QgsHistoryEntry &entry )
123 if ( !mConnectionNode )
125 mConnectionNode =
new DatabaseQueryValueNode( mEntry, mProvider, QObject::tr(
"Connection: %1" ).arg( entry.
entry.value( u
"connection"_s ).toString() ) );
126 addChild( mConnectionNode );
128 if ( entry.
entry.contains( u
"rows"_s ) )
132 mRowsNode =
new DatabaseQueryValueNode( mEntry, mProvider, QObject::tr(
"Row count: %1" ).arg( entry.
entry.value( u
"rows"_s ).toString() ) );
133 addChild( mRowsNode );
136 if ( entry.
entry.contains( u
"time"_s ) )
140 mTimeNode =
new DatabaseQueryValueNode( mEntry, mProvider, QObject::tr(
"Execution time: %1 ms" ).arg( entry.
entry.value( u
"time"_s ).toString() ) );
141 addChild( mTimeNode );
146 QWidget *createWidget(
const QgsHistoryWidgetContext & )
override
148 QgsCodeEditorSQL *editor =
new QgsCodeEditorSQL();
149 editor->
setText( mEntry.entry.value( u
"query"_s ).toString() );
150 editor->setReadOnly(
true );
151 editor->setCaretLineVisible(
false );
154 editor->setEdgeMode( QsciScintilla::EdgeNone );
155 editor->setWrapMode( QsciScintilla::WrapMode::WrapWord );
159 bool doubleClicked(
const QgsHistoryWidgetContext &context )
override
161 if ( QgsDatabaseQueryHistoryWidget *queryHistoryWidget = qobject_cast< QgsDatabaseQueryHistoryWidget * >( context.
historyWidget() ) )
163 queryHistoryWidget->emitSqlTriggered( mEntry.entry.value( u
"connection"_s ).toString(), mEntry.entry.value( u
"provider"_s ).toString(), mEntry.entry.value( u
"query"_s ).toString() );
168 void populateContextMenu( QMenu *menu,
const QgsHistoryWidgetContext &context )
override
170 if ( QgsDatabaseQueryHistoryWidget *queryHistoryWidget = qobject_cast< QgsDatabaseQueryHistoryWidget * >( context.
historyWidget() ) )
172 QAction *loadAction =
new QAction(
173 QObject::tr(
"Load SQL Command…" ), menu
175 QObject::connect( loadAction, &QAction::triggered, menu, [
this, queryHistoryWidget] {
176 queryHistoryWidget->emitSqlTriggered( mEntry.entry.value( u
"connection"_s ).toString(), mEntry.entry.value( u
"provider"_s ).toString(), mEntry.entry.value( u
"query"_s ).toString() );
178 menu->addAction( loadAction );
181 QAction *copyAction =
new QAction(
182 QObject::tr(
"Copy SQL Command" ), menu
185 QObject::connect( copyAction, &QAction::triggered, menu, [
this] {
186 QMimeData *m =
new QMimeData();
187 m->setText( mEntry.entry.value( u
"query"_s ).toString() );
188 QApplication::clipboard()->setMimeData( m );
190 menu->addAction( copyAction );
194 QString mProviderKey;
195 mutable QIcon mProviderIcon;
196 DatabaseQueryValueNode *mConnectionNode =
nullptr;
197 DatabaseQueryValueNode *mRowsNode =
nullptr;
198 DatabaseQueryValueNode *mTimeNode =
nullptr;
215 return new DatabaseQueryRootNode( entry,
this );
220 if ( DatabaseQueryRootNode *dbNode =
dynamic_cast<DatabaseQueryRootNode *
>( node ) )
222 dbNode->setEntry( entry );
QFlags< HistoryProviderBackend > HistoryProviderBackends
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
void setText(const QString &text) override
void setFoldingVisible(bool folding)
Set whether the folding controls are visible in the editor.
void setLineNumbersVisible(bool visible)
Sets whether line numbers should be visible in the editor.
void updateNodeForEntry(QgsHistoryEntryNode *node, const QgsHistoryEntry &entry, const QgsHistoryWidgetContext &context) override
Updates an existing history node for the given entry.
QgsDatabaseQueryHistoryProvider()
QString id() const override
Returns the provider's unique id, which is used to associate existing history entries with the provid...
QgsHistoryEntryNode * createNodeForEntry(const QgsHistoryEntry &entry, const QgsHistoryWidgetContext &context) override
Creates a new history node for the given entry.
QgsDatabaseQueryHistoryWidget(Qgis::HistoryProviderBackends backends=Qgis::HistoryProviderBackend::LocalProfile, QgsHistoryProviderRegistry *registry=nullptr, const QgsHistoryWidgetContext &context=QgsHistoryWidgetContext(), QWidget *parent=nullptr)
Constructor for QgsDatabaseQueryHistoryWidget, with the specified parent widget.
void sqlTriggered(const QString &connectionUri, const QString &provider, const QString &sql)
Emitted when the user has triggered a previously executed SQL statement in the widget.
void emitSqlTriggered(const QString &connectionUri, const QString &provider, const QString &sql)
Causes the widget to emit the sqlTriggered() signal.
Base class for history entry "group" nodes, which contain children of their own.
Base class for nodes representing a QgsHistoryEntry.
Encapsulates a history entry.
QVariantMap entry
Entry details.
A registry for objects which track user history (i.e.
Contains settings which reflect the context in which a history widget is shown, e....
QgsHistoryWidget * historyWidget() const
Returns the parent history widget.
QgsHistoryWidget(const QString &providerId=QString(), Qgis::HistoryProviderBackends backends=Qgis::HistoryProviderBackend::LocalProfile, QgsHistoryProviderRegistry *registry=nullptr, const QgsHistoryWidgetContext &context=QgsHistoryWidgetContext(), QWidget *parent=nullptr)
Constructor for QgsHistoryWidget, with the specified parent widget.
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.