Index: /trunk/SophyaPI/PIGcont/picntools.cc
===================================================================
--- /trunk/SophyaPI/PIGcont/picntools.cc	(revision 2249)
+++ /trunk/SophyaPI/PIGcont/picntools.cc	(revision 2250)
@@ -70,4 +70,5 @@
 }
 
+
 /* --Methode-- */
 void PICnTools::HidePICnTools() 
@@ -130,5 +131,5 @@
 bsy = 0.85*bsy;   spy = 0.85*spy;
 
-mLab[0] = new PILabel(this, " Couleurs des  contours ", 2*bsx, 1.25*bsy, cpx, cpy);
+mLab[0] = new PILabel(this, " Couleurs ", 2*bsx, 1.25*bsy, cpx, cpy);
 mLab[0]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
 
@@ -199,5 +200,4 @@
 
 
-
 cpx = 2*spx; // current position 
 cpy += spy+bsy;
@@ -274,5 +274,5 @@
 cpx = 2*spx;
 cpy += spy+bsy;
-mLab[1] = new PILabel(this, " Label des  contours ", 2*bsx, 1.25*bsy, cpx, cpy);
+mLab[1] = new PILabel(this, " Labels ", 2*bsx, 1.25*bsy, cpx, cpy);
 mLab[1]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
 cpx += spx+2*bsx; 
@@ -334,5 +334,5 @@
 cpx = 2*spx;
 cpy += spy+bsyo;
-mLab[2] = new PILabel(this, " Options de calcul des contours ", 3*bsx, bsy, cpx, cpy);
+mLab[2] = new PILabel(this, " params du calcul ", 3*bsx, bsy, cpx, cpy);
 mLab[2]->SetBinding(PIBK_elastic, PIBK_elastic, PIBK_elastic, PIBK_elastic);
 
@@ -357,5 +357,5 @@
 cpx = 2*spx;
 
-mLab[3] = new PILabel(this, "# Contours", bsx, bsy, cpx, cpy);
+mLab[3] = new PILabel(this, "Nombre", bsx, bsy, cpx, cpy);
 mLab[3]->SetBinding(PIBK_elastic, PIBK_elastic, PIBK_elastic, PIBK_elastic);
 cpx += spx+bsx;
@@ -484,14 +484,55 @@
 mCkb[1]->SetState(mCurCDrw->IsMarkOn());
 mCkb[2]->SetState(mCurCDrw->IsLabelOn());
-
+if(mCkb[2]->GetState()==false){ 
+  mOpt[4]->SetUnSensitive();
+  mOpt[6]->SetUnSensitive();
+  mOpt[7]->SetUnSensitive();
+}else {
+  mOpt[4]->SetSensitive();
+  mOpt[6]->SetSensitive();
+  mOpt[7]->SetSensitive();
+}
+
+
+if(mCkb[1]->GetState()==false) {
+  mOpt[3]->SetUnSensitive();
+  mOpt[2]->SetUnSensitive();
+}else{
+  mOpt[3]->SetSensitive();
+  mOpt[2]->SetSensitive();
+}
+
+
+if(mCkb[0]->GetState()==false) 
+  mOpt[5]->SetUnSensitive();
+else
+  mOpt[5]->SetSensitive();
 
 int ii,jj,kk;
 PIColors fc = dr->GetGraphicAtt().GetFgColor();
 for(kk=0; kk<MYNMXCOLORS; kk++) 
-  if (fc == cols[kk])  { mOpt[0]->SetValue(100+kk);  break; }    
+  if (fc == cols[kk])  
+    { mOpt[0]->SetValue(100+kk);  break; }    
+
+
 CMapId cmi = dr->GetGraphicAtt().GetColMapId();
-if (cmi == CMAP_OTHER)  mOpt[1]->SetValue(200);
-else for(kk=0; kk<PIColorMap::NumberStandardColorMaps(); kk++)
-  if (cmi == PIColorMap::GetStandardColorMapId(kk)) { mOpt[1]->SetValue(201+kk);  break; }  
+double zmin=0;
+double zmax=1.;
+if(mCurCDrw!=NULL){
+   zmin = mCurCDrw->Zmin();
+    zmax = mCurCDrw->Zmax();
+}
+
+if (cmi == CMAP_OTHER)  {
+  mOpt[1]->SetValue(200);
+  mCurCDrw->GetGraphicAtt().SetColMapId(CMAP_OTHER);
+  cmapv->SetColMapId(CMAP_OTHER,false, zmin , zmax,true);
+}else for(kk=0; kk<PIColorMap::NumberStandardColorMaps(); kk++)
+  if (cmi == PIColorMap::GetStandardColorMapId(kk)) { 
+    mOpt[1]->SetValue(201+kk);
+    cmapv->SetColMapId(PIColorMap::GetStandardColorMapId(kk),false, zmin , zmax,true);
+    break; 
+  }
+  
 PIMarker mk = dr->GetGraphicAtt().GetMarker();   
 for(kk=0; kk<12; kk++) 
