Skip to content

Commit

Permalink
Merge pull request #38312 from alexbruy/ux-fixes
Browse files Browse the repository at this point in the history
Various UX fixes
  • Loading branch information
alexbruy committed Aug 17, 2020
2 parents 040b18a + de7de1e commit 476ac55
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 8 deletions.
4 changes: 3 additions & 1 deletion python/plugins/processing/ProcessingPlugin.py
Expand Up @@ -51,7 +51,7 @@
InPlaceAlgorithmLocatorFilter)
from processing.modeler.ModelerDialog import ModelerDialog
from processing.tools.system import tempHelpFolder
from processing.gui.menus import removeMenus, initializeMenus, createMenus
from processing.gui.menus import removeMenus, initializeMenus, createMenus, createButtons, removeButtons
from processing.core.ProcessingResults import resultsList

pluginPath = os.path.dirname(__file__)
Expand Down Expand Up @@ -271,6 +271,7 @@ def initGui(self):

initializeMenus()
createMenus()
createButtons()

# In-place editing button state sync
self.iface.currentLayerChanged.connect(self.sync_in_place_button_state)
Expand Down Expand Up @@ -322,6 +323,7 @@ def unload(self):
self.iface.unregisterCustomDropHandler(self.drop_handler)
QgsApplication.dataItemProviderRegistry().removeProvider(self.item_provider)

removeButtons()
removeMenus()
Processing.deinitialize()

Expand Down
49 changes: 45 additions & 4 deletions python/plugins/processing/gui/menus.py
Expand Up @@ -42,7 +42,7 @@
menusSettingsGroup = 'Menus'

defaultMenuEntries = {}
vectorMenu = QApplication.translate('MainWindow', 'Vect&or')
vectorMenu = iface.vectorMenu().title()
analysisToolsMenu = vectorMenu + "/" + Processing.tr('&Analysis Tools')
defaultMenuEntries.update({'qgis:distancematrix': analysisToolsMenu,
'native:sumlinelengths': analysisToolsMenu,
Expand All @@ -64,7 +64,6 @@
'qgis:regularpoints': researchToolsMenu,
'native:selectbylocation': researchToolsMenu,
'native:polygonfromlayerextent': researchToolsMenu})

geoprocessingToolsMenu = vectorMenu + "/" + Processing.tr('&Geoprocessing Tools')
defaultMenuEntries.update({'native:buffer': geoprocessingToolsMenu,
'native:convexhull': geoprocessingToolsMenu,
Expand Down Expand Up @@ -95,7 +94,7 @@
'native:mergevectorlayers': managementToolsMenu,
'native:createspatialindex': managementToolsMenu})

rasterMenu = QApplication.translate('MainWindow', '&Raster')
rasterMenu = iface.rasterMenu().title()
projectionsMenu = rasterMenu + "/" + Processing.tr('Projections')
defaultMenuEntries.update({'gdal:warpreproject': projectionsMenu,
'gdal:extractprojection': projectionsMenu,
Expand Down Expand Up @@ -132,6 +131,8 @@
'gdal:overviews': miscMenu,
'gdal:tileindex': miscMenu})

toolBarButtons = {'native:selectbylocation': iface.selectionToolBar()}


def initializeMenus():
for m in defaultMenuEntries.keys():
Expand Down Expand Up @@ -282,6 +283,46 @@ def getMenu(name, parent):

def findAction(actions, alg):
for action in actions:
if action.data() == alg.id():
if (isinstance(alg, str) and action.data() == alg) or (isinstance(alg, QgsProcessingAlgorithm) and action.data() == alg.id()):
return action
return None


def addToolBarButton(algId, toolbar, icon=None, tooltip=None):
alg = QgsApplication.processingRegistry().algorithmById(algId)
if alg is None or alg.id() != algId:
assert False, algId

if tooltip is None:
if (QgsGui.higFlags() & QgsGui.HigMenuTextIsTitleCase) and not (alg.flags() & QgsProcessingAlgorithm.FlagDisplayNameIsLiteral):
tooltip = QgsStringUtils.capitalize(alg.displayName(), QgsStringUtils.TitleCase)
else:
tooltip = alg.displayName()

action = QAction(icon or alg.icon(), tooltip, iface.mainWindow())
algId = alg.id()
action.setData(algId)
action.triggered.connect(lambda: _executeAlgorithm(algId))
action.setObjectName("mProcessingAlg_%s" % algId)

