]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
0020523: String notebook support
authordmv <dmv@opencascade.com>
Thu, 8 Oct 2009 14:06:46 +0000 (14:06 +0000)
committerdmv <dmv@opencascade.com>
Thu, 8 Oct 2009 14:06:46 +0000 (14:06 +0000)
src/SalomeApp/SalomeApp_DoubleSpinBox.cxx
src/SalomeApp/SalomeApp_IntSpinBox.cxx
src/SalomeApp/SalomeApp_NoteBookDlg.cxx
src/SalomeApp/SalomeApp_NoteBookDlg.h

index 559da72728dfd95253a7cc3a7c59778e5367f254..c784b6a260d2084d7f109ca3326b2f60dddcda4d 100644 (file)
@@ -19,6 +19,9 @@
 // File:      SalomeApp_DoubleSpinBox.cxx
 // Author:    Oleg UVAROV
 
+#include <PyConsole_Interp.h> // this include must be first (see PyInterp_base.h)!
+#include <PyConsole_Console.h>
+
 #include "SalomeApp_DoubleSpinBox.h"
 #include "SalomeApp_Application.h"
 #include "SalomeApp_Study.h"
@@ -31,6 +34,8 @@
 #include <QKeyEvent>
 #include <QLineEdit>
 
+#include <string>
+
 /*!
   \class SalomeApp_DoubleSpinBox
 */
