Index: trunk/SophyaPI/PI/lut.cc
===================================================================
--- trunk/SophyaPI/PI/lut.cc	(revision 1502)
+++ trunk/SophyaPI/PI/lut.cc	(revision 1503)
@@ -25,7 +25,7 @@
 if (bornes == NULL)  return;
 type = typ;  nLevel = nlev;
+table = NULL;  
+tablenbin = 0;
 SetLut(min, max, typ);
-table = NULL;  
-ComputeTable(ntable);
 return;
 }
@@ -40,5 +40,5 @@
 
 /* --Methode-- */
-void LUT::SetLut(double min, double max, int typ)
+void LUT::SetLut(double min, double max, int typ, int ntable)
 {
 
@@ -83,4 +83,5 @@
   }
 else  bornes[0] = 0.5*(min+max);
+ComputeTable((ntable > nLevel) ? ntable : tablenbin);
 return; 
 }
@@ -110,6 +111,7 @@
 void LUT::ComputeTable(int nt)
 {
-if (nt < 0) nt = 16*(nLevel+2);
+if (nt <= 0) nt = 16*(nLevel+2);
 else if (nt < (nLevel+2))  nt = (nLevel+2);
+tablenbin = nt;
 table = new unsigned short [nt-2];
 tablebinwidth = (Max()-Min())/(nt-2);
Index: trunk/SophyaPI/PI/lut.h
===================================================================
--- trunk/SophyaPI/PI/lut.h	(revision 1502)
+++ trunk/SophyaPI/PI/lut.h	(revision 1503)
@@ -19,7 +19,7 @@
 public:
   
-  LUT(double min, double max, unsigned short ncol=16, int typ=kLutType_Lin, int ntable=-1);
+  LUT(double min, double max, unsigned short ncol=16, int typ=kLutType_Lin, int ntable=0);
   ~LUT();
-  void SetLut(double min, double max, int typ=0);
+  void SetLut(double min, double max, int typ=kLutType_Lin, int ntable=0);
   void Print();
   unsigned short Apply(double x);
@@ -43,4 +43,5 @@
   int nLevel;
   double * bornes;
+  int tablenbin;
   unsigned short * table;
   double tablebinwidth;
Index: trunk/SophyaPI/PI/picmap.cc
===================================================================
--- trunk/SophyaPI/PI/picmap.cc	(revision 1502)
+++ trunk/SophyaPI/PI/picmap.cc	(revision 1503)
@@ -76,4 +76,11 @@
   if ( (num < 0) || (num >= MXMAPIDS) )  num = 0;
   return (MapNoms[num]) ;
+}
+
+int PIColorMap::ColorMapId2Num(PIColorMap const & cmap)
+{
+  for(int k=0; k<MXMAPIDS; k++) 
+    if (cmap.Type() == MapIds[k])  return(k);
+  return(-1);
 }
 
@@ -182,5 +189,7 @@
 
 PIColorMap::PIColorMap(PIColorMap& cm)
+: PIColorMapNative()
 {
+  ReverseColorIndex(cm.IsColorIndexReversed());
   CopyFrom(&cm);
   mCTId = cm.mCTId;
Index: trunk/SophyaPI/PI/picmap.h
===================================================================
--- trunk/SophyaPI/PI/picmap.h	(revision 1502)
+++ trunk/SophyaPI/PI/picmap.h	(revision 1503)
@@ -53,4 +53,5 @@
   static CMapId GetStandardColorMapId(int num);
   static string GetStandardColorMapName(int num);
+  static int    ColorMapId2Num(PIColorMap const & cmap);
 
 protected:
Index: trunk/SophyaPI/PI/picmapgen.cc
===================================================================
--- trunk/SophyaPI/PI/picmapgen.cc	(revision 1502)
+++ trunk/SophyaPI/PI/picmapgen.cc	(revision 1503)
@@ -13,4 +13,5 @@
   mNCol = 0;
   mType = -1;
+  ReverseColorIndex(false);
 }
 PIColorMapGen::PIColorMapGen(int id, int nc, string const& nom)
@@ -19,4 +20,5 @@
   mNCol = nc;
   mType = id;
+  ReverseColorIndex(false);  
 }
 
Index: trunk/SophyaPI/PI/picmapgen.h
===================================================================
--- trunk/SophyaPI/PI/picmapgen.h	(revision 1502)
+++ trunk/SophyaPI/PI/picmapgen.h	(revision 1503)
@@ -24,8 +24,12 @@
 
   virtual PIColor GetColor(int n)=0;