if toolbar:
toolbar.addAction(action)
else:
QgsMessageLog.logMessage(Processing.tr('Toolbar "{}" not found').format(toolbar.windowTitle), Processing.tr('Processing'))


def removeToolBarButton(algId, toolbar):
if toolbar:
action = findAction(toolbar.actions(), algId)
if action is not None:
toolbar.removeAction(action)


def createButtons():
for algId, toolbar in toolBarButtons.items():
addToolBarButton(algId, toolbar)


def removeButtons():
for algId, toolbar in toolBarButtons.items():
removeToolBarButton(algId, toolbar)
2 changes: 1 addition & 1 deletion src/app/qgisapp.cpp
Expand Up @@ -1285,7 +1285,7 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipVersionCh

mLogDock = new QgsDockWidget( tr( "Log Messages" ), this );
mLogDock->setObjectName( QStringLiteral( "MessageLog" ) );
mLogDock->setAllowedAreas( Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea );
mLogDock->setAllowedAreas( Qt::AllDockWidgetAreas );
addDockWidget( Qt::BottomDockWidgetArea, mLogDock );
mLogDock->setWidget( mLogViewer );
mLogDock->hide();
Expand Down
16 changes: 14 additions & 2 deletions src/gui/vector/qgsfieldcalculator.cpp
Expand Up @@ -349,6 +349,8 @@ void QgsFieldCalculator::populateOutputFieldTypes()
return;
}

int oldDataType = mOutputFieldTypeComboBox->currentData( Qt::UserRole + FTC_TYPE_ROLE_IDX ).toInt();

mOutputFieldTypeComboBox->blockSignals( true );

// Standard subset of fields in case of virtual
Expand Down Expand Up @@ -382,8 +384,18 @@ void QgsFieldCalculator::populateOutputFieldTypes()
mOutputFieldTypeComboBox->setItemData( i, static_cast<int>( typelist[i].mSubType ), Qt::UserRole + FTC_SUBTYPE_IDX );
}
mOutputFieldTypeComboBox->blockSignals( false );
mOutputFieldTypeComboBox->setCurrentIndex( 0 );
mOutputFieldTypeComboBox_activated( 0 );

int idx = mOutputFieldTypeComboBox->findData( oldDataType, Qt::UserRole + FTC_TYPE_ROLE_IDX );
if ( idx != -1 )
{
mOutputFieldTypeComboBox->setCurrentIndex( idx );
mOutputFieldTypeComboBox_activated( idx );
}
else
{
mOutputFieldTypeComboBox->setCurrentIndex( 0 );
mOutputFieldTypeComboBox_activated( 0 );
}
}

void QgsFieldCalculator::mNewFieldGroupBox_toggled( bool on )
Expand Down
11 changes: 11 additions & 0 deletions src/ui/qgisapp.ui
Expand Up @@ -345,6 +345,15 @@
<addaction name="mActionRegularPolygonCenterCorner"/>
<addaction name="mActionRegularPolygon2Points"/>
</widget>
<widget class="QMenu" name="mMenuAnnotation">
<property name="title">
<string>Add Annotation</string>
</property>
<addaction name="mActionTextAnnotation"/>
<addaction name="mActionFormAnnotation"/>
<addaction name="mActionHtmlAnnotation"/>
<addaction name="mActionSvgAnnotation"/>
</widget>
<addaction name="mActionUndo"/>
<addaction name="mActionRedo"/>
<addaction name="separator"/>
Expand All @@ -361,6 +370,7 @@
<addaction name="mMenuRectangle"/>
<addaction name="mMenuRegularPolygon"/>
<addaction name="mMenuEllipse"/>
<addaction name="mMenuAnnotation"/>
<addaction name="mActionMoveFeature"/>
<addaction name="mActionMoveFeatureCopy"/>
<addaction name="mActionDeleteSelected"/>
Expand Down Expand Up @@ -530,6 +540,7 @@
<addaction name="mActionZoomLast"/>
<addaction name="mActionZoomNext"/>
<addaction name="mActionNewMapCanvas"/>
<addaction name="mActionNew3DMapCanvas"/>
<addaction name="mActionNewBookmark"/>
<addaction name="mActionShowBookmarks"/>
<addaction name="mActionTemporalController"/>
Expand Down

0 comments on commit 476ac55

Please sign in to comment.