Skip to content

Commit

Permalink
Remember last active dev tools panel between sessions
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Apr 11, 2023
1 parent 5f62066 commit 920dba2
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 1 deletion.
4 changes: 4 additions & 0 deletions src/app/qgisapp.cpp
Expand Up @@ -1329,6 +1329,8 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipBadLayers
showDevToolsDock->setObjectName( QStringLiteral( "ShowDevToolsPanel" ) );
showDevToolsDock->setWhatsThis( tr( "Show Debugging/Development Tools" ) );

// store last dev tools tab before populating, as the value will be altered as tabs are created
const QString lastDevToolsTab = QgsDevToolsPanelWidget::settingLastActiveTab->value();
mDevToolsWidget = new QgsDevToolsPanelWidget( mDevToolFactories );
mDevToolsDock->setWidget( mDevToolsWidget );
// connect( mDevToolsDock, &QDockWidget::visibilityChanged, mActionStyleDock, &QAction::setChecked );
Expand Down Expand Up @@ -1969,6 +1971,8 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipBadLayers
messageBar()->pushWidget( messageWidget, Qgis::MessageLevel::Warning, 0 );
} );
QgsApplication::fontManager()->enableFontDownloadsForSession();

mDevToolsWidget->setActiveTab( lastDevToolsTab );
}

QgisApp::QgisApp()
Expand Down
27 changes: 26 additions & 1 deletion src/app/qgsdevtoolspanelwidget.cpp
Expand Up @@ -17,6 +17,9 @@
#include "qgsdevtoolwidgetfactory.h"
#include "qgsdevtoolwidget.h"
#include "qgspanelwidgetstack.h"
#include "qgssettingsentryimpl.h"

const QgsSettingsEntryString *QgsDevToolsPanelWidget::settingLastActiveTab = new QgsSettingsEntryString( QStringLiteral( "last-active-tab" ), QgsDevToolsPanelWidget::sTreeDevTools, QString(), QStringLiteral( "Last visible tab in developer tools panel" ) );


QgsDevToolsPanelWidget::QgsDevToolsPanelWidget( const QList<QgsDevToolWidgetFactory *> &factories, QWidget *parent )
Expand All @@ -30,7 +33,12 @@ QgsDevToolsPanelWidget::QgsDevToolsPanelWidget( const QList<QgsDevToolWidgetFact
for ( QgsDevToolWidgetFactory *factory : factories )
addToolFactory( factory );

connect( mOptionsListWidget, &QListWidget::currentRowChanged, this, &QgsDevToolsPanelWidget::setCurrentTool );
connect( mOptionsListWidget, &QListWidget::currentRowChanged, this, [ = ]( int row )
{
setCurrentTool( row );
settingLastActiveTab->setValue( mOptionsListWidget->currentItem()->data( Qt::UserRole ).toString() );
} );

}

QgsDevToolsPanelWidget::~QgsDevToolsPanelWidget() = default;
Expand All @@ -45,6 +53,8 @@ void QgsDevToolsPanelWidget::addToolFactory( QgsDevToolWidgetFactory *factory )

QListWidgetItem *item = new QListWidgetItem( factory->icon(), QString() );
item->setToolTip( factory->title() );
item->setData( Qt::UserRole, factory->title() );

mOptionsListWidget->addItem( item );
const int row = mOptionsListWidget->row( item );
mFactoryPages[factory] = row;
Expand Down Expand Up @@ -73,6 +83,21 @@ void QgsDevToolsPanelWidget::removeToolFactory( QgsDevToolWidgetFactory *factory
}
}

void QgsDevToolsPanelWidget::setActiveTab( const QString &title )
{
if ( !title.isEmpty() )
{
for ( int row = 0; row < mOptionsListWidget->count(); ++row )
{
if ( mOptionsListWidget->item( row )->data( Qt::UserRole ).toString() == title )
{
setCurrentTool( row );
break;
}
}
}
}

void QgsDevToolsPanelWidget::setCurrentTool( int row )
{
whileBlocking( mOptionsListWidget )->setCurrentRow( row );
Expand Down
6 changes: 6 additions & 0 deletions src/app/qgsdevtoolspanelwidget.h
Expand Up @@ -17,6 +17,7 @@

#include "ui_qgsdevtoolswidgetbase.h"
#include "qgis_app.h"
#include "qgssettingstree.h"

class QgsDevToolWidgetFactory;

Expand All @@ -25,13 +26,18 @@ class APP_EXPORT QgsDevToolsPanelWidget : public QWidget, private Ui::QgsDevTool
Q_OBJECT
public:

static inline QgsSettingsTreeNode *sTreeDevTools = QgsSettingsTree::sTreeApp->createChildNode( QStringLiteral( "devtools" ) );
static const QgsSettingsEntryString *settingLastActiveTab;

QgsDevToolsPanelWidget( const QList<QgsDevToolWidgetFactory *> &factories, QWidget *parent = nullptr );
~QgsDevToolsPanelWidget() override;

void addToolFactory( QgsDevToolWidgetFactory *factory );

void removeToolFactory( QgsDevToolWidgetFactory *factory );

void setActiveTab( const QString &title );

private slots:

void setCurrentTool( int row );
Expand Down

0 comments on commit 920dba2

Please sign in to comment.