Index: trunk/SophyaPI/PI/pi3ddrw.cc
===================================================================
--- trunk/SophyaPI/PI/pi3ddrw.cc	(revision 1815)
+++ trunk/SophyaPI/PI/pi3ddrw.cc	(revision 1827)
@@ -440,10 +440,13 @@
 if (kmod == PIKM_Alt) {
   if (key == 'V' || key == 'v') RequestSelection();  // Pour coller (copier/coller)  
-  if (key == 'Z' || key == 'z') { mBDrw->ElDelAll();  Refresh(); } // Pour supprimer tous les signes 
-  if (key == 'O' || key == 'o' || key == 'G' || key == 'g') { 
-    PIDrwTools::SetCurrentBaseWdg(this);
-    PIDrwTools::ShowPIDrwTools();   // Fentre axes et options de trace
-    }
-  if (key == 'A' || key == 'a')  {    // On affiche ou on enleve les axes
+  else if (key == 'Z' || key == 'z') { mBDrw->ElDelAll();  Refresh(); } // Pour supprimer tous les signes 
+  else if (key == 'O' || key == 'o') { // fenetre des options de controle du drawer actif
+    PIDrawer* actdrw = GetActiveDrawer();
+    if (actdrw != NULL) actdrw->ShowControlWindow(this);
+  }
+  else if (key == 'G' || key == 'g') // Fenetre des options graphiques de trace
+    PIDrwTools::ShowPIDrwTools(this);   
+
+  else if (key == 'A' || key == 'a')  {    // On affiche ou on enleve les axes
     axfg = !axfg;
     list<int>::iterator it;
@@ -458,6 +461,6 @@
     }
 //  <Alt>S active la sensibilite de la zone centrale pour tourner l'objet
-  if (key == 'S' || key == 's')  skcfg = !skcfg;  
-  if (key == 'R' || key == 'r')  Update3DView();
+  else if (key == 'S' || key == 's')  skcfg = !skcfg;  
+  else if (key == 'R' || key == 'r')  Update3DView();
   }
 }
Index: trunk/SophyaPI/PI/pibwdggen.cc
===================================================================
--- trunk/SophyaPI/PI/pibwdggen.cc	(revision 1815)
+++ trunk/SophyaPI/PI/pibwdggen.cc	(revision 1827)
@@ -88,4 +88,5 @@
 {
 mDrwId=0;   // Compteur des numeros sequentiel des PIDrawer
+mActDrwId = -1;  // Identificateur du drawer actif
 mAdfg=false;    // Pour controle d'appel de RemoveDrawer()
 mWGrC = NULL;   // PIGraphic (Contexte graphique) associe a la fenetre}
@@ -377,4 +378,5 @@
 mDrwList.push_back(did);
 drw->Attach(this, mDrwId);
+mActDrwId = mDrwId;   // Le dernier drawer ajoute devient le drawer actif par defaut
 return(mDrwId);
 }
@@ -394,4 +396,5 @@
 mDrwList.push_back(did);
 drw->Attach(this, mDrwId);
+mActDrwId = mDrwId;   // Le dernier drawer ajoute devient le drawer actif par defaut
 return(mDrwId);
 }
@@ -428,6 +431,12 @@
 vector<BWDrwId>::iterator it;
 for(it = mDrwList.begin(); it != mDrwList.end(); it++)
-  if ((*it).id == id) 
-    { (*it).drw->Detach(this, id); mDrwList.erase(it); break; }
+  if ((*it).id == id) {
+    (*it).drw->Detach(this, id); mDrwList.erase(it); 
+    if (id == mActDrwId) {
+      if (NbDrawers() > 0) mActDrwId = (*mDrwList.end()).id;
+      else mActDrwId = -1;
+    }
+  break; 
+  }
 return;
 }
@@ -441,4 +450,5 @@
   if ((*it).ad)  delete (*it).drw;
 mDrwList.erase(mDrwList.begin(), mDrwList.end() );
+mActDrwId = -1;
 mAdfg = false;
 return;
@@ -477,4 +487,42 @@
 }
 
+
+/* --Methode-- */
+void PIBaseWdgGen::SetActiveDrawerId(int id)
+{
+vector<BWDrwId>::iterator it;
+for(it = mDrwList.begin(); it != mDrwList.end(); it++)  
+  if ((*it).id == id) { mActDrwId = id; break; }
+return;
+}
+
+/* --Methode-- */
+void PIBaseWdgGen::SetActiveDrawer(int n)
+{
+if ( (n >= 0) && (n < mDrwList.size()) ) mActDrwId = mDrwList[n].id;
+return;
+}
+
+/* --Methode-- */
+int PIBaseWdgGen::GetActiveDrawerId()
+{
+  return(mActDrwId);
+}
+
+/* --Methode-- */
+int PIBaseWdgGen::GetActiveDrawerNum()
+{
+  if (mActDrwId < 0) return(-1);
+  for(int i=0; i<mDrwList.size(); i++) 
+    if (mDrwList[i].id == mActDrwId) return(i);
+  return(-1);
+}
+
+/* --Methode-- */
+PIDrawer*  PIBaseWdgGen::GetActiveDrawer()
+{
+  if (mActDrwId < 0) return(NULL); 
+  else return(GetDrawerId(mActDrwId));
+}
 
 //++
