Changeset 344 in Sophya for trunk/SophyaPI/PIext/nobjmgr.cc


Ignore:
Timestamp:
Aug 2, 1999, 6:52:49 PM (26 years ago)
Author:
ercodmgr
Message:

1/ Extension de fonctionalites de gestion de repertoires (Lock, ...)
2/ Plus de NTupIntf_Adapter quand les objets heritent de NTupleInterface
3/ Support pour affichage info texte, ds PINtuple et PIStarList

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaPI/PIext/nobjmgr.cc

    r339 r344  
    4242// include      nobjmgr.h
    4343//
    44 //      Cette classe fournit les services nécéssaire àla gestion des objets
     44//      Cette classe fournit les services nécéssaires à la gestion des objets
    4545//      (l'ensemble des objets PPersist de PEIDA++) au sein du programme
    4646//      d'analyse interactive *piapp* . Elle constitue en outre l'interface
     
    5858// ......  Gestion des objets nommes, variables globales ............
    5959struct nobj_diritem {
    60   int id;
    61   int nobj;
     60  int id;                 // Directory Id
     61  int nobj;               // Number of objects in directory
     62  bool lock;              // True -> directory locked, No Add, del or rename
     63  bool keepold;           // True -> When duplicate object name, old object moved to /old
    6264};
    6365
     
    6567
    6668struct nobj_item {
    67   AnyDataObj* obj;
    68   NObjMgrAdapter* obja;
    69   int oid;
    70   int dirid;
    71   list<int> wrsid;
     69  AnyDataObj* obj;             // Object pointer
     70  NObjMgrAdapter* obja;        // Object adapter pointer
     71  int oid;                     // object Id
     72  int dirid;                   // Directory Id
     73  list<int> wrsid;             // List of Window Resource Id (Drawer, PIBaseWdg, ...)
     74                               // (for PIStdImgApp)
    7275  bool operator==(nobj_item const& b) const
    7376    { return (this->obj ==  b.obj); }
     
    116119  string dirn = "home";
    117120  CreateDir(dirn);
     121  SetKeepOldDirAtt(dirn, true);
    118122  dirn = "tmp";
    119123  CreateDir(dirn);
     124  SetKeepOldDirAtt(dirn, false);
    120125  dirn = "old";
    121126  CreateDir(dirn);
     127  SetKeepOldDirAtt(dirn, false);
    122128  dirn = "home";
    123129  SetCurrentDir(dirn);
     
    179185
    180186/* --Methode-- */
    181 void NamedObjMgr::CreateDir(string & dirname)
     187bool NamedObjMgr::CreateDir(string & dirname)
    182188{
    183189if ( !CheckDirName(dirname) ) {
    184190  cout << "NamedObjMgr::CreateDir( " << dirname << ") Error - Invalid name !" << endl;
    185   return;
     191  return(false);
    186192  }
    187193NObjDirList::iterator it = myDirs->find(dirname);
    188194if (it != myDirs->end()) {
    189195  cout << "NamedObjMgr::CreateDir( " << dirname << ") Error - Existing directory !" << endl;
    190   return;
     196  return(false);
    191197  }
    192198myDirId++;
     
    194200di.id = myDirId;
    195201di.nobj = 0;
     202di.lock = false;
     203di.keepold = false;
    196204(*myDirs)[dirname] = di;
    197205if (myImgApp)  {
     
    200208  }
    201209cout << "NamedObjMgr::CreateDir() " << dirname << " Created " << endl;
    202 }
    203 
    204 /* --Methode-- */
    205 void NamedObjMgr::DeleteDir(string & dirname)
     210return(true);
     211}
     212
     213/* --Methode-- */
     214bool NamedObjMgr::DeleteDir(string & dirname)
    206215{
    207216if ( !CheckDirName(dirname) ) {
    208217  cout << "NamedObjMgr::DeleteDir( " << dirname << ") Error - Invalid name !" << endl;
    209   return;
     218  return(false);
    210219  }
    211220NObjDirList::iterator it = myDirs->find(dirname);
    212221if (it == myDirs->end()) {
    213222  cout << "NamedObjMgr::DeleteDir( " << dirname << ") Error - No such directory !" << endl;
    214   return;
     223  return(false);
    215224  }
    216225if ((*it).second.nobj > 0) {
    217226  cout << "NamedObjMgr::DeleteDir() " << dirname << " not empty ! " << endl;
    218   return;
     227  return(false);
     228  }
     229if ((*it).second.lock ) {
     230  cout << "NamedObjMgr::DeleteDir() " << dirname << " locked ! " << endl;
     231  return(false);
    219232  }
    220233if ((*it).second.id < 50) {
    221234  cout << "NamedObjMgr::DeleteDir() " << dirname << " cannot be deleted ! " << endl;
    222   return;
     235  return(false);
    223236  }
    224237
     
    227240myDirs->erase(it);
    228241cout << "amedObjMgr::DeleteDir() " << dirname << " deleted " << endl; 
    229 }
    230 
    231 /* --Methode-- */
    232 void NamedObjMgr::SetCurrentDir(string & dirname)
     242return(true);
     243}
     244
     245/* --Methode-- */
     246void NamedObjMgr::LockDir(string & dirname)
     247{
     248if ( !CheckDirName(dirname) ) return;
     249NObjDirList::iterator it = myDirs->find(dirname);
     250if (it == myDirs->end()) return;
     251(*it).second.lock = true;
     252cout << "NamedObjMgr::LockDir() " << dirname << " Locked " << endl;
     253return;
     254}
     255
     256/* --Methode-- */
     257void NamedObjMgr::UnlockDir(string & dirname)
     258{
     259if ( !CheckDirName(dirname) ) return;
     260NObjDirList::iterator it = myDirs->find(dirname);
     261if (it == myDirs->end()) return;
     262(*it).second.lock = true;
     263cout << "NamedObjMgr::UnlockDir() " << dirname << " Unlocked " << endl;
     264return;
     265}
     266
     267/* --Methode-- */
     268void NamedObjMgr::SetKeepOldDirAtt(string & dirname, bool keepold)
     269{
     270if ( !CheckDirName(dirname) ) return;
     271NObjDirList::iterator it = myDirs->find(dirname);
     272if (it == myDirs->end()) return;
     273(*it).second.keepold = keepold;
     274cout << "NamedObjMgr::SetKeepOldDirAtt() " << dirname << "  ->  ";
     275if ( keepold ) cout << " True " << endl;
     276else cout << " False " << endl;
     277return;
     278}
     279
     280
     281/* --Methode-- */
     282bool NamedObjMgr::SetCurrentDir(string & dirname)
    233283{
    234284if ( !CheckDirName(dirname) ) {
    235285  cout << "NamedObjMgr::SetCurrentDir( " << dirname << ") Error - Invalid name !" << endl;
    236   return;
     286  return(false);
    237287  }
    238288NObjDirList::iterator it = myDirs->find(dirname);
    239289if (it == myDirs->end()) {
    240290  cout << "NamedObjMgr::SetCurrentDir( " << dirname << ") Error - No such directory !" << endl;
    241   return;
     291  return(false);
    242292  }
    243293*currDir = dirname;
    244294cout << "NamedObjMgr::SetCurrentDir() -> " << dirname << endl;
     295return(true);
    245296}
    246297
     
    262313  if (csh_parse(cn.c_str(), patt.c_str()) == 0) continue;
    263314  k++;
    264   cout << k << "- " << (*it).first << "  (NbObj= " << (*it).second.nobj << ")" << endl;
     315  cout << k << "- " << (*it).first;
     316  if ( (*it).second.lock )  cout << "  Locked " ;
     317  if ( (*it).second.keepold )   cout << "  KeepOld " ;
     318  cout << "  (Id= " << (*it).second.id << " NbObj= " << (*it).second.nobj << ")" << endl;
     319   
    265320  }
    266321}
     
    311366
    312367/* --Methode-- */
    313 void NamedObjMgr::AddObj(AnyDataObj* obj, string & nom, bool crd)
    314 {
    315 
    316 if (obj == NULL)  return;
     368bool NamedObjMgr::AddObj(AnyDataObj* obj, string & nom, bool crd)
     369{
     370
     371if (obj == NULL)  return(false);
    317372// On verifie si l'objet est deja dans la liste
    318373NObjList::iterator it;
     
    320375  if ((*it).second.obj == obj) {
    321376    cout << "NamedObjMgr::AddObj() Object already present with name " << (*it).first << endl;
    322     return;
     377    return(false);
    323378    }
    324379  }
     
    330385  if (!crd) {
    331386    cout << "NamedObjMgr::AddObj() No " << nrep << " Directory " << endl;
    332     return;
     387    return(false);
    333388    }
    334389  else { CreateDir(nrep);  did =  myDirId; }
     
    342397
    343398nom = '/' + nrep + '/' + nobj; 
     399NObjDirList::iterator itr = myDirs->find(nrep);
     400if ((*itr).second.lock) {
     401  cout << "NamedObjMgr::AddObj() " << nrep << " Locked Directory " << endl;
     402  return(false);
     403  }
    344404it = myObjs->find(nom);
    345405if (it != myObjs->end()) { // l'objet existe deja
    346   if (nrep == "tmp") {  // Les objets de /tmp sont jetes
    347     cout << "NamedObjMgr::AddObj() - Replacing " << nom << endl;
    348     DelObj(nom);
    349     }
    350   else {  // On met l'ancien objet dans /old
     406  if ( (*itr).second.keepold ) { // On met l'ancien objet dans /old
    351407    string on,od;
    352408//    ParseObjectName((*it).first, od, on);
     
    355411    RenameObj(nom, nomnew);
    356412    }
     413  else {  // Sinon, on remplace l'objet
     414    cout << "NamedObjMgr::AddObj() - Replacing " << nom << endl;
     415    DelObj(nom);
     416    }
    357417  }
    358418
     
    364424(*myObjs)[nom] = no;
    365425
    366 NObjDirList::iterator itr = myDirs->find(nrep);
    367426(*itr).second.nobj++;
    368427
    369428cout << "NamedObjMgr::AddObj()  Object " << nom << " ( " 
    370429     << typeid(*obj).name() << " ) added (Total= " << myObjs->size() << ")" << endl; 
    371 return;
    372 }
    373 
    374 /* --Methode-- */
    375 void NamedObjMgr::RenameObj(string & nom, string& nomnew)
     430return(true);
     431}
     432
     433/* --Methode-- */
     434bool NamedObjMgr::RenameObj(string & nom, string& nomnew)
    376435{
    377436string n1,r1,n2,r2;
    378 ParseObjectName(nom, r1, n1);
     437int dids = ParseObjectName(nom, r1, n1);
     438NObjDirList::iterator itr1 = myDirs->find(r1);
    379439int did = ParseObjectName(nomnew, r2, n2);
     440NObjDirList::iterator itr2 = myDirs->find(r2);
     441
    380442if (did == 0) {
    381443  cout << "NamedObjMgr::RenameObj() Error - No " << r2 << " directory !" << endl;
    382   return;
     444  return(false);
    383445  }
    384446nom = '/' + r1 + '/' + n1;
     
    387449if (it1 == myObjs->end()) {
    388450  cout << "NamedObjMgr::RenameObj() Error -  No " << nom << " object !" << endl;
    389   return;
     451  return(false);
    390452  }
    391453NObjList::iterator it2 = myObjs->find(nomnew);
    392454if (it2 != myObjs->end()) {
    393455  cout << "NamedObjMgr::RenameObj() Error -  Object " << nomnew << " exist !" << endl;
    394   return;
    395   }
     456  return(false);
     457  }
     458
     459if ( (*itr1).second.lock || (*itr2).second.lock ) {
     460  cout << "NamedObjMgr::RenameObj() Error - Source or destination directory locked !"
     461       << endl;
     462  return(false); 
     463  }
     464
    396465
    397466nobj_item no = (*it1).second;
     
    404473(*itr).second.nobj++;
    405474cout << "NamedObjMgr::RenameObj() - Object " << nom << " renamed to " << nomnew << endl;
    406 return;
    407 }
    408 
    409 /* --Methode-- */
    410 void NamedObjMgr::DelObj(string & nom, bool fgd)
     475return(true);
     476}
     477
     478/* --Methode-- */
     479bool NamedObjMgr::DelObj(string & nom, bool fgd)
    411480{
    412481string n1,r1;
     
    414483nom = '/' + r1 + '/' + n1;
    415484NObjList::iterator it = myObjs->find(nom);
    416 if (it == myObjs->end()) return;
     485if (it == myObjs->end()) return(false);
     486NObjDirList::iterator itr = myDirs->find(r1);
     487if ( (*itr).second.lock  ) {
     488  cout << "NamedObjMgr::DelObj() Error - Locked directory " << r1 << endl;
     489  return(false);
     490  }
    417491list<int>::iterator ii;
    418492if (myImgApp) {
     
    425499
    426500myObjs->erase(it);
    427 NObjDirList::iterator itr = myDirs->find(r1);
    428501(*itr).second.nobj--;
    429502
    430503if (fgd) cout << "NamedObjMgr::DelObj()  Object " << nom << " deleted (Total= " << myObjs->size() << ")" << endl;
    431504else  cout << "NamedObjMgr::DelObj()  Object " << nom << " removed (Total= " << myObjs->size() << ")" << endl;
    432 return
    433 }
    434 
    435 /* --Methode-- */
    436 void NamedObjMgr::DelObj_Id(int oid)
     505return(true)
     506}
     507
     508/* --Methode-- */
     509bool NamedObjMgr::DelObj_Id(int oid)
    437510{
    438511NObjList::iterator it;
     
    444517    break;
    445518  }
    446 if (of) DelObj(nom, true);
     519if (of) return(DelObj(nom, true));
     520else return(false);
    447521}
    448522
     
    786860int opt = servnobjm->DecodeDispOption(dopt, fgsr);
    787861
     862string n1,r1;
     863ParseObjectName(nom, r1, n1);
     864
    788865if (dr) {
    789866  PIDrawer3D * dr3 = dynamic_cast<PIDrawer3D *>(dr);
    790   if(dr3)  wrsid = myImgApp->Disp3DDrawer(dr3, nom, opt);
    791   else wrsid = myImgApp->DispScDrawer( dr, nom, opt);
    792   }
    793 else if (arr) wrsid = myImgApp->DispImage(arr, nom, opt);
     867  if(dr3)  wrsid = myImgApp->Disp3DDrawer(dr3, n1, opt);
     868  else wrsid = myImgApp->DispScDrawer( dr, n1, opt);
     869  }
     870else if (arr) wrsid = myImgApp->DispImage(arr, n1, opt);
    794871
    795872if(wrsid != 0) {
     
    821898  }
    822899
     900string n1,r1;
     901ParseObjectName(nom, r1, n1);
     902
    823903int wrsid = 0;
    824904bool fgsr = true;
    825905int opt = servnobjm->DecodeDispOption(dopt, fgsr);
    826 wrsid = myImgApp->DispImage(arr, nom, opt);
     906wrsid = myImgApp->DispImage(arr, n1, opt);
    827907
    828908if(wrsid != 0) {
     
    860940  }
    861941
     942string n1,r1;
     943ParseObjectName(nom, r1, n1);
     944
    862945int wrsid = 0;
    863946bool fgsr = true;
    864947int opt = servnobjm->DecodeDispOption(dopt, fgsr);
    865948PISurfaceDrawer* sdr = new PISurfaceDrawer(arr, true, true, true);
    866 wrsid = myImgApp->Disp3DDrawer(sdr, nom, opt);
     949wrsid = myImgApp->Disp3DDrawer(sdr, n1, opt);
    867950if(wrsid >= 0) {
    868951  NObjList::iterator it = myObjs->find(nom);
     
    899982int opt = servnobjm->DecodeDispOption(dopt, fgsr);
    900983
     984string n1,r1;
     985ParseObjectName(nom, r1, n1);
     986
    901987if ( fg3d && (nmz.length()>0) )  { // Display 3D
    902988  PINTuple3D* pin = new PINTuple3D(nt, false);
     
    904990  pin->SelectErrBar(erx.c_str(), ery.c_str(), erz.c_str());
    905991  string titre = nmz + "%" + nmy + "%" + nmz;
    906   wrsid = myImgApp->Disp3DDrawer(pin, nom, opt, titre); 
     992  wrsid = myImgApp->Disp3DDrawer(pin, n1, opt, titre); 
    907993}
    908994else {
     
    912998  if ( nmz.length()>0 ) pin->SelectWt(nmz.c_str());
    913999  string titre = nmy + "%" + nmx;
    914   wrsid = myImgApp->DispScDrawer( (PIDrawer*)pin, nom, opt, titre);
     1000  wrsid = myImgApp->DispScDrawer( (PIDrawer*)pin, n1, opt, titre);
    9151001  }
    9161002
     
    9651051 if(numvary.length()>0) numvy = atoi(numvary.c_str());
    9661052 
     1053 string n1,r1;
     1054 ParseObjectName(nom, r1, n1);
     1055
    9671056 int wrsid = 0;
    9681057 if(numvy>=0) {              // display 3D
     
    9701059  pigfd->SelectXY(numvx,numvy);
    9711060  pigfd->SelectErrBar(errx,erry,errz);
    972   wrsid = myImgApp->Disp3DDrawer(pigfd,nom,opt); 
     1061  wrsid = myImgApp->Disp3DDrawer(pigfd,n1,opt); 
    9731062} else {                   // display 2D
    9741063  PIGenFitDat* pigfd = new PIGenFitDat(((GeneralFitData*)obj),false);
    9751064  pigfd->SelectX(numvx);
    9761065  pigfd->SelectErrBar(errx,erry);
    977   wrsid = myImgApp->DispScDrawer((PIDrawer*)pigfd,nom,opt);
     1066  wrsid = myImgApp->DispScDrawer((PIDrawer*)pigfd,n1,opt);
    9781067}
    9791068
Note: See TracChangeset for help on using the changeset viewer.