source: Sophya/trunk/SophyaPI/PIext/pisiadw.cc@ 2521

Last change on this file since 2521 was 2460, checked in by ansari, 22 years ago

Adaptation aux modifs interface PPersist - Reza 22 Nov 2003

File size: 8.3 KB
RevLine 
[293]1#include "machdefs.h"
[165]2#include <stdlib.h>
3#include <stdio.h>
4#include <string.h>
5
[295]6#include <typeinfo>
7
[165]8#include "perrors.h"
9#include "ctimer.h"
10
11#include "nbmath.h"
12
13#include "pistdimgapp.h"
14#include "nobjmgr.h"
15#include "servnobjm.h"
16
17
18
19/* ........................................................... */
20/* Classe ObjMgrWind interface de gestion d'objets nommes */
21/* ........................................................... */
22
23/* --Methode-- */
24ObjMgrWind::ObjMgrWind(PIStdImgApp *par)
[685]25: PIWindow((PIMsgHandler *)par, "objmgr", PIWK_normal,
[165]26 400, 300, 250, 250)
27{
28int i;
29dap = par;
30
31int bsx, bsy;
32int tsx, tsy;
33int spx, spy;
34// On definit la taille a partir de la taille par defaut des composantes
35PIApplicationPrefCompSize(bsx, bsy);
[333]36spx = bsx/4; spy = bsy/4;
37tsx = 4.0*bsx+3*spx; tsy = 6*bsy+7*spy;
[165]38SetSize(tsx,tsy);
[333]39dirlist = new PIOptMenu(this, "dirlist", 2.5*bsx, bsy, spx+0.25*bsx, spy);
40dirlist->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
41objlist = new PIList(this, "objlist", 3*bsx, tsy-3*spy-bsy, spx, 2*spy+bsy);
[165]42objlist->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
[333]43// objlist->SetBorderWidth(2);
[165]44
[333]45int py = spy;
46int px = 2*spx+3*bsx;
[685]47mBut[0] = new PIButton(this, "SetCurObj", 10, bsx, bsy, px, py); py += (bsy+spy);
[333]48mBut[1] = new PIButton(this, "Display", 20, bsx, bsy, px, py); py += (bsy+spy);
49mBut[2] = new PIButton(this, "Print", 30, bsx, bsy, px, py); py += (bsy+spy);
50mBut[3] = new PIButton(this, "SavePPF", 40, bsx, bsy, px, py); py += (bsy+spy);
51mBut[4] = new PIButton(this, "Delete", 50, bsx, bsy, px, py); py += (bsy+spy);
52mBut[5] = new PIButton(this, "Dismiss", 90, bsx, bsy, px, py); py += (bsy+spy);
[165]53
[338]54for(i=0; i<6; i++)
[165]55 mBut[i]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
56
57// FinishCreate(); pas necessaire ?
58}
59
60/* --Methode-- */
61ObjMgrWind::~ObjMgrWind()
62{
63int i;
[333]64delete dirlist;
[165]65delete objlist;
[333]66for(i=0; i<6; i++) delete mBut[i];
[165]67}
68
69/* --Methode-- */
70void ObjMgrWind::Show()
71{
[685]72// dap->SetBlocked(); Ce n'est plus necessaire - Reza 11/12/99
[333]73string cdir;
74dap->ObjMgr()->GetCurrentDir(cdir);
75cdir = '/' + cdir;
76dirlist->SetValueStr(cdir);
77dap->ObjMgr()->UpdateObjMgrWindow(dirlist->GetValue()-30000);
[165]78PIWindow::Show();
79return;
80}
81
[685]82
[165]83/* --Methode-- */
[2380]84void ObjMgrWind::Process(PIMessage msg, PIMsgHandler* sender, void* /*data*/)
[165]85{
86
[2380]87if (sender == objlist) return; // Changement de selection d'objet - on ne fait rien
[165]88 // PIMessage ssg = ModMsg(msg);
89msg = UserMsg(msg);
[333]90if (msg == 90) {
[165]91 dap->SetReady();
92 this->Hide();
93 return;
[333]94 }
95else if (msg >= 30000) {
96 dap->ObjMgr()->UpdateObjMgrWindow(msg-30000);
97 return;
98 }
[685]99/*
100 else if (msg == 10) {
[333]101 string cdir = dirlist->GetValueStr();
102 dap->ObjMgr()->SetCurrentDir(cdir);
103 return;
104 }
[685]105*/
[165]106
107string nom = "";
[685]108string sel = "";
109if ( (msg == 10) || (msg == 20) || (msg == 30) || (msg == 40) || (msg == 50) ) {
110 sel = objlist->GetSelectionStr();
[165]111 // size_t p = sel.find_first_not_of(" \t");
112 // if (p<0) p = 0;
[206]113 size_t l = sel.length();
[165]114 size_t q = sel.find_first_of(" \t");
[206]115 if (q > l) q = l;
[333]116 nom = dirlist->GetValueStr() + '/' + sel.substr(0, q);
117 }
[165]118
119NamedObjMgr* om = dap->ObjMgr();
120if (om == NULL) return;
[685]121if (sel.length() < 1) return;
[333]122if (nom.length() < 1) return;
[165]123
124switch (msg)
125 {
[685]126 case 10:
127 {
128 string cmd = "set cobj " + nom ;
129 cout << " Setting current object ($cobj) to " << nom << endl;
130 dap->CmdInterpreter()->Interpret(cmd);
131 }
132 break;
[333]133 case 20:
[165]134 om->DisplayObj(nom);
135 break;
[333]136 case 30:
[165]137 om->PrintObj(nom);
138 break;
[333]139 case 40:
140 if (dap->mPpfout) om->SaveObj(nom, *(dap->mPpfout), false);
[165]141 break;
[333]142 case 50:
[165]143 om->DelObj(nom);
[685]144 // objlist->DeleteItemMsg(objlist->GetSelection());
[333]145 // dap->ObjMgr()->UpdateObjMgrWindow(dirlist->GetValue()-30000);
[165]146 break;
147
148 default:
149 // printf("DEBUG/ObjMgrW::Process %d %d \n", (int)msg, (int)ssg);
150 break;
151 }
152
153return;
154}
155
[685]156/* --Methode-- */
157void ObjMgrWind::UpdateList(int did)
158{
159if (!Visible()) return;
160if (did != (dirlist->GetValue()-30000) ) return;
161dap->ObjMgr()->UpdateObjMgrWindow(did);
162return;
163}
[165]164
[685]165/* --Methode-- */
166void ObjMgrWind::AddObjList(int did, const char * objn, int oid)
167{
168if (!Visible()) return;
169if (did != (dirlist->GetValue()-30000) ) return;
170mNitem++; objlist->AppendItem(objn, oid);
171}
172
173/* --Methode-- */
174void ObjMgrWind::DelObjList(int did, int oid)
175{
176if (!Visible()) return;
177//DBG printf("DBG-DelObjList %d , %d , (%d) \n", did, dirlist->GetValue()-30000, oid);
178if (did != (dirlist->GetValue()-30000) ) return;
179objlist->DeleteItemMsg(oid);
180}
181
[165]182/* ........................................................... */
183/* Classe PPInMgrWind interface de gestion d'objets nommes */
184/* ........................................................... */
185
186/* --Methode-- */
187PPInMgrWind::PPInMgrWind(PIStdImgApp *par)
188: PIWindow((PIMsgHandler *)par, "PPF-FileManager", PIWK_dialog,
189 400, 300, 250, 250)
190{
191int i;
192dap = par;
193
194int bsx, bsy;
195int tsx, tsy;
196int spx, spy;
197// On definit la taille a partir de la taille par defaut des composantes
198PIApplicationPrefCompSize(bsx, bsy);
199spx = bsx/4; spy = bsy/3;
200bsx *= 1.25;
201ttx = tsx = 3*bsx+8*spx; tty = tsy = 7*bsy+5*spy;
202SetSize(tsx,tsy);
203
204mLab[0] = new PILabel(this, "filename", tsx-spx, bsy-spy, spx/2, spy/2);
205mLab[0]->SetLabel("");
[293]206mLab[0]->SetBinding(PIBK_elastic, PIBK_elastic, PIBK_elastic,PIBK_elastic);
[165]207mLab[0]->SetBorderWidth(1);
208
209polx = spx/2; poly = bsy+1.5*spy;
210tolx = tsx-spx; toly = tsy-2*bsy-5*spy;
211int py = tsy-2*spy-bsy;
212int px = 2*spx;
213mBut[0] = new PIButton(this, "Read", 2500, bsx, bsy, px, py); px += (bsx+2*spx);
214mBut[1] = new PIButton(this, "ReadAll", 2600, bsx, bsy, px, py); px += (bsx+2*spx);
215mBut[2] = new PIButton(this, "Close", 2700, bsx, bsy, px, py); px += (bsx+2*spx);
216
217for(i=0; i<3; i++)
218 mBut[i]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
219
220objlist = NULL;
221mLab[1] = NULL;
222mPin = NULL;
223
224// FinishCreate(); pas necessaire
225}
226
227/* --Methode-- */
228PPInMgrWind::~PPInMgrWind()
229{
230int i;
231if (objlist) delete objlist;
232delete mLab[0];
233for(i=0; i<3; i++) delete mBut[i];
234}
235
236/* --Methode-- */
237void PPInMgrWind::SetFile(string flnm)
238{
239char strg[128];
240char* nom;
241char noms[32];
242int i, cid, key, ln;
243
244bool ok = true;
[495]245#ifdef SANS_EVOLPLANCK
[165]246TRY {
247 mPin = new PInPersist(flnm);
248} CATCH(merr)
249 { printf("ObjMgrWind::SetFile Exception= %ld (%s) \n", (long)merr, PeidaExc(merr));
250 ok = false; } ENDTRY;
[584]251#else
252try {
253 mPin = new PInPersist(flnm);
254 }
255catch (IOExc iox) {
256 cerr << "ObjMgrWind::SetFile/Error Exception - Msg= " << iox.Msg() << endl;
257 ok = false;
258 }
259#endif
[165]260
261if (!ok) { mPin = NULL; dap->SetReady(); return; }
262
[2460]263int nbtags = 0;
264#ifdef SANS_EVOLPLANCK
265nbtags = mPin->NbTags();
266#else
267nbtags = mPin->NbNameTags();
268#endif
269
270if (nbtags < 1) {
[165]271 delete mPin; mPin = NULL;
[332]272 string no="";
273 dap->ObjMgr()->ReadObj(flnm,no);
[165]274 return;
275}
276if (objlist) delete objlist;
277SetSize(ttx,tty);
278mLab[0]->SetLabel(flnm);
279objlist = new PIList(this, "infileobjlist", tolx, toly, polx, poly);
280objlist->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
281objlist->SetBorderWidth(2);
282
283
[495]284#ifdef SANS_EVOLPLANCK
[165]285for(i=0; i<mPin->NbTags(); i++) {
[380]286 key = mPin->TagKey(i, cid, ln); // $CHECK$ non-const & reference initialized to temporary, car int -> long&
[165]287 if (ln <= 0) nom = "?";
288 else { strncpy(noms, mPin->TagName(i).c_str(), 31); noms[31] = '\0'; nom = noms; }
[333]289 sprintf(strg, "%s (T=%s, Key=%d)", nom, dap->ObjMgr()->GetServiceObj()->PClassIdToClassName(cid), key);
290 // sprintf(strg, "%s (T=%s, Key=%d)", nom, " DataObject ?", key); Attention SANS_EVOLPLANCK
[165]291 objlist->AppendItem(strg, 5000+i);
292}
[584]293#else
294string tn;
[2460]295for(i=0; i<mPin->NbNameTags(); i++) {
[584]296 tn = mPin->GetTagName(i);
297 objlist->AppendItem(tn.c_str(), 5000+i);
298}
[495]299#endif
[165]300
301}
302
303/* --Methode-- */
304void PPInMgrWind::Show()
305{
306if (mPin == NULL) return;
307dap->SetBlocked();
308PIWindow::Show();
309return;
310}
311
312/* --Methode-- */
313void PPInMgrWind::Process(PIMessage msg, PIMsgHandler* /*sender*/, void* /*data*/)
314{
315
316int sel;
317msg = UserMsg(msg);
318
319if (msg == 2700) {
320 delete mPin; mPin = NULL;
321 delete objlist; objlist = NULL;
322 dap->SetReady();
323 this->Hide();
324 return;
325}
326
327NamedObjMgr* om = dap->ObjMgr();
328switch (msg)
329 {
330 case 2500:
331 sel = (PIMessage)objlist->GetSelection() - 5000;
332 if (sel >= 0) om->ReadObj((*mPin), sel);
333 break;
334 case 2600:
335 om->ReadObj((*mPin), -1);
336 dap->SetReady();
337 this->Hide();
338 break;
339
340 default:
341 break;
342 }
343
344return;
345}
Note: See TracBrowser for help on using the repository browser.