+#ifdef DEBUG_TAB_WIDGETS
+ if (theDebug) {
+ QStringList aWidgetTypes;
+ QList<QWidget*>::const_iterator anIt = theWidgets.begin(), aLast = theWidgets.end();
+ for (; anIt != aLast; anIt++) {
+ QWidget* aWidget = *anIt;
+ if (aWidget)
+ aWidgetTypes.append(aWidget->objectName());
+ }
+ QString anInfo = QString("theWidgets[%1]: %2")
+ .arg(theWidgets.count()).arg(aWidgetTypes.join(","));
+ qDebug(anInfo.toStdString().c_str());
+ }
+#endif
+}
+
+bool XGUI_PropertyPanel::setFocusNextPrevChild(bool theIsNext)
+{
+ return focusNextPrevChild(theIsNext);
+}
+
+bool XGUI_PropertyPanel::focusNextPrevChild(bool theIsNext)
+{
+ // it wraps the Tabs clicking to follow in the chain:
+ // controls, last control, Apply, Cancel, first control, controls
+ bool isChangedFocus = false;
+
+ QWidget* aFocusWidget = focusWidget();
+#ifdef DEBUG_TAB_WIDGETS
+ if (aFocusWidget) {
+ QString anInfo = QString("focus Widget: %1").arg(aFocusWidget->objectName());
+ qDebug(anInfo.toStdString().c_str());
+ }
+#endif
+ ModuleBase_ModelWidget* aFocusMWidget = ModuleBase_ModelWidget::findModelWidget(this,
+ aFocusWidget);
+ //if (aFocusMWidget)
+ // aFocusMWidget->setHighlighted(false);
+
+ QWidget* aNewFocusWidget = 0;
+ if (aFocusWidget) {
+ QList<QWidget*> aChildren;
+ findDirectChildren(this, aChildren, true);
+ int aChildrenCount = aChildren.count();
+ int aFocusWidgetIndex = aChildren.indexOf(aFocusWidget);
+ QToolButton* anOkBtn = findButton(PROP_PANEL_OK);
+ if (aFocusWidgetIndex >= 0) {
+ if (theIsNext) {
+ if (aFocusWidgetIndex == aChildrenCount-1) {
+ // after the last widget focus should be set to "Apply"
+ if (anOkBtn->isEnabled())
+ aNewFocusWidget = anOkBtn;
+ else {
+ QToolButton* aCancelBtn = findButton(PROP_PANEL_CANCEL);
+ if (aCancelBtn->isEnabled())
+ aNewFocusWidget = aCancelBtn;
+ }
+ }
+ else {
+ aNewFocusWidget = aChildren[aFocusWidgetIndex+1];
+ }
+ }
+ else {
+ if (aFocusWidgetIndex == 0) {
+ // before the first widget, the last should accept focus
+ aNewFocusWidget = aChildren[aChildrenCount - 1];
+ }
+ else {
+ // before the "Apply" button, the last should accept focus for consistency with "Next"
+ if (aFocusWidget == anOkBtn) {
+ aNewFocusWidget = aChildren[aChildrenCount - 1];
+ }
+ else {
+ aNewFocusWidget = aChildren[aFocusWidgetIndex-1];
+ }
+ }
+ }
+ }
+ }
+ if (aNewFocusWidget) {
+ if (myActiveWidget) {
+ bool isFirstControl = !theIsNext;
+ QWidget* aLastFocusControl = myActiveWidget->getControlAcceptingFocus(isFirstControl);
+ if (aFocusWidget == aLastFocusControl) {
+ setActiveWidget(NULL, false);
+ }
+ }
+
+ // we want to have property panel as an active window to enter values in double control
+ ModuleBase_Tools::setFocus(aNewFocusWidget, "XGUI_PropertyPanel::focusNextPrevChild()");
+
+ ModuleBase_ModelWidget* aNewFocusMWidget = ModuleBase_ModelWidget::findModelWidget(this,
+ aNewFocusWidget);
+ if (aNewFocusMWidget) {
+ if (aFocusMWidget) {
+ aFocusMWidget->setHighlighted(false);
+ }
+ aNewFocusMWidget->emitFocusInWidget();
+ isChangedFocus = true;
+ }
+ }
+ return isChangedFocus;