Index: trunk/SophyaPI/PIext/basexecut.cc
===================================================================
--- trunk/SophyaPI/PIext/basexecut.cc	(revision 327)
+++ trunk/SophyaPI/PIext/basexecut.cc	(revision 330)
@@ -445,25 +445,25 @@
 usage = "To load and initialize modules \n  Usage: loadmodule fnameso modulename";
 usage += "\n  Related commands: link";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "External Modules");
 kw = "link";
 usage = "Dynamic linking of compiled user functions \n  Usage: link fnameso f1 [f2 f3]";
 usage += "\n  fnameso: Shared-object file name, f1,f2,f3 : User function names ";
 usage += "\n  Related commands: call loadmodule";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "External Modules");
 kw = "call";
 usage = "Dynamically linked user function call \n Usage: call userf [arg1 arg2 ...]";
 usage += "\n  User function : f(vector<string>& args)";
 usage += "\n  Related commands: link";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "External Modules");
 
 kw = "zone";
 usage = "To Divide the Graphic window \n  Usage: zone nx ny";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Graphics");
 kw = "newwin";
 usage = "To Create a New Graphic window, with zones \n  Usage: newwin nx ny";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Graphics");
 kw = "stacknext";
 usage = "Displays the next widget on stack window \n  Usage: stacknext";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Graphics");
 
 kw = "gratt";
@@ -489,94 +489,94 @@
 usage += "          fineaxes  grid=fineaxesgrid \n"; 
 usage += ">> DisplayWindow: next same win stack \n";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Graphics");
 
 kw = "openfits";
 usage = "Loads a FITS file into an Image<T> \n Usage: openfits filename";
 usage += "\n  Related commands: savefits openppf";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "FileIO");
 kw = "savefits";
 usage = "Save an object into a FITS file \n Usage: savefits nameobj filename";
 usage += "\n  Related commands: openfits saveall";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "FileIO");
 kw = "openppf";
 usage = "Reads all objects from a PPF file \n Usage: openppf filename";
 usage += "\n  Related commands: saveall openfits";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "FileIO");
 kw = "saveall";
 usage = "Saves all objects into a PPF file \n Usage: saveall filename";
 usage += "\n  Related commands: openppf savefits";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "FileIO");
 
 kw = "print";
 usage = "Prints an object \n Usage: print nameobj";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "FileIO");
 
 kw = "listobjs";
 usage = "Prints the list of objects";
 usage += "\n Usage: listobjs";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Object Managment");
 kw = "rename";
 usage = "Rename an object \n Usage: rename nameobj namenew";
 usage += "\n  Related commands: del delobjs";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Object Managment");
 kw = "del";
 usage = "Deletes an object \n Usage: del nameobj";
 usage += "\n  Related commands: delobjs  rename";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Object Managment");
 kw = "delobjs";
 usage = "Delete a set of objects with names matching a pattern (x?y*)";
 usage += "\n Usage: delobjs nameobjpattern \n";
 usage += "\n  Related commands: del rename";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Object Managment");
 
 kw = "newh1d";
 usage = "Creates a 1D histogramm \n Usage: newh1d name xmin xmax nbin";
 usage += "\n  Related commands: newh2d  newprof  newgfd ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Histrograms");
 kw = "newh2d";
 usage = "Creates a 2D histogramm \n Usage: newh2d name xmin xmax nbinx ymin ymax nbiny";
 usage += "\n  Related commands: newh1d  newprof  newgfd ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Histrograms");
 kw = "newprof";
 usage = "Creates a profile histogramm \n Usage: newprof name xmin xmax nbin [ymin ymax]";
 usage += "\n  Related commands: newh1d  newh2d newgfd ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Histrograms");
 kw = "newgfd";
 usage = "Creates GeneralFit Data object \n Usage: newgfd nvar nalloc [errx(0/1)]";
 usage += "\n  Related commands: newh1d  newh2d  newprof ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Histrograms");
 
 kw = "disp";
 usage = "Displays an object \n Usage: disp nameobj [graphic_attributes]";
 usage += "\n  Related commands: surf nt2d nt3d ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
 kw = "imag";
 usage = "Displays an object as an image \n Usage: imag nameobj [graphic_attributes]";
 usage += "\n  Related commands: disp surf nt2d nt3d ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
 kw = "surf";
 usage = "Displays an object as a 3D surface \n Usage: surf nameobj [graphic_attributes]";
 usage += "\n  Related commands: disp nt2d nt3d ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
 kw = "nt2d";
 usage = "Displays Points (X-Y) [with error-bars] from an NTuple ";
 usage += "\n Usage : nt2d nameobj varx vary [errx erry] [graphic_attributes]";
 usage += "\n  Related commands: disp  surf  nt3d  gfd2d ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
 kw = "nt3d";
 usage = "Displays 3D-Points (X-Y-Z) [with error-bars] from an NTuple ";
 usage += "\n Usage : nt3d nameobj varx vary varz [errx erry errz] [graphic_attributes]";
 usage += "\n  Related commands: disp  surf  nt2d  gfd3d ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
 kw = "gfd2d";
 usage = "Displays Points (X-Y) with error-bars from a GeneralFit Data ";
 usage += "\n Usage : gfd2d nameobj numvarx erreur=(x y xy) [graphic_attributes]";
 usage += "\n  Related commands: gfd3d nt2d nt3d ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
 kw = "gfd3d";
 usage = "Displays 3D-Points (X-Y-Z) with error-bars from a GeneralFit Data ";
 usage += "\n Usage : gfd3d nameobj numvarx numvary erreur=(x y z xy xz yz xyz) [graphic_attributes]";
 usage += "\n  Related commands: gfd2d nt2d nt3d ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Obj. Display");
 
 kw = "func";
