Index: trunk/SophyaPI/PI/pidrawer.cc
===================================================================
--- trunk/SophyaPI/PI/pidrawer.cc	(revision 1620)
+++ trunk/SophyaPI/PI/pidrawer.cc	(revision 1631)
@@ -616,7 +616,8 @@
 
 /* --Methode-Static-- */
-int PIDrawer::BonFormatAxes(double xmin,double xmax,double dx,string& format)
+int PIDrawer::BonFormatAxes(double xmin,double xmax,double dx,string& format, int add_digit)
 // Calcul format optimal pour ecrire les axes
-// double = 17 digits : +d.(16digits)e+ddd  -> e25.18 est large!
+// double = 17 digits : +d.(17digits)e+ddd  -> min 25%17e  -> securite 26%18e
+// ** add_digit nombre de digit a ajouter au nombre de digit minimum.
 {
  format = "%-6g";  // format par default
@@ -659,14 +660,22 @@
  ndig -= 2;  // +1 - 3 (car par ex:"+9.")
 
+ // on ajoute des digits au cas ou on veut plus que le minimum requis
+ ndig += add_digit;
+
  // Si peu de digits on reste avec le format par defaut
  // Attention: %6g arrondi le 6ieme digit -> ndig<5 !
  if(ndig<6) return ndig;
 
+ // Calcule du nombre nn devant le format %nn.ddde
+ //                        +a.<---ddd--->e+123
+ //                       nndig = ddd + 8
+ int nndig = ndig + 8; if(nndig<=0) nndig = 26;
+
  // On evite d'ecrire d.ddde+00   -> format %f
  if(  (xmin>=1. && xmin<10. && xmax>=1. && xmax<10.) 
    || (xmin>-10. && xmin<=-1. && xmax>-10. && xmax<=-1.) ) {
-   sprintf(str,"%%-26.%df",ndig);
+   sprintf(str,"%%-%d.%df",nndig,ndig);
  } else {
-   sprintf(str,"%%-26.%de",ndig);
+   sprintf(str,"%%-%d.%de",nndig,ndig);
  }
  format = str;
Index: trunk/SophyaPI/PI/pidrawer.h
===================================================================
--- trunk/SophyaPI/PI/pidrawer.h	(revision 1620)
+++ trunk/SophyaPI/PI/pidrawer.h	(revision 1631)
@@ -94,5 +94,5 @@
   static void        BestTicks(double rmin,double rmax,int nticks,double& majt);
 //  Calcul du format optimal pour les axes
-  static int BonFormatAxes(double xmin,double xmax,double dx,string& format);
+  static int BonFormatAxes(double xmin,double xmax,double dx,string& format, int add_digit=0);
 
 //  Les objets/methodes suivants devraient etre protected     
Index: trunk/SophyaPI/PI/piscdrawwdg.cc
===================================================================
--- trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 1620)
+++ trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 1631)
@@ -77,4 +77,5 @@
   mPPos[0] = mPPos[1] = 0.;
   mPSz[0] = mPSz[1] = 0.;
+  mFormatOpt[0] = "%-g"; mFormatOpt[1] = "%-g";
 
   mBDrw = new PIElDrawer;
@@ -173,4 +174,6 @@
     yMaxS = ymax;
   }
+  mFormatOpt[0] = SetFormatOpt(xmin,xmax);
+  mFormatOpt[1] = SetFormatOpt(ymin,ymax);
 }
   
@@ -229,6 +232,7 @@
 {
   char buff[128];
-  sprintf(buff, "X= %g  Y= %g",  x, y);
-  //  sprintf(buff, "%.3f,%.3f ",  x, y);
+  string format  = "X= ";  format += mFormatOpt[0].c_str();
+         format += " Y= "; format += mFormatOpt[1].c_str();
+  sprintf(buff,format.c_str(),x,y);
   return((string)buff);
 }
@@ -296,4 +300,5 @@
 PIScDrawWdg::But1Press(int x, int y)
 {
+  int pos = (x>XSize()/2) ? PI_HorizontalRight: PI_HorizontalLeft;
   UpdateText(x, y);
   if (mTrW)
@@ -316,7 +321,11 @@
     mWGrC->DrawLine(0, y, XSize(), y);
     mCPosX = x;   mCPosY = y;
-    char buff[64];
-    sprintf(buff,"%g , %g", mPPos[0], mPPos[1]);
+    char buff[128];
+    string format1 = "X= "; format1 += mFormatOpt[0].c_str();
+    string format2 = "Y= "; format2 += mFormatOpt[1].c_str();
+    sprintf(buff,format1.c_str(), mPPos[0], pos);
     mWGrC->DrawString(x+10, y-10, buff); 
+    sprintf(buff,format2.c_str(), mPPos[1], pos);
+    mWGrC->DrawString(x+10, y+20, buff); 
     }
   else SelPointerShape(PI_CrossPointer);
