Index: trunk/SophyaPI/PI/pibwdggen.cc
===================================================================
--- trunk/SophyaPI/PI/pibwdggen.cc	(revision 533)
+++ trunk/SophyaPI/PI/pibwdggen.cc	(revision 535)
@@ -338,5 +338,6 @@
 mDrXmin = xmin;   mDrXmax = xmax; 
 mDrYmin = ymin;   mDrYmax = ymax; 
-mDXdir = axrl;    mDYdir = ayud;
+if ( (axrl != kAxeDirSame) && (axrl != kAxeDirAuto) )  mDXdir = axrl;    
+if ( (ayud != kAxeDirSame) && (ayud != kAxeDirAuto) )  mDYdir = ayud;
 }
 
Index: trunk/SophyaPI/PI/picmapview.cc
===================================================================
--- trunk/SophyaPI/PI/picmapview.cc	(revision 533)
+++ trunk/SophyaPI/PI/picmapview.cc	(revision 535)
@@ -5,4 +5,24 @@
 #include "picmapview.h"
 
+//++
+// Class	PICMapView
+// Lib		PI
+// include	picmapview.h
+//
+//   	Classe permettant la visualisation d'une table de couleur.
+//--
+//++
+// Links        Voir aussi
+// PIColorMap
+//--
+
+//++
+// Titre	Constructeur
+//--
+//++
+//  PICMapView(PIContainerGen *par, char *nom, int sx=256, int sy=10, int px=0, int py=0);
+//	Constructeur - Le choix d'affichage (vertical ou horizontal) dépend
+//	du rapport des tailles "sx", "sy"
+//--
 
 
@@ -24,4 +44,20 @@
 }
 
+
+
+//++
+// Titre	Méthodes
+//--
+//++
+// long  kind()
+//	Retourne PICMapView::ClassId .
+// void   SetColMap(PIColorMap* cmp=NULL, float min=1., float max=-1., bool refr=true)
+//	Choix de la table de couleur et valeurs min et max. Si "refr==true",
+//	la méthode "Refresh()" est appelée.
+// void  SetColMapId(CMapId cmapid, float min=1., float max=-1., bool refr=true)
+//	Choix de la table de couleur en utilisant le "CMapId" et 
+//	définition des valeurs min et max. Si "refr==true",
+//	la méthode "Refresh()" est appelée.
+//--
  
 /* --Methode-- */