Index: trunk/SophyaPI/PI/pibwdggen.h
===================================================================
--- trunk/SophyaPI/PI/pibwdggen.h	(revision 1815)
+++ trunk/SophyaPI/PI/pibwdggen.h	(revision 1827)
@@ -97,5 +97,12 @@
   virtual int        NbDrawers();
   virtual PIDrawer*  GetDrawerId(int id);   
-  virtual PIDrawer*  GetDrawer(int n);   
+  virtual PIDrawer*  GetDrawer(int n); 
+  
+// Quel est le drawer actif
+  virtual void       SetActiveDrawerId(int id);   
+  virtual void       SetActiveDrawer(int n);   
+  virtual int        GetActiveDrawerId();   
+  virtual int        GetActiveDrawerNum();   
+  virtual PIDrawer*  GetActiveDrawer();   
 
 //  Trace des Drawers ...          
@@ -113,5 +120,6 @@
   bool mAdfg;           // Pour la gestion de DeleteDrawers() quand appele par delete de PIBaseWdg
   int mDrwId;           // Compteur pour DrawerId
-  vector<BWDrwId> mDrwList;
+  int mActDrwId;        // Identificateur du drawer actif
+  vector<BWDrwId> mDrwList;   // Liste des drawers et leur Id
 //  Definition de la zone de trace et limites UC des drawers par defaut  
   PIGrCoord mDrX1, mDrY1,  mDrX2,  mDrY2;  
Index: trunk/SophyaPI/PI/picmapview.cc
===================================================================
--- trunk/SophyaPI/PI/picmapview.cc	(revision 1815)
+++ trunk/SophyaPI/PI/picmapview.cc	(revision 1827)
@@ -136,10 +136,10 @@
     }
   }
-  
+  cout << " PICMapView::Draw1 "<<vmin<<" "<<vmax<<endl;
   if (vmin > vmax)   return;
   if ( (cmap->Type() == CMAP_GREY32) || (cmap->Type() == CMAP_GREYINV32) ||
        (cmap->Type() == CMAP_GREY128) || (cmap->Type() == CMAP_GREYINV128) )  g->SelForeground(PI_Red);
   else g->SelForeground(PI_Green);
-
+  cout << " PICMapView::Draw2 "<<vmin<<" "<<vmax<<endl;
   if (sx > sy) {    // horizontal
     int fsz = (sy < 20) ? sy-6 : 14;
@@ -151,7 +151,9 @@
     else sprintf(buff, "%8.4g", vmin);
     g->DrawString(4, sy-4, buff);
+    cout << " buff "<<buff;
     av = fabs(vmax);
     if ( (av < 1.e6) && (av > 1.e-3) )  sprintf(buff, "%.2f", vmax);
     else sprintf(buff, "%8.4g", vmax);
+    cout << " buff2 "<<buff<<endl;
     g->DrawString(sx-4-(int)g->CalcStringWidth(buff), sy-4, buff);
     } 
Index: trunk/SophyaPI/PI/pidrawer.cc
===================================================================
--- trunk/SophyaPI/PI/pidrawer.cc	(revision 1815)
+++ trunk/SophyaPI/PI/pidrawer.cc	(revision 1827)
@@ -8,4 +8,6 @@
 #include <iostream.h>
 #include "pidrawer.h"
+
+#include "pidrwtools.h"
 
 #include <math.h>
@@ -311,4 +313,17 @@
 }
 
+void
+PIDrawer::ShowControlWindow(PIBaseWdgGen* wdg)
+{
+  // On affiche par defaut la fenetre de gestion des attributs graphiques
+   PIDrwTools::ShowPIDrwTools(wdg);
+}
+
+int
+PIDrawer::DecodeOptionString(vector<string> & opt)
+{
+  // a faire un jour OP+Reza 30/11/01
+  return(0);
+}
 
 PIGraphicUC*
Index: trunk/SophyaPI/PI/pidrawer.h
===================================================================
--- trunk/SophyaPI/PI/pidrawer.h	(revision 1815)
+++ trunk/SophyaPI/PI/pidrawer.h	(revision 1827)
@@ -90,5 +90,11 @@
 
 
-//  --- Methode static ----
+//  Methode permettant l'affichage d'une fenetre de controle specialisee 
+  virtual void       ShowControlWindow(PIBaseWdgGen* wdg);
+
+//   Methode permettant de decoder des options a partir de chaines
+  virtual int        DecodeOptionString(vector<string> & opt);
+
+//  --- Methode- static ----
 //  Calcul des Distances optimales des subdivisions 
   static void        BestTicks(double rmin,double rmax,int nticks,double& majt);
Index: trunk/SophyaPI/PI/pidrwtools.cc
===================================================================
--- trunk/SophyaPI/PI/pidrwtools.cc	(revision 1815)
+++ trunk/SophyaPI/PI/pidrwtools.cc	(revision 1827)
@@ -54,4 +54,12 @@
 
 /* --Methode-- */
