Index: /trunk/SophyaPI/PI/Makefile
===================================================================
--- /trunk/SophyaPI/PI/Makefile	(revision 125)
+++ /trunk/SophyaPI/PI/Makefile	(revision 126)
@@ -84,5 +84,6 @@
  pimenubargen.h picons.h pibwdgx.h pibwdggen.h picmap.h picmapx.h \
  picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
- $(EROSDEVREP)/Include/defs.h pigraphps.h piscdrawwdg.h pidrawer.h
+ $(EROSDEVREP)/Include/defs.h pigraphps.h piscdrawwdg.h pidrawer.h \
+ pi3ddrw.h pigraph3d.h
 $(OBJ)pifilechogen.o: pifilechogen.cc pifilechogen.h pisysdep.h piwdgx.h \
  piwdggen.h pimsghandler.h
@@ -185,9 +186,7 @@
  $(EROSDEVREP)/Include/exceptions.h \
  $(EROSDEVREP)/Include/peidainit.h \
- $(EROSDEVREP)/Include/pclassids.h piscdrawwdg.h pisysdep.h \
- pibwdgx.h pibwdggen.h piwdgx.h piwdggen.h pimsghandler.h picmap.h \
- picmapx.h picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
- pigraphps.h pistdwdgx.h pistdwdggen.h piwindowx.h piwindowgen.h \
- picontainerx.h picontainergen.h pidrawer.h
+ $(EROSDEVREP)/Include/pclassids.h pidrawer.h pibwdggen.h \
+ pisysdep.h piwdgx.h piwdggen.h pimsghandler.h picmap.h picmapx.h \
+ picmapgen.h pigraphx.h pigraphgen.h pigraphuc.h psfile.h
 $(OBJ)pioptmenugen.o: pioptmenugen.cc pioptmenugen.h pisysdep.h pimenux.h \
  pimenugen.h piwdgx.h piwdggen.h pimsghandler.h
@@ -212,13 +211,14 @@
  piwdgx.h piwdggen.h pimsghandler.h picmap.h picmapx.h picmapgen.h \
  pigraphx.h pigraphgen.h pigraphuc.h psfile.h \
- $(EROSDEVREP)/Include/defs.h $(EROSDEVREP)/Include/generalfit.h \
- $(EROSDEVREP)/Include/exceptions.h \
- $(EROSDEVREP)/Include/peidainit.h \
- $(EROSDEVREP)/Include/matrix.h $(EROSDEVREP)/Include/peida.h \
- $(EROSDEVREP)/Include/utils.h $(EROSDEVREP)/Include/machine.h \
- $(EROSDEVREP)/Include/perrors.h $(EROSDEVREP)/Include/fmath.h \
+ $(EROSDEVREP)/Include/defs.h parradapter.h \
+ $(EROSDEVREP)/Include/machine.h lut.h \
+ $(EROSDEVREP)/Include/cvector.h $(EROSDEVREP)/Include/matrix.h \
+ $(EROSDEVREP)/Include/peida.h $(EROSDEVREP)/Include/utils.h \
+ $(EROSDEVREP)/Include/perrors.h \
+ $(EROSDEVREP)/Include/exceptions.h \
+ $(EROSDEVREP)/Include/peidainit.h $(EROSDEVREP)/Include/fmath.h \
  $(EROSDEVREP)/Include/ppersist.h \
  $(EROSDEVREP)/Include/pclassids.h \
- $(EROSDEVREP)/Include/cvector.h
+ $(EROSDEVREP)/Include/generalfit.h
 $(OBJ)piscdrawwdg.o: piscdrawwdg.cc piscdrawwdg.h pisysdep.h pibwdgx.h \
  pibwdggen.h piwdgx.h piwdggen.h pimsghandler.h picmap.h picmapx.h \
@@ -227,5 +227,6 @@
  piwindowx.h piwindowgen.h picontainerx.h picontainergen.h pidrawer.h \
  pidrwtools.h pioptmenux.h pioptmenugen.h pimenux.h pimenugen.h \
