Salome HOME
Join modifications from BR_Dev_For_4_0 tag V4_1_1.
[modules/superv.git] / src / SUPERVGUI / SUPERVGUI_Service.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.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 //
23 //
24 //  File   : SUPERVGUI_Service.h
25 //  Author : Francis KLOSS
26 //  Module : SUPERV
27
28 #ifndef SUPERVGUI_Service_H
29 #define SUPERVGUI_Service_H
30
31 #include "SUPERVGUI_Def.h"
32 #include <qtabwidget.h>
33 #include <qhgroupbox.h>
34 #include <qwidgetstack.h>
35
36 class QListBox; 
37
38 /*!
39  * Pane for Python script editing
40  */
41 class SUPERVGUI_PythonEditPane: public QFrame {
42
43   Q_OBJECT
44
45 public:
46   SUPERVGUI_PythonEditPane( QWidget* theParent, const bool isNodeCreation, int& theX, int& theY );
47   ~SUPERVGUI_PythonEditPane() {};
48   
49   QString getFuncName();
50
51   bool isDefined()
52     { return (myText->paragraphs() > 1); }
53
54   SUPERV_Strings getFunction();
55   void setFunction(SUPERV_Strings theStr);
56
57 public slots:
58   // load all functions from an XML file into internal structures 
59   void loadFile();
60
61   // when user presses "Enter" - automatically set indentation of next line
62   void autoIndentLine(); 
63
64   // when user select another function name in combo box - fill myText with its body
65   void readFunction( int i ); 
66
67   // when user presses "Library" button - open a "Create node from Library" dialog
68   void library();
69
70 private:
71   bool         myIsWithLibrary;
72   QTextEdit*   myText;
73   QComboBox*   myFunctionsCombo;
74
75   // fills myPyFunctions list.  called from loadFile() after user selects a file.
76   void         initPyFunctions( QTextStream& );
77
78   // list of Python functions.  filled in loadFile(), strings (functions) retrieved 
79   // in readFunction()
80   QStringList  myPyFunctions; 
81
82   int& myX; // comes from SUPERVGUI_Service 
83   int& myY; // comes from SUPERVGUI_Service 
84
85 };
86
87 /*!
88  * Dialog box for node creation
89  */
90 class SUPERVGUI_Service: public QDialog {
91
92   Q_OBJECT
93
94 public:
95     SUPERVGUI_Service(SALOME_NamingService* ns);
96     ~SUPERVGUI_Service();
97
98     void choose();
99
100     /*!
101      * Do the following actions for newly created Engine's CNode:
102      * 1. Create a presentation for it (CanvasNode)
103      * 2. Place the CanvasNode to the current top-left corner or the current viewport
104      * 3. Increment the coordinates of the next CanvasNode (new nodes are "cascaded" when several of them are created at once)
105      * PS theEndNode is passed only for Loop and Switch nodes (EndLoop and EndSwitch)
106      */ 
107     static void addNode( SUPERV::CNode_var theNode, SUPERV::INode_var theEndNode, int& theX, int& theY );
108
109 protected:
110     void showEvent(QShowEvent* theEvent);
111
112 private:
113     void initialise();
114
115 private slots:
116     void tabChanged(QWidget *);
117     void addComputeNode();
118     void addFactoryNodeDef();
119     void addFactoryNodeCust();
120     void addInlineNode();
121     void addMacroNode();
122     void typeNodeSelected(int theRow);
123     void loadGraph();
124
125 private:
126     QListView* components;
127     SALOME_NamingService* naming;
128     int myX, myY;
129     QWidgetStack* myStackWidget;
130     int myLoopId;
131     int myOtherId;
132
133     SUPERVGUI_PythonEditPane* myScriptPane;
134
135     SUPERVGUI_PythonEditPane* myInitPane;
136     SUPERVGUI_PythonEditPane* myMorePane;
137     SUPERVGUI_PythonEditPane* myNextPane;
138
139     QListView* myMacroPane;
140     QFile*     myMFile;        
141
142     QTabWidget* myTabPane;
143     bool myIsInline;
144
145     QComboBox* myTypeCombo;
146 };
147
148 /*!
149  * Edit Python dialog
150  */
151 class SUPERVGUI_EditPythonDlg: public QDialog {
152
153   Q_OBJECT
154     
155 public:
156   SUPERVGUI_EditPythonDlg(bool isLoop = false);
157   ~SUPERVGUI_EditPythonDlg() {};
158
159   // Not Loop functions
160   QString getFuncName()
161     { return myEditPane->getFuncName(); }
162
163   bool isDefined()
164     { return myEditPane->isDefined(); }
165
166   SUPERV_Strings getFunction()
167     { return myEditPane->getFunction(); }
168
169   void setFunction(SUPERV_Strings theStr)
170     { myEditPane->setFunction(theStr); }
171
172   // Init functions
173   QString getInitFuncName()
174     { return myInitPane->getFuncName(); }
175
176   SUPERV_Strings getInitFunction()
177     { return myInitPane->getFunction(); }
178
179   void setInitFunction(SUPERV_Strings theStr)
180     { myInitPane->setFunction(theStr); }
181
182   // More functions
183   QString getMoreFuncName()
184     { return myMorePane->getFuncName(); }
185
186   SUPERV_Strings getMoreFunction()
187     { return myMorePane->getFunction(); }
188
189   void setMoreFunction(SUPERV_Strings theStr)
190     { myMorePane->setFunction(theStr); }
191
192   // Next functions
193   QString getNextFuncName()
194     { return myNextPane->getFuncName(); }
195
196   SUPERV_Strings getNextFunction()
197     { return myNextPane->getFunction(); }
198
199   void setNextFunction(SUPERV_Strings theStr)
200     { myNextPane->setFunction(theStr); }
201
202 public slots:
203   void clickOnOk();
204
205 private:
206   bool  myIsLoop; // mkr : PAL12236
207
208   SUPERVGUI_PythonEditPane* myEditPane;
209   SUPERVGUI_PythonEditPane* myInitPane;
210   SUPERVGUI_PythonEditPane* myMorePane;
211   SUPERVGUI_PythonEditPane* myNextPane;
212 };
213
214 class SUPERVGUI_CustomSettings: public QDialog {
215   Q_OBJECT
216
217   public:
218     SUPERVGUI_CustomSettings(QListViewItem* theItem, bool isMultiSel, bool isCimpl);
219     virtual ~SUPERVGUI_CustomSettings();
220
221     QString Author();
222     QString Container();
223     QString Comment();
224
225   private slots:
226     void okButton();
227     void koButton();
228
229   private:
230
231     QLineEdit*      authV;
232     QLineEdit*      contV;
233     QLabel*         contL;
234
235     QMultiLineEdit* commV;
236 };
237
238 #endif