Skip to content

Commit

Permalink
[FEATURE][processing] Add menu to the Model Designer "View" menu
Browse files Browse the repository at this point in the history
allowing users to zoom direct to any group box present in the model

Allows for simplified navigation of complex models
  • Loading branch information
nyalldawson committed Apr 1, 2020
1 parent 4fa9083 commit 50b723c
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 3 deletions.
Expand Up @@ -95,6 +95,11 @@ Returns list of selected component items.
QgsModelComponentGraphicItem *componentItemAt( QPointF position ) const;
%Docstring
Returns the topmost component item at a specified ``position``.
%End

QgsModelComponentGraphicItem *groupBoxItem( const QString &uuid );
%Docstring
Returns the graphic item corresponding to the specified group box ``uuid``.
%End

void selectAll();
Expand Down
20 changes: 20 additions & 0 deletions src/gui/processing/models/qgsmodeldesignerdialog.cpp
Expand Up @@ -162,6 +162,9 @@ QgsModelDesignerDialog::QgsModelDesignerDialog( QWidget *parent, Qt::WindowFlags
mToolbar->insertAction( mActionZoomIn, mRedoAction );
mToolbar->insertSeparator( mActionZoomIn );

mGroupMenu = new QMenu( tr( "Zoom To" ), this );
mMenuView->insertMenu( mActionZoomIn, mGroupMenu );
connect( mGroupMenu, &QMenu::aboutToShow, this, &QgsModelDesignerDialog::populateZoomToMenu );

QgsProcessingToolboxProxyModel::Filters filters = QgsProcessingToolboxProxyModel::FilterModeler;
if ( settings.value( QStringLiteral( "Processing/Configuration/SHOW_ALGORITHMS_KNOWN_ISSUES" ), false ).toBool() )
Expand Down Expand Up @@ -707,6 +710,23 @@ void QgsModelDesignerDialog::deleteSelected()
repaintModel();
}

void QgsModelDesignerDialog::populateZoomToMenu()
{
mGroupMenu->clear();
for ( const QgsProcessingModelGroupBox &box : model()->groupBoxes() )
{
if ( QgsModelComponentGraphicItem *item = mScene->groupBoxItem( box.uuid() ) )
{
QAction *zoomAction = new QAction( box.description(), mGroupMenu );
connect( zoomAction, &QAction::triggered, this, [ = ]
{
mView->centerOn( item );
} );
mGroupMenu->addAction( zoomAction );
}
}
}

bool QgsModelDesignerDialog::isDirty() const
{
return mHasChanged && mUndoStack->index() != -1;
Expand Down
3 changes: 3 additions & 0 deletions src/gui/processing/models/qgsmodeldesignerdialog.h
Expand Up @@ -142,6 +142,7 @@ class GUI_EXPORT QgsModelDesignerDialog : public QMainWindow, public Ui::QgsMode
void toggleComments( bool show );
void updateWindowTitle();
void deleteSelected();
void populateZoomToMenu();

private:

Expand All @@ -167,6 +168,8 @@ class GUI_EXPORT QgsModelDesignerDialog : public QMainWindow, public Ui::QgsMode
QUndoView *mUndoView = nullptr;
QgsDockWidget *mUndoDock = nullptr;

QMenu *mGroupMenu = nullptr;

int mBlockUndoCommands = 0;
int mIgnoreUndoStackChanges = 0;

Expand Down
8 changes: 7 additions & 1 deletion src/gui/processing/models/qgsmodelgraphicsscene.cpp
Expand Up @@ -73,12 +73,13 @@ void QgsModelGraphicsScene::createItems( QgsProcessingModelAlgorithm *model, Qgs
{
// model group boxes
const QList<QgsProcessingModelGroupBox> boxes = model->groupBoxes();
mGroupBoxItems.clear();
for ( const QgsProcessingModelGroupBox &box : boxes )
{
// TODO z order!
QgsModelComponentGraphicItem *item = createGroupBoxGraphicItem( model, box.clone() );
addItem( item );
item->setPos( box.position().x(), box.position().y() );
mGroupBoxItems.insert( box.uuid(), item );
connect( item, &QgsModelComponentGraphicItem::requestModelRepaint, this, &QgsModelGraphicsScene::rebuildRequired );
connect( item, &QgsModelComponentGraphicItem::changed, this, &QgsModelGraphicsScene::componentChanged );
connect( item, &QgsModelComponentGraphicItem::aboutToChange, this, &QgsModelGraphicsScene::componentAboutToChange );
Expand Down Expand Up @@ -243,6 +244,11 @@ QgsModelComponentGraphicItem *QgsModelGraphicsScene::componentItemAt( QPointF po
return nullptr;
}

QgsModelComponentGraphicItem *QgsModelGraphicsScene::groupBoxItem( const QString &uuid )
{
return mGroupBoxItems.value( uuid );
}

void QgsModelGraphicsScene::selectAll()
{
//select all items in scene
Expand Down
6 changes: 6 additions & 0 deletions src/gui/processing/models/qgsmodelgraphicsscene.h
Expand Up @@ -109,6 +109,11 @@ class GUI_EXPORT QgsModelGraphicsScene : public QGraphicsScene
*/
QgsModelComponentGraphicItem *componentItemAt( QPointF position ) const;

/**
* Returns the graphic item corresponding to the specified group box \a uuid.
*/
QgsModelComponentGraphicItem *groupBoxItem( const QString &uuid );

/**
* Selects all the components in the scene.
*/
Expand Down Expand Up @@ -208,6 +213,7 @@ class GUI_EXPORT QgsModelGraphicsScene : public QGraphicsScene
QMap< QString, QgsModelComponentGraphicItem * > mParameterItems;
QMap< QString, QgsModelChildAlgorithmGraphicItem * > mChildAlgorithmItems;
QMap< QString, QMap< QString, QgsModelComponentGraphicItem * > > mOutputItems;
QMap< QString, QgsModelComponentGraphicItem * > mGroupBoxItems;
QVariantMap mChildResults;
QVariantMap mChildInputs;

Expand Down
4 changes: 2 additions & 2 deletions src/ui/processing/qgsmodeldesignerdialogbase.ui
Expand Up @@ -70,7 +70,7 @@
<addaction name="separator"/>
<addaction name="mActionClose"/>
</widget>
<widget class="QMenu" name="menu_View">
<widget class="QMenu" name="mMenuView">
<property name="title">
<string>&amp;View</string>
</property>
Expand All @@ -96,7 +96,7 @@
</widget>
<addaction name="menu_Model"/>
<addaction name="mMenuEdit"/>
<addaction name="menu_View"/>
<addaction name="mMenuView"/>
</widget>
<widget class="QToolBar" name="mToolbar">
<property name="windowTitle">
Expand Down

0 comments on commit 50b723c

Please sign in to comment.