Index: trunk/SophyaPI/PI/pidrawer.cc
===================================================================
--- trunk/SophyaPI/PI/pidrawer.cc	(revision 533)
+++ trunk/SophyaPI/PI/pidrawer.cc	(revision 535)
@@ -308,5 +308,6 @@
 PIDrawer::CalcTicks()
 {
-  BestTicks(xMin,xMax,7,xMajTickStep);
+  int ntick_x = (aXlog) ? 4 : 7;
+  BestTicks(xMin,xMax,ntick_x,xMajTickStep);
   xMinTickStep = xMajTickStep/5;
   xFirstMajTick = int(xMin / xMajTickStep) * xMajTickStep;
@@ -315,5 +316,6 @@
   if (xFirstMinTick < xMin) xFirstMinTick += xMinTickStep;
 
-  BestTicks(yMin,yMax,12,yMajTickStep);
+  int ntick_y = (aYlog) ? 6 : 12;
+  BestTicks(yMin,yMax,ntick_y,yMajTickStep);
   yMinTickStep = yMajTickStep/5;
   yFirstMajTick = int(yMin / yMajTickStep) * yMajTickStep;
@@ -439,18 +441,18 @@
     if (flags & kLabels) {
       if (!aYdir) {
-        DrawHLabels(g, yMin-xMajTickLen*8, xFirstMajTick, xMajTickStep,0);
-        DrawHLabels(g, yMax+xMajTickLen*2, xFirstMajTick, xMajTickStep,0);
+        DrawHLabels(g, g->DeltaUCY(yMin, -xMajTickLen*8), xFirstMajTick, xMajTickStep,0);
+        DrawHLabels(g, g->DeltaUCY(yMax,  xMajTickLen*2), xFirstMajTick, xMajTickStep,0);
       }
       else {
-        DrawHLabels(g, yMin-xMajTickLen*2, xFirstMajTick, xMajTickStep,0);
-        DrawHLabels(g, yMax+xMajTickLen*8, xFirstMajTick, xMajTickStep,0);
+        DrawHLabels(g, g->DeltaUCY(yMin, -xMajTickLen*2), xFirstMajTick, xMajTickStep,0);
+        DrawHLabels(g, g->DeltaUCY(yMax,  xMajTickLen*8), xFirstMajTick, xMajTickStep,0);
       }
       if (!aXdir) {
-        DrawVLabels(g, xMin-yMajTickLen*2, yFirstMajTick, yMajTickStep,1);
-        DrawVLabels(g, xMax+yMajTickLen*2, yFirstMajTick, yMajTickStep,-1);
+        DrawVLabels(g, g->DeltaUCX(xMin, -yMajTickLen*2), yFirstMajTick, yMajTickStep,1);
+        DrawVLabels(g, g->DeltaUCX(xMax,  yMajTickLen*2), yFirstMajTick, yMajTickStep,-1);
       }
       else {
-        DrawVLabels(g, xMin-yMajTickLen*2, yFirstMajTick, yMajTickStep,-1);
-        DrawVLabels(g, xMax+yMajTickLen*2, yFirstMajTick, yMajTickStep,1);
+        DrawVLabels(g, g->DeltaUCX(xMin, -yMajTickLen*2), yFirstMajTick, yMajTickStep,-1);
+        DrawVLabels(g, g->DeltaUCX(xMax,  yMajTickLen*2), yFirstMajTick, yMajTickStep,1);
       }
     }
@@ -478,5 +480,5 @@
 {
   for (double x=xBeg; x<=xMax; x += xStep)
-    g->DrawLine(x, y-tickDown, x, y+tickUp);
+    g->DrawLine(x, g->DeltaUCY(y, -tickDown), x, g->DeltaUCY(y, tickUp));
 }
 
@@ -485,5 +487,5 @@
 {
   for (double y=yBeg; y<=yMax; y += yStep)
-    g->DrawLine(x-tickLeft, y, x+tickRight, y);
+    g->DrawLine(g->DeltaUCX(x, -tickLeft), y, g->DeltaUCX(x,tickRight), y);
 }
 
@@ -509,5 +511,5 @@
         xOffset = 0;
       if (aXdir)  xOffset = -xOffset;
-      g->DrawString(x+xOffset, y, label);
+      g->DrawString(g->DeltaUCX(x,xOffset), y, label);
   }
 }
@@ -530,5 +532,5 @@
         xOffset = 0;
       if (aXdir)  xOffset = -xOffset;
-      g->DrawString(x+xOffset, y, label);
+      g->DrawString(g->DeltaUCX(x, xOffset), y, label);
   }
 }
