Index: trunk/SophyaPI/PI/Makefile
===================================================================
--- trunk/SophyaPI/PI/Makefile	(revision 131)
+++ trunk/SophyaPI/PI/Makefile	(revision 132)
@@ -4,5 +4,5 @@
  
 all: $(LIB)libPI.a
-$(LIB)libPI.a : $(OBJ)lut.o $(OBJ)parradapter.o $(OBJ)pi3ddrw.o $(OBJ)piapplgen.o $(OBJ)piapplx.o $(OBJ)pibwdggen.o $(OBJ)pibwdgx.o $(OBJ)picmap.o $(OBJ)picmapgen.o $(OBJ)picmapview.o $(OBJ)picmapx.o $(OBJ)picons.o $(OBJ)picontainergen.o $(OBJ)picontainerx.o $(OBJ)pidrawer.o $(OBJ)pidrawwin.o $(OBJ)pidrwtools.o $(OBJ)pifilechogen.o $(OBJ)pifilechox.o $(OBJ)pigraph3d.o $(OBJ)pigraphgen.o $(OBJ)pigraphps.o $(OBJ)pigraphuc.o $(OBJ)pigraphx.o $(OBJ)pihisto.o $(OBJ)pihisto2d.o $(OBJ)piimage.o $(OBJ)piimgtools.o $(OBJ)piinit.o $(OBJ)pilistgen.o $(OBJ)pilistx.o $(OBJ)pimenubargen.o $(OBJ)pimenubarx.o $(OBJ)pimenugen.o $(OBJ)pimenux.o $(OBJ)pimsghandler.o $(OBJ)pintup3d.o $(OBJ)pintuple.o $(OBJ)pioptmenugen.o $(OBJ)pioptmenux.o $(OBJ)piperiodx.o $(OBJ)pipixmapgen.o $(OBJ)pipixmapx.o $(OBJ)pipodrw.o $(OBJ)piscdrawwdg.o $(OBJ)pistdwdggen.o $(OBJ)pistdwdgx.o $(OBJ)pistlist.o $(OBJ)pisurfdr.o $(OBJ)piup.o $(OBJ)piwdggen.o $(OBJ)piwdgx.o $(OBJ)piwindowgen.o $(OBJ)piwindowx.o $(OBJ)pixtbase.o $(OBJ)psfile.o
+$(LIB)libPI.a : $(OBJ)lut.o $(OBJ)parradapter.o $(OBJ)pi3ddrw.o $(OBJ)piapplgen.o $(OBJ)piapplx.o $(OBJ)pibwdggen.o $(OBJ)pibwdgx.o $(OBJ)picmap.o $(OBJ)picmapgen.o $(OBJ)picmapview.o $(OBJ)picmapx.o $(OBJ)picons.o $(OBJ)picontainergen.o $(OBJ)picontainerx.o $(OBJ)pidrawer.o $(OBJ)pidrawwin.o $(OBJ)pidrwtools.o $(OBJ)pifilechogen.o $(OBJ)pifilechox.o $(OBJ)pigraph3d.o $(OBJ)pigraphgen.o $(OBJ)pigraphps.o $(OBJ)pigraphuc.o $(OBJ)pigraphx.o $(OBJ)pihisto.o $(OBJ)pihisto2d.o $(OBJ)piimage.o $(OBJ)piimgtools.o $(OBJ)piinit.o $(OBJ)pilistgen.o $(OBJ)pilistx.o $(OBJ)pimenubargen.o $(OBJ)pimenubarx.o $(OBJ)pimenugen.o $(OBJ)pimenux.o $(OBJ)pimsghandler.o $(OBJ)pintup3d.o $(OBJ)pintuple.o $(OBJ)pioptmenugen.o $(OBJ)pioptmenux.o $(OBJ)piperiodx.o $(OBJ)pipixmapgen.o $(OBJ)pipixmapx.o $(OBJ)pipodrw.o $(OBJ)piscdrawwdg.o $(OBJ)pistdwdggen.o $(OBJ)pistdwdgx.o $(OBJ)pistlist.o $(OBJ)pistzwin.o $(OBJ)pisurfdr.o $(OBJ)piup.o $(OBJ)piwdggen.o $(OBJ)piwdgx.o $(OBJ)piwindowgen.o $(OBJ)piwindowx.o $(OBJ)pixtbase.o $(OBJ)psfile.o
 	$(AR) $(ARFLAGS)  $@ $? 
 ifeq ($(CXX),cxx)