@@ -320,8 +325,25 @@ SalomeApp_DoubleSpinBox::SearchState SalomeApp_DoubleSpinBox::findVariable( cons
       std::string aName = name.toStdString();
       if( studyDS->IsVariable( aName ) )
       {
-       if( studyDS->IsReal( aName ) || studyDS->IsInteger( aName ) )
+       if( studyDS->IsReal( aName ) || studyDS->IsInteger( aName ) || studyDS->IsString( aName ) )
        {
+         if( studyDS->IsString( aName ) )
+           {
+             PyConsole_Console* pyConsole = app->pythonConsole();
+             PyConsole_Interp* pyInterp = pyConsole->getInterp();
+             PyLockWrapper aLock = pyInterp->GetLockWrapper();
+             std::string command;
+             command  = "import salome_notebook ; ";
+             command += "salome_notebook.notebook.setAsReal(\"";
+             command += aName;
+             command += "\")";
+             bool aResult;
+             aResult = pyInterp->run(command.c_str());
+             if(aResult)
+               {
+                 return IncorrectType;
+               }
+           }
          value = studyDS->GetReal( aName );
          return Found;
        }
index 4d3460a3bd320294afeb4e6a8580a05ec121558e..27427d2e68d48b83bc94b26ce9ec2c929e56b6d8 100644 (file)
@@ -19,6 +19,9 @@
 // File:      SalomeApp_IntSpinBox.cxx
 // Author:    Oleg UVAROV
 
+#include <PyConsole_Interp.h> //this include must be first (see PyInterp_base.h)!
+#include <PyConsole_Console.h>
+
 #include "SalomeApp_IntSpinBox.h"
 #include "SalomeApp_Application.h"
 #include "SalomeApp_Study.h"
@@ -31,6 +34,8 @@
 #include <QKeyEvent>
 #include <QLineEdit>
 
+#include <string>
+
 /*!
   \class SalomeApp_IntSpinBox
 */
@@ -278,8 +283,25 @@ SalomeApp_IntSpinBox::SearchState SalomeApp_IntSpinBox::findVariable( const QStr
       std::string aName = name.toStdString();
       if( studyDS->IsVariable( aName ) )
       {
-       if( studyDS->IsInteger( aName ) )
+       if( studyDS->IsInteger( aName ) || studyDS->IsString( aName ) )
        {
+         if( studyDS->IsString( aName ) )
+           {
+             PyConsole_Console* pyConsole = app->pythonConsole();
+             PyConsole_Interp* pyInterp = pyConsole->getInterp();
+             PyLockWrapper aLock = pyInterp->GetLockWrapper();
+             std::string command;
+             command  = "import salome_notebook ; ";
+             command += "salome_notebook.notebook.setAsInteger(\"";
+             command += aName;
+             command += "\")";
+             bool aResult;
+             aResult = pyInterp->run(command.c_str());
+             if(aResult)
+               {
+                 return IncorrectType;
+               }
+           }
          value = studyDS->GetInteger( aName );
          return Found;
        }
index c4cd89edbd9f01b4beacf92e3d0622fa090ed6b3..347d6a77161a9c85906212cbd596f2b53fc15f4e 100644 (file)
@@ -20,6 +20,9 @@
 // Author : Roman NIKOLAEV, Open CASCADE S.A.S.
 // Module : GUI
 
+#include <PyConsole_Interp.h> // this include must be first (see PyInterp_base.h)!
+#include <PyConsole_Console.h>
+
 #include "SalomeApp_NoteBookDlg.h"
 #include "SalomeApp_Application.h"
 #include "SalomeApp_Study.h"
@@ -34,8 +37,6 @@
 #include <SUIT_ResourceMgr.h>
 #include <SUIT_Session.h>
 
-#include <PyConsole_Console.h>
-
 #include <SALOMEDS_Tool.hxx>
 
 #include <QWidget>
@@ -174,7 +175,8 @@ bool NoteBook_TableRow::CheckValue()
   if(!aValue.isEmpty() && 
      (IsRealValue(aValue) ||
       IsIntegerValue(aValue) ||
-      IsBooleanValue(aValue))) 
+      IsBooleanValue(aValue) ||
+      IsValidStringValue(aValue)))
     aResult = true;
   
   return aResult;
@@ -267,6 +269,18 @@ bool NoteBook_TableRow::IsIntegerValue(const QString theValue, int* theResult)
   return aResult;
 }
 
+//============================================================================
+/*! Function : IsValidStringValue
+ *  Purpose  : Return true if theValue string is valid, otherwise return 
+ *             false
+ *             The string are always valid for the moment
+ *             The whole notebook is verified on apply
+ */
+//============================================================================
+bool NoteBook_TableRow::IsValidStringValue(const QString theValue)
+{
+  return true;
+}
 
 ///////////////////////////////////////////////////////////////////////////
 //                      NoteBook_Table class                             //
@@ -397,6 +411,8 @@ QString NoteBook_Table::Variable2String(const string& theVarName,
     aResult = QString::number(theStudy->GetInteger(theVarName));
   else if( theStudy->IsBoolean(theVarName) )
     aResult = theStudy->GetBoolean(theVarName) ? QString("True") : QString("False");
+  else if( theStudy->IsString(theVarName) )
+    aResult = theStudy->GetString(theVarName).c_str();
   
   return aResult;
 }
@@ -419,7 +435,23 @@ bool NoteBook_Table::IsValid() const
     if( !myRows[i]->CheckName() || !IsUniqueName( myRows[i] ) || !myRows[i]->CheckValue() )
       return false;
 
-  return true;
+  SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
+  PyConsole_Console* pyConsole = app->pythonConsole();
+  PyConsole_Interp* pyInterp = pyConsole->getInterp();
+  PyLockWrapper aLock = pyInterp->GetLockWrapper();
+  string command = "import salome_notebook ; ";
+  command += "salome_notebook.checkThisNoteBook(";
+  for( int i = 0, n = aLastRowIsEmpty ? aNumRows - 1 : aNumRows; i < n; i++ )
+    {
+      command += myRows[i]->GetName().toStdString();
+      command += "=\"";
+      command += myRows[i]->GetValue().toStdString();
+      command += "\",";
+    }
+  command += ")";
+  bool aResult = pyInterp->run(command.c_str());
+  aResult = !aResult;
+  return aResult;
 }
 
 //============================================================================
@@ -886,6 +918,9 @@ void SalomeApp_NoteBookDlg::onApply()
     
       else if( NoteBook_TableRow::IsBooleanValue(aValue,&aBVal) )
        myStudy->SetBoolean(string(aName.toLatin1().constData()),aBVal);
+    
+      else if( NoteBook_TableRow::IsValidStringValue(aValue) )
+       myStudy->SetString(string(aName.toLatin1().constData()),aValue.toStdString());
     }
   }
   myTable->ResetMaps();
index 431b50ced7d01ea82acf5cb60927e53d2959871f..2f1e815cc70ccdc52237aafbf4f6715eca91e76d 100644 (file)
@@ -76,6 +76,7 @@ class SALOMEAPP_EXPORT NoteBook_TableRow : public QWidget
   static bool IsRealValue(const QString theValue, double* theResult = 0);
   static bool IsIntegerValue(const QString theValue, int* theResult = 0);
   static bool IsBooleanValue(const QString theValue, bool* theResult = 0);
+  static bool IsValidStringValue(const QString theName);
   
  private:
   int               myIndex;