Index: /trunk/SophyaPI/PI/exclude
===================================================================
--- /trunk/SophyaPI/PI/exclude	(revision 89)
+++ /trunk/SophyaPI/PI/exclude	(revision 90)
@@ -4,4 +4,5 @@
 picontainermac.cc
 pifilechomac.cc
+pigraphmac.cc
 pilistmac.cc
 pimenubarmac.cc
Index: /trunk/SophyaPI/PI/piapplgen.cc
===================================================================
--- /trunk/SophyaPI/PI/piapplgen.cc	(revision 89)
+++ /trunk/SophyaPI/PI/piapplgen.cc	(revision 90)
@@ -54,7 +54,13 @@
 #include "piapplgen.h"
 
+// Variable qui contient le pointeur de l'application courante
+// permet de recuperer la taille pref pour la fonction globale 
+static PIApplicationGen * curapp = NULL;
+
 PIApplicationGen::PIApplicationGen()
 :topcont(NULL), menubar(NULL), mState(0)
-{}
+{
+curapp = this;   
+}
 
 PIApplicationGen::~PIApplicationGen()
@@ -89,2 +95,9 @@
 }
 
+
+void     PIApplicationPrefCompSize(int& szx, int& szy)
+{
+szx = szy = 10;
+if (curapp)  curapp->PrefCompSz(szx, szy);
+return; 
+}
Index: /trunk/SophyaPI/PI/piapplgen.h
===================================================================
--- /trunk/SophyaPI/PI/piapplgen.h	(revision 89)
+++ /trunk/SophyaPI/PI/piapplgen.h	(revision 90)
@@ -30,6 +30,5 @@
         virtual void              AppendMenu(PIPDMenu *pdm);
 
-        virtual int               PrefXSize() = 0;
-        virtual int               PrefYSize() = 0;
+        virtual void              PrefCompSz(int& szx, int& szy) = 0;
 
         virtual void              RedirectOutStream(PIConsole* cons, unsigned char va= PIVA_Def)  = 0;
@@ -42,3 +41,6 @@
 };
 
+//   Fonction globale pour recuperer la taille standard des composants (taille x,y) 
+void     PIApplicationPrefCompSize(int& szx, int& szy);  
+
 #endif
Index: /trunk/SophyaPI/PI/piapplx.cc
===================================================================
--- /trunk/SophyaPI/PI/piapplx.cc	(revision 89)
+++ /trunk/SophyaPI/PI/piapplx.cc	(revision 90)
@@ -94,7 +94,10 @@
 topwdg->SetSize(MBCont()->XSize(), MBCont()->YSize());
 
+int szx, szy;
+XtAppContext * appctx = PIXtAppCtx(szx, szy);
+
 while (mStop)
   {
-  XtNextEvent(&evt);
+  XtAppNextEvent(*appctx, &evt);
   XtDispatchEvent(&evt);
   }
@@ -146,13 +149,8 @@
 
 /* --Methode-- */
-int PIApplicationX::PrefXSize()
-{
-  return(10);  // $CHECK$ A remplacer Reza 13/02/98 
-}
-
-/* --Methode-- */
-int PIApplicationX::PrefYSize()
-{
-  return(18);  // $CHECK$ A remplacer Reza 13/02/98 
+void PIApplicationX::PrefCompSz(int& szx, int& szy)
+{
+PIXtAppCtx(szx, szy);
+return;
 }
 
@@ -188,5 +186,5 @@
 int p[2];
 pipe(p);
-// Redirection de stdout :
+// Redirection de stdout (fid=1) :  
 close(1);
 dup(p[1]);
@@ -195,5 +193,7 @@
 setlinebuf(stdout);
 
-XtAddInput(p[0], (XtPointer) XtInputReadMask, redirectstream_callback, (XtPointer) streamno);
+int szx, szy;
+XtAppContext * appctx = PIXtAppCtx(szx, szy);
+XtAppAddInput(*appctx, p[0], (XtPointer) XtInputReadMask, redirectstream_callback, (XtPointer) streamno);
 }
 