@@ -12,5 +12,5 @@
  
 clean:
-	rm -f $(OBJ)lut.o $(OBJ)parradapter.o $(OBJ)pi3ddrw.o $(OBJ)piapplgen.o $(OBJ)piapplx.o $(OBJ)pibwdggen.o $(OBJ)pibwdgx.o $(OBJ)picmap.o $(OBJ)picmapgen.o $(OBJ)picmapview.o $(OBJ)picmapx.o $(OBJ)picons.o $(OBJ)picontainergen.o $(OBJ)picontainerx.o $(OBJ)pidrawer.o $(OBJ)pidrawwin.o $(OBJ)pidrwtools.o $(OBJ)pifilechogen.o $(OBJ)pifilechox.o $(OBJ)pigraph3d.o $(OBJ)pigraphgen.o $(OBJ)pigraphps.o $(OBJ)pigraphuc.o $(OBJ)pigraphx.o $(OBJ)pihisto.o $(OBJ)pihisto2d.o $(OBJ)piimage.o $(OBJ)piimgtools.o $(OBJ)piinit.o $(OBJ)pilistgen.o $(OBJ)pilistx.o $(OBJ)pimenubargen.o $(OBJ)pimenubarx.o $(OBJ)pimenugen.o $(OBJ)pimenux.o $(OBJ)pimsghandler.o $(OBJ)pintup3d.o $(OBJ)pintuple.o $(OBJ)pioptmenugen.o $(OBJ)pioptmenux.o $(OBJ)piperiodx.o $(OBJ)pipixmapgen.o $(OBJ)pipixmapx.o $(OBJ)pipodrw.o $(OBJ)piscdrawwdg.o $(OBJ)pistdwdggen.o $(OBJ)pistdwdgx.o $(OBJ)pistlist.o $(OBJ)pisurfdr.o $(OBJ)piup.o $(OBJ)piwdggen.o $(OBJ)piwdgx.o $(OBJ)piwindowgen.o $(OBJ)piwindowx.o $(OBJ)pixtbase.o $(OBJ)psfile.o
+	rm -f $(OBJ)lut.o $(OBJ)parradapter.o $(OBJ)pi3ddrw.o $(OBJ)piapplgen.o $(OBJ)piapplx.o $(OBJ)pibwdggen.o $(OBJ)pibwdgx.o $(OBJ)picmap.o $(OBJ)picmapgen.o $(OBJ)picmapview.o $(OBJ)picmapx.o $(OBJ)picons.o $(OBJ)picontainergen.o $(OBJ)picontainerx.o $(OBJ)pidrawer.o $(OBJ)pidrawwin.o $(OBJ)pidrwtools.o $(OBJ)pifilechogen.o $(OBJ)pifilechox.o $(OBJ)pigraph3d.o $(OBJ)pigraphgen.o $(OBJ)pigraphps.o $(OBJ)pigraphuc.o $(OBJ)pigraphx.o $(OBJ)pihisto.o $(OBJ)pihisto2d.o $(OBJ)piimage.o $(OBJ)piimgtools.o $(OBJ)piinit.o $(OBJ)pilistgen.o $(OBJ)pilistx.o $(OBJ)pimenubargen.o $(OBJ)pimenubarx.o $(OBJ)pimenugen.o $(OBJ)pimenux.o $(OBJ)pimsghandler.o $(OBJ)pintup3d.o $(OBJ)pintuple.o $(OBJ)pioptmenugen.o $(OBJ)pioptmenux.o $(OBJ)piperiodx.o $(OBJ)pipixmapgen.o $(OBJ)pipixmapx.o $(OBJ)pipodrw.o $(OBJ)piscdrawwdg.o $(OBJ)pistdwdggen.o $(OBJ)pistdwdgx.o $(OBJ)pistlist.o $(OBJ)pistzwin.o $(OBJ)pisurfdr.o $(OBJ)piup.o $(OBJ)piwdggen.o $(OBJ)piwdgx.o $(OBJ)piwindowgen.o $(OBJ)piwindowx.o $(OBJ)pixtbase.o $(OBJ)psfile.o
 ifeq ($(CXX),cxx)
 	cd $(REPM); rm -f *.o