@@ -330,10 +339,15 @@
 PIScDrawWdg::Ptr1Move(int x, int y)
 {
-  char buff[64];
+  int pos = (x>XSize()/2) ? PI_HorizontalRight: PI_HorizontalLeft;
+  char buff[128];
+  string format1 = "X= "; format1 += mFormatOpt[0].c_str();
+  string format2 = "Y= "; format2 += mFormatOpt[1].c_str();
   if (mFgReticule) { // On trace une reticule
     mWGrC->DrawLine(mCPosX, 0, mCPosX, YSize());
     mWGrC->DrawLine(0, mCPosY, XSize(), mCPosY);
-    sprintf(buff,"%g , %g", mPPos[0], mPPos[1]);
-    mWGrC->DrawString(mCPosX+10, mCPosY-10, buff); 
+    sprintf(buff,format1.c_str(), mPPos[0]);
+    mWGrC->DrawString(mCPosX+10, mCPosY-10, buff, pos); 
+    sprintf(buff,format2.c_str(), mPPos[1]);
+    mWGrC->DrawString(mCPosX+10, mCPosY+20, buff, pos); 
     mWGrC->DrawLine(x, 0, x, YSize());
     mWGrC->DrawLine(0, y, XSize(), y);
@@ -342,6 +356,8 @@
   UpdateText(x, y);  // Met a jour mPPos
   if (mFgReticule) {
-    sprintf(buff,"%g , %g", mPPos[0], mPPos[1]);
-    mWGrC->DrawString(x+10, y-10, buff); 
+    sprintf(buff,format1.c_str(), mPPos[0]);
+    mWGrC->DrawString(mCPosX+10, mCPosY-10, buff, pos); 
+    sprintf(buff,format2.c_str(), mPPos[1]);
+    mWGrC->DrawString(mCPosX+10, mCPosY+20, buff, pos); 
     }
 }
@@ -350,11 +366,16 @@
 PIScDrawWdg::But1Release(int x, int y)
 {
+  int pos = (x>XSize()/2) ? PI_HorizontalRight: PI_HorizontalLeft;
   UpdateText(x, y);
   if (mFgReticule) { // On efface la reticule
     mWGrC->DrawLine(mCPosX, 0, mCPosX, YSize());
     mWGrC->DrawLine(0, mCPosY, XSize(), mCPosY);
-    char buff[64];
-    sprintf(buff,"%g , %g", mPPos[0], mPPos[1]);
-    mWGrC->DrawString(mCPosX+10, mCPosY-10, buff); 
+    char buff[128];
+    string format1 = "X= "; format1 += mFormatOpt[0].c_str();
+    string format2 = "Y= "; format2 += mFormatOpt[1].c_str();
+    sprintf(buff,format1.c_str(), mPPos[0]);
+    mWGrC->DrawString(mCPosX+10, mCPosY-10, buff, pos); 
+    sprintf(buff,format2.c_str(), mPPos[1]);
+    mWGrC->DrawString(mCPosX+10, mCPosY+20, buff, pos); 
     mWGrC->SelForeground(cForCol);
     mWGrC->SelGOMode(cGOmod);
@@ -502,4 +523,14 @@
 }
 
+string
+PIScDrawWdg::SetFormatOpt(double xmin,double xmax)
+{
+  string format = "%-g";
+  //PIDrawer::BonFormatAxes(xmin,xmax,(xmax-xmin)*0.9999,format,2);
+  double xm = (fabs(xmax)>fabs(xmin)) ? fabs(xmax): fabs(xmin);
+  double dx = fabs(xmax-xmin)/500.;
+  PIDrawer::BonFormatAxes(xm,xm+dx,dx*0.9999,format,0);
+  return format;
+}
 
 // --------------------------------------------------------------------------
Index: trunk/SophyaPI/PI/piscdrawwdg.h
===================================================================
--- trunk/SophyaPI/PI/piscdrawwdg.h	(revision 1620)
+++ trunk/SophyaPI/PI/piscdrawwdg.h	(revision 1631)
@@ -67,5 +67,5 @@
                                             // concernant le petit pave autour de la pos. courante 
 
-  void               SetTextWin(PILabel * tw, bool trw=true, int tx=300, int ty=30);
+  void               SetTextWin(PILabel * tw, bool trw=true, int tx=500, int ty=30);
 
   virtual void       But1Press(int x, int y);
@@ -83,11 +83,14 @@
   virtual void       Keyboard(int key, PIKeyModifier kmod);
   virtual void       PasteSelection(unsigned int typ, void *pdata, unsigned int l);
+
+  static  string     SetFormatOpt(double xmin,double xmax);
   
 protected:
   double xMinS, xMaxS, yMinS, yMaxS; // Sauvegarde pour zoom
-  double mPPos[2];               // Position courante (user coordinates)
-  double mPSz[2];                // Taille courant du pave info 
-  int mCPosX, mCPosY;              // Position click souris X,Y
-  bool mFgReticule;                // Controle l'affiche d'une réticule (Bouton-1)
+  double mPPos[2];        // Position courante (user coordinates)
+  double mPSz[2];         // Taille courant du pave info 
+  int mCPosX, mCPosY;     // Position click souris X,Y
+  bool mFgReticule;       // Controle l'affiche d'une réticule (Bouton-1)
+  string mFormatOpt[2];   // Format optimal d'impression des textes
 
   PIElDrawer* mBDrw;
@@ -106,5 +109,4 @@
   PIWindow * mInfoW;
   PIText * mInfoTxt;
-
 
 private:
