Skip to content

Commit

Permalink
Allow options dialog to use a tree structure for tab list instead
Browse files Browse the repository at this point in the history
of a flat list widget
  • Loading branch information
nyalldawson committed Jul 29, 2021
1 parent bb119aa commit f22f742
Show file tree
Hide file tree
Showing 8 changed files with 315 additions and 292 deletions.
3 changes: 2 additions & 1 deletion python/gui/auto_generated/qgsoptionsdialogbase.sip.in
Expand Up @@ -13,7 +13,6 @@




class QgsOptionsDialogBase : QDialog
{
%Docstring(signature="appended")
Expand Down Expand Up @@ -168,6 +167,8 @@ it is automatically called if a line edit has "mSearchLineEdit" as object name.
%End




};

/************************************************************************
Expand Down
31 changes: 31 additions & 0 deletions src/app/options/qgsoptions.cpp
Expand Up @@ -104,6 +104,33 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WindowFlags fl, const QList<QgsOpti

{
setupUi( this );

mTreeModel = new QStandardItemModel( this );
mTreeModel->appendRow( createItem( tr( "General" ), tr( "General" ), QStringLiteral( "propertyicons/general.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "System" ), tr( "System" ), QStringLiteral( "propertyicons/system.svg" ) ) );

QStandardItem *crsGroup = new QStandardItem( tr( "CRS and Transforms" ) );
crsGroup->setSelectable( false );
crsGroup->appendRow( createItem( tr( "CRS" ), tr( "CRS" ), QStringLiteral( "propertyicons/CRS.svg" ) ) );
crsGroup->appendRow( createItem( tr( "Transformations" ), tr( "Coordinate transformations and operations" ), QStringLiteral( "transformation.svg" ) ) );
mTreeModel->appendRow( crsGroup );

mTreeModel->appendRow( createItem( tr( "Data Sources" ), tr( "Data sources" ), QStringLiteral( "propertyicons/attributes.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "Rendering" ), tr( "Rendering" ), QStringLiteral( "propertyicons/rendering.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "Canvas & Legend" ), tr( "Canvas and legend" ), QStringLiteral( "propertyicons/overlay.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "Map Tools" ), tr( "Map tools" ), QStringLiteral( "propertyicons/map_tools.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "Colors" ), tr( "Colors" ), QStringLiteral( "propertyicons/colors.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "Digitizing" ), tr( "Digitizing" ), QStringLiteral( "propertyicons/digitizing.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "Layouts" ), tr( "Print layouts" ), QStringLiteral( "mIconLayout.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "GDAL" ), tr( "GDAL" ), QStringLiteral( "propertyicons/gdal.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "Variables" ), tr( "Variables" ), QStringLiteral( "mIconExpression.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "Authentication" ), tr( "Authentication" ), QStringLiteral( "locked.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "Network" ), tr( "Network" ), QStringLiteral( "propertyicons/network_and_proxy.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "Locator" ), tr( "Locator" ), QStringLiteral( "search.svg" ) ) );
mTreeModel->appendRow( createItem( tr( "Acceleration" ), tr( "GPU acceleration" ), QStringLiteral( "mIconGPU.svg" ) ) );

mOptionsTreeView->setModel( mTreeModel );

connect( cbxProjectDefaultNew, &QCheckBox::toggled, this, &QgsOptions::cbxProjectDefaultNew_toggled );
connect( leLayerGlobalCrs, &QgsProjectionSelectionWidget::crsChanged, this, &QgsOptions::leLayerGlobalCrs_crsChanged );
connect( lstRasterDrivers, &QTreeWidget::itemDoubleClicked, this, &QgsOptions::lstRasterDrivers_itemDoubleClicked );
Expand Down Expand Up @@ -1334,7 +1361,10 @@ void QgsOptions::checkPageWidgetNameMap()
{
const QMap< QString, int > pageNames = QgisApp::instance()->optionsPagesMap();

#if 0
Q_ASSERT_X( pageNames.count() == mOptionsListWidget->count(), "QgsOptions::checkPageWidgetNameMap()", "QgisApp::optionsPagesMap() is outdated, contains too many entries" );


for ( int idx = 0; idx < mOptionsListWidget->count(); ++idx )
{
QWidget *currentPage = mOptionsStackedWidget->widget( idx );
Expand All @@ -1346,6 +1376,7 @@ void QgsOptions::checkPageWidgetNameMap()
Q_ASSERT_X( pageNames.value( title ) == idx, "QgsOptions::checkPageWidgetNameMap()", QStringLiteral( "QgisApp::optionsPagesMap() is outdated, please update. %1 should be %2 not %3" ).arg( title ).arg( idx ).arg( pageNames.value( title ) ).toLocal8Bit().constData() );
}
}
#endif
}

void QgsOptions::setCurrentPage( const QString &pageWidgetName )
Expand Down
3 changes: 3 additions & 0 deletions src/app/options/qgsoptions.h
Expand Up @@ -34,6 +34,7 @@ class QgsOptionsPageWidget;
class QgsLocatorOptionsWidget;
class QgsAuthConfigSelect;
class QgsBearingNumericFormat;
class QStandardItemModel;

/**
* \class QgsOptions
Expand Down Expand Up @@ -313,6 +314,8 @@ class APP_EXPORT QgsOptions : public QgsOptionsDialogBase, private Ui::QgsOption

std::unique_ptr< QgsBearingNumericFormat > mBearingFormat;

QStandardItemModel *mTreeModel = nullptr;

void updateActionsForCurrentColorScheme( QgsColorScheme *scheme );

void checkPageWidgetNameMap();
Expand Down
17 changes: 17 additions & 0 deletions src/app/qgisappstylesheet.cpp
Expand Up @@ -152,6 +152,23 @@ void QgisAppStyleSheet::buildStyleSheet( const QMap<QString, QVariant> &opts )
" padding-right: 0px;"
"}" ).arg( frameMargin );

style += QStringLiteral( "QTreeView#mOptionsTreeView {"
" background-color: rgba(69, 69, 69, 0);"
" outline: 0;"
"}"
"QFrame#mOptionsListFrame {"
" background-color: rgba(69, 69, 69, 220);"
"}"
"QTreeView#mOptionsTreeView::item {"
" color: white;"
" padding: %1px;"
"}"
"QTreeView#mOptionsTreeView::item::selected {"
" color: black;"
" background-color:palette(Window);"
" padding-right: 0px;"
"}" ).arg( frameMargin );

QString toolbarSpacing = opts.value( QStringLiteral( "toolbarSpacing" ), QString() ).toString();
if ( !toolbarSpacing.isEmpty() )
{
Expand Down
3 changes: 2 additions & 1 deletion src/app/qgsappscreenshots.cpp
Expand Up @@ -306,6 +306,7 @@ void QgsAppScreenShots::takeGlobalOptions()
dlg->setMinimumHeight( 600 );
dlg->show();
QCoreApplication::processEvents();
#if 0
for ( int row = 0; row < dlg->mOptionsListWidget->count(); ++row )
{
dlg->mOptionsListWidget->setCurrentRow( row );
Expand All @@ -327,7 +328,7 @@ void QgsAppScreenShots::takeGlobalOptions()
QCoreApplication::processEvents();
QCoreApplication::processEvents(); // seems a second call is needed, the tabble might not be fully displayed otherwise
takeScreenshot( QStringLiteral( "advanced_with_settings_shown" ), folder, dlg );

#endif
// exit properly
dlg->close();
dlg->deleteLater();
Expand Down

0 comments on commit f22f742

Please sign in to comment.