Index: /trunk/SophyaPI/PI/lut.h
===================================================================
--- /trunk/SophyaPI/PI/lut.h	(revision 3733)
+++ /trunk/SophyaPI/PI/lut.h	(revision 3734)
@@ -40,4 +40,5 @@
   inline double Min() { return(bornes[0]); };
   inline double Max() { return(bornes[nLevel]); };
+  inline double Borne(int k) { return(bornes[k]); };
   inline int Type() { return(type); };
   inline int NCol() { return(nLevel+2); };
Index: /trunk/SophyaPI/PI/picmapview.cc
===================================================================
--- /trunk/SophyaPI/PI/picmapview.cc	(revision 3733)
+++ /trunk/SophyaPI/PI/picmapview.cc	(revision 3734)
@@ -5,5 +5,7 @@
 #include "sopnamsp.h"
 #include "picmapview.h"
+#include "strutil.h"
 #include <math.h>
+#include <iostream>
 
 //++
@@ -186,7 +188,103 @@
 }
 
-
-
-
-
-
+//++
+// Class        PICMapDrawer
+// Lib          PI
+// include      picmapview.h
+//
+//      Classe de traceur de colormap 
+//--
+//++
+// Links        Parents
+// PIDrawer
+//--
+//++
+
+
+/* --Methode-- */
+PICMapDrawer::PICMapDrawer(bool fgvert)
+  : fgvert_(fgvert), fgtext_(false), cmapp(NULL), bornes_(5)   
+{
+  SetLimits(0.,1.,0.,1., kAxeDirLtoR, kAxeDirDownUp);
+  SetColMapId(CMAP_GREY32);
+}
+
+/* --Methode-- */
+PICMapDrawer::~PICMapDrawer()
+{
+}
+
+/* --Methode-- */
+void PICMapDrawer::SetBornes(LUT& lut)
+{
+  fgtext_=true;  
+  bornes_[0]=lut.Min();   bornes_[4]=lut.Max(); 
+  bornes_[1]=lut.Borne((lut.NCol()-2)/4);
+  bornes_[2]=lut.Borne((lut.NCol()-2)/2);
+  bornes_[3]=lut.Borne(3*(lut.NCol()-2)/4);
+  return;
+}
+
+/* --Methode-- */
+void PICMapDrawer::SetBornes(double min, double max)
+{
+  fgtext_=true;  
+  bornes_[0]=min;   bornes_[4]=max; 
+  bornes_[1]=min+(max-min)*0.25; 
+  bornes_[2]=min+(max-min)*0.5; 
+  bornes_[3]=min+(max-min)*0.75; 
+  return;
+}
+
+/* --Methode-- */
+void PICMapDrawer::Draw(PIGraphicUC* g, double /*xmin*/, double /*ymin*/, 
+                        double /*xmax*/, double /*ymax*/)
+{
+  PIColorMap* cmp=cmapp;
+  PIColorMap cmapi(cmapid_);
+  if (cmp==NULL)  cmp=&cmapi;
+  PIColorMap& cmap=(*cmp);
+
+  //  cout << " *DBG*PICMapDrawer::Draw() Sz:" << BWdgXSize() << "," << BWdgYSize() 
+  //     << " Pos:" << BWdgXPos() << "," << BWdgYPos() << endl; 
+  // On limite le nombre de carres de couleurs traces, si trop de couleur ...
+  PIPixColIdx pixc;
+  if (fgvert_) {   // vertical
+    pixc.AllocateByte(0.25*BWdgXSize(), BWdgYSize());
+    for(int j=0; j<pixc.YSize(); j++)  {
+      int ci = j*cmap.NCol()/pixc.YSize();
+      int jrev=pixc.YSize()-j-1;
+      for(int i=0; i<pixc.XSize(); i++) pixc.GetByte(i,jrev)=(unsigned char)ci;
+    }
+    g->DrawPixmap(0.,1.,pixc, cmp);
+  }
+  else {    // horizontal
+    pixc.AllocateByte(BWdgXSize(), 0.25*BWdgYSize());
+    for(int i=0; i<pixc.XSize(); i++)  {
+      int ci = i*cmap.NCol()/pixc.XSize();
+      for(int j=0; j<pixc.YSize(); j++) pixc.GetByte(i,j)=(unsigned char)ci;
+    }
+    g->DrawPixmap(0.,0.25,pixc, cmp);
+  }
+
+
+  if (!fgtext_) return;
+  char buff[32];
+  double ps[5]={0.025,0.25,0.5,0.75,0.975};
+  //  g->SelForeground(PI_White);
+  for(int k=0; k<5; k++) {
+    sprintf(buff,"%6.2lg",bornes_[k]);
+    strip(buff,'B',' ');
+    if (fgvert_) {   // vertical
+      g->DrawLine(0.25,ps[k],0.35,ps[k]);
+      g->DrawString(0.7, ps[k], buff, PI_TextDirectionVerticalUp|PI_HorizontalCenter|PI_VerticalCenter);
+    }
+    else {   // horizontal 
+      g->DrawLine(ps[k],0.25,ps[k],0.35);
+      g->DrawString(ps[k], 0.7, buff, PI_VerticalCenter|PI_HorizontalCenter);
+    }
+  }
+  return;
+}
+
+
Index: /trunk/SophyaPI/PI/picmapview.h
===================================================================
--- /trunk/SophyaPI/PI/picmapview.h	(revision 3733)
+++ /trunk/SophyaPI/PI/picmapview.h	(revision 3734)
@@ -11,4 +11,9 @@
 #include PIBWDG_H
 #include PICMAP_H