@@ -584,20 +584,20 @@
 usage += "\n Usage: func f(x) xmin xmax npt [graphic_attributes]";
 usage += "\n  Related commands: funcff func2d func2dff ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Func Plot");
 kw = "funcff";
 usage = "Displays a function y=f(x) from a C-file (Fills a vector with function values)";
 usage += "\n Usage: funcff C-FileName FunctionName xmin xmax npt [graphic_attributes]";
 usage += "\n  Related commands: func func2d func2dff ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Func Plot");
 kw = "func2d";
 usage = "Displays a function z=f(x,y) (Fills a matrix with function values)";
 usage += "\n Usage: func2d f(x,y) xmin xmax nptx ymin ymax npty [graphic_attributes]";
 usage += "\n  Related commands: func";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Func Plot");
 kw = "func2dff";
 usage = "Displays a function z=f(x,y) from a C-file (Fills a matrix with function values)";
 usage += "\n Usage: func2dff C-FileName FunctionName xmin xmax nptx ymin ymax npty [graphic_attributes]";
 usage += "\n  Related commands: func funcff func2d ";  
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Func Plot");
 
 kw = "plot2d";
@@ -607,10 +607,10 @@
 usage += "\n Usage: plot2d nameobj f_X() g_Y() [ f_ErrX() f_ErrY() ] f_Cut() [graphic_attributes]";
 usage += "\n  Related commands: plot3d  projh1d  projh2d  projprof  fillnt fillvec fillgd1 ";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
 kw = "plot3d";
 usage = "Plots (3D) Z=h(Object) vs. Y=g(Object) vs. X=f(Object) vs ";
 usage += "\n Usage: plot2d nameobj f_X() g_Y() h_Z() Cut() [graphic_attributes]";
 usage += "\n  Related commands: plot2d  projh1d  projh2d  projprof  fillnt fillvec ";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
 
 kw = "projh1d";
@@ -619,5 +619,5 @@
 usage += "\n   Histo1D nameh1d is created if necessary ";
 usage += "\n  Related commands: plot2d  projh2d  projprof fillnt  fillvec ";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
 kw = "projh2d";
 usage = "Projects (X=f(Object),Y=g(Object)) with weight WT=h(Object) into a 2D histogram ";
@@ -625,5 +625,5 @@
 usage += "\n   Histo2D nameh2d is created if necessary ";
 usage += "\n  Related commands: plot2d  projh1d projprof ";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
 kw = "projprof";
 usage = "Projects (X=f(Object),Y=g(Object)) with weight WT=h(Object) into a profile histogram ";