+  inline void  ReverseColorIndex(bool fg=false)
+               { mFlagReversedIndex = fg; }
+  inline bool  IsColorIndexReversed() const
+               { return(mFlagReversedIndex); } 
   virtual bool AllocColor(PIColor const& col, int index)=0;
   virtual void FreeColors()=0;     // Desalloue les couleurs
 
-  virtual long   TotNbColors()=0;   // Donne le nombre total de couleurs disponibles
+  virtual long  TotNbColors()=0;    // Donne le nombre total de couleurs disponibles
   virtual int   NbAllocColors()=0;  // Nb de couleurs deja allouees 
 protected:
@@ -37,5 +41,5 @@
   int    mType;
   string mNom;
-  
+  bool   mFlagReversedIndex;
 };
 
Index: trunk/SophyaPI/PI/picmapview.cc
===================================================================
--- trunk/SophyaPI/PI/picmapview.cc	(revision 1502)
+++ trunk/SophyaPI/PI/picmapview.cc	(revision 1503)
@@ -76,7 +76,7 @@
     return;
     }
-  if ( cmap && (cmp->Type() == cmap->Type()) && (cmp->Type() != CMAP_OTHER) 
-       && ((vmin-min) < 1.e-69) &&  ((vmin-min) > -1.e-69) &&
-       ((vmax-max) < 1.e-69) &&  ((vmax-max) > -1.e-69) )  return;
+  if ( cmap && (cmp->Type() == cmap->Type()) && (cmp->Type() != CMAP_OTHER)
+       && (cmp->IsColorIndexReversed() == cmap->IsColorIndexReversed())
+       && (fabs(vmin-min) < 1.e-69)  && (fabs(vmax-max) > -1.e-69) )  return;
   if (cmap) delete cmap;
   cmap = new PIColorMap(*cmp);
@@ -87,11 +87,13 @@
 
 /* --Methode-- */
-void PICMapView::SetColMapId(CMapId cmapid, double min, double max, bool refr)
+void PICMapView::SetColMapId(CMapId cmapid, bool revidx, double min, double max, bool refr)
 {
-  if ( cmap && (cmapid == cmap->Type()) && (cmapid != CMAP_OTHER) 
-       && ((vmin-min) < 1.e-69) &&  ((vmin-min) > -1.e-69) &&
+  if ( cmap && (cmapid == cmap->Type()) && (cmapid != CMAP_OTHER) &&
+       (cmap->IsColorIndexReversed() == revidx) &&
+       ((vmin-min) < 1.e-69) &&  ((vmin-min) > -1.e-69) &&
        ((vmax-max) < 1.e-69) &&  ((vmax-max) > -1.e-69) )  return;
   if (cmap) delete cmap;
   cmap = new PIColorMap(cmapid);
+  cmap->ReverseColorIndex(revidx);
   vmin = min;  vmax = max;
   if (refr)  Refresh();  
Index: trunk/SophyaPI/PI/picmapview.h
===================================================================
--- trunk/SophyaPI/PI/picmapview.h	(revision 1502)
+++ trunk/SophyaPI/PI/picmapview.h	(revision 1503)
@@ -24,5 +24,7 @@
 
   void            SetColMap(PIColorMap* cmp=NULL, double min=1., double max=-1., bool refr=true);
-  void            SetColMapId(CMapId cmapid, double min=1., double max=-1., bool refr=true);
+  void            SetColMapId(CMapId cmapid, bool revidx, double min, double max, bool refr);
+  inline void     SetColMapId(CMapId cmapid, double min=1., double max=-1., bool refr=true)
+                  { SetColMapId(cmapid, false, min, max, refr); }
 
 // Traitement des evenements   
Index: trunk/SophyaPI/PI/picmapx.cc
===================================================================
--- trunk/SophyaPI/PI/picmapx.cc	(revision 1502)
+++ trunk/SophyaPI/PI/picmapx.cc	(revision 1503)
@@ -53,5 +53,6 @@
   return(picr);
   }
-return(mColRGB[n]);
+if (mFlagReversedIndex) return(mColRGB[NCol()-n-1]);
+else return(mColRGB[n]);
 }
 
Index: trunk/SophyaPI/PI/picmapx.h
===================================================================
--- trunk/SophyaPI/PI/picmapx.h	(revision 1502)
+++ trunk/SophyaPI/PI/picmapx.h	(revision 1503)
@@ -13,6 +13,8 @@
   virtual ~PIColorMapX();
 
+  // Fonction Color() est definie afin de permettre l'optimisation - affichage d'image, etc...
   inline PIXColor  Color(int index) 
-    { return ((index < mNCol) ? mColors[index] : 0); } ;
+    { return (((index < mNCol)&&(index>=0)) ? 
+	      mColors[(mFlagReversedIndex)?mNCol-index-1:index] : 0); } ;
 
   virtual PIColor GetColor(int n);