+
+#include "pidrawer.h"
+#include "lut.h"
+#include <vector>
+
 
 class PICMapView : public PIBaseWdg
@@ -38,4 +43,33 @@
 };
 
+class PICMapDrawer : public PIDrawer
+{
+public:
+                     PICMapDrawer(bool fgvert=false);
+                     ~PICMapDrawer();
+
+  virtual void       Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax);
+  inline void        SetHorizontal()  { fgvert_=false; }
+  inline void        SetVertical()  { fgvert_=true; }
+
+  inline void        SetColMapId(CMapId cmapid, bool revcidx=false) 
+                     { cmapid_=cmapid;  revcidx_=revcidx;  cmapp=NULL;  return; }
+
+  inline void        SetColMap(PIColorMap* cmp) 
+                     { cmapp=cmp;  return; }
+
+  void               SetBornes(LUT& lut);
+  void               SetBornes(double min, double max);
+
+protected:
+
+  bool fgvert_;  // true -> vertical 
+  bool fgtext_;  // true -> ecriture des valeurs des bornes
+  PIColorMap* cmapp;  
+  CMapId cmapid_;
+  bool revcidx_;  // true -> reverse color map index 
+  vector<double> bornes_;  
+};
+
 
 #endif 
Index: /trunk/SophyaPI/PI/pidrawer.cc
===================================================================
--- /trunk/SophyaPI/PI/pidrawer.cc	(revision 3733)
+++ /trunk/SophyaPI/PI/pidrawer.cc	(revision 3734)
@@ -118,11 +118,19 @@
 
 //++
-// Titre	Gestion des axes et des limites
+// Titre	Gestion des axes, des limites et coordonnees fenetre
 //      Le tracé des axes 2D est pris en charge par la classe PIAxes.
 //--
 //++
+// double BWdgXPos()  BWdgYPos()
+//	Renvoient les positions (X,Y) du drawer dans l'objet PIBaseWdg. Ces positions ne sont 
+//	valables qu'apres appel a SetDrwWdg() - Ne peut donc etre utilise en pratique que dans 
+//	la methode Draw.
+// double  BWdgXSize()  BWdgYSize()
+//	Renvoient les tailles (X,Y) du drawer dans l'objet PIBaseWdg. Meme remarque que pour 
+//	BWdgXPos()  BWdgYPos(). 
+//
 // void  SetLimits(double xmin, double xmax, double ymin, double ymax, -
 //                 int axrl=kAxeDirSame, int ayud=kAxeDirSame)
-//	Définit les limites du système de coordonnées.
+//	Définit les limites du système de coordonnées du Drawer.
 //|	kAxeDirSame , kAxeDirAuto
 //|	kAxeDirLtoR , kAxeDirRtoL  (Axe X)
Index: /trunk/SophyaPI/PI/pidrawer.h
===================================================================
--- /trunk/SophyaPI/PI/pidrawer.h	(revision 3733)
+++ /trunk/SophyaPI/PI/pidrawer.h	(revision 3734)
@@ -60,4 +60,11 @@
   virtual void	     HighLight(bool fgh);  
 
+  // Zone de trace/accrochage dans le BaseWidget 
+  inline int         BWdgXPos() const { return xW0; }
+  inline int         BWdgYPos() const { return yW0; }
+  inline int         BWdgXSize() const { return xWd; }
+  inline int         BWdgYSize() const { return yWd; }
+
+  // Limites et informations sur les coordonnees dans le systeme du Drawer
   inline double      XMin() const {return xMin;}
   inline double      XMax() const {return xMax;}