@@ -682,5 +723,6 @@
   if (k == 0){
     mCurCDrw->GetGraphicAtt().SetColMapId(CMAP_OTHER);
-    
+    cmapv->SetColMapId(CMAP_OTHER,false, zmin , zmax,true);
+
   }else{
     mCurCDrw->GetGraphicAtt().SetColMapId(PIColorMap::GetStandardColorMapId(k-1));
@@ -729,5 +771,7 @@
     if (k == 0){
       cmapv->SetColMapId(CMAP_OTHER,false, zmin , zmax,true);
+      
     }else{
+      
       cmapv->SetColMapId(PIColorMap::GetStandardColorMapId(k-1),false , zmin , zmax,true);
     }
@@ -738,5 +782,5 @@
       if(mCkb[0]->GetState()==false) 
 	mOpt[5]->SetUnSensitive();
-      else
+      else 
 	mOpt[5]->SetSensitive();
 
Index: /trunk/SophyaPI/PIGcont/pigncont.cc
===================================================================
--- /trunk/SophyaPI/PIGcont/pigncont.cc	(revision 2249)
+++ /trunk/SophyaPI/PIGcont/pigncont.cc	(revision 2250)
@@ -565,4 +565,22 @@
   for(int i=0 ; i<k ; i++)My_Levels[i] = ptr[i];
 }
+//++
+// void SetMyLevels(vector<double>vec)
+//      Setting du tableau des niveaux des contours 
+//Inputs      
+//| 
+//| vector <double> vec  : vecteur des niveaux 
+//--
+void 
+GNUPlotContour::SetMyLevels(vector <double> vec){
+  
+  if(My_Levels!=NULL) delete My_Levels;
+  int sz = vec.size();
+  assert (sz>0);
+
+  My_Levels = new double[sz];
+  for(int i=0 ; i<sz ; i++)
+    My_Levels[i] = vec[i];
+}
 
 //++
@@ -639,4 +657,5 @@
     if(_nti!=NULL){delete _nti ; _nti=NULL;}
   }
+  DeactivateControlWindow(NULL);
   //if (mColorMap!=NULL){delete  mColorMap;  mColorMap=NULL;}
 }
@@ -762,4 +781,20 @@
 }
 
+//++
+void PIContourDrawer::DeactivateControlWindow(PIBaseWdgGen* wdg)
+//
+//	Desactivation de la fenetre de controle specialisee
+//--
+{
+  // si wdg != NULL, c'est un Detach (Drawer detache du PIBaseWdg
+  // si wdg == NULL, c'est un delete du PIHisto2D (du PIDrawer)
+  
+  PICnTools::SetCurrentBaseWdg(NULL);
+  PICnTools::SetCurrentCnDrw(NULL);
+  PICnTools::HidePICnTools(); 
+
+  return;
+}
+
 
 /* --Methode-- */
@@ -793,5 +828,134 @@
   mLabelOn = false;
 }
