Skip to content

Commit

Permalink
[ui][processing] Add ctrl+tab action to toggle panels visibility
Browse files Browse the repository at this point in the history
  • Loading branch information
nirvn authored and nyalldawson committed Dec 13, 2020
1 parent 932e70b commit 3c777be
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 1 deletion.
86 changes: 85 additions & 1 deletion src/gui/processing/models/qgsmodeldesignerdialog.cpp
Expand Up @@ -158,6 +158,18 @@ QgsModelDesignerDialog::QgsModelDesignerDialog( QWidget *parent, Qt::WindowFlags
mScene->selectAll();
} );

QStringList docksTitle = settings.value( QStringLiteral( "ModelDesigner/hiddenDocksTitle" ), QStringList(), QgsSettings::App ).toStringList();
QStringList docksActive = settings.value( QStringLiteral( "ModelDesigner/hiddenDocksActive" ), QStringList(), QgsSettings::App ).toStringList();
if ( !docksTitle.isEmpty() )
{
for ( const auto &title : docksTitle )
{
mPanelStatus.insert( title, PanelStatus( true, docksActive.contains( title ) ) );
}
}
mActionHidePanels->setChecked( !docksTitle.isEmpty() );
connect( mActionHidePanels, &QAction::toggled, this, &QgsModelDesignerDialog::setPanelVisibility );

mUndoAction = mUndoStack->createUndoAction( this );
mUndoAction->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionUndo.svg" ) ) );
mUndoAction->setShortcuts( QKeySequence::Undo );
Expand Down Expand Up @@ -349,8 +361,30 @@ QgsModelDesignerDialog::QgsModelDesignerDialog( QWidget *parent, Qt::WindowFlags

QgsModelDesignerDialog::~QgsModelDesignerDialog()
{
QgsSettings settings;
if ( !mPanelStatus.isEmpty() )
{
QStringList docksTitle;
QStringList docksActive;

for ( const auto panel : mPanelStatus.toStdMap() )
{
if ( panel.second.isVisible )
docksTitle << panel.first;
if ( panel.second.isActive )
docksActive << panel.first;
}
settings.setValue( QStringLiteral( "ModelDesigner/hiddenDocksTitle" ), docksTitle, QgsSettings::App );
settings.setValue( QStringLiteral( "ModelDesigner/hiddenDocksActive" ), docksActive, QgsSettings::App );
}
else
{
settings.remove( QStringLiteral( "ModelDesigner/hiddenDocksTitle" ), QgsSettings::App );
settings.remove( QStringLiteral( "ModelDesigner/hiddenDocksActive" ), QgsSettings::App );
}

// store the toolbar/dock widget settings using Qt settings API
QgsSettings().setValue( QStringLiteral( "ModelDesigner/state" ), saveState(), QgsSettings::App );
settings.setValue( QStringLiteral( "ModelDesigner/state" ), saveState(), QgsSettings::App );

mIgnoreUndoStackChanges++;
delete mSelectTool; // delete mouse handles before everything else
Expand Down Expand Up @@ -794,6 +828,56 @@ void QgsModelDesignerDialog::populateZoomToMenu()
}
}

void QgsModelDesignerDialog::setPanelVisibility( bool hidden )
{
const QList<QDockWidget *> docks = findChildren<QDockWidget *>();
const QList<QTabBar *> tabBars = findChildren<QTabBar *>();

if ( hidden )
{
mPanelStatus.clear();
//record status of all docks
for ( QDockWidget *dock : docks )
{
mPanelStatus.insert( dock->windowTitle(), PanelStatus( dock->isVisible(), false ) );
dock->setVisible( false );
}

//record active dock tabs
for ( QTabBar *tabBar : tabBars )
{
QString currentTabTitle = tabBar->tabText( tabBar->currentIndex() );
mPanelStatus[ currentTabTitle ].isActive = true;
}
}
else
{
//restore visibility of all docks
for ( QDockWidget *dock : docks )
{
if ( mPanelStatus.contains( dock->windowTitle() ) )
{
dock->setVisible( mPanelStatus.value( dock->windowTitle() ).isVisible );
}
}

//restore previously active dock tabs
for ( QTabBar *tabBar : tabBars )
{
//loop through all tabs in tab bar
for ( int i = 0; i < tabBar->count(); ++i )
{
QString tabTitle = tabBar->tabText( i );
if ( mPanelStatus.contains( tabTitle ) && mPanelStatus.value( tabTitle ).isActive )
{
tabBar->setCurrentIndex( i );
}
}
}
mPanelStatus.clear();
}
}

void QgsModelDesignerDialog::validate()
{
QStringList issues;
Expand Down
12 changes: 12 additions & 0 deletions src/gui/processing/models/qgsmodeldesignerdialog.h
Expand Up @@ -150,6 +150,7 @@ class GUI_EXPORT QgsModelDesignerDialog : public QMainWindow, public Ui::QgsMode
void populateZoomToMenu();
void validate();
void reorderInputs();
void setPanelVisibility( bool hidden );

private:

Expand Down Expand Up @@ -194,6 +195,17 @@ class GUI_EXPORT QgsModelDesignerDialog : public QMainWindow, public Ui::QgsMode

void fillInputsTree();
void updateVariablesGui();

struct PanelStatus
{
PanelStatus( bool visible = true, bool active = false )
: isVisible( visible )
, isActive( active )
{}
bool isVisible;
bool isActive;
};
QMap< QString, PanelStatus > mPanelStatus;
};


Expand Down
13 changes: 13 additions & 0 deletions src/ui/processing/qgsmodeldesignerdialogbase.ui
Expand Up @@ -84,6 +84,8 @@
<addaction name="mActionShowComments"/>
<addaction name="separator"/>
<addaction name="mActionSnappingEnabled"/>
<addaction name="separator"/>
<addaction name="mActionHidePanels"/>
</widget>
<widget class="QMenu" name="mMenuEdit">
<property name="title">
Expand Down Expand Up @@ -696,6 +698,17 @@
<string>Reorder Model Inputs…</string>
</property>
</action>
<action name="mActionHidePanels">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Toggle Panel &amp;Visibility</string>
</property>
<property name="shortcut">
<string>Ctrl+Tab</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
Expand Down

0 comments on commit 3c777be

Please sign in to comment.