Index: trunk/SophyaPI/PI/piimage.cc
===================================================================
--- trunk/SophyaPI/PI/piimage.cc	(revision 1502)
+++ trunk/SophyaPI/PI/piimage.cc	(revision 1503)
@@ -484,5 +484,5 @@
 
 /* --Methode-- */
-float PIImage::GetZoomF()
+float PIImage::GetZoomF() const 
 {
 if (zoom >= 1)  return((float)zoom);
@@ -548,13 +548,13 @@
 
 /* --Methode-- */
-void PIImage::SetColMapId(CMapId cmapid, bool refr)
+void PIImage::SetColMapId(CMapId cmapid, bool revidx, bool refr)
 {
 if ( (cmapid == CMAP_GREY32) || (cmapid == CMAP_GREYINV32) || 
      (cmapid == CMAP_GREY128) || (cmapid == CMAP_GREYINV128))  mdrw->SetColAtt(PI_Red);
 else mdrw->SetColAtt(PI_Turquoise);
-PIPixmap::SetColMapId(cmapid, refr);
-if (zow)  zow->SetColMapId(cmapid, refr);
-if (gvw)  gvw->SetColMapId(cmapid, refr);
-if (cmvw) cmvw->SetColMapId(cmapid, Lut()->Min(), Lut()->Max(), refr);
+PIPixmap::SetColMapId(cmapid, revidx, refr);
+if (zow)  zow->SetColMapId(cmapid, revidx, refr);
+if (gvw)  gvw->SetColMapId(cmapid, revidx, refr);
+if (cmvw) cmvw->SetColMapId(cmapid, revidx, Lut()->Min(), Lut()->Max(), refr);
 return;
 }
Index: trunk/SophyaPI/PI/piimage.h
===================================================================
--- trunk/SophyaPI/PI/piimage.h	(revision 1502)
+++ trunk/SophyaPI/PI/piimage.h	(revision 1503)
@@ -58,9 +58,12 @@
   void SetZoom(int zm, bool refr=true);
   void SetZoomF(float fzm, bool refr=true);
-  float GetZoomF();
+  float GetZoomF() const ;
+  inline int GetZoom() const { return (zoom); }
 
 // Changement de table de couleur
   virtual void SetColMap(PIColorMap* cmp, bool refr=true);
-  virtual void SetColMapId(CMapId cmapid, bool refr=true);
+  virtual void SetColMapId(CMapId cmapid, bool revidx, bool refr);
+  inline  void SetColMapId(CMapId cmapid, bool refr=true)
+               { SetColMapId(cmapid, false, refr); }
 
 // Positionnement image - pave
Index: trunk/SophyaPI/PI/piimgtools.cc
===================================================================
--- trunk/SophyaPI/PI/piimgtools.cc	(revision 1502)
+++ trunk/SophyaPI/PI/piimgtools.cc	(revision 1503)
@@ -174,6 +174,8 @@
 for(kcc=nsct3; kcc<PIColorMap::NumberStandardColorMaps(); kcc++) 
 mOptzc[0]->AppendItem(PIColorMap::GetStandardColorMapName(kcc).c_str(), 201+kcc);
-
-mOptzc[0]->SetValue(203);
+// On ajoute un CheckItem pour inverser les index de table de couleur
+mOptzc[0]->Menu()->AppendCheckItem("Reverse CMap", 299);
+
+mOptzc[0]->SetValue(203);  mLastCol = 203;
 mOptzc[0]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
 
@@ -297,5 +299,11 @@
 PIWindow::Show();
 mpii = PIImage::CurrentPIImage();
-if (mpii == NULL)  return;
+if (mpii == NULL) {
+  mOptzc[0]->Menu()->SetStateMsg(299, false);
+  mOptzc[0]->SetValue(203);  mLastCol = 203;
+  mOptzc[1]->SetValue(101);
+  mOptCut->SetValue(303);
+  return;
+}
 min_lut = mpii->Lut()->Min();
 max_lut = mpii->Lut()->Max();
@@ -313,6 +321,14 @@
 mSc[0]->SetValue(0);
 mSc[1]->SetValue(0);
-mOptzc[0]->SetValue(203);
-mOptzc[1]->SetValue(101);
+
+// Pour mettre a jour le menu de la table de couleur
+mOptzc[0]->Menu()->SetStateMsg(299, mpii->GetColMap()->IsColorIndexReversed());
+int cmnum = PIColorMap::ColorMapId2Num(mpii->GetColMapId());
+mLastCol =  (cmnum < 0) ? 203 : 201+cmnum;
+mOptzc[0]->SetValue(mLastCol);
+
+// Pour le facteur de zoom
+mOptzc[1]->SetValue(mpii->GetZoom()+100);
+
 mOptCut->SetValue(303);
 return;
@@ -453,6 +469,18 @@
 if ((msg <= 110) && (msg >= 90))  // Zoom
   PIImage::CurrentPIImage()->SetZoom((int)(msg-100), true);
-else if ((msg > 200) && (msg < 299)) // Changement de couleur 
-  PIImage::CurrentPIImage()->SetColMapId(PIColorMap::GetStandardColorMapId(msg-201), true);
+else if (msg == 299) { // Revert CMap index 
+  mOptzc[0]->SetValue(mLastCol);
+}
+else if ((msg > 200) && (msg < 299)) { // Changement de couleur 
+  //  bool irev = PIImage::CurrentPIImage()->GetColMap()->IsColorIndexReversed();
+  bool revidx = mOptzc[0]->Menu()->GetStateMsg(299);
+  //  cout << " DBG PIImgTools::Process() revidx= " ;
+  //  if (revidx) cout << " TRUE " ;
+  //  else cout << " FALSE " ;
+  //  if (irev) cout << " Img::RevIdx= TRUE " << endl;
+  //  else cout << " Img::RevIdx= FALSE " << endl;
+  PIImage::CurrentPIImage()->SetColMapId(PIColorMap::GetStandardColorMapId(msg-201), revidx, true);
+  mLastCol = msg;
+}
 
 // Cuts
Index: trunk/SophyaPI/PI/piimgtools.h
===================================================================
--- trunk/SophyaPI/PI/piimgtools.h	(revision 1502)
+++ trunk/SophyaPI/PI/piimgtools.h	(revision 1503)
@@ -39,4 +39,6 @@
   PIOptMenu* mOptzc[2];
   PIMenu* mCasc[5];
+  PIMessage mLastCol;
+
 // Pour expand et compress
   PIButton* mButsz[5];
Index: trunk/SophyaPI/PI/pipixmapgen.cc
===================================================================
--- trunk/SophyaPI/PI/pipixmapgen.cc	(revision 1502)
+++ trunk/SophyaPI/PI/pipixmapgen.cc	(revision 1503)
@@ -121,5 +121,6 @@
 {
 if (!cmp)  return;
-if ( (cmp->Type() == cmap->Type()) && (cmp->Type() != CMAP_OTHER) ) return;
+if ( (cmp->Type() == cmap->Type()) && (cmp->Type() != CMAP_OTHER) 
+     && (cmp->IsColorIndexReversed() == cmap->IsColorIndexReversed()) ) return;
 if (cmap) delete cmap;
 cmap = new PIColorMap(*cmp);
@@ -128,9 +129,11 @@
 
 /* --Methode-- */
-void PIPixmapGen::SetColMapId(CMapId cmapid, bool refr)
+void PIPixmapGen::SetColMapId(CMapId cmapid, bool revidx, bool refr)
 {
-if (!cmap || (cmap->Type() != cmapid) || (cmapid == CMAP_OTHER) ) {  
+if (!cmap || (cmap->Type() != cmapid) || (cmapid == CMAP_OTHER) 
+    || (cmap->IsColorIndexReversed() != revidx) ) {  
   if (cmap) delete cmap;
   cmap = new PIColorMap(cmapid);
+  cmap->ReverseColorIndex(revidx);
   }
 if (refr)  Refresh();  
Index: trunk/SophyaPI/PI/pipixmapgen.h
===================================================================
--- trunk/SophyaPI/PI/pipixmapgen.h	(revision 1502)
+++ trunk/SophyaPI/PI/pipixmapgen.h	(revision 1503)
@@ -26,5 +26,7 @@
 
   virtual void  SetColMap(PIColorMap* cmp, bool refr=true);
-  virtual void  SetColMapId(CMapId cmapid, bool refr=true);
+  virtual void  SetColMapId(CMapId cmapid, bool revidx, bool refr);
+  inline  void  SetColMapId(CMapId cmapid, bool refr=true)
+                { SetColMapId(cmapid, false, refr); }
 
   inline PIColorMap* GetColMap() { return cmap; }
Index: trunk/SophyaPI/PI/piversion.h
===================================================================
--- trunk/SophyaPI/PI/piversion.h	(revision 1502)
+++ trunk/SophyaPI/PI/piversion.h	(revision 1503)
@@ -2,5 +2,5 @@
 #define PIVERSION_H_SEEN
 
-#define PI_VERSIONNUMBER  2.80
+#define PI_VERSIONNUMBER  2.85
 
 #endif
