Merge pull request #31280 from DelazJ/addtoolbarsWidgets

Allow more actions from toolbar to be listed/managed in the customization dialog
This commit is contained in:
Matthias Kuhn 2019-08-22 10:48:46 +02:00 committed by GitHub
commit 2e5e009445
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 12 deletions

View File

@ -233,6 +233,7 @@ class ProcessingPlugin:
self.resultsAction = QAction(
QgsApplication.getThemeIcon("/processingResult.svg"),
self.tr('&Results Viewer'), self.iface.mainWindow())
self.resultsAction.setObjectName('resultsViewer')
self.resultsAction.setCheckable(True)
self.iface.registerMainWindowAction(self.resultsAction,
QKeySequence('Ctrl+Alt+R').toString(QKeySequence.NativeText))

View File

@ -2311,6 +2311,7 @@ void QgisApp::createActions()
menuAllEdits->addAction( mActionSaveAllEdits );
menuAllEdits->addAction( mActionRollbackAllEdits );
menuAllEdits->addAction( mActionCancelAllEdits );
menuAllEdits->setObjectName( "AllEditsMenu" );
mActionAllEdits->setMenu( menuAllEdits );
// Raster toolbar items
@ -2975,8 +2976,9 @@ void QgisApp::createToolBars()
tbAddCircularString->addAction( mActionCircularStringCurvePoint );
tbAddCircularString->addAction( mActionCircularStringRadius );
tbAddCircularString->setDefaultAction( mActionCircularStringCurvePoint );
QAction *addCircularAction = mShapeDigitizeToolBar->insertWidget( mActionVertexTool, tbAddCircularString );
addCircularAction->setObjectName( QStringLiteral( "ActionAddCircularString" ) );
connect( tbAddCircularString, &QToolButton::triggered, this, &QgisApp::toolButtonActionTriggered );
mShapeDigitizeToolBar->insertWidget( mActionVertexTool, tbAddCircularString );
//circle digitize tool button
QToolButton *tbAddCircle = new QToolButton( mShapeDigitizeToolBar );
@ -2987,8 +2989,9 @@ void QgisApp::createToolBars()
tbAddCircle->addAction( mActionCircle2TangentsPoint );
tbAddCircle->addAction( mActionCircleCenterPoint );
tbAddCircle->setDefaultAction( mActionCircle2Points );
QAction *addCircleAction = mShapeDigitizeToolBar->insertWidget( mActionVertexTool, tbAddCircle );
addCircleAction->setObjectName( QStringLiteral( "ActionAddCircle" ) );
connect( tbAddCircle, &QToolButton::triggered, this, &QgisApp::toolButtonActionTriggered );
mShapeDigitizeToolBar->insertWidget( mActionVertexTool, tbAddCircle );
//ellipse digitize tool button
QToolButton *tbAddEllipse = new QToolButton( mShapeDigitizeToolBar );
@ -2998,8 +3001,9 @@ void QgisApp::createToolBars()
tbAddEllipse->addAction( mActionEllipseExtent );
tbAddEllipse->addAction( mActionEllipseFoci );
tbAddEllipse->setDefaultAction( mActionEllipseCenter2Points );
QAction *addEllipseAction = mShapeDigitizeToolBar->insertWidget( mActionVertexTool, tbAddEllipse );
addEllipseAction->setObjectName( QStringLiteral( "ActionAddEllipse" ) );
connect( tbAddEllipse, &QToolButton::triggered, this, &QgisApp::toolButtonActionTriggered );
mShapeDigitizeToolBar->insertWidget( mActionVertexTool, tbAddEllipse );
//Rectangle digitize tool button
QToolButton *tbAddRectangle = new QToolButton( mShapeDigitizeToolBar );
@ -3009,8 +3013,9 @@ void QgisApp::createToolBars()
tbAddRectangle->addAction( mActionRectangle3PointsDistance );
tbAddRectangle->addAction( mActionRectangle3PointsProjected );
tbAddRectangle->setDefaultAction( mActionRectangleCenterPoint );
QAction *addRectangleAction = mShapeDigitizeToolBar->insertWidget( mActionVertexTool, tbAddRectangle );
addRectangleAction->setObjectName( QStringLiteral( "ActionAddRectangle" ) );
connect( tbAddRectangle, &QToolButton::triggered, this, &QgisApp::toolButtonActionTriggered );
mShapeDigitizeToolBar->insertWidget( mActionVertexTool, tbAddRectangle );
//Regular polygon digitize tool button
QToolButton *tbAddRegularPolygon = new QToolButton( mShapeDigitizeToolBar );
@ -3019,8 +3024,9 @@ void QgisApp::createToolBars()
tbAddRegularPolygon->addAction( mActionRegularPolygonCenterPoint );
tbAddRegularPolygon->addAction( mActionRegularPolygonCenterCorner );
tbAddRegularPolygon->setDefaultAction( mActionRegularPolygon2Points );
QAction *addRegularPolygonAction = mShapeDigitizeToolBar->insertWidget( mActionVertexTool, tbAddRegularPolygon );
addRegularPolygonAction->setObjectName( QStringLiteral( "ActionAddRegularPolygon" ) );
connect( tbAddRegularPolygon, &QToolButton::triggered, this, &QgisApp::toolButtonActionTriggered );
mShapeDigitizeToolBar->insertWidget( mActionVertexTool, tbAddRegularPolygon );
// Cad toolbar
mAdvancedDigitizeToolBar->insertAction( mActionRotateFeature, mAdvancedDigitizingDockWidget->enableAction() );

