Index: trunk/SophyaPI/PI/pibwdggen.cc
===================================================================
--- trunk/SophyaPI/PI/pibwdggen.cc	(revision 2229)
+++ trunk/SophyaPI/PI/pibwdggen.cc	(revision 2230)
@@ -434,5 +434,5 @@
     (*it).drw->Detach(this, id); mDrwList.erase(it); 
     if (id == mActDrwId) {
-      if (NbDrawers() > 0) mActDrwId = (*mDrwList.end()).id;
+      if (NbDrawers() > 0) mActDrwId = (*(mDrwList.end()-1)).id;
       else mActDrwId = -1;
     }
Index: trunk/SophyaPI/PI/pidrawer.cc
===================================================================
--- trunk/SophyaPI/PI/pidrawer.cc	(revision 2229)
+++ trunk/SophyaPI/PI/pidrawer.cc	(revision 2230)
@@ -38,4 +38,5 @@
 {
   mFgDeleteOnDetach = false;
+  mFgRefreshOnDelete = false;
   mBWdg = NULL; 
   mGrUC = NULL;
@@ -65,11 +66,23 @@
   // Desactivation totale de la fenetre de controle specialise 
   // ---> parametre d'appel PIBaseWdgGen* wdg=NULL
-  DeactivateControlWindow(NULL);
+  // DeactivateControlWindow(NULL);
+  // Il semble qu'a ce niveau d'appel du desctructeur,
+  // la table des fonctions virtuelles soit alterees et 
+  // la fonction virtuelle DeactivateControlWindow() pointe sur celle
+  // de base - DeactivateControlWindow(NULL) doit donc etre appele
+  // ds le destructeur de la classe derivee 
+  //                    Reza - Octobre 2002 
+
+  // Mise a jour eventuelle de la fenetre PIDrwTools
+  bool ckdeact = (PIDrwTools::GetActiveDrawer() == this) ? true : false;
 
   list<DrwBWId>::iterator it;
   mDndfg = true;
-  for(it = mBWdgList.begin(); it != mBWdgList.end(); it++)
-         (*it).wdg->RemoveDrawer((*it).id);
+  for(it = mBWdgList.begin(); it != mBWdgList.end(); it++) {
+    (*it).wdg->RemoveDrawer((*it).id);
+    if (mFgRefreshOnDelete) (*it).wdg->Refresh();
+  }
   if (mGrUC)  delete mGrUC;
+  if (ckdeact) PIDrwTools::UpdateActiveDrawer();
 }
 
@@ -277,4 +290,7 @@
   // base-widget duquel on se detache 
   DeactivateControlWindow(wdg);
+  
+  // Mise a jour eventuelle de la fenetre PIDrwTools
+  bool ckdeact = (PIDrwTools::GetActiveDrawer() == this) ? true : false;
 
   list<DrwBWId>::iterator it;
@@ -282,4 +298,6 @@
      if ( ((*it).id == id) && ((*it).wdg == wdg) ) { mBWdgList.erase(it);  break; }
   if (mFgDeleteOnDetach && (mBWdgList.size() == 0))  delete this;
+
+  if (ckdeact) PIDrwTools::UpdateActiveDrawer();
   return;
 }
@@ -306,6 +324,7 @@
 PIDrawer::DeactivateControlWindow(PIBaseWdgGen* wdg)
 {
-  // Par defaut, il n'y a pas de fenetre de controle specialise
-  // Donc, on ne fait rien 
+  // La mise a jour eventuelle de PIDrwTools se fait 
+  // directement lors de Detach() ou delete 
+  // La methode par defaut ne fait donc rien 
 }
 
Index: trunk/SophyaPI/PI/pidrawer.h
===================================================================
--- trunk/SophyaPI/PI/pidrawer.h	(revision 2229)
+++ trunk/SophyaPI/PI/pidrawer.h	(revision 2230)
@@ -17,6 +17,10 @@
   virtual           ~PIDrawer();
 
+  // if true -> PIDrawer deleted when detached from last BaseWdg
   inline  void       SetAutoDeleteOnDetach(bool fg)
                        { mFgDeleteOnDetach = fg; }
+  // if true -> PIBaseWdg()->Refresh() when PIDrawer is deleted 
+  inline  void       SetAutoRefreshOnDelete(bool fg)
+                       { mFgRefreshOnDelete = fg; }
 
   virtual void       SetLimits(double xmin, double xmax, double ymin, double ymax,
@@ -102,5 +106,7 @@
   bool mFgDeleteOnDetach;         // si true -> delete drawer on detach
                                   // from last BaseWdg
-
+  bool mFgRefreshOnDelete;        // si true -> On rafraichit le BaseWdg
+                                  // lors du delete ou Detach
+         
   double xMin, xMax, yMin, yMax;  // Valeurs en unites user
   int xW0, yW0, xWd, yWd;        // Origine/largeur ds la fenetre de trace
Index: trunk/SophyaPI/PI/pidrwtools.cc
===================================================================
--- trunk/SophyaPI/PI/pidrwtools.cc	(revision 2229)
+++ trunk/SophyaPI/PI/pidrwtools.cc	(revision 2230)
@@ -89,4 +89,20 @@
 return(mCurBW);
 }
+
+/* --Methode-- */
+PIDrawer* PIDrwTools::GetActiveDrawer()
+{
+if ((cwdrwt == NULL) || (mCurBW == NULL) || (cwdrwt->mNDr < 0) )  
+  return(NULL);
+else return(mCurBW->GetDrawer(cwdrwt->mNDr));
+}
+
+/* --Methode-- */
+void PIDrwTools::UpdateActiveDrawer()
+{
+  if (cwdrwt && cwdrwt->IsVisible())  
+    cwdrwt->UpdateControlsFromDrawer(-9);
+}
+
 
 /* --Methode-- */
Index: trunk/SophyaPI/PI/pidrwtools.h
===================================================================
--- trunk/SophyaPI/PI/pidrwtools.h	(revision 2229)
+++ trunk/SophyaPI/PI/pidrwtools.h	(revision 2230)
@@ -24,5 +24,4 @@
   virtual void  Show();
 
-  static PIDrwTools* curlutw;
   static void ShowPIDrwTools();
   static void ShowPIDrwTools(PIBaseWdgGen* cbw);
@@ -30,4 +29,6 @@
   static void SetCurrentBaseWdg(PIBaseWdgGen* cbw);
   static PIBaseWdgGen* GetCurrentBaseWdg();
+  static PIDrawer* GetActiveDrawer();
+  static void UpdateActiveDrawer();
 
 protected:
Index: trunk/SophyaPI/PI/piversion.h
===================================================================
--- trunk/SophyaPI/PI/piversion.h	(revision 2229)
+++ trunk/SophyaPI/PI/piversion.h	(revision 2230)
@@ -2,5 +2,5 @@
 #define PIVERSION_H_SEEN
 
-#define PI_VERSIONNUMBER  3.80
+#define PI_VERSIONNUMBER  3.83
 
 #endif