- piapplx.h piapplgen.h pimenubarx.h pimenubargen.h picons.h
+ piapplx.h piapplgen.h pimenubarx.h pimenubargen.h picons.h \
+ parradapter.h $(EROSDEVREP)/Include/machine.h lut.h
 $(OBJ)pistdwdggen.o: pistdwdggen.cc pistdwdggen.h pisysdep.h piwdgx.h \
  piwdggen.h pimsghandler.h
Index: /trunk/SophyaPI/PI/piapplx.cc
===================================================================
--- /trunk/SophyaPI/PI/piapplx.cc	(revision 125)
+++ /trunk/SophyaPI/PI/piapplx.cc	(revision 126)
@@ -20,4 +20,6 @@
 static PIApplication* cur_piapp = NULL;
 PIApplication* PIApplicationGetApp() { return cur_piapp; }
+
+
 
 /* --Methode-- */
Index: /trunk/SophyaPI/PI/picons.cc
===================================================================
--- /trunk/SophyaPI/PI/picons.cc	(revision 125)
+++ /trunk/SophyaPI/PI/picons.cc	(revision 126)
@@ -28,5 +28,5 @@
 {
 mNL = (nl > 10) ? nl : 10;
-mNC = (nc > 40) ? nc : 40;
+mNC = (nc > 30) ? nc : 30;
 mText = new char[mNL*mNC];
 mAtt = new unsigned char[mNL*mNC];
@@ -76,4 +76,7 @@
   opmc->AppendItem("NormalFont", 3102);
   opmc->AppendItem("LargeFont", 3103);
+  opmc->AppendItem("25L x 80C", 3301);
+  opmc->AppendItem("25L x 132C", 3302);
+  opmc->AppendItem("5L x 80C", 3303);
   opmc->AppendItem("White-Black", 3201);
   opmc->AppendItem("Black-White", 3202);
@@ -174,16 +177,31 @@
   mScb->SetMinMax(0, NbLines()-1);
   mScb->SetSlSize(WindNbLines());
-  mScb->SetValue(NbLines()-WindNbLines()-1);
-  }
-}
-
-/* --Methode-- */
-void PIConsole::AutoSize()
-{
+  mScb->SetValue(0);
+  }
+}
+
+
+/* --Methode-- */
+void PIConsole::AutoSize(int nl, int nc)
+{
+if ( (nl < 1) || (nc < 1) ) {
+  nl = mWSzL;   nc = mNC;
+  }
+if (nc > mNC) nc = mNC;
 int dsz[2];
-dsz[0] = (mNC+2)*mFLarg - XSize();
-dsz[1] = (mWSzL+1)*mFHaut - YSize();
+dsz[0] = (nc+2)*mFLarg - XSize();
+dsz[1] = (nl+1)*mFHaut - YSize();
 Send(Msg(), PIMsg_ResizeRequest, dsz);
-SetSize((mWSzC+2)*mFLarg, (mWSzL+1)*mFHaut);
+
+mWSzL = YSize()/mFHaut - 1;
+mWSzC = XSize()/mFLarg - 2;
+/*
+if (mScb) {
+  mScb->SetMinMax(0, NbLines()-1);
+  mScb->SetSlSize(WindNbLines());
+  mScb->SetValue(0);
+  }
+  */
+mOffL = 0;
 }
 
@@ -239,10 +257,8 @@
 {
 if (ldeb < 0)    { 
-  if (mScb) mScb->SetValue(NbLines()-WindNbLines()-1);
+  if (mScb) mScb->SetValue(0); 
   mOffL = 0;
 }
-else if (ldeb >= mNL-mWSzL-1)  mOffL = 0;
-else mOffL = (mNL-mWSzL-1)-ldeb;
-if (mOffL < 0)  mOffL = 0;
+mOffL = (ldeb < mNL-mWSzL-1) ? ldeb : mNL-mWSzL-1;
 }
 
@@ -256,5 +272,5 @@
   mScb->SetMinMax(0, NbLines()-1);
   mScb->SetSlSize(WindNbLines());