@@ -208,5 +208,5 @@
 int p[2];
 pipe(p);
-// Redirection de stderr :
+// Redirection de stderr (fid=0) :
 close(2);
 dup(p[1]);
@@ -215,5 +215,7 @@
 setlinebuf(stderr);
 
-XtAddInput(p[0], (XtPointer) XtInputReadMask, redirectstream_callback, (XtPointer) (streamno+1));
-}
-
+int szx, szy;
+XtAppContext * appctx = PIXtAppCtx(szx, szy);
+XtAppAddInput(*appctx, p[0], (XtPointer) XtInputReadMask, redirectstream_callback, (XtPointer) (streamno+1));
+}
+
Index: /trunk/SophyaPI/PI/piapplx.h
===================================================================
--- /trunk/SophyaPI/PI/piapplx.h	(revision 89)
+++ /trunk/SophyaPI/PI/piapplx.h	(revision 90)
@@ -19,6 +19,5 @@
   virtual void              SetBlocked();
 
-  virtual int               PrefXSize();
-  virtual int               PrefYSize();
+  virtual void              PrefCompSz(int& szx, int& szy);
 
   virtual void              RedirectOutStream(PIConsole* cons, unsigned char va= PIVA_Def);
Index: /trunk/SophyaPI/PI/pibwdggen.h
===================================================================
--- /trunk/SophyaPI/PI/pibwdggen.h	(revision 89)
+++ /trunk/SophyaPI/PI/pibwdggen.h	(revision 90)
@@ -96,5 +96,5 @@
 
 protected:
-  PIGraphic* mWGrC;  // PIGraphic (Contexte graphique) associe a la fenetre
+  PIGraphicWin* mWGrC;  // PIGraphic (Contexte graphique) associe a la fenetre
   bool mAdfg;
   int mDrwId;
Index: /trunk/SophyaPI/PI/pibwdgx.cc
===================================================================
--- /trunk/SophyaPI/PI/pibwdgx.cc	(revision 89)
+++ /trunk/SophyaPI/PI/pibwdgx.cc	(revision 90)
@@ -43,5 +43,5 @@
 
 Manage();
-mWGrC = new PIGraphic(this);   // PIGraphic (Contexte graphique) associe a la fenetre
+mWGrC = new PIGraphicX(this);   // PIGraphic (Contexte graphique) associe a la fenetre
 }
 
Index: /trunk/SophyaPI/PI/pigraphx.h
===================================================================
--- /trunk/SophyaPI/PI/pigraphx.h	(revision 89)
+++ /trunk/SophyaPI/PI/pigraphx.h	(revision 90)
@@ -86,5 +86,5 @@
 };
 
-typedef PIGraphicX PIGraphic;
+typedef PIGraphicX PIGraphicWin;
 
 #endif
Index: /trunk/SophyaPI/PI/piperiodx.cc
===================================================================
--- /trunk/SophyaPI/PI/piperiodx.cc	(revision 89)
+++ /trunk/SophyaPI/PI/piperiodx.cc	(revision 90)
@@ -1,3 +1,4 @@
 #include "piperiodx.h"
+#include "piwdgx.h"
 
 /* Nouvelle-Fonction */
@@ -8,5 +9,7 @@
 pip = (PIPeriodX *)usd;
 pip->DoPeriodic();
-id = XtAddTimeOut(pip->Interval()*1000, xttimer_action, pip);
+int szx, szy;
+XtAppContext * appctx = PIXtAppCtx(szx, szy);
+id = XtAppAddTimeOut(*appctx, pip->Interval()*1000, xttimer_action, pip);
 pip->SetTimerId(id);
 return;
@@ -32,5 +35,7 @@
 if (dt > 0)  mDt = dt;
 
-mTId = XtAddTimeOut(mDt*1000, xttimer_action, this);
+int szx,szy;
+XtAppContext * appctx = PIXtAppCtx(szx, szy);
+mTId = XtAppAddTimeOut(*appctx, mDt*1000, xttimer_action, this);
 mFgact = true;
 return;
