]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
#1150 Tab buttons problems
authornds <nds@opencascade.com>
Fri, 25 Dec 2015 09:14:25 +0000 (12:14 +0300)
committernds <nds@opencascade.com>
Fri, 25 Dec 2015 12:38:21 +0000 (15:38 +0300)
#1112 tab key doesn't work on the last field of left panels

src/ModuleBase/ModuleBase_ModelWidget.cpp
src/PartSet/PartSet_SketcherReetntrantMgr.cpp
src/XGUI/XGUI_PropertyPanel.cpp

index fc7beb3e2760b206dd786e1b333459758bdb28de..f0f959480defe559b3337ad66f3d8f6e1a883423 100644 (file)
@@ -171,7 +171,7 @@ void ModuleBase_ModelWidget::activate()
 void ModuleBase_ModelWidget::deactivate()
 {
   myIsValueStateBlocked = false;
-  if (myState == ModifiedInPP)
+  if (myState == ModifiedInPP || myState == ModifiedInViewer)
     storeValue();
   myState = Stored;
 }
@@ -298,8 +298,11 @@ bool ModuleBase_ModelWidget::eventFilter(QObject* theObject, QEvent *theEvent)
                         aReason == Qt::TabFocusReason ||
                         aReason == Qt::BacktabFocusReason ||
                         aReason == Qt::OtherFocusReason; // to process widget->setFocus()
-    if (aMouseOrKey && getControls().contains(aWidget) && getValueState() == ModifiedInPP)
-      storeValue();
+    if (aMouseOrKey && getControls().contains(aWidget)) {
+      if (getValueState() == ModifiedInPP) {
+        storeValue();
+      }
+    }
   }
   // pass the event on to the parent class
 
index e2e5442d9a09d93ae48975b8eef1d4422a840631..8920f8fd9a3ce9c2b2b723f9d5f7d5870eedd6b8 100755 (executable)
@@ -217,7 +217,10 @@ bool PartSet_SketcherReetntrantMgr::processEnter(const std::string& thePreviousA
     return isDone;
 
   bool isSketchSolverError = module()->sketchMgr()->sketchSolverError();
-  if (!isSketchSolverError) {
+
+  // empty previous attribute means that the Apply/Ok button has focus and the enter
+  // should not lead to start edition mode of the previous operation
+  if (!isSketchSolverError && !thePreviousAttributeID.empty()) {
     myRestartingMode = RM_EmptyFeatureUsed;
     isDone = startInternalEdit(thePreviousAttributeID);
   }
index e4b8371cde4eb98579e8ddbf8661866aede0e2ec..52fa70e11bf8d4220e979d9b9db29a1bfb416498 100755 (executable)
@@ -183,7 +183,7 @@ void XGUI_PropertyPanel::activateNextWidget(ModuleBase_ModelWidget* theWidget)
   activateWidget(NULL);
 }
 
-#define DEBUG_TAB_WIDGETS
+//#define DEBUG_TAB_WIDGETS
 
 #define DEBUG_TAB
 #ifdef DEBUG_TAB
@@ -229,8 +229,8 @@ bool XGUI_PropertyPanel::focusNextPrevChild(bool theIsNext)
   // controls, last control, Apply, Cancel, first control, controls
   bool isChangedFocus = false;
 
-#ifdef DEBUG_TAB_WIDGETS
   QWidget* aFocusWidget = focusWidget();
+#ifdef DEBUG_TAB_WIDGETS
   if (aFocusWidget) {
     QString anInfo = QString("focus Widget: %1").arg(aFocusWidget->objectName());
     qDebug(anInfo.toStdString().c_str());
@@ -273,6 +273,15 @@ bool XGUI_PropertyPanel::focusNextPrevChild(bool theIsNext)
     }
   }
   if (aNewFocusWidget) {
+    if (myActiveWidget) {
+      myActiveWidget->getControls();
+      bool isFirstControl = !theIsNext;
+      QWidget* aLastFocusControl = myActiveWidget->getControlAcceptingFocus(isFirstControl);
+      if (aFocusWidget == aLastFocusControl) {
+        this->setActiveWidget(NULL);
+      }
+    }
+
     //ModuleBase_Tools::setFocus(aNewFocusWidget, "XGUI_PropertyPanel::focusNextPrevChild()");
     aNewFocusWidget->setFocus(theIsNext ? Qt::TabFocusReason : Qt::BacktabFocusReason);
     isChangedFocus = true;