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

Last change on this file since 1971 was 685, checked in by ercodmgr, 26 years ago

FileChooser multiples ds PIStdImgApp, Correction Ndisp ds PINTuple, Fenetre NObjMgrWind non bloquant desormais ds piapp - Reza 12/12/99

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