]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Support for correct caclculation rules which includes selection parameters without...
authorstv <stv@opencascade.com>
Fri, 10 Feb 2006 09:40:06 +0000 (09:40 +0000)
committerstv <stv@opencascade.com>
Fri, 10 Feb 2006 09:40:06 +0000 (09:40 +0000)
src/Qtx/QtxListOfOperations.cxx
src/Qtx/QtxParser.cxx
src/Qtx/QtxPopupMgr.cxx
src/Qtx/QtxPopupMgr.h
src/Qtx/QtxStdOperations.cxx
src/Qtx/QtxStdOperations.h

index 1be04a75df1be348387ea71b83992aa6bc196990..0a4393b6256df3b3381d91820733da352d161dad 100644 (file)
@@ -159,9 +159,8 @@ QtxParser::Error QtxListOfOperations::calculate( const QString& op,
             QtxParser::Error err = (*anIt).myOperations->calculate( op, nv1, nv2 );
             if( err==QtxParser::OK || err==QtxParser::InvalidResult )
             {
-                QString oop = (*anIt).myName;
-                const char* ooo = oop.latin1();
-                v1 = nv1; v2 = nv2; 
+                v1 = nv1;
+                v2 = nv2; 
                 return err;
             }
         }
index 105ddb7a508dfc8729c3862d572a401574e37e59..b2f7c72ac6ac7eb7049ec1f4b4ff9f5f098edf71 100644 (file)
@@ -552,10 +552,10 @@ QtxValue QtxParser::calculate()
             if( has( nn ) )
             {
                 QVariant& v = myParameters[ nn ];
-                if( v.isValid() )
+                //if( v.isValid() )
                     aStack.push( v );
-                else
-                    setLastError( InvalidToken );
+                //else
+                  //  setLastError( InvalidToken );
             }
             else
                 setLastError( InvalidToken );
index f01716c165350c93755c30802de8718e746d4f84..b19a54cab8e9a5df9e6674d1cf0eb2d051f2afaa 100644 (file)
@@ -521,46 +521,53 @@ bool QtxPopupMgr::isSatisfied( QAction* act, bool visibility ) const
   QString menu = act->menuText();
 
   bool res = false;
-  if( !act )
+  if ( !act )
     return res;
 
-  if( hasRule( act, visibility ) )
+  if ( hasRule( act, visibility ) )
   {
     QtxParser* p = map( visibility )[ act ];
     QStringList specific;
     p->clear();
-    ( ( Operations* )myOperations->operations( "custom" ) )->clear();
+    ((Operations*)myOperations->operations( "custom" ))->clear();
 
     setParams( p, specific );
 
     QMap<QValueList<QtxValue>,int> aCorteges;
     QValueList<QtxValue> c;
 
-    if( specific.count()>0 )
-      if( myCurrentSelection )
+    if ( specific.count() )
+    {
+      if ( myCurrentSelection )
       {
-       res = false;
-
-       for( int i=0, n=myCurrentSelection->count(); i<n && !res; i++ )
-       {
-         QStringList::const_iterator anIt1 = specific.begin(), aLast1 = specific.end();
-         c.clear();
-         for( ; anIt1!=aLast1; anIt1++ )
-           c.append( myCurrentSelection->param( i, *anIt1 ) );
-         aCorteges.insert( c, 0 );
-       }
+             res = false;
+        if ( myCurrentSelection->count() )
+        {
+               for( int i = 0, n = myCurrentSelection->count(); i < n && !res; i++ )
+               {
+                 c.clear();
+                 for ( QStringList::const_iterator anIt1 = specific.begin(); anIt1 != specific.end(); anIt1++ )
+                   c.append( myCurrentSelection->param( i, *anIt1 ) );
+            aCorteges.insert( c, 0 );
+          }
+        }
+        else
+        {
+          for ( QStringList::const_iterator anIt1 = specific.begin(); anIt1 != specific.end(); anIt1++ )
+                 c.append( QtxValue() );
+          aCorteges.insert( c, 0 );
+       }
        
-       //qDebug( QString( "%1 corteges" ).arg( aCorteges.count() ) );
-       QMap<QValueList<QtxValue>,int>::const_iterator anIt = aCorteges.begin(), aLast = aCorteges.end();
-       for( ; anIt!=aLast; anIt++ )
-       {
-         QStringList::const_iterator anIt1 = specific.begin(), aLast1 = specific.end();
-         const QValueList<QtxValue>& aCortege = anIt.key();
-         QValueList<QtxValue>::const_iterator anIt2 = aCortege.begin();
-         for( ; anIt1!=aLast1; anIt1++, anIt2++ )
-           p->set( *anIt1, *anIt2 );
-         res = res || result( p );
-       }
+             //qDebug( QString( "%1 corteges" ).arg( aCorteges.count() ) );
+             for ( QMap<QValueList<QtxValue>,int>::const_iterator anIt = aCorteges.begin(); anIt != aCorteges.end(); anIt++ )
+             {
+               QStringList::const_iterator anIt1 = specific.begin(), aLast1 = specific.end();
+               const QValueList<QtxValue>& aCortege = anIt.key();
+               QValueList<QtxValue>::const_iterator anIt2 = aCortege.begin();
+               for ( ; anIt1 != aLast1; anIt1++, anIt2++ )
+                 p->set( *anIt1, *anIt2 );
+               res = res || result( p );
+             }
 
        /*
        for( int i=0, n=myCurrentSelection->count(); i<n && !res; i++ )
@@ -572,7 +579,8 @@ bool QtxPopupMgr::isSatisfied( QAction* act, bool visibility ) const
        }*/
       }
       else
-       res = false;
+             res = false;
+    }
     else
       res = result( p );
   }