@@ -135,7 +135,7 @@
  pigraphuc.h psfile.h pipixmapx.h pipixmapgen.h pibwdgx.h pigraphps.h \
  pistdwdgx.h pistdwdggen.h piwindowx.h piwindowgen.h picontainerx.h \
- picontainergen.h piimgtools.h pioptmenux.h pioptmenugen.h pimenux.h \
- pimenugen.h piapplx.h piapplgen.h pimenubarx.h pimenubargen.h \
- picons.h pidrwtools.h
+ picontainergen.h picmapview.h piimgtools.h pioptmenux.h \
+ pioptmenugen.h pimenux.h pimenugen.h piapplx.h piapplgen.h \
+ pimenubarx.h pimenubargen.h picons.h pidrwtools.h
 $(OBJ)piimgtools.o: piimgtools.cc piimgtools.h pisysdep.h pistdwdgx.h \
  pistdwdggen.h piwdgx.h piwdggen.h pimsghandler.h pioptmenux.h \
@@ -146,5 +146,5 @@
  $(EROSDEVREP)/Include/defs.h pigraphps.h piimage.h parradapter.h \
  $(EROSDEVREP)/Include/machine.h lut.h pidrawer.h pipixmapx.h \
- pipixmapgen.h
+ pipixmapgen.h picmapview.h
 $(OBJ)piinit.o: piinit.cc $(EROSDEVREP)/Include/defs.h piinit.h \
  $(EROSDEVREP)/Include/strecinit.h \
@@ -220,4 +220,5 @@
  $(EROSDEVREP)/Include/ppersist.h \
  $(EROSDEVREP)/Include/pclassids.h \
+ $(EROSDEVREP)/Include/histos2.h $(EROSDEVREP)/Include/histos.h \
  $(EROSDEVREP)/Include/generalfit.h
 $(OBJ)piscdrawwdg.o: piscdrawwdg.cc piscdrawwdg.h pisysdep.h pibwdgx.h \
@@ -269,4 +270,8 @@
  picmap.h picmapx.h picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h \
  psfile.h
+$(OBJ)pistzwin.o: pistzwin.cc pistzwin.h pisysdep.h piwindowx.h \
+ piwindowgen.h picontainerx.h picontainergen.h piwdgx.h piwdggen.h \
+ pimsghandler.h psfile.h $(EROSDEVREP)/Include/defs.h pigraphgen.h \
+ picmap.h picmapx.h picmapgen.h
 $(OBJ)pisurfdr.o: pisurfdr.cc pisurfdr.h parradapter.h \
  $(EROSDEVREP)/Include/defs.h $(EROSDEVREP)/Include/machine.h \
@@ -286,5 +291,6 @@
  $(EROSDEVREP)/Include/ppersist.h \
  $(EROSDEVREP)/Include/pclassids.h \
- $(EROSDEVREP)/Include/dvlist.h \
+ $(EROSDEVREP)/Include/dvlist.h $(EROSDEVREP)/Include/cspline.h \
+ $(EROSDEVREP)/Include/cvector.h $(EROSDEVREP)/Include/matrix.h \
  $(EROSDEVREP)/Include/fitsimage.h \
  $(EROSDEVREP)/Include/fitsheader.h \