-  mScb->SetValue(NbLines()-WindNbLines()-1);
+  mScb->SetValue(0);
   }
 mOffL = 0;
@@ -315,5 +331,5 @@
     case PIK_Enter :
       mCmdStr[mCLC] = '\0';
-//      printf("Process()-Debug- <CR/Enter> CmdStr= %s (L=%d)\n", mCmdStr, strlen(mCmdStr) );
+//      printf("Keyb()-Debug- <CR/Enter> CmdStr= %s (L=%d)\n", mCmdStr, strlen(mCmdStr) );
 
 // Gestion de rappel des commandes 
@@ -334,5 +350,5 @@
         mCmdStr[mCLC-1] = ' ';   mCCP--;  mCLC--;
       }
-      //      printf("Process()-Debug- Backspace CCP,CLC= %d %d CmdStr= %s (L=%d) \n", mCCP, mCLC, 
+      //      printf("Keyb()-Debug- Backspace CCP,CLC= %d %d CmdStr= %s (L=%d) \n", mCCP, mCLC, 
       //      mCmdStr, strlen(mCmdStr));
       break;
@@ -340,5 +356,5 @@
     case PIK_Up :
     case PIK_Down :
-//      printf("Process()-Debug- CursorUp/Down(%d)  Index= %d %d  \n", key, mRindx, mRCindx);
+//      printf("Keyb()-Debug- CursorUp/Down(%d)  Index= %d %d  \n", key, mRindx, mRCindx);
       if (mNComm > 0) {
         int nmxrec = (mNComm < NMxRecall) ? mNComm : NMxRecall;
@@ -359,9 +375,9 @@
     case PIK_Left :
       if (mCCP > 0)  mCCP--;
-      //      printf("Process()-Debug- Left CCP,CLC= %d %d  \n", mCCP, mCLC);
+      //      printf("Keyb()-Debug- Left CCP,CLC= %d %d  \n", mCCP, mCLC);
       break;
     case PIK_Right :
       if (mCCP < mCLC)  mCCP++;
-      //      printf("Process()-Debug- Right CCP,CLC= %d %d  \n", mCCP, mCLC);
+      //      printf("Keyb()-Debug- Right CCP,CLC= %d %d  \n", mCCP, mCLC);
       break;
     default :
@@ -579,5 +595,5 @@
 strncat(name, nom, 127);
 msgScb = Msg()+55;
-mScb = new PIScrollBar (par, name, msgScb, true, Scb_Width, sy, px+sx, py);
+mScb = new PIScrollBar (par, name, msgScb, kSDirDownUp, Scb_Width, sy, px+sx, py);
 mScb->SetBinding(PIBK_free, PIBK_fixed, PIBK_fixed, PIBK_fixed);
   
@@ -585,5 +601,5 @@
 mScb->SetMinMax(0, NbLines()-1);
 mScb->SetSlSize(WindNbLines());
-mScb->SetValue(NbLines()-WindNbLines()-1);
+mScb->SetValue(0);
 }
 
@@ -870,4 +886,13 @@
       SelFgBgCol(PI_Yellow, PI_Black);
       break;
+    case 3301 :
+      AutoSize(25, 80);
+      break;
+    case 3302 :
+      AutoSize(25, 132);
+      break;
+    case 3303 :
+      AutoSize(5, 80);
+      break;      
     default :
       fgr = false;
Index: /trunk/SophyaPI/PI/picons.h
===================================================================
--- /trunk/SophyaPI/PI/picons.h	(revision 125)
+++ /trunk/SophyaPI/PI/picons.h	(revision 126)
@@ -26,5 +26,5 @@
 
           void       SelectFont(PIFontSize sz=PI_NormalSizeFont);
-          void       AutoSize();
+          void       AutoSize(int nl=-1, int nc=-1);
           void       PreferedSize(int& sx, int& sy);
           void       AcceptCmd(bool acc=true, int nrecmx=20);