@@ -631,5 +631,5 @@
 usage += "\n   HProf nameprof is created if necessary ";
 usage += "\n  Related commands: plot2d  projh2d  ";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
 
 kw = "fillnt";
@@ -637,20 +637,20 @@
 usage += "\n Usage: fillnt nameobj f_X() g_Y() h_Z() k_T() Cut() nameNt";
 usage += "\n  Related commands: plot2d  projh1d projh2d projprof ";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
 kw = "fillvec";
 usage = "Creates and Fills a Vector with X=f(Object)";
 usage += "\n Usage: fillvec nameobj f_X() Cut() nameVec [graphic_attributes]";
 usage += "\n  Related commands: plot2d  projh1d  fillnt ";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
 kw = "fillgd1";
 usage = "Creates and Fills a GeneralFitData with (X=f(Object), Y=g(...), ErrY=h(...))";
 usage += "\n Usage: fillgd1 nameobj f_X() g_Y() h_ErrY() Cut() nameGfd";
 usage += "\n  Related commands: plot2d  fillnt ";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
 kw = "fillgd2";
 usage = "Creates and Fills a GeneralFitData with (X=f(Object), Y=g(...), Z=h(...)) ErrZ=k(...)";
 usage += "\n Usage: fillgd1 nameobj f_X() g_Y() h_Z() k_ErrZ() Cut() nameGfd";
 usage += "\n  Related commands: plot2d  fillgd2 ";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
 
 kw = "fit";
@@ -658,5 +658,5 @@
 usage += "\n Usage: fit nomobj func [Options]";
 usage += "\n [p:p1,...,pn s:s1,...,sn m:m1,...,mn M:M1,...,Mn o:... o:...]";
-mpiac->RegisterCommand(kw, usage, this);
+mpiac->RegisterCommand(kw, usage, this, "Expr. Plotting");
 
 
Index: trunk/SophyaPI/PIext/nobjmgr.cc
===================================================================
--- trunk/SophyaPI/PIext/nobjmgr.cc	(revision 327)
+++ trunk/SophyaPI/PIext/nobjmgr.cc	(revision 330)
@@ -19,4 +19,5 @@
 #include "nobjmgr.h"
 #include "servnobjm.h"
+#include "nomgadapter.h"
 #include "pistdimgapp.h"
 
Index: trunk/SophyaPI/PIext/piacmd.cc
===================================================================
--- trunk/SophyaPI/PIext/piacmd.cc	(revision 327)
+++ trunk/SophyaPI/PIext/piacmd.cc	(revision 330)
@@ -24,7 +24,12 @@
 		PIAHelpWind(PIStdImgApp* par, PIACmd* piacmd);
   virtual	~PIAHelpWind();
+  virtual void  Show();
   virtual void  Process(PIMessage msg, PIMsgHandler* sender, void* data=NULL);
+  inline  void  AddHelpGroup(const char * hgrp, int gid)
+                    { hgrpom->AppendItem(hgrp, 20000+gid); }
+  inline  void  ClearHelpList() 
+                    { mNitem=0; hitemlist->DeleteAllItems(); }
   inline  void	AddHelpItem(const char * hitem) 
-			{ mNitem++;  hitemlist->AppendItem(hitem, 1000+mNitem); }
+		    { mNitem++;  hitemlist->AppendItem(hitem, 100+mNitem); }
 protected :
   PIStdImgApp* dap;
@@ -32,4 +37,5 @@
   int mNitem;
   PIList* hitemlist;
+  PIOptMenu* hgrpom;
   PIButton * mBut;
   PILabel * mLab;
@@ -44,5 +50,5 @@
 piac = piacmd;
 mNitem = 0;
-SetMsg(777);
+SetMsg(77);
 
 int bsx, bsy;
@@ -53,5 +59,7 @@
 tsx = 10*bsx+2*spx;  tsy = 7*bsy+3*spy;
 SetSize(tsx,tsy);
