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

Last change on this file since 651 was 584, checked in by ercodmgr, 26 years ago

Modifs pour SOPHYA , TMatrix, PixelMap, ... Reza 17/11/99

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