Index: /trunk/SophyaPI/PI/picontainerx.cc
===================================================================
--- /trunk/SophyaPI/PI/picontainerx.cc	(revision 125)
+++ /trunk/SophyaPI/PI/picontainerx.cc	(revision 126)
@@ -11,6 +11,8 @@
   CreateXtWdg(nom, xmFormWidgetClass , NULL, sx, sy, px, py);
 //  CreateXtWdg(nom, xmBulletinBoardWidgetClass , NULL, sx, sy, px, py);
+mTopWdg = NULL;
 }
 
+// constructeur special a utiliser par PIApplicationX ...
 PIContainerX::PIContainerX(PIMsgHandler *par, PIWdgX *parwdg, char *nom,  
                            int sx, int sy, int px, int py) 
@@ -20,4 +22,5 @@
 if ((sx > 0) && (sy > 0)) 
   CreateXtWdg(nom, xmFormWidgetClass , parwdg->XtWdg(), sx, sy, px, py);
+mTopWdg = parwdg;
 }
 
@@ -31,4 +34,18 @@
 int k;
 for(k=0; k<mNCh; k++)  mChilds[k]->FinishCreate();
+}
+
+/* --Methode-- */
+void PIContainerX::Process(PIMessage msg, PIMsgHandler* sender, void* data)
+{
+// Traitement specifique pour le top-container de PIApplicationX
+if ((mTopWdg != NULL) && (ModMsg(msg) == PIMsg_ResizeRequest)) {
+  // On change la taille de la fenetre - data est un pointeur sur entier
+  // data[0] represente l'increment (positif ou negatif) en X, data[1] en Y
+  int* nsz = (int*) data;
+  mTopWdg->SetSize(mTopWdg->XSize()+nsz[0], mTopWdg->YSize()+nsz[1]);
+  return;
+  }  
+else ReSend(msg, sender, data);
 }
 
