Salome HOME
Memory Leaks
[modules/superv.git] / src / SUPERVGUI / SUPERVGUI_Main.h
index 7d3b1d32cc5949144d9781c7759791e61a4a9105..274a179848a2a189abcd66bd2562a18a3f6bcb8b 100644 (file)
@@ -1,47 +1,75 @@
-//  File      : SUPERVGUI_Main.h
-//  Created   : 24 / 10 / 2001
-//  Author    : Francis KLOSS
-//  Project   : SALOME
-//  Module    : SUPERVGUI
-//  Copyright : CEA
+//  SUPERV SUPERVGUI : GUI for Supervisor component
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SUPERVGUI_Main.h
+//  Author : Francis KLOSS
+//  Module : SUPERV
 
 #ifndef SUPERVGUI_Main_H
 #define SUPERVGUI_Main_H
 
-//#include "SUPERVGUI.h"
 #include "SUPERVGraph_ViewFrame.h"
-#include "SUPERVGUI_Array.h"
-#include "SUPERVGUI_Graph.h"
 #include "QAD_Desktop.h"
-#include "SUPERVGUI_Port.h"
+#include "SUPERVGUI_Canvas.h"
+#include "SUPERVGUI_CanvasView.h"
+#include "SUPERVGUI_ArrayView.h"
+
+#include <qobject.h>
+#include <qapplication.h>
+#include <qthread.h>
 
 class QAD_Study;
 class QAD_ObjectBrowser;
 class QAD_Message;
+class QAD_SpinBoxDbl;
+class QLineEdit;
+class QComboBox;
 class NOTIFICATION_Consumer;
