source: Sophya/trunk/SophyaPI/PIext/cxxexecwin.cc@ 1268

Last change on this file since 1268 was 1268, checked in by ercodmgr, 25 years ago

3ieme argument string& toks pour Execute et ExecuteCommand
preparation gestion TmpDir dans cxxexecutor
suppression de ExecuteCXX ds cxxexecutor et appels
possibilite d'ajouter des userfct.cc ds cxxexecutor

cmv 1/11/00

File size: 7.8 KB
RevLine 
[1251]1// Classe CxxExecWindow : Control Window for CxxExecutor
2// Classe CxxExecOptWindow : Option Window for CxxExecutor
3// (c) DAPNIA (CEA) LAL (IN2P3/CNRS)
4// R. Ansari 10/2000
5
6#include "cxxexecutor.h"
7#include "cxxexecwin.h"
8
9/* --Methode-- */
10CxxExecWind::CxxExecWind(PIStdImgApp* par, CxxExecutor * cxxexec)
11: PIWindow((PIMsgHandler *)par, "CxxExecutor", PIWK_normal, 400, 300, 150, 150)
12{
13 dap = par;
14 cxxex = cxxexec;
15
16 int bsx, bsy, szx, szy;
17 int px, py, spx, spy;
18 // On definit la taille a partir de la taille par defaut des composantes
19 PIApplicationPrefCompSize(bsx, bsy);
20 // On redefinit la taille de la fenetre
21 spx = bsx/6;
22 spy = bsy/6;
23 szx = 8*bsx+2*spx;
24 szy = 10*bsy+8*spy;
25 SetSize(szx, szy);
26
27// Creation de champs "labels"
28 px = (szx-6*bsx)/2;
29 py = 2*spy;
30 mLab = new PILabel(this, "File", bsx*6, bsy, bsx, py);
31 mLab->SetLabel("No File Name");
32 mLab->SetBorderWidth(1);
33 mLab->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
34
35 px = spx;
36 py = 4*spy+bsy;
37
38// Creation du champ texte
39 mText = new PIText(this, "helptext", true, true, bsx*8, 8*bsy, px, py);
40// mText->SetMutiLineMode(true);
41 mText->SetTextEditable(true);
42 mText->SetText("");
43 mText->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
44
45// Creation de bouton d'action
46
47 py += 2*spy+8*bsy;
48 px = (szx-6*bsx-8*spx)/2;
49 mBut[0] = new PIButton(this, "Exec", 400, bsx*1.2, bsy, px, py);
50 px += 1.2*bsx+2*spx;
51 mBut[1] = new PIButton(this, "Open", 500, bsx*1.2, bsy, px, py);
52 px += 1.2*bsx+2*spx;
53 mBut[2] = new PIButton(this, "Save", 600, bsx*1.2, bsy, px, py);
54 px += 1.2*bsx+2*spx;
55 mBut[3] = new PIButton(this, "Save As", 660, bsx*1.2, bsy, px, py);
56 px += 1.2*bsx+2*spx;
57 mBut[4] = new PIButton(this, "Dismiss", 700, bsx*1.2, bsy, px, py);
58
59// Taille et position proportionnelles a la taille de la fenetre pour les elements
60 for(int ii=0; ii<5; ii++)
61 mBut[ii]->SetBinding(PIBK_elastic , PIBK_elastic , PIBK_elastic , PIBK_elastic);
62
63 // Notre File Chooser
64 pfc = new PIFileChooser(this,"CxxExec-FileChooser", 5000);
65}
66
67/* --Methode-- */
68CxxExecWind::~CxxExecWind()
69{
70 delete mLab;
71 delete mText;
72 for(int i=0; i<5; i++) delete mBut[i];
73 delete pfc;
74}
75
76
77/* --Methode-- */
78void CxxExecWind::Show()
79{
80 mLab->SetLabel(flnm);
81 PIWindow::Show();
82}
83
84/* --Methode-- */
85void CxxExecWind::Process(PIMessage msg, PIMsgHandler* /*sender*/, void* data)
86{
87
88 switch (UserMsg(msg)) {
89
90 case 400: // Bouton Execute C++
91 {
92 dap->SetBusy();
93 mBut[0]->SetUnSensitive();
[1268]94 string localkey = "c++exec";
95 vector<string> localtokens;
96 string localstr = mText->GetText();
97 localtokens.push_back(localstr);
98 cxxex->Execute(localkey,localtokens,localstr);
[1251]99 mBut[0]->SetSensitive();
100 dap->SetReady();
101 break;
102 }
103
104 case 500: // Open File
105 pfc->AcceptNewFile(false);
106 pfc->SetMsg(5500);
107 dap->SetBlocked();
108 pfc->Show();
109 break;
110
111 case 5500: // Return from open-file dialog
112 dap->SetBusy();
113 if (data) {
114 flnm = pfc->GetFileName();
115 mLab->SetLabel(flnm);
116 // We have to read the file
117 mText->SetText("REZA A FAIRE \n Fichier non lu !");
118 }
119 dap->SetReady();
120 break;
121
122 case 600:
123 case 660:
124 if ( (UserMsg(msg) == 600) && (flnm.length() > 0) ) {
125 cerr << " REZA A FAIRE ! Il faut sauver le champ texte ds fichier "
126 << flnm << endl;
127 }
128 else {
129 pfc->AcceptNewFile(true);
130 pfc->SetMsg(5600);
131 dap->SetBlocked();
132 pfc->Show();
133 }
134 break;
135
136 case 5600: // Return from Save-file dialog
137 dap->SetBusy();
138 if (data) {
139 flnm = pfc->GetFileName();
140 mLab->SetLabel(flnm);
141 // We have to save to the file
142 cerr << " REZA A FAIRE ! Il faut sauver le champ texte ds fichier (2)"
143 << flnm << endl;
144 }
145 dap->SetReady();
146 break;
147
148 case 700: // Bouton Dismiss - On cache la fenetre
149 this->Hide();
150 break;
151 }
152
153 // In case of compile errors, we end-up here !
154 mBut[0]->SetSensitive();
155 dap->SetReady();
156 return;
157}
158
159// --------------------------------------------------------------------
160// --------------------------------------------------------------------
161// --------------------------------------------------------------------
162
163/* --Methode-- */
164CxxOptionWind::CxxOptionWind(PIStdImgApp* par, CxxExecutor * cxxexec)
165: PIWindow((PIMsgHandler *)par, "CxxOption", PIWK_normal, 400, 300, 150, 150)
166{
167
168 dap = par;
169 cxxex = cxxexec;
170
171 int bsx, bsy, szx, szy;
172 int px, py, spx, spy;
173 // On definit la taille a partir de la taille par defaut des composantes
174 PIApplicationPrefCompSize(bsx, bsy);
175 // On redefinit la taille de la fenetre
176 spx = bsx/6;
177 spy = bsy/6;
178 szx = 7*bsx+5*spx;
179 szy = 6*bsy+12*spy;
180 SetSize(szx, szy);
181
182// Creation de champs "labels"
183 px = (szx-6*bsx)/2;
184 py = 2*spy;
185 mTit = new PILabel(this, "CxxExecutor Options", bsx*6, bsy, bsx, py);
186 mTit->SetBorderWidth(1);
187
188 px = 2*spx;
189 py = 4*spy+bsy;
190 mLab[0] = new PILabel(this, "Include Files", bsx*2, bsy, px, py);
191 py += spy+bsy;
192 mLab[1] = new PILabel(this, "Compile Options", bsx*2, bsy, px, py);
193 py += spy+bsy;
194 mLab[2] = new PILabel(this, "Link Options", bsx*2, bsy, px, py);
195 py += spy+bsy;
196 mLab[3] = new PILabel(this, "Libraries", bsx*2, bsy, px, py);
197
198 px = 3*spx+2*bsx;
199 py = 4*spy+bsy;
200
201// Creation de champs textes
202 mText[0] = new PIText(this, "IncFiles", bsx*5, bsy, px, py);
203 mText[0]->SetText("");
204 py += spy+bsy;
205 mText[1] = new PIText(this, "CompOpt", bsx*5, bsy, px, py);
206 mText[1]->SetText("");
207 py += spy+bsy;
208 mText[2] = new PIText(this, "LinkOpt", bsx*5, bsy, px, py);
209 mText[2]->SetText("");
210 py += spy+bsy;
211 mText[3] = new PIText(this, "LinkLib", bsx*5, bsy, px, py);
212 mText[3]->SetText("");
213
214// Creation de bouton d'action
215
216 py += 3*spy+bsy;
217 px = (szx-6*bsx-6*spx)/2;
218 mBut[0] = new PIButton(this, "Set Options", 500, bsx*2, bsy, px, py);
219 px += 2*bsx+2*spx;
220 mBut[1] = new PIButton(this, "Get Option", 600, bsx*2, bsy, px, py);
221 px += 2*bsx+2*spx;
222 mBut[2] = new PIButton(this, "Dismiss", 700, bsx*2, bsy, px, py);
223
224// Taille et position proportionnelles a la taille de la fenetre pour les elements
225 mTit->SetBinding(PIBK_elastic , PIBK_elastic , PIBK_elastic , PIBK_elastic);
226
227 for(int i=0; i<4; i++) {
228 mLab[i]->SetBinding(PIBK_elastic , PIBK_elastic , PIBK_elastic , PIBK_elastic);
229
230 mText[i]->SetBinding(PIBK_elastic , PIBK_elastic , PIBK_elastic , PIBK_elastic);
231 }
232 for(int ii=0; ii<3; ii++)
233 mBut[ii]->SetBinding(PIBK_elastic , PIBK_elastic , PIBK_elastic , PIBK_elastic);
234
235}
236
237/* --Methode-- */
238CxxOptionWind::~CxxOptionWind()
239{
240 for(int i=0; i<4; i++) {
241 delete mLab[i];
242 delete mText[i];
243 }
244 delete mTit;
245 delete mBut[0];
246 delete mBut[1];
247 delete mBut[2];
248}
249
250
251/* --Methode-- */
252void CxxOptionWind::Show()
253{
254 mText[0]->SetText(cxxex->GetInclude());
255 mText[1]->SetText(cxxex->GetCompileOpt());
256 mText[2]->SetText(cxxex->GetLinkOpt());
257 mText[2]->SetText(cxxex->GetLinkLibs());
258 PIWindow::Show();
259}
260
261/* --Methode-- */
262void CxxOptionWind::Process(PIMessage msg, PIMsgHandler* /*sender*/, void* /*data*/)
263{
264
265 string opt;
266
267 switch (UserMsg(msg)) {
268
269 case 500: // Bouton Set Options
270// On recupere les textes des 3 champs :
271 opt = mText[0]->GetText();
272 cxxex->FillInclude(opt);
273 opt = mText[1]->GetText();
274 cxxex->FillCompileOpt(opt);
275 opt = mText[2]->GetText();
276 cxxex->FillLinkOpt(opt);
277 opt = mText[3]->GetText();
278 cxxex->FillLinkLibs(opt);
279 break;
280
281 case 600: // Bouton Get Options
282 mText[0]->SetText(cxxex->GetInclude());
283 mText[1]->SetText(cxxex->GetCompileOpt());
284 mText[2]->SetText(cxxex->GetLinkOpt());
285 mText[2]->SetText(cxxex->GetLinkLibs());
286 break;
287
288 case 700: // Bouton Dismiss - On cache la fenetre
289 this->Hide();
290 break;
291 }
292
293return;
294}
295
296
Note: See TracBrowser for help on using the repository browser.