Index: /trunk/SophyaPI/PI/piwdgx.cc
===================================================================
--- /trunk/SophyaPI/PI/piwdgx.cc	(revision 89)
+++ /trunk/SophyaPI/PI/piwdgx.cc	(revision 90)
@@ -18,8 +18,22 @@
 // #define DEBUG_PIWdgX
 
+// Quelques variables statiques globales, Connection Display, Top Widget Xt, AppContext Xt ...
+// et leurs fonctions d'acces 
 static SysDWdg  top = NULL;
 static Display * dpy = NULL;
-static char appname[64];
+// static char appname[64];
 static char appclass[64];
+static XtAppContext appctx;
+static int appSzX = 10;
+static int appSzY = 10;
+static XFontStruct * stdfnt = NULL;
+
+/* Nouvelle-Fonction */
+XtAppContext* PIXtAppCtx(int& szx, int& szy)
+{
+szx = appSzX;  szy = appSzY;
+return(&appctx);
+}
+
 /* Nouvelle-Fonction */
 SysDWdg   PIXtTopWdg()
@@ -458,20 +472,82 @@
 
 
+// Ressources X si non definis 
+static String fallback_res[22] = {
+"PeidaInt*default*background:                 LightGrey" ,
+"PeidaInt*background:                         LightGrey" ,
+"PeidaInt*bottomShadowColor:                  Black" ,
+"PeidaInt*default*bottomShadowColor:          Black" , 
+"PeidaInt*Foreground:                         Black",
+"PeidaInt*default*Foreground:                 Black",
+"PeidaInt*topShadowColor:                     White",
+"PeidaInt*default*topShadowColor:             White",
+"PeidaInt*borderColor:                        Black",
+"PeidaInt*XmLabel.borderWidth:                0",
+"PeidaInt*XmScrollBar*background:             LightGrey",
+"PeidaInt*XmDrawingArea*background:           Black",
+"PeidaInt*XmPushButton*borderWidth:           0",
+"PeidaInt*XmText*shadowThickness:             2",
+"PeidaInt*XmText*highlightThickness:          0",
+"PeidaInt*XmText*marginHeigt:                 0",
+"PeidaInt*XmText*marginWidth:                 3",
+// "PeidaInt*DefMenubar*XtNwidth:                250",
+// "PeidaInt*DefMenubar*XtNheight:               30",
+"PeidaInt*fontList:           -*-courier-bold-r-normal-*-12-*-*-*-*-*-ISO8859-1",
+"PeidaInt*default*fontList:   -*-courier-bold-r-normal-*-12-*-*-*-*-*-ISO8859-1"
+"PeidaInt*fontFamilyName:                     *-courier",   // Pas de blanc apres le nom de font
+"PeidaInt*XmToggleButton*selectColor:         Red",
+""
+};
+
 
 /* --Methode-- */
 int PIWdgX::InitXt(int narg, char *arg[])
 {
-if (top == NULL)   // Initialisation ...  
-  {
-  int n;
-  char *pc = "PIWdgX";
-  char **ppc;
-  if (narg > 0)  { n = narg, ppc = arg; }
-  else { ppc = &pc; n = 1; }
-  strncpy(appname, ppc[0], 63); appname[63] = '\0';
-  strncpy(appclass,"PeidaInt",63);  appclass[63] = '\0';     
-  top = XtInitialize(appname, appclass, NULL, 0, &n, ppc);
-  dpy = XtDisplay(top);
-  }
+if (top != NULL)  return(0);
+// Initialisation ...  
+int n;
+char *pc = "PIWdgX";
+char **ppc;
+if (narg > 0)  { n = narg, ppc = arg; }
+else { ppc = &pc; n = 1; }
+//  strncpy(appname, ppc[0], 63); appname[63] = '\0';
+strncpy(appclass,"PeidaInt",63);  appclass[63] = '\0';     
+//  top = XtAppInitialize(&appctx, appclass, NULL, 0, &n, ppc);
+top = XtVaAppInitialize(&appctx, appclass, NULL, 0, &n, ppc, fallback_res, NULL);
+dpy = XtDisplay(top);
+
+// On va recuperer la fonte par defaut des composantes Motif
+XtResource res[] = {
+  { "fontList", "FontList", XtRString, sizeof(String),
+    0, XtRString, "-*-courier-bold-*-*-*-*-*-*-*-*-*-*-*" }
+};
+
+String fntname;
+XtGetApplicationResources(top, &fntname, res, XtNumber(res), NULL, 0);
+// scr = XDefaultScreen(dpy);
+int count;
+char **list;
+char buff[256];
+strcpy(buff, fntname);
+list = XListFonts(dpy, buff, 15, &count);
+XFreeFontNames(list);
+if (count < 1)  strcpy(buff,"-*-*-*-*-*-*-*-*-*-*-*-*-*-*" );
+stdfnt = XLoadQueryFont(dpy, buff);
+
+// On calcule la taille de la chaine CANCEL (6 caracteres)
+char a[2];
+XCharStruct  ovr;
+int hd, fa, fd, len;  // direction, font-ascent, font-descent len("CANCEL")
+XTextExtents(stdfnt, a, 0, &hd, &fa, &fd, &ovr);
+len = XTextWidth(stdfnt, "CANCEL", 6);
+appSzY = (float)(fa+fd)*1.4+10;  // pour les shadow
+appSzX = (float)len*1.5;
+// Taille multiple de 5 pixels 
+if ( (appSzX % 5) != 0 )   appSzX = 5*(appSzX/5 + 1);
+if ( (appSzY % 5) != 0 )   appSzY = 5*(appSzY/5 + 1);
+if(appSzY < 10) appSzY = 10;
+if(appSzX < 30) appSzX = 30;
+
+// printf("PIWdgX::InitXt(Font=%s- %d %d , %d ) SzX,Y= %d %d \n", buff, fa,fd,len,appSzX, appSzY);
 return(0);
 }