Index: trunk/SophyaPI/PI/piapplx.cc
===================================================================
--- trunk/SophyaPI/PI/piapplx.cc	(revision 131)
+++ trunk/SophyaPI/PI/piapplx.cc	(revision 132)
@@ -22,4 +22,39 @@
 
 
+// Classe de container special pour top-container de Application X
+
+class PITopContAppX : public PIContainer {
+public :
+	    	PITopContAppX(PIContainer *par, char *nom,
+                          int sx=10, int sy=10, int px=0, int py=0);
+   virtual  	~PITopContAppX(); 
+
+   virtual void SetSize(int sx, int sy);
+   virtual void SetPos(int px, int py);
+};
+
+/* --Methode-- */
+PITopContAppX::PITopContAppX(PIContainer *par, char *nom, int sx, int sy, int px, int py)
+        : PIContainer(par, nom, sx, sy, px, py)
+{
+  SetBinding(PIBK_fixed, PIBK_fixed, PIBK_fixed, PIBK_fixed);
+}
+
+/* --Methode-- */
+PITopContAppX::~PITopContAppX()
+{
+}
+
+/* --Methode-- */
+void PITopContAppX::SetSize(int sx, int sy)
+{
+Parent()->SetSize(sx+XPos(), sy+YPos());
+PIContainer::SetSize(sx, sy);
+}
+
+/* --Methode-- */
+void PITopContAppX::SetPos(int px, int py)
+{
+}
 
 /* --Methode-- */
@@ -49,12 +84,9 @@
 syt += msy;
 MBCont()->SetSize(sxt, syt);
-if ( (sx > 0) && (sy > 0) )
-  {
-  topcont = new PIContainerX(MBCont(), "TopLevelCont", 
-                             sx, sy, 0, msy);
-  topcont->SetBinding(PIBK_fixed, PIBK_fixed, PIBK_fixed, PIBK_fixed);
-  topcont->Show();
-  }
-else topcont = MBCont();
+if (sx < sxt)  sx = sxt;
+if (sy < 10) sy = 10;
+topcont = new PITopContAppX(MBCont(), "TopLevelCont", 
+                            sx, sy, 0, msy);
+topcont->Show();
 
 MBCont()->Show();
Index: trunk/SophyaPI/PI/picontainergen.cc
===================================================================
--- trunk/SophyaPI/PI/picontainergen.cc	(revision 131)
+++ trunk/SophyaPI/PI/picontainergen.cc	(revision 132)
@@ -33,5 +33,7 @@
 // PIContainer(PIContainerGen *par, char *nom, int sx, int sy, int px, int py)
 //	Création d'un objet "PIContainer" dans le conteneur parent "par", de
-//	taille "sx,sy", se trouvant à la position "px,py" avec le nom "nom"
+//	taille "sx,sy", se trouvant à la position "px,py" avec le nom "nom".
+//	Tous les widgets fils sont détruits (delete) par le destructeur
+//	(voir "SetAutoDelChilds()")
 // long kind()
 //	Renvoie le type de la classe de l'objet ("=PIContainerGen::ClassId") pour cette classe.