-hitemlist = new PIList(this, "hitemlist", bsx*2.0, tsy-2*spy, spx/2, spy);
+hgrpom = new PIOptMenu(this, "hgrpoptmen", bsx*2.0, bsy, spx/2, spy);
+hgrpom->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
+hitemlist = new PIList(this, "hitemlist", bsx*2.0, tsy-3*spy-bsy, spx/2, 2*spy+bsy);
 hitemlist->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
 // hitemlist->SetBorderWidth(2);
@@ -65,5 +73,5 @@
 mLab->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
 mLab->SetLabel("");
-mBut = new PIButton(this, "Close", 700, bsx, bsy, tsx-bsx*1.5-spx, tsy-spy-bsy);
+mBut = new PIButton(this, "Close", 70, bsx, bsy, tsx-bsx*1.5-spx, tsy-spy-bsy);
 mBut->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
 }
@@ -72,4 +80,5 @@
 PIAHelpWind::~PIAHelpWind()
 {
+delete hgrpom;
 delete hitemlist;
 delete mTxt;
@@ -82,9 +91,14 @@
 {
 PIMessage um = UserMsg(msg);
-if (((um == 777) && (ModMsg(msg) == PIMsg_Close)) || (um == 700) ) {
+if (((um == 77) && (ModMsg(msg) == PIMsg_Close)) || (um == 70) ) {
   Hide();
   return;
   }
-else if ( (um > 1000) && (sender == hitemlist)) {
+else if ( (um >= 20000) && (sender == hgrpom)) {  // Selection de groupe de Help
+  mTxt->SetText("");
+  mLab->SetLabel("");
+  piac->UpdateHelpList(this, um-20000);
+}
+else if ( (um > 100) && (sender == hitemlist) && (ModMsg(msg) == PIMsg_Select) ) {
   string s = hitemlist->GetSelectionStr();
   mTxt->SetText(piac->GetUsage(s));
@@ -93,4 +107,13 @@
 }
 
+/* --Methode-- */
+void PIAHelpWind::Show()
+{
+hgrpom->SetValue(20000);   // Groupe All
+mTxt->SetText("");
+mLab->SetLabel("");
+piac->UpdateHelpList(this, 0); 
+PIWindow::Show();
+}
 
 static PIACmd* curpiacmd = NULL;
@@ -105,5 +128,10 @@
 gltimer = NULL;
 
+cmdhgrp["All"] = 0;
+cmdgrpid = 1;
+cmdhgrp["Commands"] = 1;
 helpwin = new PIAHelpWind(app, this);
+helpwin->AddHelpGroup("All", 0);
+helpwin->AddHelpGroup("Commands", 1);
 
 string kw = "piacmd";
@@ -120,5 +148,6 @@
 usage += "  > help <command_name>  # <command_name> usage info \n"; 
 usage += "  > helpwindow           # Displays help window \n";
-RegisterCommand(kw, usage, NULL);
+string grp = "Commands";
+RegisterHelp(kw, usage, grp);
 
 basexec = new PIABaseExecutor(this, omg, app);
@@ -156,12 +185,56 @@
 
 /* --Methode-- */
-void PIACmd::RegisterCommand(string& keyw, string& usage, CmdExecutor * ce)
-{
-  // if (!ce) return;
+void PIACmd::RegisterCommand(string& keyw, string& usage, CmdExecutor * ce, string grp)
+{
+if (!ce) { 
+  RegisterHelp(keyw, usage, grp);
+  return;
+  }
+int gid = CheckHelpGrp(grp);
 cmdex cme;
+cme.group = gid;
 cme.us = usage;
 cme.cex = ce;
 cmdexmap[keyw] = cme;
-if (helpwin) helpwin->AddHelpItem(keyw.c_str());
+}
+
+/* --Methode-- */
+void PIACmd::RegisterHelp(string& keyw, string& usage, string& grp)
+{
+int gid = CheckHelpGrp(grp);
+cmdex cme;
+cme.group = gid;
+cme.us = usage;
+cme.cex = NULL;
+helpexmap[keyw] = cme;
+}
+
+/* --Methode-- */
+int PIACmd::CheckHelpGrp(string& grp)
+{
+int gid=0;
+CmdHGroup::iterator it = cmdhgrp.find(grp);
+if (it == cmdhgrp.end()) {
+  cmdgrpid++;   gid = cmdgrpid;
+  cmdhgrp[grp] = gid;
+  helpwin->AddHelpGroup(grp.c_str(), gid);
+  }
+else gid = (*it).second;
+return(gid);
+}
+
+/* --Methode-- */
+void PIACmd::UpdateHelpList(PIAHelpWind* hw, int gid)
+{
+helpwin->ClearHelpList();
+CmdExmap::iterator it;
+for(it = helpexmap.begin(); it != helpexmap.end(); it++) {
+  if ( (gid != 0) && ((*it).second.group != gid) ) continue;
+  helpwin->AddHelpItem((*it).first.c_str());
+  }
+for(it = cmdexmap.begin(); it != cmdexmap.end(); it++) {
+  if ( (gid != 0) && ((*it).second.group != gid) ) continue;
+  helpwin->AddHelpItem((*it).first.c_str());
+  }
 }
 
@@ -252,25 +325,10 @@
 if (kw == "helpwindow") ShowHelpWindow();
 else if (kw == "help") {
-  if (tokens.size() > 0) {
-    CmdExmap::iterator it = cmdexmap.find(tokens[0]);
-    if (it == cmdexmap.end())  cout << "Nothing known about " << tokens[0] << " ?? " << endl;
-    else cout << (*it).second.us << endl;
+  if (tokens.size() > 0) cout << GetUsage(tokens[0]) << endl;
+  else {  
+    string kwh = "piacmd";
+    cout << GetUsage(kwh) << endl;
     }
-  else {  
-    cout << "\n -------- PIACmd::Interpret() ::::: Help ------------ \n";
-    cout << ">>> Interpreter's keywords : \n";
-    cout << "  timingon  timingoff traceon  traceoff \n";
-    cout << "  set unset listvar listcommands exec shell \n";
-    cout << "  > set varname 'string'   # To set a variable, $varname \n";
-    cout << "  > unset varname          # clear variable definition \n";
-    cout << "  > listvars   # List of variable names and values \n";
-    cout << "  > listcommands # List of all known commands \n";
-    cout << "  > exec filename  # Execute commands from file \n";
-    cout << "  > shell comand_string  # Execute shell command \n";
-    cout << "  > help <command_name>  # <command_name> usage info \n"; 
-    cout << "  > helpwindow           # Displays help window \n" << endl;
-    }
-  }
-
+  }
 
 else if (kw == "set") {
@@ -292,5 +350,5 @@
   }
 else if (kw == "listvars") {
-  cout << "---- PIACmd::Interpret()  Command keyword  List ----- \n";
+  cout << "---- PIACmd::Interpret()  Command Variable List ----- \n";
   CmdExmap::iterator it;
   int kc = 0;
@@ -376,10 +434,17 @@
 string& PIACmd::GetUsage(const string& kw)
 {
+bool fndok = false;
 CmdExmap::iterator it = cmdexmap.find(kw);
-if (it == cmdexmap.end()) {  
-  if (videstr == NULL) videstr = new string("");
-  return(*videstr);
-  }
-else return( (*it).second.us ); 
+if (it == cmdexmap.end()) {
+  it = helpexmap.find(kw);
+  if (it != helpexmap.end())  fndok = true;
+  }
+  else  fndok = true; 
+if (fndok)   return( (*it).second.us ); 
+// Keyword pas trouve
+if (videstr == NULL) videstr = new string("");
+*videstr =  "Nothing known about " + kw + " ?? ";
+return(*videstr);
+ 
 }
 
Index: trunk/SophyaPI/PIext/piacmd.h
===================================================================
--- trunk/SophyaPI/PIext/piacmd.h	(revision 327)
+++ trunk/SophyaPI/PIext/piacmd.h	(revision 330)
@@ -53,4 +53,6 @@
 // ---------------------------------------------------------------------
 
+class PIAHelpWind;   // Fenetre d'aide en ligne 
+
 class PIACmd : public CmdInterpreter  {
 public:
@@ -61,5 +63,7 @@
   virtual string	Name();
 
-  virtual void		RegisterCommand(string& keyw, string& usage, CmdExecutor * ce);
+  virtual void		RegisterCommand(string& keyw, string& usage, CmdExecutor * ce, 
+                                        string grp="Command");
+  virtual void		RegisterHelp(string& keyw, string& usage, string& grp);
   virtual void		LoadModule(string& fnameso, string& name);
 
@@ -77,5 +81,10 @@
   inline  PIStdImgApp*    GetImgApp() { return(mImgApp); }
 
+//   Pour utilisation par PIAHelpWind uniquement 
+  virtual void		UpdateHelpList(PIAHelpWind* hw, int gid);
+
 protected:
+  virtual int		CheckHelpGrp(string& grp);
+
   NamedObjMgr* mObjMgr;
   PIStdImgApp* mImgApp;
@@ -84,8 +93,12 @@
   CmdExecutor* basexec;
 
-// Pour enregistrer la liste de commandes et leurs executeurs
-  struct cmdex {string us; CmdExecutor * cex; } ;
+// Pour enregistrer la liste de commandes et leurs executeurs et le help
+  struct cmdex {int group; string us; CmdExecutor * cex; } ;
+  typedef map<string, int, less<string> > CmdHGroup;   // Liste des groupes de commandes
+  CmdHGroup cmdhgrp;
+  int cmdgrpid;                                     // Numero de groupe courant
   typedef map<string, cmdex, less<string> > CmdExmap;
   CmdExmap cmdexmap;
+  CmdExmap helpexmap;                               // Pour les helps sans commande
 
 // Pour garder la liste des modules 
Index: trunk/SophyaPI/PIext/pihisto2d.cc
===================================================================
--- trunk/SophyaPI/PIext/pihisto2d.cc	(revision 327)
+++ trunk/SophyaPI/PIext/pihisto2d.cc	(revision 330)
@@ -381,5 +381,5 @@
 
 //++
-PIH2DWdg::PIH2DWdg(PIContainerGen *par, char *nom, int sx, int sy, int px, int py)
+PIH2DWdg::PIH2DWdg(PIContainerGen *par, const char *nom, int sx, int sy, int px, int py)
 //
 //	Createur d'un Widget de dessin d'histogramme 2D.
Index: trunk/SophyaPI/PIext/pihisto2d.h
===================================================================
--- trunk/SophyaPI/PIext/pihisto2d.h	(revision 327)
+++ trunk/SophyaPI/PIext/pihisto2d.h	(revision 330)
@@ -61,5 +61,5 @@
 class PIH2DWdg : public PIScDrawWdg {
 public:
-                     PIH2DWdg(PIContainerGen *par, char *nom, int sx=300, int sy=300, 
+                     PIH2DWdg(PIContainerGen *par, const char *nom, int sx=300, int sy=300, 
                               int px=0, int py=0);
                      ~PIH2DWdg();
Index: trunk/SophyaPI/PIext/servnobjm.cc
===================================================================
--- trunk/SophyaPI/PIext/servnobjm.cc	(revision 327)
+++ trunk/SophyaPI/PIext/servnobjm.cc	(revision 330)
@@ -18,4 +18,5 @@
 #include "nobjmgr.h"
 #include "servnobjm.h"
+#include "nomgadapter.h"
 #include "pistdimgapp.h"
 
Index: trunk/SophyaPI/PIext/servnobjm.h
===================================================================
--- trunk/SophyaPI/PIext/servnobjm.h	(revision 327)
+++ trunk/SophyaPI/PIext/servnobjm.h	(revision 330)
@@ -19,5 +19,5 @@
 #include "pdlmgr.h"
 #include "dlftypes.h"
-#include "nomgadapter.h"
+#include "anydataobj.h"
 
 class NTuple;
@@ -26,4 +26,5 @@
 class HProf;
 class PIStdImgApp;
+class NObjMgrAdapter;
 
 class Services2NObjMgr {