Index: /trunk/SophyaPI/PI/picontainerx.h
===================================================================
--- /trunk/SophyaPI/PI/picontainerx.h	(revision 125)
+++ /trunk/SophyaPI/PI/picontainerx.h	(revision 126)
@@ -9,15 +9,20 @@
 {
 public:
-              PIContainerX(PIContainerGen *par, char *nom,
+	              PIContainerX(PIContainerGen *par, char *nom,
                            int sx=10, int sy=10, int px=0, int py=0);
 
 // Ce constructeur est a utiliser par PIApplicationX ...
-              PIContainerX(PIMsgHandler *par, PIWdgX *parwdg, char *nom,
+              	      PIContainerX(PIMsgHandler *par, PIWdgX *parwdg, char *nom,
                            int sx=10, int sy=10, int px=0, int py=0);
 
-  virtual void	 FinishCreate(); // apelle FinishCreate() pour les descendants 
+  virtual void	      FinishCreate(); // appelle FinishCreate() pour les descendants 
 
-  virtual     ~PIContainerX();
+  virtual  	      ~PIContainerX();
 
+// Pour traiter les Resize-Request si TopContainer de PIApplicationX
+  virtual void        Process(PIMessage msg, PIMsgHandler* sender, void* data=NULL);
+
+protected :
+  PIWdgX* mTopWdg;
 };
 
Index: /trunk/SophyaPI/PI/pihisto2d.cc
===================================================================
--- /trunk/SophyaPI/PI/pihisto2d.cc	(revision 125)
+++ /trunk/SophyaPI/PI/pihisto2d.cc	(revision 126)
@@ -535,5 +535,5 @@
 // Labels et curseur mobile
 mLab[3] = new PILabel(this, "   PerPt: ",60,30,10,215);
-mPScal = new PIScale(this,"FracPoints",6401,true,150,20,80,215);
+mPScal = new PIScale(this,"FracPoints",6401,kSDirLtoR,150,20,80,215);
 mPScal->SetMinMax(0,100);
 int imfp = mFPoints*100.f;
Index: /trunk/SophyaPI/PI/piimgtools.cc
===================================================================
--- /trunk/SophyaPI/PI/piimgtools.cc	(revision 125)
+++ /trunk/SophyaPI/PI/piimgtools.cc	(revision 126)
@@ -93,7 +93,7 @@
 cpx = 4*spx+2.75*bsx;
 cpy = 2*spy;
-mSc[0] = new PIScale(this, "sc-offset-lut", 2700, false, bsy*0.75, 4.5*bsy, cpx, cpy); 
+mSc[0] = new PIScale(this, "sc-offset-lut", 2700, kSDirDownUp, bsy*0.75, 4.5*bsy, cpx, cpy); 
 cpx += 1.5*bsy;
-mSc[1] = new PIScale(this, "sc-dyn-lut", 2800, false, bsy*0.75, 4.5*bsy, cpx, cpy); 
+mSc[1] = new PIScale(this, "sc-dyn-lut", 2800, kSDirDownUp, bsy*0.75, 4.5*bsy, cpx, cpy); 
 mSc[0]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
 mSc[0]->SetMinMax(-50, 50);
Index: /trunk/SophyaPI/PI/pistdwdggen.cc
===================================================================
--- /trunk/SophyaPI/PI/pistdwdggen.cc	(revision 125)
+++ /trunk/SophyaPI/PI/pistdwdggen.cc	(revision 126)
@@ -196,9 +196,12 @@
 //--
 //++
-// PIScale(PIContainerGen* par, char* nom, PIMessage msg, bool horiz=true, int sx=100, int sy=10, int px=0, int py=0)
-//	Création d'un objet PIScale. si "horiz==true", l'objet scale est affiché dans le sens horizontal, 
-//	sinon dans le sens vertical.
+// PIScale(PIContainerGen* par, char* nom, PIMessage msg, int dir=kSDirLtoR, int sx=100, int sy=10, int px=0, int py=0)
+//	Création d'un objet PIScale. "dir" indique la direction et le sens d'affichage et peut
+//	prendre les valeurs "kSDirLtoR" (gauche à droite), "kSDirRtoL" (droite à gauche),
+//	"kSDirDownUp" (bas vers haut) et "kSDirUpDown" (de haut en bas).
 // void  SetMinMax(int min, int max)
 //	Modifie les valeurs extrêmes de l'échelle. L'objet est créé avec des bornes par défaut de 1 à 100.
+// void GetMinMax(int& min, int& max)
+//	Renvoie les valeurs extrêmes de l'échelle.
 // void SetValue(int v)
 //	Modifie la valeur courante de l'échelle.
@@ -209,5 +212,5 @@
 
 PIScaleGen::PIScaleGen(PIContainerGen *par, char *nom, PIMessage msg, 
-                       bool /*horiz*/, int sx, int sy, int px, int py)
+                       int /*dir*/, int sx, int sy, int px, int py)
 : PIWdg(par, nom, sx, sy, px, py) 
 {
@@ -244,11 +247,15 @@
 //--
 //++
-// PIScrollBar(PIContainerGen* par, char* nom, PIMessage msg, bool vert=true, int sx=10, int sy=100, int px=0, int py=0)
-//	Création d'un objet PIScrollBar. si "vert==true", l'objet est affiché dans le sens vertical, 
-//	sinon dans le sens horizontal.
+// PIScrollBar(PIContainerGen* par, char* nom, PIMessage msg, int dir=kSDirUpDown, int sx=10, int sy=100, int px=0, int py=0)
+//	Création d'un objet PIScrollBar. "dir" indique la direction et le sens d'affichage et peut
+//	prendre les valeurs "kSDirLtoR" (gauche à droite), "kSDirRtoL" (droite à gauche),
+//	"kSDirDownUp" (bas vers haut) et "kSDirUpDown" (de haut en bas).
 // void  ActivateDrag(bool acd=false)
 //	Active ("acd=true") ou désactive ("mlm=false") l'envoi de messages lors du mouvement du curseur.
 // void SetMinMax(int min, int max)
 //	Modifie les valeurs extrêmes de l'ascenseur. L'objet est créé avec des bornes par défaut de 1 à 100.
+//	La valeur "max" correspond à la position extrême taille du curseur comprise ("max=posmax+taille").
+// void GetMinMax(int& min, int& max)
+//	Renvoie les valeurs extrêmes de l'ascenseur. 
 // void SetValue(int v)
 //	Modifie la position courante de l'ascenseur.
@@ -262,5 +269,5 @@
 
 PIScrollBarGen::PIScrollBarGen(PIContainerGen *par, char *nom, PIMessage msg, 
-                       bool /*horiz*/, int sx, int sy, int px, int py)
+                       int /*dir*/, int sx, int sy, int px, int py)
 : PIWdg(par, nom, sx, sy, px, py) 
 {
Index: /trunk/SophyaPI/PI/pistdwdggen.h
===================================================================
--- /trunk/SophyaPI/PI/pistdwdggen.h	(revision 125)
+++ /trunk/SophyaPI/PI/pistdwdggen.h	(revision 126)
@@ -79,4 +79,11 @@
 };
 
+// Definition choix de la direction et sens pour Scale et Scroll-bar
+enum {
+  kSDirLtoR     = 1,
+  kSDirRtoL     = 2,
+  kSDirDownUp   = 4,
+  kSDirUpDown   = 8,
+};
 
 class PIScaleGen : public PIWdg
@@ -86,9 +93,10 @@
 
                      PIScaleGen(PIContainerGen* par, char* nom, 
-                                PIMessage msg = PIMsg_DataChanged, bool horiz=true,
+                                PIMessage msg = PIMsg_DataChanged, int dir=kSDirLtoR, 
                                 int sx=100, int sy=10, int px=0, int py=0);
   virtual            ~PIScaleGen();
 
   virtual void       SetMinMax(int min, int max) = 0;
+  virtual void       GetMinMax(int& min, int& max) = 0;
   virtual void       SetValue(int val) = 0;
   virtual int        GetValue() = 0; 
@@ -106,5 +114,5 @@
 
                      PIScrollBarGen(PIContainerGen* par, char* nom, 
-                                    PIMessage msg=PIMsg_DataChanged, bool vert=true,
+                                    PIMessage msg=PIMsg_DataChanged, int dir=kSDirUpDown,
                                     int sx=10, int sy=100, int px=0, int py=0);
   virtual            ~PIScrollBarGen();
@@ -112,4 +120,5 @@
   virtual void       ActivateDrag(bool acd=false) = 0;
   virtual void       SetMinMax(int min, int max) = 0;
+  virtual void       GetMinMax(int& min, int& max) = 0;
   virtual void       SetValue(int val) = 0;
   virtual int        GetValue() = 0; 
Index: /trunk/SophyaPI/PI/pistdwdgx.cc
===================================================================
--- /trunk/SophyaPI/PI/pistdwdgx.cc	(revision 125)
+++ /trunk/SophyaPI/PI/pistdwdgx.cc	(revision 126)
@@ -332,6 +332,6 @@
 /* --Methode-- */
 PIScaleX::PIScaleX(PIContainerGen *par, char *nom, PIMessage msg,
-                   bool horiz, int sx, int sy, int px, int py)
-: PIScaleGen(par, nom, msg, horiz, sx, sy, px, py)
+                   int dir, int sx, int sy, int px, int py)
+: PIScaleGen(par, nom, msg, dir, sx, sy, px, py)
 {
 int n=0;
@@ -340,21 +340,28 @@
 XtSetArg(warg[n],XmNnavigationType,XmNONE);  n++;
 XtSetArg(warg[n],XmNtraversalOn,FALSE);  n++;
-if (horiz)
-  {
+if (dir == kSDirLtoR) {
   XtSetArg(warg[n], XmNorientation, XmHORIZONTAL); n++;
   XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
   }
-else
-  { 
+else if (dir == kSDirRtoL) {
+  XtSetArg(warg[n], XmNorientation, XmHORIZONTAL); n++;
+  XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_LEFT); n++;
+  }
+else if (dir == kSDirDownUp) {
   XtSetArg(warg[n], XmNorientation, XmVERTICAL); n++;
   XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_TOP); n++;
   }
+else { // kSDirUpDown
+  XtSetArg(warg[n], XmNorientation, XmVERTICAL); n++;
+  XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_BOTTOM); n++;
+  }
 XtSetArg(warg[n], XmNscaleWidth, sx); n++;
 XtSetArg(warg[n], XmNscaleHeight, sy); n++;
