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

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

Petit bug ... Reza 9/8/99

File size: 6.8 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;
207
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;
213
214if (!ok) { mPin = NULL; dap->SetReady(); return; }
215
216if (mPin->NbTags() < 1) {
217 delete mPin; mPin = NULL;
[332]218 string no="";
219 dap->ObjMgr()->ReadObj(flnm,no);
[165]220 return;
221}
222
223if (objlist) delete objlist;
224SetSize(ttx,tty);
225mLab[0]->SetLabel(flnm);
226objlist = new PIList(this, "infileobjlist", tolx, toly, polx, poly);
227objlist->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
228objlist->SetBorderWidth(2);
229
230
231for(i=0; i<mPin->NbTags(); i++) {
232 key = mPin->TagKey(i, cid, ln);
233 if (ln <= 0) nom = "?";
234 else { strncpy(noms, mPin->TagName(i).c_str(), 31); noms[31] = '\0'; nom = noms; }
[333]235 sprintf(strg, "%s (T=%s, Key=%d)", nom, dap->ObjMgr()->GetServiceObj()->PClassIdToClassName(cid), key);
236 // sprintf(strg, "%s (T=%s, Key=%d)", nom, " DataObject ?", key); Attention SANS_EVOLPLANCK
[165]237 objlist->AppendItem(strg, 5000+i);
238}
239
240}
241
242/* --Methode-- */
243void PPInMgrWind::Show()
244{
245if (mPin == NULL) return;
246dap->SetBlocked();
247PIWindow::Show();
248return;
249}
250
251/* --Methode-- */
252void PPInMgrWind::Process(PIMessage msg, PIMsgHandler* /*sender*/, void* /*data*/)
253{
254
255int sel;
256msg = UserMsg(msg);
257
258if (msg == 2700) {
259 delete mPin; mPin = NULL;
260 delete objlist; objlist = NULL;
261 dap->SetReady();
262 this->Hide();
263 return;
264}
265
266NamedObjMgr* om = dap->ObjMgr();
267switch (msg)
268 {
269 case 2500:
270 sel = (PIMessage)objlist->GetSelection() - 5000;
271 if (sel >= 0) om->ReadObj((*mPin), sel);
272 break;
273 case 2600:
274 om->ReadObj((*mPin), -1);
275 dap->SetReady();
276 this->Hide();
277 break;
278
279 default:
280 break;
281 }
282
283return;
284}
Note: See TracBrowser for help on using the repository browser.