Changeset 3366 in Sophya for trunk/SophyaPI/PIext


Ignore:
Timestamp:
Oct 30, 2007, 1:57:40 PM (18 years ago)
Author:
ansari
Message:

Tentative pour regler le probleme de blocage de piapp suite a affichage de la fefenetre de gestion d'objets.

1/ Protection dans NamedObjMgr() pour eviter deadlock de mutex (ds NamedObjMgr::UpdateObjMgrWindow() en particulier)
2/ Introduction de la classe SOpExObj (fichier piacmd.h .cc) pour execution d'operations sur objets, initiees depuis la boucle d'evts, dans un thread separe.

Reza , 30/10/2007

Location:
trunk/SophyaPI/PIext
Files:
8 edited

Legend:

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

    r3355 r3366  
    9898// Pour gestion multithread
    9999static ZMutex* myMutex = NULL;
     100static bool myMtxLocked = false;   // if myMutex has been locked
     101static bool obmWvis = false;  // true -> ObjMgrWindow() is active/visible
     102static bool obmWUpdReq = false; // true -> ObjMgrWindow Update requested
    100103// ..................................................................
     104// .... Classe NObjMgrSync ....
     105class NObjMgrSync {
     106public:
     107  explicit NObjMgrSync(int sigbr)
     108  {
     109    myMtxLocked = true;
     110    myMutex->lock();
     111    _sigbr = sigbr;
     112  }
     113  ~NObjMgrSync()
     114  {
     115    if (_sigbr == 1) myMutex->signal();
     116    else  if (_sigbr == 2) myMutex->broadcast();
     117    myMutex->unlock();
     118    myMtxLocked = false;
     119    if (obmWUpdReq) {
     120      NamedObjMgr _momg;
     121      _momg.UpdateObjMgrWindow(-1);
     122    }
     123  }
     124  inline int NOp() { return _sigbr; }
     125
     126  int _sigbr;
     127};
     128//.............................
    101129
    102130//++
     
    229257    return(false);
    230258  }
    231   ZSync zs(*myMutex); zs.NOp();
     259  NObjMgrSync zs(0); zs.NOp();
    232260#ifdef SANS_EVOLPLANCK
    233261  bool fg = true;
     
    247275    return(false);
    248276  }
    249   ZSync zs(*myMutex); zs.NOp();
     277  NObjMgrSync zs(0); zs.NOp();
    250278#ifdef SANS_EVOLPLANCK
    251279  DVList::ValList::const_iterator it;
     
    265293    return(false);
    266294  }
    267   ZSync zs(*myMutex); zs.NOp();
     295  NObjMgrSync zs(0); zs.NOp();
    268296#ifdef SANS_EVOLPLANCK
    269297  return(false);
     
    280308    return("");
    281309  }
    282   ZSync zs(*myMutex); zs.NOp();
     310  NObjMgrSync zs(0); zs.NOp();
    283311  //  cout << " DEBUG::GetVar " << *myVars << endl;
    284312  return(myVars->GetS(key));
     
    289317{
    290318  //  cout << " DEBUG::GetVarList " << *myVars << endl;
    291   ZSync zs(*myMutex); zs.NOp();
     319  NObjMgrSync zs(0); zs.NOp();
    292320  return(*myVars);
    293321}
     
    296324bool NamedObjMgr::CreateDir(string & dirname)
    297325{
    298   ZSync zs(*myMutex); zs.NOp();
     326  NObjMgrSync zs(0); zs.NOp();
    299327  return CreateDir_P(dirname);
    300328}
     
    336364  return(false);
    337365  }
    338 ZSync zs(*myMutex); zs.NOp();
     366NObjMgrSync zs(0); zs.NOp();
    339367NObjDirList::iterator it = myDirs->find(dirname);
    340368if (it == myDirs->end()) {
     
    357385if (myImgApp) {
    358386  if ( !_fgimgapp )  myImgApp->LockMutex();
     387  if ((myImgApp->ObjMgrW())->GetCurDirId() == (*it).second.id) {
     388    (myImgApp->ObjMgrW())->SetCurDir(*currDir);
     389    obmWUpdReq = true;
     390  }
    359391  (myImgApp->ObjMgrW())->DelDirectory((*it).second.id);
     392 
    360393  if ( !_fgimgapp )  myImgApp->UnlockMutex(true);
    361394}
     
    368401void NamedObjMgr::LockDir(string & dirname)
    369402{
    370 ZSync zs(*myMutex); zs.NOp();
     403NObjMgrSync zs(0); zs.NOp();
    371404if ( !CheckDirName(dirname) ) return;
    372405NObjDirList::iterator it = myDirs->find(dirname);
     
    380413void NamedObjMgr::UnlockDir(string & dirname)
    381414{
    382 ZSync zs(*myMutex); zs.NOp();
     415NObjMgrSync zs(0); zs.NOp();
    383416if ( !CheckDirName(dirname) ) return;
    384417NObjDirList::iterator it = myDirs->find(dirname);
     
    392425void NamedObjMgr::SetKeepOldDirAtt(string & dirname, bool keepold)
    393426{
    394 ZSync zs(*myMutex); zs.NOp();
     427NObjMgrSync zs(0); zs.NOp();
    395428if ( !CheckDirName(dirname) ) return;
    396429NObjDirList::iterator it = myDirs->find(dirname);
     
    408441bool NamedObjMgr::SetCurrentDir(string & dirname)
    409442{
    410 ZSync zs(*myMutex); zs.NOp();
     443NObjMgrSync zs(0); zs.NOp();
    411444if ( !CheckDirName(dirname) ) {
    412445  cout << "NamedObjMgr::SetCurrentDir( " << dirname << ") Error - Invalid name !" << endl;
     
    426459void NamedObjMgr::GetCurrentDir(string & dirname)
    427460{
    428 ZSync zs(*myMutex); zs.NOp();
     461NObjMgrSync zs(0); zs.NOp();
    429462dirname = *currDir;
    430463}
     
    433466void NamedObjMgr::ListDirs(string & patt)
    434467{
    435 ZSync zs(*myMutex); zs.NOp();
     468NObjMgrSync zs(0); zs.NOp();
    436469NObjDirList::iterator it;
    437470string cn;
     
    453486void NamedObjMgr::GetDirList(string & patt, vector<string>& lstd)
    454487{
    455 ZSync zs(*myMutex); zs.NOp();
     488NObjMgrSync zs(0); zs.NOp();
    456489NObjDirList::iterator it;
    457490string cn;
     
    466499void NamedObjMgr::CleanDir(string & dirname)
    467500{
    468 ZSync zs(*myMutex); zs.NOp();
     501NObjMgrSync zs(0); zs.NOp();
    469502CleanDir_P(dirname);
    470503}
     
    499532for(ii=odel.begin(); ii != odel.end(); ii++)  DelObj_P(*ii,true);
    500533
    501 UpdateObjMgrWindow_P(did);  // On met a jour la fenetre de gestion des objets
     534if (obmWvis) UpdateObjMgrWindow_P(did);  // On met a jour la fenetre de gestion des objets
    502535}
    503536
     
    529562bool NamedObjMgr::AddObj(AnyDataObj* obj, string & nom, bool crd)
    530563{
    531   ZSync zs(*myMutex); zs.NOp();
     564  NObjMgrSync zs(0); zs.NOp();
    532565  return AddObj_P(obj, nom, crd);
    533566}
     
    605638(*itr).second.nobj++;
    606639
    607 if (myImgApp != NULL) {
     640if (obmWvis && (myImgApp != NULL)) {
    608641  if ( !_fgimgapp )  myImgApp->LockMutex();
    609642  if ( (myImgApp->ObjMgrW())->Visible() ) {
     
    620653bool NamedObjMgr::AddObj(AnyDataObj& obj, string & nom, bool crd)
    621654{
    622 ZSync zs(*myMutex); zs.NOp();
     655NObjMgrSync zs(0); zs.NOp();
    623656NObjMgrAdapter* adap = GetServiceObj()->GetAdapter(&obj);
    624657if (adap == NULL) {
     
    638671bool NamedObjMgr::RenameObj(string & nom, string& nomnew)
    639672{
    640   ZSync zs(*myMutex); zs.NOp();
     673  NObjMgrSync zs(0); zs.NOp();
    641674  return RenameObj_P(nom, nomnew);
    642675}
     
    689722(*itr).second.nobj++;
    690723
    691 if (myImgApp != NULL) {
     724if (obmWvis && (myImgApp != NULL)) {
    692725  if ( !_fgimgapp )  myImgApp->LockMutex();
    693726  if ( (myImgApp->ObjMgrW())->Visible() ) {
     
    706739bool NamedObjMgr::CopyObj(string & nom, string& nomcp)
    707740{
    708 ZSync zs(*myMutex); zs.NOp();
     741NObjMgrSync zs(0); zs.NOp();
    709742if(nomcp.length()<=0)
    710743  {cout<<"NamedObjMgr::CopyObj() Error, copied obj name "<<nomcp<<" not valid"<<endl;
     
    723756bool NamedObjMgr::DelObj(string & nom, bool fgd)
    724757{
    725   ZSync zs(*myMutex); zs.NOp();
     758  NObjMgrSync zs(0); zs.NOp();
    726759  return DelObj_P(nom, fgd);
    727760}
     
    753786if (fgd) delete (*it).second.obj;
    754787
    755 if (myImgApp != NULL) {
     788if (obmWvis && (myImgApp != NULL)) {
    756789  if ( !_fgimgapp )  myImgApp->LockMutex();
    757790  if ( (myImgApp->ObjMgrW())->Visible() ) {
     
    774807bool NamedObjMgr::DelObj_Id(int oid)
    775808{
    776 ZSync zs(*myMutex); zs.NOp();
     809NObjMgrSync zs(0); zs.NOp();
    777810NObjList::iterator it;
    778811string nom;
     
    790823void NamedObjMgr::DelObjects(string & patt, bool fgd)
    791824{
    792 ZSync zs(*myMutex); zs.NOp();
     825NObjMgrSync zs(0); zs.NOp();
    793826string n1,r1;
    794827ParseObjectName(patt, r1, n1);
     
    808841AnyDataObj* NamedObjMgr::GetObj(string & nom)
    809842{
    810 ZSync zs(*myMutex); zs.NOp();
     843NObjMgrSync zs(0); zs.NOp();
    811844return GetObj_P(nom);
    812845}
     
    826859NObjMgrAdapter* NamedObjMgr::GetObjAdapter(string & nom)
    827860{
    828 ZSync zs(*myMutex); zs.NOp();
     861NObjMgrSync zs(0); zs.NOp();
    829862return GetObjAdapter_P(nom);
    830863}
     
    844877void NamedObjMgr::ListObjs(string & patt)
    845878{
    846 ZSync zs(*myMutex); zs.NOp();
     879NObjMgrSync zs(0); zs.NOp();
    847880int k;
    848881AnyDataObj* obj=NULL;
     
    873906void NamedObjMgr::GetObjList(string & patt, vector<string> &lst)
    874907{
    875 ZSync zs(*myMutex); zs.NOp();
     908NObjMgrSync zs(0); zs.NOp();
    876909string n1,r1;
    877910if (patt.length() < 1)  return;
     
    909942void NamedObjMgr::ReadObj(string const & flnm, string & nobj)
    910943{
    911 ZSync zs(*myMutex); zs.NOp();
    912944PPersist* ppobj=NULL;
    913945bool ok = true;
     
    932964if (!ok)  return;
    933965if (nobj.length()<1)  nobj = servnobjm->FileName2Name(flnm);
    934 AddObj_P(ppobj->DataObj(), nobj, true);
     966AddObj(ppobj->DataObj(), nobj, true);
    935967cout << "NamedObjMgr::ReadObj(...) object " << nobj << " read from file " << endl;
    936968return;
     
    942974{
    943975if(flnm_objname.size()<2) return;
    944 ZSync zs(*myMutex); zs.NOp();
    945976int nread=0;
    946977try {
     
    957988      continue;
    958989    }
    959     AddObj_P(ppobj->DataObj(),flnm_objname[i],true);
     990    AddObj(ppobj->DataObj(),flnm_objname[i],true);
    960991    nread++;
    961992    cout<<"NamedObjMgr::ReadObj(...) object "<<flnm_objname[i]<<" read from file "<<endl;
     
    9711002void NamedObjMgr::ReadObj(PInPersist& s, int num)
    9721003{
    973 ZSync zs(*myMutex); zs.NOp();
     1004NObjMgrSync zs(0); zs.NOp();
    9741005ReadObj_P(s, num);
    9751006}
     
    10601091void NamedObjMgr::ReadAll(string const & flnm)
    10611092{
    1062 ZSync zs(*myMutex); zs.NOp();
    10631093#ifdef SANS_EVOLPLANCK
    10641094bool ok = true;
     
    10771107if (obj) {
    10781108  string nom = servnobjm->FileName2Name(flnm);
    1079   AddObj_P(obj->DataObj(), nom, false);
    1080   }
    1081 else ReadObj_P((*ppin), -1);
     1109  AddObj(obj->DataObj(), nom, false);
     1110  }
     1111else ReadObj((*ppin), -1);
    10821112delete ppin;
    10831113#else
     
    10911121      cout << " ... Reading " << pis.NbNameTags() << " objects at NameTags " ;
    10921122    }
    1093     ReadObj_P(pis, -1);
     1123    ReadObj(pis, -1);
    10941124    return;
    10951125  }
     
    11001130    PPersist* obj = pis.ReadObject();
    11011131    if (!obj) continue;
    1102     AddObj_P(obj->DataObj(), nom, false);
     1132    AddObj(obj->DataObj(), nom, false);
    11031133    kn++;
    11041134    nom += (string)MuTyV(kn);
     
    11161146void NamedObjMgr::SaveObj(string & nom, POutPersist& s, bool keeppath)
    11171147{
    1118   ZSync zs(*myMutex); zs.NOp();
     1148  NObjMgrSync zs(0); zs.NOp();
    11191149  SaveObj_P(nom, s, keeppath);
    11201150}
     
    11411171void NamedObjMgr::SaveObjects(string & patt, string const& flnm)
    11421172{
    1143 ZSync zs(*myMutex); zs.NOp();
     1173NObjMgrSync zs(0); zs.NOp();
    11441174string n1,r1;
    11451175if (patt.length() < 1)  return;
     
    11831213// dont le nom est le dernier argument (liste[n-1])
    11841214{
    1185  ZSync zs(*myMutex); zs.NOp();
     1215 NObjMgrSync zs(0); zs.NOp();
    11861216
    11871217 if(liste.size()<2) {
     
    12151245void NamedObjMgr::SaveAll(string const& flnm)
    12161246{
    1217 ZSync zs(*myMutex); zs.NOp();
     1247NObjMgrSync zs(0); zs.NOp();
    12181248bool ok = true;
    12191249
     
    12501280void NamedObjMgr::PrintObj(string& nom, int lev)
    12511281{
    1252 ZSync zs(*myMutex); zs.NOp();
     1282NObjMgrSync zs(0); zs.NOp();
    12531283NObjMgrAdapter* obja=NULL;
    12541284obja = GetObjAdapter_P(nom);
     
    12721302if ( (dopt == "nodisp") || (dopt == "nodisplay") ) return;
    12731303
    1274 ZSync zs(*myMutex); zs.NOp();
     1304NObjMgrSync zs(0); zs.NOp();
    12751305
    12761306NObjMgrAdapter* obja=NULL;
     
    13221352if ( (dopt == "nodisp") || (dopt == "nodisplay") ) return;
    13231353
    1324 ZSync zs(*myMutex); zs.NOp();
     1354NObjMgrSync zs(0); zs.NOp();
    13251355
    13261356NObjMgrAdapter* obja=NULL;
     
    13621392if ( (dopt == "nodisp") || (dopt == "nodisplay") ) return;
    13631393
    1364 ZSync zs(*myMutex); zs.NOp();
     1394NObjMgrSync zs(0); zs.NOp();
    13651395
    13661396NObjMgrAdapter* obja=NULL;
     
    14121442if ( (dopt == "nodisp") || (dopt == "nodisplay") ) return;
    14131443
    1414 ZSync zs(*myMutex); zs.NOp();
     1444NObjMgrSync zs(0); zs.NOp();
    14151445
    14161446AnyDataObj* obj=GetObj_P(nom);
     
    14821512if ( (dopt == "nodisp") || (dopt == "nodisplay") ) return;
    14831513
    1484 ZSync zs(*myMutex); zs.NOp();
     1514NObjMgrSync zs(0); zs.NOp();
    14851515
    14861516AnyDataObj* obj=GetObj_P(nom);
     
    15381568if ( (dopt == "nodisp") || (dopt == "nodisplay") ) return;
    15391569
    1540 ZSync zs(*myMutex); zs.NOp();
     1570NObjMgrSync zs(0); zs.NOp();
    15411571
    15421572#ifdef SANS_EVOLPLANCK
     
    16401670int NamedObjMgr::NameToOId(string & nom)
    16411671{
    1642 ZSync zs(*myMutex); zs.NOp();
     1672NObjMgrSync zs(0); zs.NOp();
    16431673return NameToOId_P(nom);
    16441674}
     
    16591689void NamedObjMgr::AddWRsId(string & nom, int wrsid)
    16601690{
    1661 ZSync zs(*myMutex); zs.NOp();
     1691NObjMgrSync zs(0); zs.NOp();
    16621692AddWRsId_P(nom, wrsid);
    16631693}
     
    16781708{
    16791709if (!myImgApp)  return;
    1680 ZSync zs(*myMutex); zs.NOp();
     1710if (myMtxLocked) {
     1711  obmWUpdReq = true;
     1712  obmWvis = false;
     1713  (myImgApp->ObjMgrW())->SetUnSensitive();
     1714  return;
     1715}
     1716NObjMgrSync zs(0); zs.NOp();
     1717if (did < 0) {
     1718  string cdir = *currDir;
     1719  cdir = '/' + cdir;
     1720  (myImgApp->ObjMgrW())->SetCurDir(cdir);
     1721  did = (myImgApp->ObjMgrW())->GetCurDirId();
     1722}
     1723
    16811724UpdateObjMgrWindow_P(did);
     1725(myImgApp->ObjMgrW())->SetSensitive();
     1726obmWUpdReq = false;
     1727obmWvis = true;
     1728}
     1729
     1730/* --Methode-- */
     1731void NamedObjMgr::SetObjMgrWindowVisibility(bool fgvis)
     1732{
     1733obmWvis = fgvis;
    16821734}
    16831735
  • trunk/SophyaPI/PIext/nobjmgr.h

    r3355 r3366  
    108108// Pour utilisation par ObjMgrWind
    109109  virtual void          UpdateObjMgrWindow(int did);
     110  virtual void          SetObjMgrWindowVisibility(bool fgvis=false);
    110111
    111112// Pour completer le nom de l'objet avec le nom du repertoire
  • trunk/SophyaPI/PIext/piacmd.cc

    r2999 r3366  
    401401Commander::ShowMessage(msg, att);
    402402}
     403
     404
     405/* --Methode-- */
     406SOpExObj::SOpExObj(PIStdImgApp* app)
     407{
     408  mImgApp = app;
     409  fg_thrstop = false;
     410  fg_threxe = false;
     411}
     412
     413/* --Methode-- */
     414SOpExObj::~SOpExObj()
     415{
     416}
     417
     418/* --Methode-- */
     419void SOpExObj::AddOpe(string const & line)
     420{
     421  mutx_inps.lock();
     422  inputlines.push(line);   // Ajout d'un element en fin de queue
     423  mutx_inps.unlock();
     424  mutx_inps.broadcast();
     425}
     426
     427/* --Methode-- */
     428void SOpExObj::run()
     429{
     430  NamedObjMgr omg;
     431  while (!fg_thrstop) {
     432    mutx_inps.lock();
     433    while (inputlines.empty()) {
     434      fg_threxe = false;
     435      mutx_inps.wait();
     436    }
     437    string cmd = inputlines.front().substr(0,3);   // On recupere l'element de tete
     438    string nom = inputlines.front().substr(4);   // On recupere l'element de tete
     439    inputlines.pop();    // On supprime l'element de tete
     440    fg_threxe = true;
     441    mutx_inps.unlock();
     442    try {
     443      if (cmd == "SCO") {  // set cobj
     444        string ss = "set cobj ";
     445        ss += nom;
     446        cout << " Defining cobj : " << ss << endl;
     447        mImgApp->CmdInterpreter()->AddInputLine(ss);
     448      }
     449      else if (cmd == "DIS") {  // display obj
     450        omg.DisplayObj(nom);
     451      }
     452      else if (cmd == "PRT") {  // print obj
     453        omg.PrintObj(nom);
     454      }
     455      else if (cmd == "DEL") {  // delete obj
     456        omg.DelObj(nom);
     457      }
     458      else if (cmd == "SAV") {  // saveppf obj
     459        if (mImgApp->mPpfout)  omg.SaveObj(nom, *(mImgApp->mPpfout), false);
     460      }
     461      else cerr << "SOpExObj::run() ERROR CMD= " << cmd << endl;
     462    }
     463    catch (PThrowable& pex) {  // Catching SOPHYA exceptions
     464      cerr << "SOpExObj::run() SOPHYA exception CMD=" << cmd << " NOM=" << nom << "\n"
     465           << (string)typeid(pex).name() << " Msg= " << pex.Msg() << endl;
     466    }
     467    catch (std::exception& sex) {
     468      cerr << "SOpExObj::run() std::exception CMD=" << cmd << " NOM=" << nom << "\n"
     469           << (string)typeid(sex).name() << " Msg= " << sex.what() << endl;
     470    }
     471    catch (...) {
     472      cerr << "SOpExObj::run() unknown exception (...) CMD="
     473           << cmd << " NOM=" << nom << endl;
     474    }
     475  }
     476}
  • trunk/SophyaPI/PIext/piacmd.h

    r2999 r3366  
    100100
    101101
     102//
     103// ---------------------------------------------------------------------
     104// Classe d'execution d'operations simples, comme affichage (display)
     105// print , del ... issues en particulier de la boucle d'evts
     106// (PIStdImgApp, ObjMgrWind , ...)
     107// ---------------------------------------------------------------------
     108
     109class SOpExObj : public ZThread  {
     110public:
     111                        SOpExObj(PIStdImgApp* app);
     112  virtual               ~SOpExObj();
     113
     114  // Thread execution  <ZThread>
     115  virtual void          run();
     116  void                  AddOpe(string const & line);
     117  void                  StopThread();
     118
     119protected:
     120  PIStdImgApp* mImgApp;
     121  queue<string> inputlines;
     122  ZMutex mutx_inps;
     123  bool fg_thrstop;
     124  bool fg_threxe;
     125};
     126
     127
     128
    102129
    103130#endif
  • trunk/SophyaPI/PIext/pisiadw.cc

    r2778 r3366  
    7272{
    7373PIWindow::Show();
    74 string cdir;
    75 dap->ObjMgr()->GetCurrentDir(cdir);
    76 cdir = '/' + cdir;
    77 dirlist->SetValueStr(cdir);
    78 dap->ObjMgr()->UpdateObjMgrWindow( GetCurDirId() );
    79 return;
    80 }
    81 
     74dap->ObjMgr()->UpdateObjMgrWindow( -1 );
     75return;
     76}
     77/* --Methode-- */
     78void ObjMgrWind::Hide()
     79{
     80dap->ObjMgr()->SetObjMgrWindowVisibility(false);
     81PIWindow::Hide();
     82return;
     83}
    8284
    8385/* --Methode-- */
     
    122124if (nom.length() < 1)  return;
    123125
     126string cmd;
    124127switch (msg)
    125128  {
    126129  case 10:
    127     {
    128     string cmd = "set cobj " + nom ;
    129     cout << " Setting current object ($cobj) to " << nom << endl;
    130     dap->CmdInterpreter()->Interpret(cmd);
    131     }
     130    cmd = "SCO " + nom;
    132131    break;
    133132  case 20:
    134     om->DisplayObj(nom);
     133    cmd = "DIS " + nom;
    135134    break;
    136135  case 30:
    137     om->PrintObj(nom);
     136    cmd = "PRT " + nom;
    138137    break;
    139138  case 40:
    140     if (dap->mPpfout)  om->SaveObj(nom, *(dap->mPpfout), false);
     139    cmd = "SAV " + nom;
    141140    break;
    142141  case 50:
    143     om->DelObj(nom);
    144     //    objlist->DeleteItemMsg(objlist->GetSelection());
    145     //    dap->ObjMgr()->UpdateObjMgrWindow(dirlist->GetValue()-30000);
     142    cmd = "DEL " + nom;
    146143    break;
    147144
     
    150147    break;
    151148  }
    152     
     149 dap->getSOpExObj()->AddOpe(cmd);    
    153150return;
    154151}
     
    158155{
    159156if (!Visible()) return;
    160 if (did != GetCurDirId() )  return;
     157if ( (did >0) &&(did != GetCurDirId()) )  return;
    161158dap->ObjMgr()->UpdateObjMgrWindow(did);
    162159return;
  • trunk/SophyaPI/PIext/pisiadw.h

    r2762 r3366  
    2929  ~ObjMgrWind();
    3030  virtual void  Show();
     31  virtual void  Hide();
    3132  virtual void  Process(PIMessage msg, PIMsgHandler* sender, void* data=NULL);
    3233  inline  void  AddDirectory(const char * dir, int did)
     
    3940                    { mNitem++;  objlist->AppendItem(objn, oid); }
    4041  inline  int   GetCurDirId() { return (dirlist->GetValue()-30000); }
     42
     43  inline  void  SetCurDir(string & cd) { dirlist->SetValueStr(cd); }
    4144
    4245  virtual void  UpdateList(int did);
  • trunk/SophyaPI/PIext/pistdimgapp.cc

    r3355 r3366  
    237237fg_exc_cmd = false;
    238238mCmd = NULL;  // Avant d'appeler UpdateStatResource() si PIACmd non cree
     239mSopex = NULL;
    239240UpdateStatResourceInfo();
    240241resupd_periodic = new SIA_RU__Periodic(this);
     
    263264mObjMgr = new NamedObjMgr(true);
    264265mCmd = new PIACmd(this);
     266mSopex = new SOpExObj(this);
    265267
    266268// Pas trop de message de la part de NamedObjMgr
     
    468470// Demarrage du thread de l'interpreteur
    469471CmdInterpreter()->start();
    470 
     472// Demarrage du thread de l'executeur de commandes simples
     473getSOpExObj()->start();
    471474
    472475
     
    20182021  case 10270 :
    20192022    if (mCurWdg) {
    2020       int oid = mCurWdg->UserFlag();
    2021       //RZDEL-Mai2005      DeleteWidget(mCurWdg);
    2022       mObjMgr->DelObj_Id(oid);
     2023      string ssob = "DEL ";
     2024      ssob += mCurWdg->Nom();
     2025      getSOpExObj()->AddOpe(ssob);   
    20232026      }
    20242027    break;
  • trunk/SophyaPI/PIext/pistdimgapp.h

    r3355 r3366  
    127127     inline NamedObjMgr* ObjMgr() { return mObjMgr; }
    128128     inline PIACmd* CmdInterpreter() { return mCmd; }
     129     inline SOpExObj* getSOpExObj() { return mSopex; }
    129130
    130131     PIWindow* CurrentWindow() { return (mCurWin); };
     
    189190    NamedObjMgr* mObjMgr;
    190191    PIACmd* mCmd;
     192    SOpExObj* mSopex;
    191193
    192194    PIMenu* m[7];
Note: See TracChangeset for help on using the changeset viewer.