@@ -597,8 +599,8 @@
   if ( titleT.length() > 0) {
       fx = g->CalcStringWidth(titleT.c_str());
-      if(aXdir) fx = XMax()-(XMax()-XMin()-fx)/2.;
-      else fx = XMin()+(XMax()-XMin()-fx)/2.;
-      if (aYdir) fy = YMin()-fh;
-      else fy = YMax()+fh;
+      if(aXdir) fx = g->DeltaUCX(XMax(), -(XMax()-XMin()-fx)/2.);
+      else fx = g->DeltaUCX(XMin(), (XMax()-XMin()-fx)/2.);
+      if (g->isAxeYDirUpDown()) fy = g->DeltaUCY(YMin(), -fh);
+      else fy = g->DeltaUCY(YMax(), fh);
       g->DrawString(fx, fy, titleT.c_str());
 //      printf(" PIElDrawer::Draw()/DBG (%g , %g) %s  - %g \n", fx, fy, titleT.c_str(), fh);
@@ -606,8 +608,8 @@
   if ( titleB.length() > 0) {
       fx = g->CalcStringWidth(titleB.c_str());
-      if(aXdir) fx = XMax()-(XMax()-XMin()-fx)/2.;
-      else fx = XMin()+(XMax()-XMin()-fx)/2.;
-      if (aYdir) fy =  YMax()+fh*1.5;
-      else fy = YMin()-fh*1.5;
+      if(aXdir) fx = g->DeltaUCX(XMax(), -(XMax()-XMin()-fx)/2.);
+      else fx = g->DeltaUCX(XMin(), (XMax()-XMin()-fx)/2.);
+      if (g->isAxeYDirUpDown()) fy =  g->DeltaUCY(YMax(), fh*1.5);
+      else fy = g->DeltaUCY(YMin(), -fh*1.5);
       g->DrawString(fx, fy, titleB.c_str());
 //      printf(" PIElDrawer::Draw()/DBG (%g , %g) %s  - %g \n", fx, fy, titleT.c_str(), fh);
Index: trunk/SophyaPI/PI/pigraphuc.cc
===================================================================
--- trunk/SophyaPI/PI/pigraphuc.cc	(revision 533)
+++ trunk/SophyaPI/PI/pigraphuc.cc	(revision 535)
@@ -120,4 +120,8 @@
 // bool  isLogScaleY() 
 //	Renvoie "true" si échelle logarithmique pour l'axe X,Y
+// bool  isAxeXDirRtoL()
+//	Renvoie "true" si axe X de droite a gauche
+// bool  isAxeYDirUpDown()
+//	Renvoie "true" si axe Y de haut vers vbas.
 //	
 // void  UC2GrC(double x, double y, double& xpix, double& ypix)
@@ -132,4 +136,15 @@
 //	Transformation de distances selon X,Y dans l'espace graphique de départ en distance
 //	dans l'espace de  coordonnées utilisateur.
+//
+// void  LinUC2GrC(double x, double y, double& xpix, double& ypix)
+//	Transformation de coordonnées utilisateur "(x,y)" en coordoonnées 
+//	de l'espace graphic de départ "(xpix, ypix)", sans utilisation de 
+//	l'échelle logarithmique.
+// double  DeltaUCX(double x, double dx)
+//	Retourne la nouvelle coordonnée X, correspondant a "x" décalée de
+//	"dx", avec "dx" exprimé en échelle linéaire.
+// double  DeltaUCY(double y, double dy)
+//	Retourne la nouvelle coordonnée Y, coorespondant a "y" décalée de
+//	"dy", avec "dy" exprimé en échelle linéaire.
 //--
 
@@ -218,4 +233,6 @@
   }
   else xOrgLog   = -log10(xMinLog) * xScaleLog + (xOrg + xMinLog*xScale);
+  //  if (xMinLog > xMin) 
+  //    cerr << "PIGraphicUC::SetLogScale() Warning - Linear Scale for X < " << xMinLog << endl;
 }
 else {
@@ -233,4 +250,6 @@
     }
   else yOrgLog   = -log10(yMinLog) * yScaleLog + (yOrg + yMinLog*yScale);
+  //  if (yMinLog > yMin) 
+  //    cerr << "PIGraphicUC::SetLogScale() Warning - Linear Scale for Y < " << yMinLog << endl;
 }  
 else {
@@ -293,4 +312,37 @@
   if (dy < 0.) dy = -dy;
 }
+
+/* --Methode-- */
+void PIGraphicUC::LinUC2GrC(double x, double y, double& xpix, double& ypix)
+{
+  xpix = (double)(xOrg + x*xScale);  
+  ypix = (double)(yOrg + y*yScale);  
+}
+
+/* --Methode-- */
+double PIGraphicUC::DeltaUCX(double x, double dx)
+{
+  if (!aXlog) return(x+dx);
+  double xpix, dxpix, tmp, ret;
+  UC2GrC(x, yMin, xpix, tmp); 
+  DUC2GrC(dx, 0., dxpix, tmp);
+  if ( ((dx < 0.) && !aXdir) || ((dx >= 0.) && aXdir) )  dxpix = -dxpix;
+  GrC2UC(xpix+dxpix, yW0, ret, tmp);
+  return(ret);  
+}
+
+/* --Methode-- */
+double PIGraphicUC::DeltaUCY(double y, double dy)
+{
+  if (!aYlog) return(y+dy);
+  double ypix, dypix, tmp, ret;
+  UC2GrC(xMin, y, tmp, ypix); 
+  DUC2GrC(0, dy, tmp, dypix);
+  if ( ((dy < 0.) && aYdir) || ((dy >= 0.) && !aYdir) )  dypix = -dypix;
+  GrC2UC(xW0, ypix+dypix, tmp, ret);
+  return(ret);  
+}
+
+
 
 /* --Methode-- */
Index: trunk/SophyaPI/PI/pigraphuc.h
===================================================================
--- trunk/SophyaPI/PI/pigraphuc.h	(revision 533)
+++ trunk/SophyaPI/PI/pigraphuc.h	(revision 535)
@@ -38,4 +38,6 @@
   inline  bool	     isLogScaleX() { return aXlog; }
   inline  bool	     isLogScaleY() { return aYlog; }
