Salome HOME
method getViewType() added that returns CANVAS, CONTROL or CANVASTABLE constant corre...
[modules/superv.git] / src / SUPERVGUI / SUPERVGUI_Main.h
1 //  SUPERV SUPERVGUI : GUI for Supervisor component
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
6 //  This library is free software; you can redistribute it and/or 
7 //  modify it under the terms of the GNU Lesser General Public 
8 //  License as published by the Free Software Foundation; either 
9 //  version 2.1 of the License. 
10 // 
11 //  This library is distributed in the hope that it will be useful, 
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
14 //  Lesser General Public License for more details. 
15 // 
16 //  You should have received a copy of the GNU Lesser General Public 
17 //  License along with this library; if not, write to the Free Software 
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : SUPERVGUI_Main.h
25 //  Author : Francis KLOSS
26 //  Module : SUPERV
27
28 #ifndef SUPERVGUI_Main_H
29 #define SUPERVGUI_Main_H
30
31 #include "SUPERVGraph_ViewFrame.h"
32 #include "QAD_Desktop.h"
33 #include "SUPERVGUI_Canvas.h"
34 #include "SUPERVGUI_CanvasView.h"
35 #include "SUPERVGUI_ArrayView.h"
36
37 #include <qobject.h>
38 #include <qapplication.h>
39 #include <qthread.h>
40
41 class QAD_Study;
42 class QAD_ObjectBrowser;
43 class QAD_Message;
44 class QAD_SpinBoxDbl;
45 class QLineEdit;
46 class QComboBox;
47 class NOTIFICATION_Consumer;
48 class SUPERVGUI_Thread;
49
50 class SUPERVGUI_Main: public SUPERVGraph_View {
51   Q_OBJECT
52
53   // asv : 18.11.04 : making Thread class a friend in order to allow it to modify
54   // a private field myGUIEventLoopFinished
55   friend class SUPERVGUI_Thread;
56
57   public:
58     SUPERVGUI_Main(SUPERVGraph_ViewFrame*, QAD_Desktop*, SUPERV_Graph);
59     virtual ~SUPERVGUI_Main();
60
61     void run();
62     void startExecute();
63     void kill();
64     void suspendResume();
65     //void stopRestart();
66     void openSubGraph(SUPERV_CNode theNode, bool correct = false);
67
68     bool putDataStudy(SUPERV_Port port, const char* inout);
69
70     SUPERVGUI_CanvasArray*  getCanvasArray();
71     SUPERVGUI_ArrayView* getArrayView();
72     SUPERVGUI_Canvas* getCanvas();
73     SUPERVGUI_CanvasView* getCanvasView();
74     SUPERV_Graph getDataflow();
75     QAD_Message* getMessage();
76     QAD_Study* getStudy();
77     bool isArrayShown();
78     void showPopup(QPopupMenu* p, QMouseEvent* e);
79
80     void ActivatePanning();
81     void ResetView();
82
83     void setHashCode(QString theCode) 
84       { myHashCode = theCode; };
85
86     QString getHashCode() 
87       { return myHashCode; };
88
89     
90     bool isEditable() 
91       { if (SUPERV_isNull(dataflow)) return false;
92       return !dataflow->IsReadOnly(); };
93
94     bool isFromStudy() { return myIsFromStudy; }
95     void setAsFromStudy(bool theToStudy);
96     void checkIsInStudy();
97     
98     void addComputeNode(SUPERV_CNode theNode);
99     void addControlNode(SUPERV_CNode theStartNode, SUPERV_CNode theEndNode, bool Update);
100     void addGOTONode(SUPERV_CNode theNode);
101     void addMacroNode(SUPERV_CNode theNode);
102
103     void setPaletteBackgroundColor(const QColor& color);
104
105     void lockedGraph(bool theLock) { myIsLocked = theLock; }
106     bool isLocked() { return myIsLocked; }
107
108     SUPERV::GraphState getNodeExecState();
109     void setNodeExecState(SUPERV::GraphState theNodeExecState);
110
111     QPtrList< char * > getEventNodes();
112     void setEventNodes(QPtrList< char * > theEventNodes);
113     bool removeFirstEN() { return myEventNodes.removeFirst(); }
114     void removeEventNodes() { myEventNodes.clear(); }
115
116     QPtrList< SUPERV::GraphState > getStates();
117     void setStates(QPtrList< SUPERV::GraphState > theStates);
118     bool removeFirstS() { return myStates.removeFirst(); }
119     void removeStates() { myStates.clear(); }
120
121     int getNodesNumber();
122     SUPERVGUI_Thread* getMyThread();
123
124     void startTimer();
125     void executionFinished();
126
127     bool eventFilter( QObject* o, QEvent* e);
128
129     bool IsGUIEventLoopFinished() const { return myGUIEventLoopFinished; }
130
131     void Editing(); // any Editing operation is to be performed ->
132                     // activate Editors data model in Engine
133
134     void removeArrayChild(SUPERV::CNode_ptr theNode);
135
136     GraphViewType getViewType() { return myCurrentView; }
137
138   signals:
139     void KillMyThread(bool theValue);
140
141   public slots:
142     void execute(char * theNodeNode, SUPERV::GraphState theNodeState);
143     void sync();
144     void syncAsync();
145     bool addStudy();
146     void insertFile();
147     void addNode();
148     void changeInformation();
149     void copy();
150
151     void showCanvasTable();
152     void showContolFlow();
153     void showCanvas();
154
155     void filterNotification();
156     void changeDSGraphParameters();
157     void onSubGraphClosed(QAD_StudyFrame* );
158     void onSubGraphActivated(QAD_StudyFrame* );
159  
160   private slots:
161     void chooseData(QListViewItem* item);
162     void checkExecution();
163
164   private:
165     void init(QAD_Desktop* parent);
166     void syncNotification();
167     bool isFiltered(char* graph, char* node, char* type, char* message, char* sender, long counter, char* date, long stamp);
168     void closeEvent(QCloseEvent*);
169
170     SUPERV_Graph            dataflow;
171
172     QMap<QString, QAD_StudyFrame*> mySubGraphs;
173     QMap<QString, QString>  mySubGraphMap;
174     QAD_StudyFrame*         myLastGraph;
175
176     QAD_Study*              study;
177     QAD_ObjectBrowser*      objectBrowser;
178     QAD_Message*            message;
179
180     GraphViewType   myCurrentView;
181     SUPERVGUI_CanvasArray*  myArray;
182     SUPERVGUI_ArrayView*    myArrayView;
183     SUPERVGUI_Canvas*       myCanvas;
184     SUPERVGUI_CanvasView*   myCanvasView;
185
186     bool               choosing;
187
188     QString            myHashCode;
189     
190     bool               myIsFromStudy;
191     int                myCopyNum;
192
193     SALOME_NamingService* myNService;
194     QDateTime             myRunTime; // mpv 23.12.2002: we need time of running of dataflow
195                                      // for right Study document modification
196     /* notification data */                            
197     NOTIFICATION_Consumer* notification;
198     bool                   myFiltered;
199     bool                   myLogged;
200     QString                myLogFileName;
201     FILE*                  myLogFile;
202     bool                   myWarning;
203     bool                   myStep;
204     bool                   myTrace;
205     bool                   myVerbose;
206     bool                   myIsLocked;
207
208     SUPERVGUI_Thread*      myThread; 
209
210     QPtrList< char * >                myEventNodes ;
211     QPtrList< SUPERV::GraphState >    myStates ;
212     QTimer*                myTimer;
213     
214     // asv : 18.11.04 : fix for bug 6170 : this field is FALSE when SUPERVGUI_Thread
215     // is inside event loop during graph execution.  dataflow->IsDone() returns true
216     // BEFORE all events are handled (a few of them are still being processed in GUI thread), 
217     // and for bug 6170 it is neccessary to know exactly when GUI events processing stops..
218     bool                   myGUIEventLoopFinished;
219 };
220
221 class SUPERVGUI_Thread : public QObject, public QThread {
222   Q_OBJECT;
223  public:
224   SUPERVGUI_Thread();
225   ~SUPERVGUI_Thread();
226
227   void startThread(const char* m);
228   void stopThread(const char* m);
229   void setMain(SUPERVGUI_Main* theMain);
230
231  public slots:
232    void KillThread(bool theValue); 
233   
234  protected:
235   void run();
236
237  private:
238   bool                myIsActive;
239   SUPERVGUI_Main*     myMain;
240   QMutex              myMutex;
241
242 };
243
244 /**
245  * A dialog for setting Graph execution parameters
246  */
247 class SUPERVGUI_DSGraphParameters: public QDialog {
248   Q_OBJECT
249
250   public:
251     SUPERVGUI_DSGraphParameters(SUPERV_Graph theGraph, bool isReadOnly);
252     virtual ~SUPERVGUI_DSGraphParameters();
253
254   private slots:
255     void accept();
256
257   private:
258
259     void setData();
260
261     QAD_SpinBoxDbl*      myDeltaTime;
262     QLineEdit*           myTimeOut;
263     QComboBox*           myDataStreamTrace;
264
265     SUPERV_Graph    myGraph;
266 };
267
268 #endif