+void PIDrwTools::ShowPIDrwTools(PIBaseWdgGen* cbw) 
+{
+if (cwdrwt == NULL)  cwdrwt = new PIDrwTools(PIApplicationGetApp());
+SetCurrentBaseWdg(cbw);
+cwdrwt->Show();
+}
+
+/* --Methode-- */
 void PIDrwTools::ShowPIDrwTools() 
 {
@@ -74,5 +82,5 @@
 if (cwdrwt)  { 
   if (mCurBW != NULL)  { 
-    cwdrwt->mNDr = mCurBW->NbDrawers()-1;
+    cwdrwt->mNDr = mCurBW->GetActiveDrawerNum();
     if (cwdrwt->mNDr < 0)  cwdrwt->mNDr = 0;
     }
@@ -248,4 +256,5 @@
 mOpt[7]->AppendItem("Big FontSz", 804);
 mOpt[7]->AppendItem("Huge FontSz", 805);
+mOpt[7]->SetBinding(PIBK_elastic, PIBK_elastic, PIBK_elastic, PIBK_elastic);
 
 cpx = 2*spx;
@@ -410,4 +419,5 @@
   PIDrawer* drw = mCurBW->GetDrawer(mNDr);
   if (drw == NULL)  return;
+  mCurBW->SetActiveDrawer(mNDr);
   int k,ii,jj,kk;
   k = mOpt[0]->GetValue()-100;
@@ -461,5 +471,8 @@
     case 3200 :
       if ((mCurBW != NULL) && (mCurBW->GetDrawer(mNDr) != NULL) ) {
-	if (mod == PIMsg_Press)  mCurBW->GetDrawer(mNDr)->HighLight(true);
+	if (mod == PIMsg_Press)  { 
+	  mCurBW->GetDrawer(mNDr)->HighLight(true);
+	  mCurBW->SetActiveDrawer(mNDr);
+	}
 	else  mCurBW->GetDrawer(mNDr)->HighLight(false);
       }
Index: trunk/SophyaPI/PI/pidrwtools.h
===================================================================
--- trunk/SophyaPI/PI/pidrwtools.h	(revision 1815)
+++ trunk/SophyaPI/PI/pidrwtools.h	(revision 1827)
@@ -26,4 +26,5 @@
   static PIDrwTools* curlutw;
   static void ShowPIDrwTools();
+  static void ShowPIDrwTools(PIBaseWdgGen* cbw);
   static void HidePIDrwTools();
   static void SetCurrentBaseWdg(PIBaseWdgGen* cbw);
Index: trunk/SophyaPI/PI/piscdrawwdg.cc
===================================================================
--- trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 1815)
+++ trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 1827)
@@ -11,4 +11,5 @@
 #include "piaxestools.h"
 #include "parradapter.h"
+
 
 //++
@@ -34,4 +35,5 @@
 //	* <Alt>I : Affiche et met a jour la fenetre Texte-Info .
 //	* <Alt>Z : Supprime les textes et signes ajoutés au dessin.
+//      * <Alt>P : fenetre des options de drawing des contours 
 //--
 //++
@@ -117,6 +119,5 @@
 }
 
-void 
-PIScDrawWdg::Keyboard(int key, PIKeyModifier kmod)
+void PIScDrawWdg::Keyboard(int key, PIKeyModifier kmod)
 {
 if (kmod == PIKM_Alt) {
@@ -125,13 +126,16 @@
   else if (key == 'V' || key == 'v') RequestSelection();  // Pour coller (copier/coller)  
   else if (key == 'Z' || key == 'z') { mBDrw->ElDelAll();  Refresh(); } // Pour supprimer tous les signes 
-  else if (key == 'O' || key == 'o') ActivateSpecializedControls();
-  else if (key == 'G' || key == 'g') { 
-    PIDrwTools::SetCurrentBaseWdg(this);
-    PIDrwTools::ShowPIDrwTools();   // Fentre axes et options de trace
-    }
+  else if (key == 'O' || key == 'o') { // fenetre des options de controle du drawer actif
+    PIDrawer* actdrw = GetActiveDrawer();
+    if (actdrw != NULL) actdrw->ShowControlWindow(this);
+  }
+  else if (key == 'G' || key == 'g') // Fenetre des options graphiques de trace
+    PIDrwTools::ShowPIDrwTools(this);   
+  
   else if (key == 'A' || key == 'a') { 
     PIAxesTools::SetCurrentScDrawWdg(this);
     PIAxesTools::ShowPIAxesTools();  // Fenetre de gestion des axes
   }
+  
   else if (key == 'I' || key == 'i') UpdateInfoWindow();  // Fenetre Text-Info 
   }
Index: trunk/SophyaPI/PI/piversion.h
===================================================================
--- trunk/SophyaPI/PI/piversion.h	(revision 1815)
+++ trunk/SophyaPI/PI/piversion.h	(revision 1827)
@@ -2,5 +2,5 @@
 #define PIVERSION_H_SEEN
 
-#define PI_VERSIONNUMBER  3.3
+#define PI_VERSIONNUMBER  3.35
 
 #endif