+  inline  bool       isAxeXDirRtoL()   { return aXdir; }
+  inline  bool       isAxeYDirUpDown() { return aYdir; }
 
 //  Trace graphiques
@@ -105,4 +107,7 @@
   virtual void       DUC2GrC(double dx, double dy, double& dxpix, double& dypix);
   virtual void       DGrC2UC(double dxpix, double dypix, double& dx, double& dy);
+  virtual void	     LinUC2GrC(double x, double y, double& xpix, double& ypix);
+  virtual double     DeltaUCX(double x, double dx);
+  virtual double     DeltaUCY(double y, double dy);
 
   void   NoClip() {clip = false; }
Index: trunk/SophyaPI/PI/piimage.cc
===================================================================
--- trunk/SophyaPI/PI/piimage.cc	(revision 533)
+++ trunk/SophyaPI/PI/piimage.cc	(revision 535)
@@ -57,5 +57,5 @@
 
 //++
-// Titre	Constructeurs, méthodes
+// Titre	Constructeurs
 //--
 //++
Index: trunk/SophyaPI/PI/pioptmenugen.cc
===================================================================
--- trunk/SophyaPI/PI/pioptmenugen.cc	(revision 533)
+++ trunk/SophyaPI/PI/pioptmenugen.cc	(revision 535)
@@ -1,4 +1,37 @@
+// Module PI : Peida Interactive     PIOptMenu
+// Menu a option                                96-97
+// LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
+
 #include "pioptmenugen.h"
 
+//++
+// Class	PIOptMenu
+// Lib		PI
+// include	pioptmenugen.h
+//
+//	Composant graphique de type menu à options. 
+//	"PIOptMenuGen" définit l'interface (classe virtuelle pure). Les objets 
+//	instanciés doivent être de la classe "PIOptMenu" déclarée dans le fichier
+//	entête "PIOPTMENU_H". Lors de la séléction d'une des options du menu
+//	Le message correspondant complété par "PIMsg_Click" est envoyé à l'objet
+//	par "SendSelf()".
+//--
+//--
+//++
+// Links	Parents
+// PIWdg
+//--
+//++
+// Links	Voir aussi
+// PIMenu
+//--
+
+//++
+// Titre        Constructeurs
+//--
+//++
+// PIOptMenuGen(PIContainerGen* par, const char* nom, int sx=50, int sy=15, int px=0, int py=0)
+//	Constructeur.
+//--
 
 PIOptMenuGen::PIOptMenuGen(PIContainerGen* par, const char* nom, int sx, int sy, int px, int py)
@@ -10,3 +43,24 @@
 {}
 
+//++
+// Titre        Méthodes
+//--
 
+//++
+// long  kind()
+//	Retourne PIOptMenuGen::ClassId
+// PIMenu*  Menu()
+//	Retourne le menu associé.
+// void  AppendItem(const char* nom, PIMessage msg)
+//	Permet d'ajouter une option au menu.
+// string  GetValueStr()
+//	Retourne la chaine de caracteres correspondant au choix courant.
+// PIMessage  GetValue()
+//	Retourne le message correspondant au choix courant.
+// void  SetValueStr(string & s) 
+//	Permet de sélectionner l'option correspondant a la chaine "s".
+// void  SetValue(PIMessage msg)
+//	Permet de sélectionner l'option correspondant au message "msg".
+//--
+
+
Index: trunk/SophyaPI/PI/piscdrawwdg.cc
===================================================================
--- trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 533)
+++ trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 535)
@@ -167,5 +167,5 @@
   if (d == NULL) return;
   d->UpdateLimits();
-  SetLimits(d->XMin(), d->XMax(), d->YMin(), d->YMax()); 
+  SetLimits(d->XMin(), d->XMax(), d->YMin(), d->YMax(), mDXdir, mDYdir); 
   Refresh();
   return;  
@@ -178,5 +178,5 @@
   if (! LimitsFixed() ) {  //  On met a jour les limites 
     d->UpdateLimits();
-    SetLimits(d->XMin(), d->XMax(), d->YMin(), d->YMax());
+    SetLimits(d->XMin(), d->XMax(), d->YMin(), d->YMax(), mDXdir, mDYdir);
   }
   return(AddDrawer(d, true, ad));
