Index: trunk/SophyaPI/PI/lut.cc
===================================================================
--- trunk/SophyaPI/PI/lut.cc	(revision 240)
+++ trunk/SophyaPI/PI/lut.cc	(revision 292)
@@ -4,5 +4,5 @@
 // LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
 
-#include "defs.h"
+#include "machdefs.h"
 #include <stdlib.h>
 #include <stdio.h>
Index: trunk/SophyaPI/PI/parradapter.h
===================================================================
--- trunk/SophyaPI/PI/parradapter.h	(revision 240)
+++ trunk/SophyaPI/PI/parradapter.h	(revision 292)
@@ -7,6 +7,5 @@
 #define PARRADAPTER_SEEN
 
-#include "defs.h"
-#include "machine.h"
+#include "machdefs.h"
 #include "lut.h"
 
Index: trunk/SophyaPI/PI/pibwdgx.cc
===================================================================
--- trunk/SophyaPI/PI/pibwdgx.cc	(revision 240)
+++ trunk/SophyaPI/PI/pibwdgx.cc	(revision 292)
@@ -108,5 +108,6 @@
 void PIBaseWdgX::Refresh()
 {
-if ( IsVisible() )  {
+if (XtIsRealized(XtWdg())) {
+// if ( IsVisible() )  {
 //  EraseWindow();   --> Ne pas faire  Reza 12/98 
   Draw(mWGrC, 0, 0, XSize(), YSize());
Index: trunk/SophyaPI/PI/picons.cc
===================================================================
--- trunk/SophyaPI/PI/picons.cc	(revision 240)
+++ trunk/SophyaPI/PI/picons.cc	(revision 292)
@@ -743,4 +743,5 @@
 nc = (mCPendC-mCPbeginC)/mFLarg;
 nl = (mCPendL-mCPbeginL)/mFHaut;
+if (nl < 1) nl = 1;  // On selectionne au moins une ligne
 // printf("*DBG* NC=%d NL=%d \n",nc, nl); 
 l1 = mNL+1; l2 = -1;
@@ -767,5 +768,6 @@
 mCPendC = (int) ( (float)mCPendC/(float)mFLarg-0.8 );
 mCPbeginL = (int) ( (float)mCPbeginL/(float)mFHaut-0.5 ) ;
-mCPendL = (int) ( (float)mCPendL/(float)mFHaut-0.3 ) ;
+mCPendL = (int) ( (float)mCPendL/(float)mFHaut-0.5 ) ;
+if (mCPendL <= mCPbeginL) mCPendL = mCPbeginL+1;  // Au moins une ligne selectionnee
 // printf("..DBG.. C= %d %d  L = %d %d ", mCPbeginC, mCPendC, mCPbeginL, mCPendL);
 j = mNL-mWSzL-mOffL;
Index: trunk/SophyaPI/PI/pidrawer.cc
===================================================================
--- trunk/SophyaPI/PI/pidrawer.cc	(revision 240)
+++ trunk/SophyaPI/PI/pidrawer.cc	(revision 292)
@@ -5,4 +5,5 @@
 
 #include "pidrawer.h"
+#include <math.h>
 
 //++
Index: trunk/SophyaPI/PI/pidrwtools.cc
===================================================================
--- trunk/SophyaPI/PI/pidrwtools.cc	(revision 240)
+++ trunk/SophyaPI/PI/pidrwtools.cc	(revision 292)
@@ -44,5 +44,5 @@
 /* --Methode-- */
 PIDrwTools::PIDrwTools(PIApplication* par)
-: PIWindow((PIMsgHandler*)par, "PIDrawerTools", PIWK_dialog, 240, 240, 150, 150)
+: PIWindow((PIMsgHandler*)par, "PIDrawerTools", PIWK_normal, 240, 240, 150, 150)
 {
 int bsx, bsy, spx, spy;
Index: trunk/SophyaPI/PI/pigraphgen.cc
===================================================================
--- trunk/SophyaPI/PI/pigraphgen.cc	(revision 240)
+++ trunk/SophyaPI/PI/pigraphgen.cc	(revision 292)
@@ -181,5 +181,6 @@
 //|	PI_Black , PI_White,  PI_Grey , PI_Red , PI_Blue , PI_Green ,  
 //|	PI_Yellow , PI_Magenta , PI_Cyan , PI_Turquoise , PI_NavyBlue , 
-//|	PI_Orange , PI_SiennaRed , PI_Purple , PI_LimeGreen , PI_Gold 
+//|	PI_Orange , PI_SiennaRed , PI_Purple , PI_LimeGreen , PI_Gold ,
+//|	PI_ColorAllBits0 , PI_ColorAllBits1
 // void  SelBackground(PIColors col=PI_White)
 //	Choix de la couleur d'arrière-plan
@@ -189,5 +190,5 @@
 //	Choix de la couleur d'arrière-plan: Couleur numéro "cid" de la table de couleur "cmap"
 // void  SelGOMode(PIGOMode mod=PI_GOCopy) 
-//	Choix du mode de tracé graphique: "PI_GOCopy" ou "PI_GOXOR"	
+//	Choix du mode de tracé graphique: "PI_GOCopy" ou "PI_GOXOR" ou 	"PI_GOInvert"
 // void  SelFont(PIFontSize sz=PI_NormalSizeFont, PIFontAtt att=PI_RomanFont)
 //	Choix de la fonte pour le tracé de texte
Index: trunk/SophyaPI/PI/pigraphgen.h
===================================================================
--- trunk/SophyaPI/PI/pigraphgen.h	(revision 240)
+++ trunk/SophyaPI/PI/pigraphgen.h	(revision 292)
@@ -13,5 +13,5 @@
 
 
-enum PIColors  { PI_ColorFromMap = -2, PI_NotDefColor = -1, 
+enum PIColors  { PI_ColorFromMap = -4, PI_NotDefColor = -1, 
                  PI_Black = 0, PI_White = 1,  PI_Grey = 2,
                  PI_Red = 3, PI_Blue = 4, PI_Green = 5,  
@@ -19,5 +19,6 @@
                  PI_Cyan = 8, PI_Turquoise = 9, PI_NavyBlue = 10, 
                  PI_Orange = 11, PI_SiennaRed = 12, PI_Purple = 13,  
-                 PI_LimeGreen = 14, PI_Gold = 15 };
+                 PI_LimeGreen = 14, PI_Gold = 15,
+                 PI_ColorAllBits0 = 16, PI_ColorAllBits1 = 17 };
 
 enum PIFontSize { PI_NotDefFontSize = -1, 
@@ -40,5 +41,5 @@
                  PI_StarMarker=9, PI_FStarMarker=10 };
 
-enum PIGOMode { PI_GOCopy = 0, PI_GOXOR = 1 }; 
+enum PIGOMode { PI_GOCopy = 0, PI_GOXOR = 1, PI_GOInvert = 2 }; 
 
 
Index: trunk/SophyaPI/PI/pigraphx.cc
===================================================================
--- trunk/SophyaPI/PI/pigraphx.cc	(revision 240)
+++ trunk/SophyaPI/PI/pigraphx.cc	(revision 292)
@@ -20,5 +20,5 @@
 static int HugeFontIndex = 6;
 static  PIFontAtt fntatt[3] = { PI_RomanFont, PI_BoldFont, PI_ItalicFont }; 
-#define NMAXCOL  16
+#define NMAXCOL  18
 static  PIXColor colpix[NMAXCOL];
 
@@ -420,4 +420,8 @@
     mGOm = mod;
     break;
+  case PI_GOInvert :
+    XSetFunction(mDisp, DefGC(), GXinvert);
+    mGOm = mod;
+    break;
   }
 return;
@@ -801,4 +805,6 @@
 colpix[PI_Black] = XBlackPixel(mdsp, scr);
 colpix[PI_White] = XWhitePixel(mdsp, scr);
+colpix[PI_ColorAllBits0] = 0;
+colpix[PI_ColorAllBits1] = ~colpix[PI_ColorAllBits0];
 if ( XAllocNamedColor (mdsp, cmap, "LightGray", &mycol, &exact) )
   colpix[PI_Grey] = mycol.pixel;
Index: trunk/SophyaPI/PI/piimage.cc
===================================================================
--- trunk/SophyaPI/PI/piimage.cc	(revision 240)
+++ trunk/SophyaPI/PI/piimage.cc	(revision 292)
@@ -12,4 +12,5 @@
 #include "piimgtools.h"
 #include "pidrwtools.h"
+#include "piscdrawwdg.h"
 #include PIAPP_H
 
@@ -22,5 +23,5 @@
 //	Peut contrôler un PIPixmap pour l'affichage d'une zone
 //	agrandie (zoom) et un PIPixmap pour l'affichage de toute
-//	l'image (réduite).
+//	l'image (réduite). Peut aussi gerer une fenetre de coupes.
 //	Utilise les adaptateur de tableaux 2D manipuler le
 //	contenu des images ("P2DArrayAdapter").
@@ -40,4 +41,6 @@
 //	* <Alt>C : *Copier*/Coller Permet de copier le contenu de la zone sélectionnée
 //	de l'image sous forme texte.
+//	* <Alt>P : Active/désactive l'affichage de l'indicateur de la postion du pavé
+//	* <Alt>X : Active/désactive l'affichage des coupes X,Y
 //	* <Alt>Z : Supprime les textes et signes ajoutés au dessin.
 //	* Touches Curseurs : déplace la pavé.
@@ -101,4 +104,8 @@
 showinfo = false;
 
+// Fenetre et ScDrawWdg pour les coupes 
+cutwin = NULL;
+cutscw = NULL; 
+
 gpixm = zpixm = pixm = NULL;
 xsgpxm = xszpxm = xspxm = 0;
@@ -112,4 +119,6 @@
 dxmv = dymv = 0;
 xcurs = ycurs = -1;
+cuhsz = 8;  cuvsz = 8;
+cucol = PI_Yellow; culat = PI_NormalLine; 
 zoom = 1;
 zmgv = 1;
@@ -157,4 +166,5 @@
   }
 if (cmvw)  cmvw->SetColMap(NULL, 1., -1., true);
+if (cutwin)  delete cutwin;
 if (lut) delete lut;
 delete mdrw;
@@ -169,5 +179,12 @@
 void PIImage::Process(PIMessage msg, PIMsgHandler* sender, void* data)
 {
-if (UserMsg(msg) == (Msg()+626))
+
+if ((ModMsg(msg) == PIMsg_Close) && (sender == cutwin)) {
+  cutwin->Hide();
+  delete cutwin;
+  cutwin = NULL;
+  cutscw = NULL;
+  }
+else if (UserMsg(msg) == (Msg()+626))
   {
   if (ModMsg(msg) == PIMsg_Click) 
@@ -261,5 +278,5 @@
   char buff[256];
   double x,y;
-  img->XYCoord(xpav, ypav, x, y);
+  img->Coord(xpav, ypav, x, y);
   sprintf(buff," X= %g , Y= %g  Pix= %g (%d,%d)      ", 
           x, y , (*img)(xpav, ypav), xpav, ypav );
@@ -277,4 +294,44 @@
 else DrawCursor(mWGrC, -1, -1);
 return;
+}
+
+
+/* --Methode-- */
+void PIImage::ShowCuts(bool cuts)
+{
+if (cuts) {
+  if (cutwin) { cutwin->Show(); return; }
+  int tpx, tpy;
+  GetScreenPos(tpx, tpy);
+  string nom = Nom() + "-Cuts";
+  cutwin = new PIWindow(this, const_cast<char *>(nom.c_str()), PIWK_normal,  300, 200, tpx, tpy+YSize()+10);
+  cutwin->SetAutoDelChilds(true);
+  nom += "_ScWdg";
+  cutscw = new PIScDrawWdg(cutwin, const_cast<char *>(nom.c_str()), 300, 200, 0, 0);
+  cutscw->SetBinding(PIBK_fixed, PIBK_fixed, PIBK_fixed, PIBK_fixed);
+  cutarrx = new PIImg1DArrAdapter();
+  cutarry = new PIImg1DArrAdapter();
+  PIYfXDrawer * drw;
+  drw = new PIYfXDrawer(cutarrx, NULL, true);
+  drw->SetColAtt(PI_Red);
+  drw->SetMarkerAtt(5, PI_CrossMarker);
+  drw->SetLineAtt(PI_ThinLine);
+  cutscw->AddScDrawer(drw, true);
+  drw = new PIYfXDrawer(cutarry, NULL, true);
+  drw->SetColAtt(PI_Blue);
+  drw->SetMarkerAtt(5, PI_TriangleMarker);
+  drw->SetLineAtt(PI_ThinLine);
+  cutscw->AddScDrawer(drw, true);
+  cutscw->SetTitles("Red: X , Blue: Y");
+  UpdateCuts();
+  cutwin->Show();
+  }
+else {
+  if (!cutwin)  return;
+  cutwin->Hide();
+  delete cutwin;
+  cutwin = NULL;
+  cutscw = NULL; 
+  }
 }
 
@@ -392,4 +449,5 @@
 else mdrw->SetColAtt(PI_White);
 PIPixmap::SetColMap(cmp, refr);
+if (refr) { xcurs =  ycurs = -1; }
 if (zow)  zow->SetColMap(cmp, refr);
 if (gvw)  gvw->SetColMap(cmp, refr);
@@ -425,5 +483,5 @@
   char buff[256];
   double x,y;
-  img->XYCoord(xpav, ypav, x, y);
+  img->Coord(xpav, ypav, x, y);
   sprintf(buff," X= %g , Y= %g  Pix= %g (%d,%d)      ", 
           x, y , (*img)(xpav, ypav), xpav, ypav );
@@ -432,4 +490,5 @@
   }
 if (zow != NULL)   ComputeZoomPixmap();
+if (cutwin) UpdateCuts();
 if (gvw != NULL)
   if ( (gvw->UserData() != this) || (mw) )  SetGloVPixmap();
@@ -456,4 +515,5 @@
 {
 PIPixmap::Draw(g, x0, y0, dx, dy);
+xcurs = ycurs = -1;
 winovis = false;    // $CHECK$ Reza A enlever si possible 17/6/96
 if (curshow) {
@@ -467,5 +527,5 @@
   char buff[256];
   double x,y;
-  img->XYCoord(xpav, ypav, x, y);
+  img->Coord(xpav, ypav, x, y);
   sprintf(buff," X= %g , Y= %g  Pix= %g (%d,%d)      ", 
         x, y , (*img)(xpav, ypav), xpav, ypav );
@@ -488,4 +548,12 @@
     PIDrwTools::SetCurrentBaseWdg(this);
     PIDrwTools::ShowPIDrwTools();   // Fentre axes et options de trace
+    }
+  else if (key == 'P' || key == 'p') {   // Activation/desactivation affichage curseur
+    bool sc = !curshow;
+    ShowCursor(sc);
+    }
+  else if (key == 'X' || key == 'x') {   // Activation/desactivation affichage coupes X,Y 
+    bool cut = (cutwin == NULL) ? true : false; 
+    ShowCuts(cut);
     }
 // ----  Le copier ---- 
@@ -593,7 +661,8 @@
 if (curshow)  DrawCursor(mWGrC,-1,-1);
 mWGrC->SelGOMode(PI_GOXOR);
-if (GetColMapId() == CMAP_COLRJ32)
-mWGrC->SelForeground(PI_Yellow);
-else mWGrC->SelForeground(PI_Magenta);
+PIColors xc;
+if ((GetColMapId() == CMAP_COLRJ32) || (GetColMapId() == CMAP_COLRJ128))  xc = PI_Yellow;
+else  xc = PI_ColorAllBits1;
+mWGrC->SelForeground(xc);
 mWGrC->SelLine(PI_NormalLine);
 if (ustrtw || atrtw) ShowTrTxW();
@@ -604,5 +673,5 @@
 void PIImage::Ptr2Move(int x, int y)
 {
-int xp, yp;
+int xp, yp, tmp;
 if (img == NULL)  return;
 if (xmv0 < 0)  return;
@@ -615,5 +684,5 @@
  char buff[256];  
  double x,y;
- img->XYCoord(xp, yp, x, y);
+ img->Coord(xp, yp, x, y);
  sprintf(buff," X= %g , Y= %g  Pix= %g  (C= %d,%d)   ", 
          x, y , (*img)(xp, yp),  (xp+xpv0)/2, (yp+ypv0)/2 );
@@ -639,6 +708,8 @@
 xpav = (xpv0+xp2)/2;
 ypav = (ypv0+yp2)/2;
-xszpav = ((xp2-xpv0) > 0) ? (xp2-xpv0) : 1;
-yszpav = ((yp2-ypv0) > 0) ? (yp2-ypv0) : 1;
+xszpav = xp2-xpv0;
+yszpav = yp2-ypv0;
+if (xszpav < 0)  xszpav = -xszpav;
+if (yszpav < 0)  yszpav = -yszpav;
 
 Apply(false);
@@ -879,4 +950,55 @@
 
 /* --Methode-- */
+void PIImage::UpdateCuts()
+{
+if (!cutwin || !img) return;
+
+int hsx, hsy;
+hsx = XSzPave()/2;
+hsy = YSzPave()/2;
+cutarrx->SetData(img, false, 2*hsx+1, XPave(), YPave());
+cutarry->SetData(img, true, 2*hsy+1, XPave(), YPave());
+double x1,y1,x2,y2;
+double xmin, xmax, ymin, ymax;
+img->Coord(XPave()-hsx, YPave()-hsy, x1, y1);
+img->Coord(XPave()+hsx, YPave()+hsy, x2, y2);
+if (x1 < x2)  cutarrx->DefineXCoordinate(-cutarrx->Size()/2, 1.);
+else   cutarrx->DefineXCoordinate(cutarrx->Size()/2, -1.);
+if (y1 < y2)  cutarry->DefineXCoordinate(-cutarry->Size()/2, 1.);
+else   cutarry->DefineXCoordinate(cutarry->Size()/2, -1.);
+
+// On calcule les limites :
+if (cutarrx->Size() > cutarry->Size() ) {
+  xmax = cutarrx->Size()/2. + 1.;   
+  xmin = -xmax; 
+} 
+else {
+  xmax = cutarry->Size()/2. + 1.;   
+  xmin = -xmax; 
+} 
+ 
+int i;
+double cv;
+ymax = ymin = cutarrx->Value(0);
+for(i=1; i<cutarrx->Size(); i++) {
+  cv = cutarrx->Value(i);
+  if (cv < ymin)  ymin = cv;
+  if (cv > ymax)  ymax = cv;
+}
+for(i=0; i<cutarry->Size(); i++) {
+  cv = cutarry->Value(i);
+  if (cv < ymin)  ymin = cv;
+  if (cv > ymax)  ymax = cv;
+}
+ymin -= 0.05*(ymax-ymin);
+ymax += 0.05*(ymax-ymin);
+cutscw->SetLimits(xmin, xmax, ymin, ymax);
+//cutscw->UpdateLimits();
+cutscw->Refresh();
+//printf("UpdateCuts()-DBG X: %d  -> %g  , Y: %d -> %g \n", cutarrx->Size(), cutarrx->Value(0),
+//       cutarry->Size(), cutarry->Value(0));
+}
+
+/* --Methode-- */
 void PIImage::DrawCursor(PIGraphic* g) 
 {
@@ -887,5 +1009,4 @@
 }
 
-#define CURSHSIZE  25
  
 /* --Methode-- */
@@ -894,26 +1015,67 @@
 
 if (winovis)  return;      // $CHECK$ Reza A enlever si possible 17/6/96
-
-g->SelGOMode(PI_GOCopy);
-if ( (GetColMapId() == CMAP_GREY32) || (GetColMapId() == CMAP_GREYINV32) ||
-     (GetColMapId() == CMAP_GREY128) || (GetColMapId() == CMAP_GREYINV128) )  g->SelForeground(PI_Red);
-else  g->SelForeground(PI_White);
-
-if (zoom < 3)  g->SelLine(PI_NormalLine);
-else g->SelLine(PI_ThickLine);
-
-if ((xcurs>=0) && (ycurs>=0) && (g->kind() != PI_PSFileGraphics ) ) {
-  PIPixmap::Draw(g, xcurs-3, ycurs-CURSHSIZE, 6, CURSHSIZE*2); 
-  PIPixmap::Draw(g, xcurs-CURSHSIZE, ycurs-3, CURSHSIZE*2, 6); 
-}
+//printf("DBG-DrawCursor(g, %d, %d) \n", xc, yc);
+int cmapid = cmap->Type();
+if ( (xcurs>=0) && (ycurs>=0) ) {
+  if (g->kind() == PI_PSFileGraphics ) {
+    g->SelGOMode(PI_GOCopy);
+    if ( (cmapid == CMAP_GREY32) || (cmapid == CMAP_GREYINV32) ||
+         (cmapid == CMAP_GREY128) || (cmapid == CMAP_GREYINV128) )  g->SelForeground(PI_Red);
+    else  g->SelForeground(PI_Yellow);
+    }
+  else  {
+    //    g->SelGOMode(PI_GOXOR);
+    g->SelGOMode(PI_GOInvert);
+    g->SelForeground(cucol);
+    }
+  g->SelLine(culat);
+  //  On efface le curseur precedant ou on le trace ds le postscript
+  g->DrawLine(xcurs-cuhsz, ycurs, xcurs-4, ycurs);
+  g->DrawLine(xcurs+4, ycurs, xcurs+cuhsz, ycurs);
+  g->DrawLine(xcurs, ycurs-cuvsz, xcurs, ycurs-4);
+  g->DrawLine(xcurs, ycurs+4, xcurs, ycurs+cuvsz);
+  //  printf("DrawCursor/Erase() %d %d - %d %d -> %d %d \n", xcurs, ycurs, cuhsz, cuvsz, xc, yc);
+  }
+
+if (g->kind() == PI_PSFileGraphics )  { 
+  g->SelLine(PI_NormalLine);
+  g->SelForeground(PI_White);  
+  return;
+  }
+
 if ((xc >= 0) && (yc >= 0)) 
   {
+    //  g->SelGOMode(PI_GOXOR);
+  g->SelGOMode(PI_GOInvert);
+  // Nouvelle epaisseur de trait du curseur
+  if (zoom < -2) culat = PI_ThinLine;
+  else if (zoom < 4) culat = PI_NormalLine;
+  else culat = PI_ThickLine;
+  g->SelLine(culat);
+
+  // couleur  de trait du curseur
+  if ((cmapid == CMAP_COLRJ32) || (cmapid == CMAP_COLRJ128))  cucol = PI_Yellow;
+  else  cucol = PI_ColorAllBits1;
+  g->SelForeground(cucol);
+
+  // Nouveau taille du curseur
+  cuhsz = xszpav/2;  cuvsz = yszpav/2;
+  if (zoom > 0)  { cuhsz = xszpav*zoom/2;  cuvsz = yszpav*zoom/2; }
+  else { cuhsz = xszpav/(-zoom*2);  cuvsz = yszpav/(-zoom*2); }
+  if ( cuhsz < 10) cuhsz = 10;
+  if ( cuvsz < 10) cuvsz = 10;
+
   xcurs = xc;   ycurs = yc;
-  g->DrawLine(xcurs-CURSHSIZE, ycurs, xcurs-4, ycurs);
-  g->DrawLine(xcurs+4, ycurs, xcurs+CURSHSIZE, ycurs);
-  g->DrawLine(xcurs, ycurs-CURSHSIZE, xcurs, ycurs-4);
-  g->DrawLine(xcurs, ycurs+4, xcurs, ycurs+CURSHSIZE);
-  }
-else { xcurs = ycurs = -1; }
+
+  g->DrawLine(xcurs-cuhsz, ycurs, xcurs-4, ycurs);
+  g->DrawLine(xcurs+4, ycurs, xcurs+cuhsz, ycurs);
+  g->DrawLine(xcurs, ycurs-cuvsz, xcurs, ycurs-4);
+  g->DrawLine(xcurs, ycurs+4, xcurs, ycurs+cuvsz);
+  //  printf("DrawCursor() %d %d - %d %d \n", xcurs, ycurs, cuhsz, cuvsz);
+  }
+else { 
+  xcurs = ycurs = -1; cuhsz = cuvsz = 10; 
+  cucol = PI_Yellow; culat = PI_NormalLine; 
+  }
 
 g->SelGOMode(PI_GOCopy);
@@ -1049,5 +1211,5 @@
 xpav = offx+xwsz/2; 
 ypav = offx+ywsz/2;
-xszpav = ((xwsz+ywsz)/20) ;
+xszpav = ((xwsz+ywsz)/15) ;
 if (xszpav < 1) xszpav = 1;
 yszpav = xszpav; 
@@ -1055,2 +1217,50 @@
 return;
 }
+
+
+//---------------------------------------------------------------------------------
+//-------  On definit une classe ArrayAdapter pour les donnees des coupes  --------
+//---------------------------------------------------------------------------------
+
+/* --Methode-- */
+PIImage::PIImg1DArrAdapter::PIImg1DArrAdapter() : P1DArrayAdapter(0) 
+{
+data = NULL;
+fgay = false;
+off1 = off2 = 0;
+}
+
+/* --Methode-- */
+void PIImage::PIImg1DArrAdapter::SetData(P2DArrayAdapter* d, bool ax, int sz, int o1, int o2)
+{
+data = d;
+fgay = ax;
+if (o1 < 0)  o1 = 0;
+if (o2 < 0)  o2 = 0;
+if (o1 >= d->XSize()) o1 = d->XSize()-1; 
+if (o2 >= d->YSize()) o2 = d->YSize()-1; 
+off1 = o1;
+off2 = o2;
+if ((sz%2) == 0)  sz++;
+if (sz < 0) sz = 1;
+mSize = sz;
+}
+
+/* --Methode-- */
+double PIImage::PIImg1DArrAdapter::Value(int i)
+{
+if (!data) return(0.);
+int k;
+if (fgay) { 
+  k = off2-mSize/2+i;
+  if (k < 0)  k = 0;
+  if (k >= data->YSize()) k = data->YSize()-1;
+  return((*data)(off1, k));
+  }
+else { 
+  k = off1-mSize/2+i;
+  if (k < 0)  k = 0;
+  if (k >= data->XSize()) k = data->XSize()-1;
+  return((*data)(k, off2));
+  }
+}
Index: trunk/SophyaPI/PI/piimage.h
===================================================================
--- trunk/SophyaPI/PI/piimage.h	(revision 240)
+++ trunk/SophyaPI/PI/piimage.h	(revision 292)
@@ -16,4 +16,6 @@
 #include PIWIN_H
 #include "picmapview.h"
+
+class PIScDrawWdg;
 
 class PIImage : public PIPixmap
@@ -45,4 +47,6 @@
   void ShowInfo(bool si=true); 
   void ShowCursor(bool sc=true); 
+
+  void ShowCuts(bool cuts=true);
 
 //  Gestion du choix de LUT, facteur d agrandissement, table de couleur
@@ -101,4 +105,16 @@
   static void SetCurrentPIImage(PIImage* curimg);
 
+//  On definit une classe ArrayAdapter pour les donnees des coupes 
+  class PIImg1DArrAdapter : public P1DArrayAdapter {
+  public :
+	             PIImg1DArrAdapter();
+     virtual double  Value(int i);
+     virtual void    SetData(P2DArrayAdapter* d, bool ax, int sz, int o1, int o2);
+  protected :
+    P2DArrayAdapter* data;
+    bool fgay;
+    int off1, off2;
+  };
+
 protected:
   virtual void    Process(PIMessage msg, PIMsgHandler* sender, void* data=NULL);
@@ -107,4 +123,5 @@
   void ComputeGloVPixmap();
   void SetGloVPixmap();
+  void UpdateCuts();
 
   void DrawCursor(PIGraphic* g);
@@ -154,10 +171,19 @@
   int xmv0, ymv0;
   int dxmv, dymv;
-  int xcurs, ycurs;
+  int xcurs, ycurs;  // Position curseur
+  int cuhsz, cuvsz;  // Taille vertical, horizontal curseur
+  PILineAtt culat;   // Attribut de ligne du curseur  
+  PIColors cucol;    // Attribut de couleur du curseur
   int xszpav, yszpav;
+// Pour gerer une fenetre pour les coupes en X,Y 
+  bool hascuts;
+  PIWindow * cutwin;
+  PIScDrawWdg * cutscw;
+  PIImg1DArrAdapter * cutarrx; 
+  PIImg1DArrAdapter * cutarry; 
+
 // buffer pour copier-coller
   char* cpbuffer;
   int cpbuflen;
-
 //  PIImage courante 
   static PIImage* cur_piimage;
Index: trunk/SophyaPI/PI/piimgtools.cc
===================================================================
--- trunk/SophyaPI/PI/piimgtools.cc	(revision 240)
+++ trunk/SophyaPI/PI/piimgtools.cc	(revision 292)
@@ -20,5 +20,5 @@
 /* --Methode-- */
 PIImgTools::PIImgTools(PIApplication* par)
-: PIWindow((PIMsgHandler*)par, "PIImageTools", PIWK_dialog, 240, 240, 150, 150)
+: PIWindow((PIMsgHandler*)par, "PIImageTools", PIWK_normal, 240, 240, 150, 150)
 {
 int bsx, bsy, spx, spy;
Index: trunk/SophyaPI/PI/pimsghandler.h
===================================================================
--- trunk/SophyaPI/PI/pimsghandler.h	(revision 240)
+++ trunk/SophyaPI/PI/pimsghandler.h	(revision 292)
@@ -4,7 +4,7 @@
 /* Classe de gestion de messages */
 
+#include "machdefs.h"
 #include <stdlib.h>
 
-#include "defs.h"
 
 enum {
Index: trunk/SophyaPI/PI/pipixmapgen.cc
===================================================================
--- trunk/SophyaPI/PI/pipixmapgen.cc	(revision 240)
+++ trunk/SophyaPI/PI/pipixmapgen.cc	(revision 292)
@@ -73,9 +73,9 @@
 //	L'action sur le bouton 1 déclenche l'envoi d'un message
 //	avec le modifier PIMsg_Click. La position du bouton-press
-//	est stocké.
+//	est stocké. (- Offset affichage)
 // int  XPPos() 
-//	Position X du click
+//	Position X du click - Offset Affichage pixmap
 // int  YPPos() 
-//	Position Y du click
+//	Position Y du click - Offset Affichage pixmap
 //--
 
@@ -141,5 +141,5 @@
 void  PIPixmapGen::But1Press(int x, int y)
 {
-mPpos[0] = x;  mPpos[1] = y;  
+mPpos[0] = x-ofx;  mPpos[1] = y-ofy;  
 if (Msg())  Send(Msg(), PIMsg_Click, mPpos);
 return;
Index: trunk/SophyaPI/PI/piscdrawwdg.cc
===================================================================
--- trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 240)
+++ trunk/SophyaPI/PI/piscdrawwdg.cc	(revision 292)
@@ -324,6 +324,12 @@
   SelPointerShape(cPointer); 
   mWGrC->SelLine(cLatt); 
-  
-  if (xBegDrag == xEndDrag || yBegDrag == yEndDrag)
+
+  //  Pour rendre le changement de zoom moins delicat $REZA - 05/99$  
+  int dxd = xEndDrag-xBegDrag;
+  if (dxd < 0) dxd = -dxd;
+  int dyd = yEndDrag-yBegDrag;
+  if (dyd < 0) dyd = -dyd;
+  //  if (xBegDrag == xEndDrag || yBegDrag == yEndDrag) // $REZA - 05/99$  
+  if ( (dxd < 5) || (dyd < 5) )    // $REZA - 05/99$  
     SetLimits(xMinS, xMaxS, yMinS, yMaxS, kAxeDirSame, kAxeDirSame );
   else {
@@ -362,4 +368,16 @@
   mAx = ax;
   mAy = ay;
+} 
+
+/* --Methode-- */
+PIYfXDrawer::~PIYfXDrawer()
+{
+  if (mAdDO && mAx)  delete mAx;
+  if (mAdDO && mAy)  delete mAy;
+}
+
+/* --Methode-- */
+void PIYfXDrawer::UpdateLimits()
+{
   if ((mAx == NULL))  mSz = 0;
   else {
@@ -367,16 +385,4 @@
     else   mSz = (mAx->Size() < mAy->Size()) ? mAx->Size() :  mAy->Size();
     }
-} 
-
-/* --Methode-- */
-PIYfXDrawer::~PIYfXDrawer()
-{
-  if (mAdDO && mAx)  delete mAx;
-  if (mAdDO && mAy)  delete mAy;
-}
-
-/* --Methode-- */
-void PIYfXDrawer::UpdateLimits()
-{
   if (mSz <= 0)  return;
   double xmin, xmax, ymin, ymax;
@@ -423,4 +429,9 @@
   int i;
 
+  if ((mAx == NULL))  mSz = 0;
+  else {
+    if (!mAy)  mSz = mAx->Size();
+    else   mSz = (mAx->Size() < mAy->Size()) ? mAx->Size() :  mAy->Size();
+    }
   if (mSz <= 0)  return;
 
Index: trunk/SophyaPI/PI/piwdgx.cc
===================================================================
--- trunk/SophyaPI/PI/piwdgx.cc	(revision 240)
+++ trunk/SophyaPI/PI/piwdgx.cc	(revision 292)
@@ -592,17 +592,9 @@
 char **ppc;
 if (narg > 0)  { n = narg, ppc = arg; }
-#if defined(__DECCXX) || defined(__KCC__) || defined(__aCC__)
 else { ppc = const_cast<char **>(&pc); n = 1; }
-#else
-else { ppc = (char **)(&pc); n = 1; }
-#endif
 //  strncpy(appname, ppc[0], 63); appname[63] = '\0';
 strncpy(appclass,"PeidaInt",63);  appclass[63] = '\0';     
 //  top = XtAppInitialize(&appctx, appclass, NULL, 0, &n, ppc);
-#if defined(__DECCXX) || defined(__KCC__) || defined(__aCC__)
 top = XtVaAppInitialize(&appctx, appclass, NULL, 0, &n, ppc, const_cast<String*>(fallback_res), NULL);
-#else
-top = XtVaAppInitialize(&appctx, appclass, NULL, 0, &n, ppc, (String*)(fallback_res), NULL);
-#endif
 if (top == NULL) {
   fprintf(stderr, "PIWdgX::InitXt()/ Error XtVaAppInitialize() -> Exit \n");
Index: trunk/SophyaPI/PI/piwindowgen.cc
===================================================================
--- trunk/SophyaPI/PI/piwindowgen.cc	(revision 240)
+++ trunk/SophyaPI/PI/piwindowgen.cc	(revision 292)
@@ -97,10 +97,14 @@
   return;
   }
-else if ((msg == BuildMsg(Msg(), PIMsg_Close)) && (sender == this) && mAHC) 
+else if ((msg == BuildMsg(Msg(), PIMsg_Close)) && (sender == this) && mAHC) {
   Hide();   // Action par defaut en cas de MsgClose.
-else if (ModMsg(msg) == PIMsg_Active)
-  Send(Msg(),PIMsg_Active);
-
-ReSend(msg, sender, data);
+  ReSend(msg, sender, data);
+  }
+else if (ModMsg(msg) == PIMsg_Active) {
+  ReSend(msg, sender, data);
+  PIWdg * sndw = dynamic_cast<PIWdg *>(sender);
+  if (sndw && (sndw->kind() != PIWindowGen::ClassId))  Send(Msg(),PIMsg_Active);
+  }
+else ReSend(msg, sender, data);
 return;  
 }
Index: trunk/SophyaPI/PI/piwindowx.cc
===================================================================
--- trunk/SophyaPI/PI/piwindowx.cc	(revision 240)
+++ trunk/SophyaPI/PI/piwindowx.cc	(revision 292)
@@ -154,5 +154,5 @@
 
 // XRaiseWindow est necessaire, sinon la fenetre passe des fois derriere ...
-if (mWtyp == PIWK_transient)  
+//if (mWtyp == PIWK_transient)  
   XRaiseWindow(mdsp, XtWindow(pwm->XtWdg()));
  
Index: trunk/SophyaPI/PI/psfile.cc
===================================================================
--- trunk/SophyaPI/PI/psfile.cc	(revision 240)
+++ trunk/SophyaPI/PI/psfile.cc	(revision 292)
@@ -295,9 +295,5 @@
  */
 PSFile::PSFile(const char * FileName, double sc) 
-#if defined(__DECCXX) || defined(__KCC__) || defined(__aCC__)
     : mPSFileName(FileName==NULL? "unnamed.eps" : const_cast<char *>(FileName)),
-#else
-    : mPSFileName(FileName==NULL? "unnamed.eps" : (char *)(FileName)),
-#endif
       Tw (-1.), Th(-1.),         /* Non specifies pour du eps  */
       WMargin (-1), HMargin(-1), /* Non specifiees en eps  */ 
@@ -360,9 +356,5 @@
 	       PIPaperSize   paperSize,
 	       double marginX, double marginY)
-#if defined(__DECCXX) || defined(__KCC__) || defined(__aCC__)
  :  mPSFileName (FileName == NULL ? "unnamed.ps" : const_cast<char *>(FileName)),
-#else
- :  mPSFileName (FileName == NULL ? "unnamed.ps" : (char *)(FileName)),
-#endif
     Tw(PaperSizeTable[paperSize].width),  /* Format papier utilise */
     Th(PaperSizeTable[paperSize].height), /*                       */
Index: trunk/SophyaPI/PI/psfile.h
===================================================================
--- trunk/SophyaPI/PI/psfile.h	(revision 240)
+++ trunk/SophyaPI/PI/psfile.h	(revision 292)
@@ -18,7 +18,7 @@
  */
 
+#include "machdefs.h"
 #include <stdio.h>
 #include <stdlib.h>
-#include "defs.h"
 #ifdef __mac__
 #include <stat.h>