@@ -567,5 +643,5 @@
 
 /* --Methode-- */
-int PIWdgX::RequestSelection(unsigned int typ)
+unsigned int PIWdgX::RequestSelection(unsigned int typ)
 {
 // Pour demander le contenu du buffer de copier/coller
Index: /trunk/SophyaPI/PI/piwdgx.h
===================================================================
--- /trunk/SophyaPI/PI/piwdgx.h	(revision 89)
+++ /trunk/SophyaPI/PI/piwdgx.h	(revision 90)
@@ -58,5 +58,5 @@
   virtual bool           ClaimSelection(unsigned int typ=PICP_string);
   virtual void           SelectionLost();
-  virtual int            RequestSelection(unsigned int typ=PICP_string);
+  virtual unsigned int   RequestSelection(unsigned int typ=PICP_string);
   virtual void*          ProvideSelection(unsigned int& typ, unsigned int& len);
   virtual void           SelectionTransferEnd();
@@ -81,4 +81,5 @@
 // Utile pour avoir acces au Display et Screen X ...
 SysDWdg   PIXtTopWdg();
+XtAppContext* PIXtAppCtx(int& szx, int& szy);
 Display * PIXDisplay();
 #define  PIXScreen()  DefaultScreen(PIXDisplay()) 
Index: /trunk/SophyaPI/PI/piwindowx.cc
===================================================================
--- /trunk/SophyaPI/PI/piwindowx.cc	(revision 89)
+++ /trunk/SophyaPI/PI/piwindowx.cc	(revision 90)
@@ -76,8 +76,10 @@
                 (XtCallbackProc)popdwn_cb, (XtPointer)this);
 
-  if (!fgactl) 
+  if (fgactl == 0) 
     { 
     XtActionsRec desact = {"CloseWindow" ,CloseWindow};
-    XtAddActions(&desact, 1);  fgactl = 1; 
+    int szx, szy;
+    XtAppContext * appctx = PIXtAppCtx(szx, szy);
+    XtAppAddActions(*appctx, &desact, 1);  fgactl = 1; 
     }
 