@@ -62,5 +64,5 @@
 {
 mNCh = 0;
-mACSup = false;   // Pas de suppression auto des widgets fils au delete
+mACSup = true;   // Suppression automatique des widgets fils au delete
 mPaSup = false;
 mChilds = new (PIWdgGen * [NCHALGRP]);
Index: trunk/SophyaPI/PI/pistzwin.cc
===================================================================
--- trunk/SophyaPI/PI/pistzwin.cc	(revision 132)
+++ trunk/SophyaPI/PI/pistzwin.cc	(revision 132)
@@ -0,0 +1,137 @@
+// This may look like C code, but it is really -*- C++ -*-
+// Module PI : Peida Interactive  PIStackWindow  PIZoneWindow
+//                             R. Ansari  08/98
+
+
+#include "pistzwin.h"
+#include "psfile.h"
+
+/* --Methode-- */
+PIStackWindow::PIStackWindow(PIMsgHandler* par, char* nom, PIWindowKind k,
+                             int sx, int sy, int px, int py)
+        : PIWindow(par, nom, k, sx, sy, px, py)
+{
+curdisp = -1;
+} 
+
+
+/* --Methode-- */
+PIStackWindow::~PIStackWindow()
+{
+}
+
+/* --Methode-- */
+void PIStackWindow::ChildAdd(PIWdgGen* child)
+{
+int k;
+for(k=0; k<NbChilds(); k++) GetChild(k)->UnManage();
+PIWindow::ChildAdd(child);
+child->Manage();
+curdisp = NbChilds()-1;
+return;
+}
+
+/* --Methode-- */
+void PIStackWindow::ChildDel(PIWdgGen* child)
+{
+int k;
+for(k=0; k<NbChilds(); k++) GetChild(k)->UnManage();
+PIWindow::ChildDel(child);
+if (NbChilds() > 0) {
+  curdisp--;
+  if (curdisp < 0)  curdisp = 0;
+  if (curdisp > NbChilds()) curdisp = NbChilds()-1; 
+  GetChild(curdisp)->Manage();
+  }
+else curdisp = -1;
+return;
+}
+
+/* --Methode-- */
+void PIStackWindow::PSPrint(PSFile *psf, int ofx, int ofy)
+{
+if (!psf) return;
+int k;
+for(k=0; k<NbChilds(); k++) { 
+  psf->NewPage((float)XSize(), (float)YSize(),PI_Auto);
+  GetChild(k)->PSPrint(psf, ofx, ofy);
+  }
+}
+
+/* --Methode-- */
+void PIStackWindow::DispNext()
+{
+if (NbChilds() < 1) return;
+int k;
+for(k=0; k<NbChilds(); k++) GetChild(k)->UnManage();
+curdisp = (curdisp+1)%NbChilds();
+GetChild(curdisp)->Manage();
+return;
+}
+
+/* --Methode-- */
+PIZoneWindow::PIZoneWindow(PIMsgHandler* par, char* nom, PIWindowKind k,
+                           int nzx, int nzy, int sx, int sy, int px, int py)
+        : PIWindow(par, nom, k, sx, sy, px, py)
+{
+if (nzx < 1) nzx = 1;
+if (nzy < 1) nzy = 1;
+if (nzx > 50) nzx = 50;
+if (nzx > 50) nzx = 50;
+mZx = nzx;  mZy = nzy;   mZc = 0;
+
+mZWdg = new PIWdgGen*[nzx*nzy];
+int i;
+for(i=0; i<mZx*mZy; i++) mZWdg[i] = NULL; 
+}
+
+/* --Methode-- */
+PIZoneWindow::~PIZoneWindow()
+{
+delete[] mZWdg;
+}
+
+/* --Methode-- */
+void PIZoneWindow::ChildAdd(PIWdgGen * child)
+{
+if (!child) return;
+if (mZWdg[mZc])  delete mZWdg[mZc];
+int nx = mZc%mZx;
+int ny = mZc/mZx;
+PIWindow::ChildAdd(child);
+mZWdg[mZc] = child;
+child->SetBinding(PIBK_free,PIBK_free,PIBK_free, PIBK_free);
+int sx = XSize()/mZx;
+int sy = YSize()/mZy;
+child->SetPos(nx*sx, ny*sy);
+child->SetSize(sx, sy);
+child->SetBinding(PIBK_elastic,PIBK_elastic,PIBK_elastic, PIBK_elastic);
+mZc = (mZc+1)%(mZx*mZy);
+}
+
+/* --Methode-- */
+void PIZoneWindow::ChildDel(PIWdgGen * child)
+{
+if (!child)  return;
+int k;
+for(k=0; k<mZx*mZy; k++) 
+  if (mZWdg[k] == child) mZWdg[k] = NULL;  
+PIWindow::ChildDel(child);
+return;
+}
+
+/* --Methode-- */
+void PIZoneWindow::NZones(int& nzx, int& nzy)
+{
+nzx = mZx;   nzy = mZy;
+}
+
+/* --Methode-- */
+void PIZoneWindow::NextChildPosSize(int& px, int& py, int& sx, int& sy)
+{
+sx = XSize()/mZx;
+sy = YSize()/mZy;
+int nx = mZc%mZx;
+int ny = mZc/mZx;
+px = nx*sx;  py = ny*sy;
+}
Index: trunk/SophyaPI/PI/pistzwin.h
===================================================================
--- trunk/SophyaPI/PI/pistzwin.h	(revision 132)
+++ trunk/SophyaPI/PI/pistzwin.h	(revision 132)
@@ -0,0 +1,51 @@
+// This may look like C code, but it is really -*- C++ -*-
+// Module PI : Peida Interactive  PIStackWindow  PIZoneWindow
+//                             R. Ansari  08/98
+
+#ifndef PISTZWIN_H_SEEN
+#define PISTZWIN_H_SEEN
+
+#include "pisysdep.h"
+#include PIWIN_H
+
+// ----------------------- Classe PIStackWindow ----------------------------
+// Fenetre de type empilement , tout widget occupe la totalite de la fenetre,
+// Un seul des widget visible (active) a chaque moment
+
+class PIStackWindow : public PIWindow {
+public:
+		PIStackWindow(PIMsgHandler* par, char* nom, PIWindowKind k=PIWK_normal,
+                              int sx=100, int sy=100, int px=0, int py=0);
+		~PIStackWindow();
+
+  virtual void  ChildAdd(PIWdgGen* child);
+  virtual void  ChildDel(PIWdgGen* child);
+
+  virtual void  PSPrint(PSFile *psf, int ofx=0, int ofy=0);
+
+  virtual void  DispNext();
+
+protected:
+  int curdisp;
+};
+
+// ----------------------- Classe PIZoneWindow ----------------------------
+// Fenetre avec nzx*nzy zone d affichage - Les nouveaux widgets dans chaque
+// zone viennent remplacer les anciennes - Ceux-ci sont detruits automatiquement
+ 
+class PIZoneWindow : public PIWindow {
+public:
+		PIZoneWindow(PIMsgHandler* par, char* nom, PIWindowKind k=PIWK_normal,
+                             int nzx=1, int nzy=1, int sx=100, int sy=100, int px=0, int py=0);
+		~PIZoneWindow();
+
+  virtual void  ChildAdd(PIWdgGen * child);
+  virtual void  ChildDel(PIWdgGen * child);
+  virtual void  NZones(int& nzx, int& nzy);
+  virtual void  NextChildPosSize(int& px, int& py, int& sx, int& sy);
+
+protected:
+  int mZx, mZy, mZc;
+  PIWdgGen** mZWdg;
+};
+#endif
Index: trunk/SophyaPI/PI/piwdggen.cc
===================================================================
--- trunk/SophyaPI/PI/piwdggen.cc	(revision 131)
+++ trunk/SophyaPI/PI/piwdggen.cc	(revision 132)
@@ -170,5 +170,6 @@
 SetMsg(0);
 SetUserData(NULL, 0);
-if (par)  par->ChildAdd(this);   //  On previent le container parent  
+//  ChildAdd() doit etre appele par la classe qui implemente le widget
+// if (par)  par->ChildAdd(this);   //  On previent le container parent  
 return;
 }
Index: trunk/SophyaPI/PI/piwdggen.h
===================================================================
--- trunk/SophyaPI/PI/piwdggen.h	(revision 131)
+++ trunk/SophyaPI/PI/piwdggen.h	(revision 132)
@@ -1,4 +1,5 @@
-/* Classe pour enrobage generique des widgets Xt, Mac, etc  */
-/*                                    Reza 10/95            */
+// This may look like C code, but it is really -*- C++ -*-
+// Module PI : Peida Interactive      PIWindowGen
+//                                    Reza 10/95            
 
 #ifndef PIWDG_H_SEEN
Index: trunk/SophyaPI/PI/piwdgx.cc
===================================================================
--- trunk/SophyaPI/PI/piwdgx.cc	(revision 131)
+++ trunk/SophyaPI/PI/piwdgx.cc	(revision 132)
@@ -168,4 +168,5 @@
 
 SetBinding(PIBK_free, PIBK_free, PIBK_free, PIBK_free);
+if (parent) parent->ChildAdd(this);
 return(0);
 }