-XtSetArg(warg[n], XmNstringDirection, XmSTRING_DIRECTION_R_TO_L); n++;
+// XtSetArg(warg[n], XmNstringDirection, XmSTRING_DIRECTION_R_TO_L); n++;
 CreateXtWdg(nom, xmScaleWidgetClass, NULL, sx, sy, px, py, warg, n);
-// XtSetValues(XtWdg(), warg, n);
+
 SetMinMax(1, 100);
 SetValue(1);
+
 XtAddCallback(XtWdg(), XmNvalueChangedCallback, 
              (XtCallbackProc) scale_action, (XtPointer)this);
@@ -382,4 +389,10 @@
 }
 
+/* --Methode-- */
+void PIScaleX::GetMinMax(int& min, int& max)
+{
+min = mMin;   max = mMax;
+return;
+}
 
 /* --Methode-- */
@@ -435,5 +448,4 @@
 pis = (PIScrollBar *) usd ;
 pis->CBSetVal(calld->value);
-scroll_value = calld->value;
 pis->Send(pis->Msg(), PIMsg_DataChanged, (void *)(&scroll_value));
 return;
@@ -447,5 +459,4 @@
 pis = (PIScrollBar *) usd ;
 pis->CBSetVal(calld->value);
-scroll_value = calld->value;
 pis->Send(pis->Msg(), PIMsg_Drag, (void *)(&scroll_value));
 return;
