From: nds Date: Sat, 26 Dec 2015 17:44:39 +0000 (+0300) Subject: Issue #1112 tab key doesn't work on the last field of left panels X-Git-Tag: V_2.1.0~19 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=b2a662eec6a0258d51a67ee7e341541e7a710752;p=modules%2Fshaper.git Issue #1112 tab key doesn't work on the last field of left panels It is improved for plane feature. Moreover, it provides the focus to Cancel button if Ok is disabled. This is implemented in order to property panel does not lose the focus. --- diff --git a/src/XGUI/XGUI_PropertyPanel.cpp b/src/XGUI/XGUI_PropertyPanel.cpp index e298bd030..fcb16a376 100755 --- a/src/XGUI/XGUI_PropertyPanel.cpp +++ b/src/XGUI/XGUI_PropertyPanel.cpp @@ -209,6 +209,21 @@ void XGUI_PropertyPanel::activateNextWidget(ModuleBase_ModelWidget* theWidget, } isFoundWidget = isFoundWidget || (*anIt) == theWidget; } + // set focus to Ok/Cancel button in Property panel if there are no more active widgets + // it should be performed before activateWidget(NULL) because it emits some signals which + // can be processed by moudule for example as to activate another widget with setting focus + QWidget* aNewFocusWidget = 0; + QToolButton* anOkBtn = findChild(PROP_PANEL_OK); + if (anOkBtn->isEnabled()) + aNewFocusWidget = anOkBtn; + else { + QToolButton* aCancelBtn = findChild(PROP_PANEL_CANCEL); + if (aCancelBtn->isEnabled()) + aNewFocusWidget = aCancelBtn; + } + if (aNewFocusWidget) + aNewFocusWidget->setFocus(Qt::TabFocusReason); + activateWidget(NULL); } @@ -222,10 +237,32 @@ void findDirectChildren(QWidget* theParent, QList& theWidgets, const b for (int i = 0, aCount = aLayout->count(); i < aCount; i++) { QLayoutItem* anItem = aLayout->itemAt(i); QWidget* aWidget = anItem ? anItem->widget() : 0; - if (aWidget && aWidget->isVisible()) { - if (aWidget->focusPolicy() != Qt::NoFocus) - theWidgets.append(aWidget); - findDirectChildren(aWidget, theWidgets, false); + if (aWidget) { + if (aWidget->isVisible()) { + if (aWidget->focusPolicy() != Qt::NoFocus) + theWidgets.append(aWidget); + findDirectChildren(aWidget, theWidgets, false); + } + } + else if (anItem->layout()) { + QLayout* aLayout = anItem->layout(); + for (int i = 0, aCount = aLayout->count(); i < aCount; i++) { + QLayoutItem* anItem = aLayout->itemAt(i); + QWidget* aWidget = anItem ? anItem->widget() : 0; + if (aWidget) { + if (aWidget->isVisible()) { + if (aWidget->focusPolicy() != Qt::NoFocus) + theWidgets.append(aWidget); + findDirectChildren(aWidget, theWidgets, false); + } + } + else { + // TODO: improve recursive search for the case when here QLayout is used + // currently, the switch widget uses only 1 level of qlayout in qlayout using for + // example for construction plane feature. If there are more levels, + // it should be implemented here + } + } } } }