@@ -604,20 +612,35 @@ void QtxPopupMgr::updatePopup( QPopupMenu* p, Selection* sel )
   if( !p || !sel )
     return;
 
-  myCurrentSelection = new QtxCacheSelection( sel );
-  RulesMap::iterator anIt = myToggle.begin(),
-                            aLast = myToggle.end();
-  for( ; anIt!=aLast; anIt++ )
-    if( anIt.key()->isToggleAction() && hasRule( anIt.key(), false ) )
+  setSelection( sel );
+
+  for ( RulesMap::iterator anIt = myToggle.begin(); anIt != myToggle.end(); anIt++ )
+  {
+    if ( anIt.key()->isToggleAction() && hasRule( anIt.key(), false ) )
       anIt.key()->setOn( isSatisfied( anIt.key(), false ) );
+  }
 
   setWidget( ( QWidget* )p );
+
   updateMenu();
+
   QTime t2 = QTime::currentTime();
   qDebug( QString( "update popup time = %1 msecs" ).arg( t1.msecsTo( t2 ) ) );
   qDebug( QString( "number of objects = %1" ).arg( myCurrentSelection->count() ) );
 
+  setSelection( 0 );
+}
+
+void QtxPopupMgr::setSelection( Selection* s )
+{
+  if ( myCurrentSelection == s )
+    return;
+
   delete myCurrentSelection;
+  myCurrentSelection = 0;
+
+  if ( s )
+    myCurrentSelection = new QtxCacheSelection( s );
 }
 
 //================================================================
index a75a7dcedba63de4751788afd1357481b0533305..7c6e86024239ec9a489cca2e7bab5df1fd3905f4 100644 (file)
@@ -102,6 +102,7 @@ protected:
     typedef QMap< QAction*, QtxParser* > RulesMap;
 
 protected:
+    void    setSelection( Selection* );
     virtual bool      isSatisfied( QAction*, bool visibility ) const;
             void      setParams( QtxParser*, QStringList& ) const;
             RulesMap& map( bool visibility ) const;
index 6d612b2998645ea1a24a7dad4c5cdbaf76ba6240..64339b8554b48e7eb4224e9519ada46298fb480f 100644 (file)
@@ -544,6 +544,13 @@ QtxStrings::~QtxStrings()
 {
 }
 
+QtxParser::Error QtxStrings::isValid( const QString& name,
+                                      const QVariant::Type t1,
+                                      const QVariant::Type t2 ) const
+{
+  return name == "=" ? QtxParser::OK : QtxStdOperations::isValid( name, t1, t2 );
+}
+
 //================================================================
 // Function : 
 // Purpose  : 
@@ -609,8 +616,10 @@ QtxParser::Error QtxStrings::calculate( const QString& op,
         else if( op==">=" )
             set( v1, _v1>_v2 || _v1==_v2 );
     }
-    else if( !v1.isValid() && v2.isValid() )
+    else
     {
+      if( !v1.isValid() && v2.isValid() )
+      {
         QString val = v2.toString();
         if( op=="length" )
             v2 = ( int )val.length();
@@ -618,8 +627,12 @@ QtxParser::Error QtxStrings::calculate( const QString& op,
             v2 = val.lower();
         else if( op=="upper" )
             v2 = val.upper();
+      }
+      if ( op=="=" )
+        set( v1, false );
     }
 
+
     return err;
 }
 
index 5a8cfd48e434e38b3efd5dd83841c9ada018ad76..99d9a555780ee2e75a0a6f1b168e537cd0aeee25 100644 (file)
@@ -107,6 +107,10 @@ public:
     QtxStrings();
     virtual ~QtxStrings();
 
+    virtual QtxParser::Error isValid( const QString&,
+                                      const QVariant::Type,
+                                      const QVariant::Type ) const;
+
     virtual bool  createValue( const QString&, QtxValue& ) const;
     virtual int   prior( const QString&, bool isBin ) const;
     virtual QtxParser::Error calculate( const QString&, QtxValue&, QtxValue& ) const;