@@ -454,31 +465,37 @@
 /* --Methode-- */
 PIScrollBarX::PIScrollBarX(PIContainerGen *par, char *nom, PIMessage msg,
-                           bool vert, int sx, int sy, int px, int py)
-: PIScrollBarGen(par, nom, msg, vert, sx, sy, px, py)
+                           int dir, int sx, int sy, int px, int py)
+: PIScrollBarGen(par, nom, msg, dir, sx, sy, px, py)
 {
 int n=0;
 Arg warg[6];
 
-CreateXtWdg(nom, xmScrollBarWidgetClass, NULL, sx, sy, px, py);
 XtSetArg(warg[n],XmNnavigationType,XmNONE);  n++;
 XtSetArg(warg[n],XmNtraversalOn,FALSE);  n++;
-if (vert)
-  {
+if (dir == kSDirLtoR) {
+  XtSetArg(warg[n], XmNorientation, XmHORIZONTAL); n++;
+  XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
+  }
+else if (dir == kSDirRtoL) {
+  XtSetArg(warg[n], XmNorientation, XmHORIZONTAL); n++;
+  XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_LEFT); n++;
+  }
+else if (dir == kSDirDownUp) {
+  XtSetArg(warg[n], XmNorientation, XmVERTICAL); n++;
+  XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_TOP); n++;
+  }
+else { // kSDirUpDown
   XtSetArg(warg[n], XmNorientation, XmVERTICAL); n++;
   XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_BOTTOM); n++;
   }
-else
-  { 
-  XtSetArg(warg[n], XmNorientation, XmHORIZONTAL); n++;
-  XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
-  }
-XtSetValues(XtWdg(), warg, n);
+CreateXtWdg(nom, xmScrollBarWidgetClass, NULL, sx, sy, px, py, warg, n);
 mAcD = false;
 mVal = -1;
 mMin = mMax = 0;
-mSz = 0;
-SetMinMax(0, 100);
+mSz = 10;
+mDir = dir;
+SetMinMax(1, 100);
 SetSlSize(10);
-SetValue(0);
+SetValue(1);
 XtAddCallback(XtWdg(), XmNvalueChangedCallback, 
              (XtCallbackProc) scrollbar_action, (XtPointer)this);
@@ -512,4 +529,5 @@
 if (mVal < min)  mVal = min;
 if (mVal > max-mSz)  mVal = max-mSz;
+//DBG printf("PIScrollBarX::SetMinMax(%d %d )  %d  Sz=%d \n", min, max, mVal, mSz);
 int n=0;
 Arg warg[3];