Index: /trunk/SophyaPI/PI/piimage.cc
===================================================================
--- /trunk/SophyaPI/PI/piimage.cc	(revision 3733)
+++ /trunk/SophyaPI/PI/piimage.cc	(revision 3734)
@@ -111,4 +111,6 @@
 gvw = NULL;   // widget vue globale
 cmvw = NULL;  // widget ColorMapView
+fgshowcmap = 0;  // 0: Pas de vue ColMap, 1: top, 2:right,  3:bottom, 4:left
+ cmdid = -1;
 // Fenetre transient et Label pour affichage de l'info (texte PixVal)
 int tx, ty;
@@ -142,5 +144,5 @@
 
 mdrw = new PIElDrawer(false);
- mdrw->SetAxesFlags(kAxesNone);
+mdrw->SetAxesFlags(kAxesNone);
 gvdrw = new PIElDrawer();
 AddDrawer(mdrw, true, false, false, false);
@@ -666,4 +668,17 @@
       continue;
     }
+    if (opts == "showcmap")  UpdateCMapDrawer(1);
+    else if (opts == "noshowcmap")  UpdateCMapDrawer(0);
+    else if (opts.substr(0,9) == "showcmap=") {
+      if (opts.substr(9,2) == "no")   UpdateCMapDrawer(0); 
+      else if (opts.substr(9,3) == "top")     UpdateCMapDrawer(1); 
+      else if (opts.substr(9,5) == "right")   UpdateCMapDrawer(2); 
+      else if (opts.substr(9,6) == "bottom")  UpdateCMapDrawer(3); 
+      else if (opts.substr(9,4) == "left")    UpdateCMapDrawer(4); 
+      else if (opts.substr(9,5) == "horiz")   UpdateCMapDrawer(1); 
+      else if (opts.substr(9,4) == "vert")    UpdateCMapDrawer(2); 
+      else UpdateCMapDrawer(0); 
+    }
+
     ndec--;
     udopt.push_back(opts);
@@ -785,4 +800,8 @@
 {
 if (img == NULL)  return;
+if (fgshowcmap>0)  {
+  cmpd.SetColMap(GetColMap());
+  cmpd.SetBornes(*Lut());
+}
 if (mw)  {  
   ComputePixmap();
@@ -1379,4 +1398,34 @@
 //printf("UpdateCuts()-DBG X: %d  -> %g  , Y: %d -> %g \n", cutarrx->Size(), cutarrx->Value(0),
 //       cutarry->Size(), cutarry->Value(0));
+}
+
+/* --Methode-- */
+void PIImage::UpdateCMapDrawer(int fgshow)
+{
+  if ((fgshow<0)||(fgshow>4))  fgshow=0;
+  if (fgshow==fgshowcmap) return;
+  fgshowcmap=fgshow;
+  switch (fgshowcmap ) {
+  case 0 :
+    RemoveDrawer(cmdid); 
+    break;
+  case 1 :
+    cmpd.SetHorizontal();
+    cmdid=AddDrawer(&cmpd, 0.10, 0.02, 0.90, 0.10, true, false);
+    break;
+  case 2 :
+    cmpd.SetVertical();
+    cmdid=AddDrawer(&cmpd, 0.90, 0.1, 0.98, 0.9, true, false);
+    break;
+  case 3 :
+    cmpd.SetHorizontal();
+    cmdid=AddDrawer(&cmpd, 0.10, 0.90, 0.90, 0.98, true, false);
+    break;
+  case 4 :
+    cmpd.SetVertical();
+    cmdid=AddDrawer(&cmpd, 0.02, 0.1, 0.10, 0.9, true, false);
+    break;   
+  } 
+  if (fgshowcmap>0) cmpd.GetGraphicAtt().SetColAtt(PI_Turquoise);
 }
 
Index: /trunk/SophyaPI/PI/piimage.h
===================================================================
--- /trunk/SophyaPI/PI/piimage.h	(revision 3733)
+++ /trunk/SophyaPI/PI/piimage.h	(revision 3734)
@@ -135,4 +135,5 @@
   void SetGloVPixmap();
   void UpdateCuts();
+  void UpdateCMapDrawer(int fgshow);
 
   void DrawCursor(PIGraphic* g);
@@ -171,4 +172,7 @@
 // Fenetre d'affichage du ColMap
   PICMapView* cmvw;
+  int fgshowcmap;  // 0: Pas de vue ColMap, 1: top, 2:right, 3:bottom, 4:left
+  PICMapDrawer cmpd;
+  int cmdid;
 // Fenetre/champ de texte
   PILabel * trtlb;