View File

@ -22,6 +22,7 @@
#include "qgsgui.h"
#include <QAction>
#include <QWidgetAction>
#include <QDir>
#include <QDockWidget>
#include <QDomDocument>
@ -609,7 +610,27 @@ void QgsCustomization::createTreeItemToolbars()
tbItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable );
tbItem->setCheckState( 0, Qt::Checked );
addTreeItemActions( tbItem, tb->actions() );
const QList<QWidgetAction *> tbWidgetActions = tb->findChildren<QWidgetAction *>( QString(), Qt::FindDirectChildrenOnly );
QList<QAction *> tbActions = tb->actions();
for ( QAction *act : tbWidgetActions )
{
QStringList actstrs;
actstrs << act->objectName() << act->text();
QTreeWidgetItem *item = new QTreeWidgetItem( tbItem, actstrs );
item->setIcon( 0, act->icon() );
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable );
item->setCheckState( 0, Qt::Checked );
QWidgetAction *widgetAction = qobject_cast<QWidgetAction *>( act );
QWidget *widget = widgetAction->defaultWidget();
const QList<QAction *> childActions = widget->actions();
addTreeItemActions( item, childActions );
tbActions.removeAll( act );
}
addTreeItemActions( tbItem, tbActions );
}
mMainWindowItems << topItem;
@ -742,12 +763,32 @@ void QgsCustomization::updateMainWindow( QMenu *toolBarMenu )
for ( QAction *action : constActions )
{
if ( action->objectName().isEmpty() )
{
continue;
}
visible = mSettings->value( action->objectName(), true ).toBool();
if ( !visible )
{
tb->removeAction( action );
continue;
}
if ( action->metaObject()->className() == QStringLiteral( "QWidgetAction" ) )
{
mSettings->beginGroup( action->objectName() );
QWidgetAction *widgetAction = qobject_cast<QWidgetAction *>( action );
QWidget *widget = widgetAction->defaultWidget();
const QList<QAction *> childActions = widget->actions();
for ( QAction *wAction : childActions )
{
if ( wAction->objectName().isEmpty() )
continue;
visible = mSettings->value( wAction->objectName(), true ).toBool();
if ( !visible )
widget->removeAction( wAction );
}
mSettings->endGroup();
}
}
mSettings->endGroup();
}
@ -860,7 +901,7 @@ void QgsCustomization::customizeWidget( const QString &path, QWidget *widget, QS
// Qt may insert some internal classes in the tree, e.g. QTabWidgetPrivate inserts
// qt_tabwidget_stackedwidget, such widgets do not appear in the tree generated
// from ui files and do not have sense from user poin of view -> skip
// from ui files and do not have sense from user point of view -> skip
if ( !QgsCustomization::sInternalWidgets.contains( name ) )
{

View File

@ -137,13 +137,13 @@ class APP_EXPORT QgsCustomization : public QObject
void setSettings( QSettings *settings ) { mSettings = settings ;}
// Return the path to the splash screen
// Returns the path to the splash screen
QString splashPath() const;
// Load and set default customization
// Loads and sets default customization
void loadDefault();
// Internal Qt widget which has to bes kipped in paths
// Internal Qt widget which has to be skipped in paths
static QStringList sInternalWidgets;
QString statusPath() const { return mStatusPath; }