- 
-
-
+
+int PIContourDrawer::DecodeOptionString(vector<string> & opt, bool rmdecopt)
+{
+  // inspire de int PINTuple::DecodeOptionString
+  // OP 11/2002 LAL Orsay
+  
+  int ndec = opt.size();
+  if (ndec < 1)  return(0);  
+
+
+  cout << " PIDrawer::DecodeOptionString  : ndec = "<< ndec <<endl;
+  // On appelle d'abord le decodage de la classe PIDrawer de laquelle
+  // on herite. (Pas obligatoire) on decode donc ici les attributs de
+  // couleur, fontes ...
+  int ndec1 = PIDrawer::DecodeOptionString(opt, rmdecopt);
+  cout << " PIDrawer::DecodeOptionString apres PIDrawer::DecodeOptionString : ndec = "
+       << ndec1 <<"<>" << ndec <<endl;
+  if( ndec - ndec1 < 1 ) return(ndec1);  // si tout a ete decode
+
+  vector<string> udopt;  // On gardera ici les options non decodees
+  int iopt  = 0;
+  ndec = opt.size();
+  int recalc = 0;
+  for (iopt = 0 ; iopt<ndec ; iopt++){
+
+    string sopt = opt[iopt];
+    if( sopt.find_first_of("=") != string::npos ){
+      // options avec = 
+      string deb = sopt.substr(0,sopt.find_first_of("="));
+      cout << " option avec =  : "<<deb<<" "<<sopt<<endl;
+      if( (deb =="ncont") || (deb =="nc") ){ // # de contours 
+	string fin =  sopt.substr(sopt.find_first_of("=")+1 , string::npos);
+	cout <<" fin "<<fin<<endl;
+	int nlev = atoi(fin.c_str());
+	this->SetNLevel(nlev);
+	this->SetCntLevelKind(LEVELS_NUM);
+	recalc =1;
+      }else if(deb=="niv"||deb=="lev"){ // hauteur des niveaux 
+	string fin =  sopt.substr(sopt.find_first_of("=")+1 , string::npos);
+	char * buff = strdup(fin.c_str());
+	char *tmp;
+	tmp = strtok(buff,",");
+	
+	if(tmp==NULL){
+	   cerr<< " PICOntourDrawer::DecodeOptionString ERREUR decodage des niveaux impossible " << buff <<endl;
+	  
+	}else {
+	
+	  vector <double> ztmp;
+	  while(tmp!=NULL){
+	    ztmp.push_back(atof(tmp));
+	    tmp = strtok(NULL,",");
+	  }
+	  int nlev = ztmp.size();
+	  cout << "  PICOntourDrawer::DecodeOptionString "<<nlev<<" niveaux decodes "<<endl; 
+	  this->SetCntLevelKind(LEVELS_DISCRETE);
+	  this->SetNLevel(nlev); 
+	  this->SetMyLevels(ztmp);
+	  recalc =1;
+	}
+      }else if(deb=="lstep" ){ // niveaux incrementaux : args = nombre,depart,pas
+	string fin =  sopt.substr(sopt.find_first_of("=")+1 , string::npos);
+	char * buff = strdup(fin.c_str());
+	char *tmp;
+	tmp = strtok(buff,",");
+	
+	if(tmp==NULL){
+	  cerr<< " PICOntourDrawer::DecodeOptionString ERREUR decodage nvx/incr. impossible " << buff <<endl;
+	}else{
+	  
+	  vector <double> ztmp;
+	  while(tmp!=NULL){
+	    ztmp.push_back(atof(tmp));
+	    tmp = strtok(NULL,",");
+	  }
+	  if(ztmp.size() !=2) {
+	    cerr<< " PICOntourDrawer::DecodeOptionString ERREUR nb params incorrect(incr) " << buff <<endl;
+	  }else{
+	    vector <double> zlev;
+	    zlev.push_back(ztmp[1]);
+	    zlev.push_back(ztmp[2]);
+	    this->SetCntLevelKind(LEVELS_INCREMENTAL);
+	    this->SetNLevel( (int) ztmp[0]); 
+	    this->SetMyLevels(zlev);
+	    recalc=1;
+	  }
+	}
+
+      }else{
+	cout<<"PICOntourDrawer::DecodeOptionString ERREUR  option "<<sopt<<" non reconnue "<<endl;
+	ndec--;
+	if (rmdecopt)  udopt.push_back( sopt );
+      }
+    }else{ //options sans "="
+      if( sopt == "labon" )
+	this->SetLabelOn();
+      else if (sopt == "bspline" ){
+	this->SetCntKind(CONTOUR_KIND_BSPLINE);
+	recalc = 1;
+      }else if (sopt == "3spl" ){
+	this->SetCntKind(CONTOUR_KIND_CUBIC_SPL);
+	recalc = 1;
+      }
+      else{
+	cout<<"PICOntourDrawer::DecodeOptionString ERREUR  option "<<sopt<<" non reconnue "<<endl;
+	ndec--;
+	if (rmdecopt)  udopt.push_back(sopt);
+      }
+    }
+    
+  }// FIN DE LA BOUCLE SUR LES OPTIONS 
+
+  if(recalc==1){
+    // il faut (re)calculer les contours 
+    cout << " PICOntourDrawer::DecodeOptionString(re)calcul des contours "<<endl;
+    this->CalcContour(); 
+  }
+  this->Refresh();
+
+  
+  //
+
+  // S'il faut supprimer les options decodees, on remplace l'argument opt
+  // par le vecteur des options non decodees.
+  if (rmdecopt)  opt = udopt;
+
+  return(ndec+ndec1);  
+  
+}
+
+
+ 
Index: /trunk/SophyaPI/PIGcont/pigncont.h
===================================================================
--- /trunk/SophyaPI/PIGcont/pigncont.h	(revision 2249)
+++ /trunk/SophyaPI/PIGcont/pigncont.h	(revision 2250)
@@ -28,4 +28,5 @@
   const double *Levels(){return My_Levels;};
   void SetMyLevels(double *ptr,int k);
+  void SetMyLevels(vector <double> vec);
   int NLevels(){return Contour_Levels;};
   void SetNLevel(int n){Contour_Levels=n;};
@@ -35,4 +36,5 @@
   void SetCntKind(t_contour_kind kind){Contour_kind = kind;};
   t_contour_kind GetCntKind(){return Contour_kind ;};
+
 
   NTuple * & MyIso(){return  _myiso;};
@@ -76,7 +78,7 @@
   virtual bool      IsMarkOn();  
   virtual bool      IsLabelOn();
-  virtual void      SetLineOn(bool );
-  virtual void      SetMarkOn(bool);
-  virtual void      SetLabelOn(bool);
+  virtual void      SetLineOn(bool b=true);
+  virtual void      SetMarkOn(bool b=true);
+  virtual void      SetLabelOn(bool b=true);
 
   //Init  attributs graphiques 
@@ -87,4 +89,8 @@
 //  Methode permettant l'affichage d'une fenetre de controle specialisee 
   virtual void      ShowControlWindow(PIBaseWdgGen* wdg);
+  //  Desactivation de la fenetre de controle specialisee
+  virtual void DeactivateControlWindow(PIBaseWdgGen* wdg);
+//   Methode permettant de decoder des options a partir de chaines
+  int        DecodeOptionString(vector<string> & opt, bool rmdecopt=true);
 
 
