mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-18 00:03:05 -04:00
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:
commit
2e5e009445
@ -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))
|
||||
|
@ -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() );
|
||||
|
@ -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 ) )
|
||||
{
|
||||
|
@ -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; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user