-
+class SUPERVGUI_Thread;
 
 class SUPERVGUI_Main: public SUPERVGraph_View {
   Q_OBJECT
 
+  // asv : 18.11.04 : making Thread class a friend in order to allow it to modify
+  // a private field myGUIEventLoopFinished
+  friend class SUPERVGUI_Thread;
+
   public:
-    SUPERVGUI_Main(SUPERVGraph_ViewFrame*, QAD_Desktop*, bool fromIOR);
-    SUPERVGUI_Main(SUPERVGraph_ViewFrame*, QAD_Desktop*, bool isModify, const char* filename);
     SUPERVGUI_Main(SUPERVGraph_ViewFrame*, QAD_Desktop*, SUPERV_Graph);
     virtual ~SUPERVGUI_Main();
 
-    void run();
-    void startExecute();
+    void run( const bool andSuspend );
     void kill();
     void suspendResume();
-    void stopRestart();
-    bool exportDataflow(QString theFile);
+    //void stopRestart();
+    void openSubGraph(SUPERV_CNode theNode, bool correct = false);
 
     bool putDataStudy(SUPERV_Port port, const char* inout);
-    void setData(SUPERVGUI_PortIn* p);
 
-    SUPERVGUI_Graph* getGraph();
-    SUPERVGUI_Array* getArray();
+    SUPERVGUI_CanvasArray*  getCanvasArray();
+    SUPERVGUI_ArrayView* getArrayView();
+    SUPERVGUI_Canvas* getCanvas();
+    SUPERVGUI_CanvasView* getCanvasView();
     SUPERV_Graph getDataflow();
     QAD_Message* getMessage();
     QAD_Study* getStudy();
@@ -56,82 +84,175 @@ class SUPERVGUI_Main: public SUPERVGraph_View {
 
     QString getHashCode() 
       { return myHashCode; };
-
+    
+    bool isDataflowInStudy() const;
     
     bool isEditable() 
       { if (SUPERV_isNull(dataflow)) return false;
       return !dataflow->IsReadOnly(); };
 
-    bool isFromStudy() { return myIsFromStudy; }
-    void setAsFromStudy(bool theToStudy);
-    void checkIsInStudy();
-    
     void addComputeNode(SUPERV_CNode theNode);
     void addControlNode(SUPERV_CNode theStartNode, SUPERV_CNode theEndNode, bool Update);
     void addGOTONode(SUPERV_CNode theNode);
+    void addMacroNode(SUPERV_CNode theNode);
 
     void setPaletteBackgroundColor(const QColor& color);
 
     void lockedGraph(bool theLock) { myIsLocked = theLock; }
     bool isLocked() { return myIsLocked; }
 
+    SUPERV::GraphState getNodeExecState();
+    void setNodeExecState(SUPERV::GraphState theNodeExecState);
+
+    QPtrList< char * > getEventNodes();
+    void setEventNodes(QPtrList< char * > theEventNodes);
+    bool removeFirstEN() { return myEventNodes.removeFirst(); }
+    void removeEventNodes() { myEventNodes.clear(); }
+
+    QPtrList< SUPERV::GraphState > getStates();
+    void setStates(QPtrList< SUPERV::GraphState > theStates);
+    bool removeFirstS() { return myStates.removeFirst(); }
+    void removeStates() { myStates.clear(); }
+
+    int getNodesNumber();
+    SUPERVGUI_Thread* getMyThread();
+
+    void startTimer();
+    void executionFinished();
+
+    bool eventFilter( QObject* o, QEvent* e);
+
+    void Editing(); // any Editing operation is to be performed ->
+                   // activate Editors data model in Engine
+    bool ReadyToModify(); // must be called before any modification
+                   // operation - asks to kill execution of dataflow.  If returns false -
+                   // modification (==Editing() ) is not allowed.
+
+    void removeArrayChild(SUPERV::CNode_ptr theNode);
+
+    GraphViewType getViewType() { return myCurrentView; }
+
+  signals:
+    void KillMyThread(bool theValue);
+
   public slots:
-    void execute();
+    void execute(char * theNodeNode, SUPERV::GraphState theNodeState);
     void sync();
     void syncAsync();
-    bool addStudy();
+    void addDataflowToStudy();
     void insertFile();
     void addNode();
     void changeInformation();
     void copy();
-    void showTable();
-    void showFullGraph();
+
+    void showCanvasTable();
     void showContolFlow();
+    void showCanvas();
+
     void filterNotification();
+    void changeDSGraphParameters();
+    void onSubGraphClosed(QAD_StudyFrame* );
+    void onSubGraphActivated(QAD_StudyFrame* );
  
   private slots:
     void chooseData(QListViewItem* item);
+    void checkExecution();
 
   private:
     void init(QAD_Desktop* parent);
-    void StartTimer(const char* m);
-    void StopTimer(const char* m);
     void syncNotification();
     bool isFiltered(char* graph, char* node, char* type, char* message, char* sender, long counter, char* date, long stamp);
+    void closeEvent(QCloseEvent*);
 
     SUPERV_Graph            dataflow;
+
+    QMap<QString, QAD_StudyFrame*> mySubGraphs;
+    QMap<QString, QString>  mySubGraphMap;
+    QAD_StudyFrame*         myLastGraph;
+
     QAD_Study*              study;
     QAD_ObjectBrowser*      objectBrowser;
     QAD_Message*            message;
-    SUPERVGUI_Graph*        graph;
-    QTimer*                 timer;
 
-    GraphViewType   myCurrentView;
-    SUPERVGUI_Array*   array;
+    GraphViewType           myCurrentView;
+    SUPERVGUI_CanvasArray*  myArray;
+    SUPERVGUI_ArrayView*    myArrayView;
+    SUPERVGUI_Canvas*       myCanvas;
+    SUPERVGUI_CanvasView*   myCanvasView;
 
-    bool               choosing;
-    SUPERVGUI_PortIn*  portIn;
+    bool                    choosing;
 
-    QString            myHashCode;
+    QString                 myHashCode;
     
-    bool               myIsFromStudy;
-    int                myCopyNum;
+    bool                    myIsFromStudy;
+    int                     myCopyNum;
 
-    SALOME_NamingService* myNService;
-    QDateTime             myRunTime; // mpv 23.12.2002: we need time of running of dataflow
-                                     // for right Study document modification
+    SALOME_NamingService*   myNService;
+    QDateTime               myRunTime; // mpv 23.12.2002: we need time of running of dataflow
+                                       // for correct Study document modification
     /* notification data */                           
-    NOTIFICATION_Consumer* notification;
-    bool                   myFiltered;
-    bool                   myLogged;
-    QString                myLogFileName;
-    FILE*                  myLogFile;
-    bool                   myWarning;
-    bool                   myStep;
-    bool                   myTrace;
-    bool                   myVerbose;
-    bool                   myIsKilled;
-    bool                   myIsLocked;
+    NOTIFICATION_Consumer*  notification;
+    bool                    myFiltered;
+    bool                    myLogged;
+    QString                 myLogFileName;
+    FILE*                   myLogFile;
+    bool                    myWarning;
+    bool                    myStep;
+    bool                    myTrace;
+    bool                    myVerbose;
+    bool                    myIsLocked;
+
+    SUPERVGUI_Thread*       myThread; 
+
+    QPtrList< char * >                myEventNodes ;
+    QPtrList< SUPERV::GraphState >    myStates ;
+    QTimer*                 myTimer;
+};
+
+class SUPERVGUI_Thread : public QObject, public QThread {
+  Q_OBJECT;
+ public:
+  SUPERVGUI_Thread();
+  ~SUPERVGUI_Thread();
+
+  void startThread(const char* m);
+  void setMain(SUPERVGUI_Main* theMain);
+
+ public slots:
+   void KillThread(bool theValue); 
+  
+ protected:
+  void run();
+
+ private:
+  bool                myIsActive;
+  SUPERVGUI_Main*     myMain;
+  QMutex              myMutex;
+
+};
+
+/**
+ * A dialog for setting Graph execution parameters
+ */
+class SUPERVGUI_DSGraphParameters: public QDialog {
+  Q_OBJECT
+
+  public:
+    SUPERVGUI_DSGraphParameters(SUPERV_Graph theGraph, bool isReadOnly);
+    virtual ~SUPERVGUI_DSGraphParameters();
+
+  private slots:
+    void accept();
+
+  private:
+
+    void setData();
+
+    QAD_SpinBoxDbl*      myDeltaTime;
+    QLineEdit*           myTimeOut;
+    QComboBox*           myDataStreamTrace;
+
+    SUPERV_Graph    myGraph;
 };
 
 #endif