@@ -519,7 +537,14 @@
 XtSetValues(XtWdg(), warg, n);
 mMin = min;   mMax = max;
-return;
-}
-
+//DBG printf("--OUT-OF-- PIScrollBarX::SetMinMax(%d %d )  %d  Sz=%d \n", min, max, mVal, mSz);
+return;
+}
+
+/* --Methode-- */
+void PIScrollBarX::GetMinMax(int& min, int& max)
+{
+min = mMin;   max = mMax;
+return;
+}
 
 /* --Methode-- */
@@ -530,7 +555,9 @@
 if (val > mMax-mSz)  val = mMax-mSz;
 Arg warg[2];
+//DBG printf("PIScrollBarX::SetValue(%d -> %d) \n", val, val0);
 XtSetArg(warg[n], XmNvalue, val); n++;
 XtSetValues(this->sdw, warg, n);
 mVal = val;
+//DBG printf("--OUT-OF---PIScrollBarX::SetValue(%d -> %d) \n", val, val0);
 return;
 }
@@ -562,12 +589,13 @@
 szl = sz/10;
 if (szl < 1)  szl = 1;
+//DBG printf("PIScrollBarX::SetSlSize(%d ) \n", sz);
 XtSetArg(warg[n], XmNsliderSize, sz); n++;
 XtSetArg(warg[n], XmNpageIncrement, sz); n++;
 XtSetArg(warg[n], XmNincrement, szl); n++;
-if (mVal > mMax-sz) { 
-  mVal = mMax-sz;
-  XtSetArg(warg[n], XmNvalue, mVal); n++;
-  }
+if (mVal < mMin)  mVal = mMin;
+if (mVal > mMax-sz)  mVal = mMax-sz;
+XtSetArg(warg[n], XmNvalue, mVal); n++;
 XtSetValues(this->sdw, warg, n);
+//DBG printf("---OUT-OF---PIScrollBarX::SetSlSize(%d ) -> mVal= %d (cv1,2=%d %d)\n", sz,mVal, cv1, cv2);
 mSz = sz;
 return;
@@ -591,5 +619,7 @@
 {
 mVal = val;
-return;
-}
-
+scroll_value = mVal;
+//DBG printf("PIScrollBarX::CBSetVal(%d) %d -> %d \n", mDir, val, mVal);
+return;
+}
+
Index: /trunk/SophyaPI/PI/pistdwdgx.h
===================================================================
--- /trunk/SophyaPI/PI/pistdwdgx.h	(revision 125)
+++ /trunk/SophyaPI/PI/pistdwdgx.h	(revision 126)
@@ -70,9 +70,10 @@
 public:
                      PIScaleX(PIContainerGen* par, char* nom, 
-                              PIMessage msg=PIMsg_DataChanged, bool horiz=true,
+                              PIMessage msg=PIMsg_DataChanged, int dir=kSDirLtoR, 
                               int sx=100, int sy=10, int px=0, int py=0);
   virtual            ~PIScaleX();
 
   virtual void       SetMinMax(int min, int max);
+  virtual void       GetMinMax(int& min, int& max);
   virtual void       SetValue(int val);
   virtual int        GetValue(); 
@@ -89,5 +90,5 @@
 public:
                      PIScrollBarX(PIContainerGen* par, char* nom, 
-                                  PIMessage msg = PIMsg_DataChanged, bool vert=true,
+                                  PIMessage msg = PIMsg_DataChanged, int dir=kSDirUpDown,
                                   int sx=10, int sy=100, int px=0, int py=0);
                      ~PIScrollBarX();
@@ -95,4 +96,5 @@
   virtual void       ActivateDrag(bool acd=false);
   virtual void       SetMinMax(int min, int max);
+  virtual void       GetMinMax(int& min, int& max);
   virtual void       SetValue(int val);
   virtual int        GetValue(); 
@@ -103,5 +105,5 @@
 
 protected: 
-  int mVal, mMin, mMax, mSz;
+  int mVal, mMin, mMax, mSz, mDir;
   bool mAcD;
 };
