Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/include/BaseV.h
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/include/BaseV.h	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/include/BaseV.h	(revision 32)
@@ -6,8 +6,13 @@
 #include <iterator>
 #include <qlist.h>
+#include <qmap.h>
+#include "Tools/Viewer/Bdd/include/LimitParam.h"
+#include "Tools/Viewer/Bdd/include/Group.h"
+#include "Tools/Viewer/Bdd/include/Param.h"
 
 
 #include "Tools/Viewer/Bdd/include/BaseP.h"
 #include "Tools/Viewer/Bdd/include/Signal.h"
+
 using namespace std;
 namespace morpheo{
@@ -20,22 +25,61 @@
     private:
       string comment;
-      QList<BaseP> *pos;
-      QList<string> *listcomp;
-      //QList<Param> *param; 
+      QList<morpheo::tools::viewer::bdd::BaseP> *pos;
+      QList<string> *listcomp; //dico index
+      /*list of groups(singleton)*/
+      QList<string> *listgroup; //dico index
+      QList<morpheo::tools::viewer::bdd::Group> *groups;
+      /*list of limit parameters names*/
+      QMap<string,morpheo::tools::viewer::bdd::LimitParam> *limitp;
+      /*list of sources link(generation file)*/
+      QMap<string,string> *link_src;
+      /*list of destination link(generation file)*/
+      QMap<string,string> *link_dest;
 
     protected:
     public:
-      //accesseurs
-      morpheo::tools::viewer::bdd::BaseP  get_BasePos(string v);
+      //accessors
+      morpheo::tools::viewer::bdd::BaseP get_BasePos(string v);
       morpheo::tools::viewer::bdd::Signal *getSignal(morpheo::tools::viewer::bdd::BaseP *top,string c,PortMap *dest);
       QList<morpheo::tools::viewer::bdd::BaseP>  *getBaseP();
-      //morpheo::tools::viewer::bdd::Param get_Param(string v);
-      //constructeurs
+      string getLinksrc(string name);
+      string getLinkdest(string name);
+      void setComment(string s);
+
+      //constructors
       BaseV();
       ~BaseV ();
+      
+      void addBaseP(morpheo::tools::viewer::bdd::BaseP *p,string t);
+      /*search a group*/
+      morpheo::tools::viewer::bdd::Group searchGroup(string v);
+      ///*search a param*/
+      //morpheo::tools::viewer::bdd::Param searchParam(string group,string v);
+      /*search a limitparam*/
+      morpheo::tools::viewer::bdd::LimitParam searchLimitParam(string v);
 
-      void setComment(string s);
-      void addBaseP(morpheo::tools::viewer::bdd::BaseP *p,string t);
-      //void addParam(morpheo::tools::viewer::bdd::Param *p);
+      /*modify a parameter value*/
+      void modifyValue(string nomgroup,string nameparam,int value);
+
+      /*add/remove group*/
+      int modifyGroup(string namegroup,int step);
+      int nbGroup(string namegroup);
+
+      /*add a source link */
+      void addLinksrc(string name,string src);
+      /*add a dest link */
+      void addLinkdest(string name,string dest);
+      
+      /*add a group with his level*/
+      void addGroup(morpheo::tools::viewer::bdd::Group *g);
+      /*add limit param*/
+      void addLimitParam(morpheo::tools::viewer::bdd::LimitParam *lp);
+      /*take group list*/
+      QList<morpheo::tools::viewer::bdd::Group> *getGroups();
+      /*take LimitParam list*/
+      QList<morpheo::tools::viewer::bdd::LimitParam> getLimitParam();
+      /*debug*/
+      void afficheLimitParamConsole();
+      void afficheParamConsole();
       void afficheBaseConsole();
     };//end class BaseV
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/include/Group.h
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/include/Group.h	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/include/Group.h	(revision 32)
@@ -0,0 +1,51 @@
+#ifndef morpheo_tools_viewer_bdd_Group_h
+#define morpheo_tools_viewer_bdd_Group_h
+
+#include <iostream>
+
+#include <iterator>
+#include "Tools/Viewer/Bdd/include/Param.h"
+#include <qmap.h>
+
+
+using namespace std;
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+  
+   
+  
+  class Group
+    {      
+    private:
+      string name;
+      int levelgroup;
+      QMap<string,morpheo::tools::viewer::bdd::Param> *param;
+    protected:
+
+
+    public:
+      /*alloc group list*/
+      Group(string n,int value);
+      Group(Group *g);
+      Group();
+      /*unalloc group list*/
+      ~Group();
+      /*return parameter list*/
+      QList<morpheo::tools::viewer::bdd::Param> getParam();
+      /*add a parameter to the list*/
+      void addParam(morpheo::tools::viewer::bdd::Param *p);
+      void addParam(string name,morpheo::tools::viewer::bdd::Param *p);
+      /*accessors*/
+      string getName();
+      int getLevel();
+
+    };//end class Group
+
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
+
+#endif
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/include/LimitParam.h
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/include/LimitParam.h	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/include/LimitParam.h	(revision 32)
@@ -0,0 +1,53 @@
+#ifndef morpheo_tools_viewer_bdd_LimitParam_h
+#define morpheo_tools_viewer_bdd_LimitParam_h
+
+#include <iostream>
+#include <iterator>
+
+using namespace std;
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+
+
+  class LimitParam
+    {
+    private:
+      string name;
+      int min;
+      int max;
+      string step;
+      int defaut;
+      int level;
+      string group;
+      
+    protected:
+
+
+    public:
+      /*alloc parameters list*/
+      LimitParam(string na,int mn,int mx,string sp,int de,int lvl);
+      LimitParam();
+      LimitParam(LimitParam *l);
+      /*unalloc parameters list*/
+      ~LimitParam();
+      /*accessors*/
+      string getName();
+      int getMin();
+      int getMax();
+      string getStep();
+      int getDefault();
+      int getLevel();
+      void setGroup(string s);
+      string getGroup();
+
+
+    };//end class LimitParam
+
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
+
+#endif
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/include/Param.h
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/include/Param.h	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/include/Param.h	(revision 32)
@@ -0,0 +1,44 @@
+#ifndef morpheo_tools_viewer_bdd_Param_h
+#define morpheo_tools_viewer_bdd_Param_h
+
+#include <iostream>
+#include <iterator>
+//#include "Tools/Viewer/Bdd/include/LimitParam.h"
+
+using namespace std;
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+
+
+  class Param
+    {
+    private:
+      string name;
+      int value;
+      string group;
+      //morpheo::tools::viewer::bdd::LimitParam *limit;
+    protected:
+
+    public:
+      /*alloc parameters list*/
+      Param(string n, int v,string g);
+      Param(Param *p);
+      /*unalloc parameters list*/
+      ~Param();
+
+      /*accessors*/
+      string getName();
+      string getGroup();
+      int getValue();
+      //morpheo::tools::viewer::bdd::LimitParam *getLimit();
+      //void setLimit(morpheo::tools::viewer::bdd::LimitParam *l);
+    };//end class Param
+
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
+
+#endif
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Architecture_searchComponent.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Architecture_searchComponent.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Architecture_searchComponent.cpp	(revision 32)
@@ -11,5 +11,9 @@
 
   morpheo::tools::viewer::bdd::Component Architecture::getComponent(string v){
-    return components->operator[](listcomp->indexOf(v,0));
+    int index=listcomp->indexOf(v,0);
+    if(index!=-1)
+      return components->operator[](index);
+    else
+      return Component(NULL,NULL,0,0,0,0);
   }
 };//end bdd
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_accessors.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_accessors.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_accessors.cpp	(revision 32)
@@ -19,4 +19,35 @@
   }
 
+  QList<morpheo::tools::viewer::bdd::Group> *BaseV::getGroups()
+  {
+    return groups;
+  }
+
+  QList<morpheo::tools::viewer::bdd::LimitParam> BaseV::getLimitParam()
+  {
+    return limitp->values();
+  }
+
+  string BaseV::getLinksrc(string name)
+  {
+    return link_src->value(name);
+  }
+  string BaseV::getLinkdest(string name)
+  {
+    return link_dest->value(name);
+  }
+
+  int BaseV::nbGroup(string namegroup)
+  {
+    int i=0,j=0, res=-1;
+    while (i!=-1)
+      {
+	i=listgroup->indexOf(namegroup,j);
+	j=i+1;
+	res++;
+      }
+    return res;
+  }
+
 };//end bdd
 };//end viewer
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_addGroup.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_addGroup.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_addGroup.cpp	(revision 32)
@@ -0,0 +1,22 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/BaseV.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  void BaseV::addGroup(morpheo::tools::viewer::bdd::Group *g)
+  {
+    groups->append(*g);
+    listgroup->append(g->getName());
+  }
+
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
+
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_addLimitParam.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_addLimitParam.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_addLimitParam.cpp	(revision 32)
@@ -0,0 +1,21 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/BaseV.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  void BaseV::addLimitParam(morpheo::tools::viewer::bdd::LimitParam *lp)
+  {
+    limitp->insertMulti(lp->getName(),*lp);
+  }
+
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
+
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_addLink.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_addLink.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_addLink.cpp	(revision 32)
@@ -0,0 +1,26 @@
+ /*
+ *
+ * [Add links to BaseV]
+ */
+#include "Tools/Viewer/Bdd/include/BaseV.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+  void BaseV::addLinksrc(string name,string src)
+  {
+    link_src->insert(name,src);
+    
+  }
+  
+  void BaseV::addLinkdest(string name,string dest)
+  {
+    link_dest->insert(name,dest);
+    
+  }
+  
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: unk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_addParam.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_addParam.cpp	(revision 31)
+++ 	(revision )
@@ -1,20 +1,0 @@
- /*
- *
- * [desc.]
- */
-#include "Tools/Viewer/Bdd/include/BaseV.h"
-
-namespace morpheo{
-namespace tools{
-namespace viewer{
-namespace bdd{     
-  
-   
-  // void BaseV::addParam(morpheo::tools::viewer::bdd::Param *p){
-  //  param.append(*p);
-  //}
-
-};//end bdd
-};//end viewer
-};//end tools
-};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_afficheBaseConsole.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_afficheBaseConsole.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_afficheBaseConsole.cpp	(revision 32)
@@ -1,5 +1,6 @@
 /*
  *
- * [desc.]
+ * [BaseV_afficheBaseConsole]
+ * debug : show contents of position file in memory
  */
 #include "Tools/Viewer/Bdd/include/BaseV.h"
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_afficheLimitParamConsole.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_afficheLimitParamConsole.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_afficheLimitParamConsole.cpp	(revision 32)
@@ -0,0 +1,32 @@
+/*
+ *
+ * [BaseV_afficheLimitParamConsole]
+ * debug : show contents of generation file in memory
+ */
+#include "Tools/Viewer/Bdd/include/BaseV.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+  void BaseV::afficheLimitParamConsole(){
+    
+  
+    for(QMap<string,morpheo::tools::viewer::bdd::LimitParam>::iterator it=limitp->begin();it!=limitp->end();++it)
+      {
+	
+	cout << "-------------- LimitParam ------------------" << endl;
+	cout <<"name :" << it->getName() <<endl;
+	cout << "level :" << it->getLevel() <<endl;
+	cout << "group :" << it->getGroup() <<endl;
+	
+      
+	
+      }//for
+	 
+  }
+  
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_afficheParamConsole.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_afficheParamConsole.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_afficheParamConsole.cpp	(revision 32)
@@ -0,0 +1,48 @@
+/*
+ *
+ * [BaseV_afficheParamConsole]
+ * debug : show contents of configuration file in memory
+ */
+#include "Tools/Viewer/Bdd/include/BaseV.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+  void BaseV::afficheParamConsole(){
+    string tab;
+    int i;
+    QList<morpheo::tools::viewer::bdd::Param> p;
+    for(QList<morpheo::tools::viewer::bdd::Group>::iterator it=groups->begin();it!=groups->end();++it)
+      {
+	tab=" ";
+	cout << "-------------- Group ------------------" << endl;
+	if(it->getLevel()!=0)
+	  {
+	    for(i=0;i<it->getLevel();i++)
+	      {
+		tab.append("              ");
+	      }
+	  }
+	cout <<tab<<"name :" << it->getName() <<endl;
+	cout <<tab<< "level :" << it->getLevel() <<endl;
+	cout <<tab<< "           ---------paramS------------" <<endl  ;
+
+	p=it->getParam();
+	for(QList<morpheo::tools::viewer::bdd::Param>::iterator it2=p.begin();it2!=p.end();++it2)
+	  {
+	    cout <<tab<< "           ---------param------------" <<endl  ;
+	    cout <<tab<<"name :" << it2->getName() <<endl;
+	    cout <<tab<< "value :" << it2->getValue() <<endl;
+	    cout <<tab<< "group :" << it2->getGroup() <<endl;
+	
+	  }//for
+	
+      }//for
+	 
+  }
+  
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_alloc.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_alloc.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_alloc.cpp	(revision 32)
@@ -1,3 +1,3 @@
- /*
+/*
  *
  * [desc.]
@@ -13,5 +13,9 @@
     pos=new QList<BaseP>();
     listcomp=new QList<string>();
-    //  param=new morpheo::tools::viewer::bdd::QList<Param>();
+    groups=new QList<morpheo::tools::viewer::bdd::Group>();
+    listgroup=new QList<string>();
+    limitp=new QMap<string,morpheo::tools::viewer::bdd::LimitParam>();
+    link_src=new QMap<string,string>;
+    link_dest=new QMap<string,string>;
   }
 
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_getSignal.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_getSignal.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_getSignal.cpp	(revision 32)
@@ -1,3 +1,3 @@
- /*
+/*
  *
  * [desc.]
@@ -24,7 +24,16 @@
     srcX=p->get_x();
     srcY=p->get_y();
-    //cout << dest->getComponent() <<endl;  
-    morpheo::tools::viewer::bdd::BaseP res=get_BasePos(dest->getComponent());
-    morpheo::tools::viewer::bdd::Port *pm=(res.getEntity())->searchPort(dest->getPort());
+    morpheo::tools::viewer::bdd::Port *pm;
+    if(dest->getComponent()==(top->getEntity())->getName())
+      {
+	//cout << dest->getComponent() <<endl;  
+	morpheo::tools::viewer::bdd::BaseP res=get_BasePos(dest->getComponent());
+	pm=(res.getEntity())->searchPort(dest->getPort());
+      }
+    else
+      {
+	x=aa->getComponent(dest->getComponent());
+	pm= x.searchPort(dest->getPort());
+      }
     destX=pm->get_x();
     destY=pm->get_y();
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_modify.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_modify.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_modify.cpp	(revision 32)
@@ -0,0 +1,90 @@
+/*
+ *
+ * modifyGroup :modify the number of nb_* parameter
+ * modifyValue :modify a parameter value
+ */
+#include "Tools/Viewer/Bdd/include/BaseV.h"
+#include "qstring.h"
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+
+  int BaseV::modifyGroup(string namegroup,int step)
+  {
+
+    int i,level,position_tab_init,position_tab;
+    Group *g; Param *p; QList<Param> p2;LimitParam lp;
+    
+    if(listgroup->indexOf(namegroup)==-1)
+      return -1;
+    
+    switch (step){
+    case 1:
+      position_tab_init=listgroup->lastIndexOf(namegroup);
+      level=(groups->operator[](position_tab_init)).getLevel();  
+      //search the position to add a group
+      if(level>=groups->operator[](position_tab_init+1).getLevel())
+	position_tab=position_tab_init;
+      else
+	for(position_tab=position_tab_init ;level<groups->operator[](position_tab+1).getLevel();position_tab++);
+      //cout << position_tab << "         " << position_tab_init<<endl;
+      //create a new group and add
+      for(i=position_tab;i>=position_tab_init;i--)
+	{
+	  g=new Group(groups->operator[](i).getName(),groups->operator[](i).getLevel());
+	  p2=groups->operator[](i).getParam();
+	  for(QList<Param>::iterator it=p2.begin();it!=p2.end();++it)
+	    {
+	      
+	      if(it->getName() == "id")
+		{
+		  p=new Param(it->getName(),it->getValue()+1,g->getName());
+		  g->addParam(p);
+		}
+             else if(QString::fromStdString(it->getName()).contains("link",Qt::CaseInsensitive))
+ 		{
+		  p=new Param(it->getName(),it->getValue(),g->getName());
+ 		  g->addParam(p);		  
+ 		}
+	      else
+		{
+		  lp=searchLimitParam(it->getName());
+		  p=new Param(lp.getName(),lp.getDefault(),g->getName());
+		  g->addParam(p);
+		}
+	    }
+	  groups->insert(position_tab+1,*g);
+	  listgroup->insert(position_tab+1,g->getName());
+	  delete g;
+	  
+	}
+      
+      break;
+    case -1:
+      if(nbGroup(namegroup)==1)
+	break;
+      else 
+	{
+	  groups->removeAt(listgroup->lastIndexOf(namegroup));  
+	  listgroup->removeAt(listgroup->lastIndexOf(namegroup));  
+	}
+      break;
+    default:
+      return -1;
+    }
+    return 0;
+  }
+
+  void BaseV::modifyValue(string nomgroup,string nameparam,int value)
+  {  
+    Group g=searchGroup(nomgroup);
+    Param *np=new Param(nameparam,value,nomgroup); 
+    g.addParam(nameparam,np); 
+    delete np;
+  }
+
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_searchComponent.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_searchComponent.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_searchComponent.cpp	(revision 32)
@@ -1,3 +1,2 @@
-
  /*
  *
@@ -13,8 +12,6 @@
   morpheo::tools::viewer::bdd::BaseP BaseV::get_BasePos(string v){ 
     int tmp=listcomp->indexOf(v,0);
-    if(tmp==-1){
-      cout << "not found\n";
+    if(tmp == -1)
       return NULL;
-    }
     else
       return pos->operator[](tmp);
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_searchGroup.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_searchGroup.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_searchGroup.cpp	(revision 32)
@@ -0,0 +1,26 @@
+/*
+ *
+ * 
+ */
+#include "Tools/Viewer/Bdd/include/BaseV.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  morpheo::tools::viewer::bdd::Group BaseV::searchGroup(string v) {
+    int index=listgroup->indexOf(v,0);
+    if(index==-1)
+      return Group(NULL,0);
+    else
+      return groups->operator[](index);
+    
+  }  
+  
+  
+    
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_searchLimitParam.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_searchLimitParam.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_searchLimitParam.cpp	(revision 32)
@@ -0,0 +1,24 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/BaseV.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  morpheo::tools::viewer::bdd::LimitParam BaseV::searchLimitParam(string v) {
+    if(limitp->contains(v))
+      return limitp->value(v);
+    else
+      return LimitParam();
+  }  
+  
+  
+    
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_unalloc.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_unalloc.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/BaseV_unalloc.cpp	(revision 32)
@@ -10,5 +10,9 @@
 namespace bdd{     
 
-  BaseV::~BaseV(){}
+  BaseV::~BaseV(){
+    pos->clear();
+    limitp->clear();
+    groups->clear();
+  }
 
 };//end bdd
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Group_accessors.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Group_accessors.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Group_accessors.cpp	(revision 32)
@@ -0,0 +1,28 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/Group.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  string Group::getName()
+  {
+    return name;
+  }
+  int Group::getLevel()
+  {
+    return levelgroup;
+  }
+  QList<morpheo::tools::viewer::bdd::Param> Group::getParam()
+  {
+    return param->values();
+  }
+
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Group_addParam.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Group_addParam.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Group_addParam.cpp	(revision 32)
@@ -0,0 +1,24 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/Group.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  void Group::addParam(morpheo::tools::viewer::bdd::Param *p){
+    param->insert(p->getName(),*p);
+  }
+
+  void Group::addParam(string name,morpheo::tools::viewer::bdd::Param *p){
+    if(param->contains(name))
+    param->insert(name,*p);
+  }
+
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Group_alloc.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Group_alloc.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Group_alloc.cpp	(revision 32)
@@ -0,0 +1,32 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/Group.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  Group::Group(string n,int value)
+  {
+    name=n;
+    levelgroup=value;
+    param=new QMap<string,morpheo::tools::viewer::bdd::Param>();
+  }
+  
+  Group::Group(Group *g)
+  {
+    *this=g;
+  }
+
+  Group::Group()
+  {
+    
+  }
+  
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Group_unalloc.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Group_unalloc.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Group_unalloc.cpp	(revision 32)
@@ -0,0 +1,19 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/Group.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  Group::~Group()
+  {
+  }
+
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/LimitParam_accessors.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/LimitParam_accessors.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/LimitParam_accessors.cpp	(revision 32)
@@ -0,0 +1,47 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/LimitParam.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  string LimitParam::getName()
+  {
+    return name;
+  }
+  int LimitParam::getMin()
+  {
+    return min;
+  }
+  int LimitParam::getMax()
+  {
+    return max;
+  }
+  string LimitParam::getStep()
+  {
+    return step;
+  }
+  int LimitParam::getDefault()
+  {
+    return defaut;
+  }
+  int LimitParam::getLevel()
+  {
+    return level;
+  }
+  string LimitParam::getGroup()
+  {
+    return group;
+  }
+  void LimitParam::setGroup(string s)
+  {
+    group=s;
+  }
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/LimitParam_alloc.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/LimitParam_alloc.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/LimitParam_alloc.cpp	(revision 32)
@@ -0,0 +1,33 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/LimitParam.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  
+  LimitParam::LimitParam(string na,int mn,int mx,string sp,int de,int lvl)
+  {
+    name=na;
+    min=mn;
+    max=mx;
+    step=sp;
+    defaut=de;
+    level=lvl;
+  
+  }
+  LimitParam::LimitParam(){}
+
+  LimitParam::LimitParam(LimitParam *l){
+  *this=l;
+  }
+
+    
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/LimitParam_unalloc.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/LimitParam_unalloc.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/LimitParam_unalloc.cpp	(revision 32)
@@ -0,0 +1,22 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/LimitParam.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  LimitParam::~LimitParam(){
+  
+  }
+  
+  
+  
+    
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Param_accessors.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Param_accessors.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Param_accessors.cpp	(revision 32)
@@ -0,0 +1,27 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/Param.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  string Param::getName()
+  {
+    return name;
+  }
+  int Param::getValue()
+  {
+    return value;
+  }
+  string Param::getGroup()
+  {
+    return group;
+  }
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Param_alloc.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Param_alloc.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Param_alloc.cpp	(revision 32)
@@ -0,0 +1,27 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/Param.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  Param::Param(string n, int v, string g)
+  {
+    name=n;
+    value=v;
+    group=g;
+    
+  }
+  Param::Param(Param *p)
+  {
+    *this=p;
+  }
+
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Param_unalloc.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Param_unalloc.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Bdd/src/Param_unalloc.cpp	(revision 32)
@@ -0,0 +1,19 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Bdd/include/Param.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace bdd{     
+   
+  Param::~Param()
+  {
+  }
+
+};//end bdd
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/include/window.h
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/include/window.h	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/include/window.h	(revision 32)
@@ -40,5 +40,7 @@
 #include <qevent.h>
 #include <qfiledialog.h>
-
+#include <qscrollarea.h>
+#include <qcombobox.h>
+#include <qspinbox.h>
 
 #include "Tools/Viewer/Parser/include/parser.h"
@@ -72,8 +74,9 @@
   void _setParse(Parse *p);  //parse the base
   void _init_file();    //search component and port before drawing
+
  private slots:
     
   void _open(); //open a file
- void _open_error();
+  void _open_error();
 
   void _save(); //save a file
@@ -90,5 +93,5 @@
   void _defautZoom();
 
-  void _level();  
+  void _level();
   void _informations(); //show or hide informations window
   void _parameters(); //show or hide parameters window
@@ -98,10 +101,12 @@
 
   void _back();//return to the previous view
-  void _cancel_selection();
-  void _apply();
+  void _cancel_selection();//cancel the selection of a component
+  void _apply();//apply the parameters changes 
+  void currentIndexChanged(QString s);
+  void valueChanged(int i);
 
  protected :
-  void mousePressEvent (QMouseEvent *); //mouse handler when mouse pressed
-  void mouseMoveEvent (QMouseEvent *); //mouse handler in other case
+   void mousePressEvent (QMouseEvent *); //mouse handler when mouse pressed
+   void mouseMoveEvent (QMouseEvent *); //mouse handler in other case
  private :
   void wparameters(); // parameters window builder
@@ -110,7 +115,10 @@
   void repaint(); //repaint the panel with current parameters
   void drawPort(int x,int y,int pos,string dir); //draw the components ports
-  void write_name(string name); //write the name of the component clicked name in the informations window
+  void write_name(string type,string name); //write the name of the component clicked name in the informations window
   void write_comment(string comment);
   void write_type(string t);
+  void erase_line(QLabel *l1, QLabel *l2);//erase a line in the informations window
+  void erase_comment();//erase and hide the comment line in the informations window
+  void display_param();//display the parameters
 
   QList <Port> port_east; //ports lists
@@ -118,9 +126,11 @@
   QList <Port> port_north;
   QList <Port> port_south;
-  QList <Component> *compo;
-
-  QWidget *wparam;//windows widget (informations, parameters, open, save ...)
+  QList <Component> *compo;//component list
+  QList <Param> param;//parameters list
+  QList <Group> *group;//groups list
+
+  QWidget *wscroll;
+  QMainWindow *wparam;//windows widget (informations, parameters, quit, open)
   QWidget *winfo;
-  QWidget *ws;
   QWidget *wq;
   QWidget *wa;
@@ -130,4 +140,5 @@
   QBoxLayout *informations; //informations box
   QBoxLayout *parameters; //parameters box
+  QBoxLayout *pbox;
 
   Parse *parse; //the parser
@@ -139,5 +150,5 @@
   QPainter painter;
 
-  QStatusBar *status;
+  QStatusBar *status;//status bar 
 
   QLineEdit *file_name; //retrieve the name user wants to open from the open window
@@ -157,21 +168,20 @@
   int window_height; //main window size
   int window_width;
-  int margeX;//size of the marge
-  int margeY;
   int portX;//port size, position and size of components, used when drawing the architecture
   int portY;
-  int posX;
+  int posX;//used to retrieve the position and the size of a component
   int posY;
   int tailleX;
   int tailleY;
 
-  int cpt_level;
-  QString tab[50];
+  int cpt_level;//level in the architecture
+  QString tab[20];//save the father when user change the level
 
   QString father;//father name
   QString current;//name of the current architecture visible
 
+  QScrollArea *sc;
+
   bool save_as; 
-  bool first_save;
   bool info_open; //know if the informations window opened or not
   bool param_open; //know if the parameters window opened or not
@@ -187,6 +197,7 @@
   bool mess_open;//chargment message box opened or not
   bool component_clicked;//if user clicked on a component to modify its parameters
-
-
+  bool apply_display;//if the apply button is displayed
+  bool scroll_hide;
+  bool parameter_modify;
 };
       };
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_about_actions.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_about_actions.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_about_actions.cpp	(revision 32)
@@ -6,5 +6,5 @@
 using namespace morpheo::tools::viewer::graphics;
 
-
+/*about window constructor*/
 void Window::_about(){
   QMessageBox *mess = new QMessageBox(this);
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_drawAll.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_drawAll.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_drawAll.cpp	(revision 32)
@@ -13,10 +13,21 @@
   QString t;
  
+  
   if(paint){
+    /*draw the main component*/
     painter.begin(this);
     painter.setPen(Qt::blue);
     painter.drawRect(MARGEX,MARGEY,MARGEX+450,MARGEY+450);
+    
+    Entity *e = p.getEntity();
+    string s;
+    s.append(e->getName());
+    s.append(" : ");
+    s.append(e->getType());
+    painter.setPen(Qt::black);
+    painter.drawText(50,10,500,60,Qt::AlignCenter,QString::fromStdString(s));
+    painter.setPen(Qt::blue);
 
-    
+    /*draw the ports of the main component*/
     for(QList<Port>::iterator it=port_east.begin(); it!=port_east.end(); ++it){
       portX = it->get_x();
@@ -43,8 +54,9 @@
       portX = it->get_x() ;
       portY = it->get_y() ;
-      drawPort(portX + MARGEX,portY+MARGEY,SOUTH,it->getDirection());
+      drawPort(portX + MARGEX,portY+ MARGEY + 20 ,SOUTH,it->getDirection());
 
     }
     
+    /*draw the components inside the main component*/
     if(p.getArchitecture()!=NULL){
       compo = p.getComponent();
@@ -61,11 +73,11 @@
 	  schema=tp.getSchema();
 	  switch(schema){
-	  case 0:
+	  case 0://a basic element
 	    painter.drawRect(posX,posY,tailleX,tailleY);
 	    break;
-	  case 1:
+	  case 1://a combinatoire element
 	    painter.drawEllipse(posX,posY,tailleX,tailleY);
 	    break;  
-	  case 2:
+	  case 2://a FIFO
 	    painter.drawRect(posX,posY,tailleX,tailleY);
 	    painter.drawLine(posX+tailleX/4,posY+tailleY,posX+tailleX/4,posY);
@@ -73,5 +85,5 @@
 	    painter.drawLine(posX+3*tailleX/4,posY+tailleY,posX+3*tailleX/4,posY);
 	    break;
-	  case 3:
+	  case 3://a register
 	    painter.drawRect(posX,posY,tailleX,tailleY);
 	    painter.drawLine(posX,posY+tailleY,posX+tailleX/2,posY+tailleY/2);
@@ -83,6 +95,8 @@
 	if (componentName){
 	  QString compo_name = QString::fromStdString(it->getName());
-	  painter.drawText(posX , posY + tailleY/2,compo_name);
+	  painter.drawText(posX - compo_name.size()/2 , posY + tailleY/2,compo_name);
 	}
+
+	/*draw the ports of the inside components*/
 	Coord *co2=new Coord( co->get_hg_x() + tailleX/2, co->get_hg_y() + tailleY/2,tailleX/2,tailleY/2);
 
@@ -124,4 +138,5 @@
         QList<PortMap> *pm=it->getPortMap();
 	
+	/*draw the signals*/
 	for (QList<PortMap>::iterator it3=pm->begin();it3!=pm->end();++it3) 
 	  {
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_drawPort.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_drawPort.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_drawPort.cpp	(revision 32)
@@ -5,4 +5,5 @@
 using namespace morpheo::tools::viewer::graphics;
 
+/*draw the port in rectangular form*/
 void Window::drawPort(int x,int y,int pos,string dir){
     if(pos == NORTH){
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_file_actions.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_file_actions.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_file_actions.cpp	(revision 32)
@@ -9,10 +9,12 @@
 /*signals actions implementation*/
 
+/*open function*/
 void Window::_open(){
   QString current2;
   if(!file_open && is_save){//if no file open or if the file opened has been saved -> open other file, else -> ask for saving file
     current2 = QFileDialog::getOpenFileName(this,"", "./data");
+    this->setDisabled(true);
+    /*if a file has been opened*/
     if(current2!=""){
-      this->setDisabled(true);
       current_name = current2;
       if(parse->open_file( current_name.toStdString(),0)==-1)
@@ -54,10 +56,11 @@
 }
 
+/*initialize the database when a file has been opened*/
 void Window::_init_file(){
   is_save = true;
   base = parse->getBaseV();//parse the base and open the file
-  #ifdef DEBUG_ALL
+  //#ifdef DEBUG_ALL
   base->afficheBaseConsole();
-  #endif
+  //#endif
   cpt_level = 0;
   
@@ -75,8 +78,10 @@
   paint = true;
   repaint();
+  display_param();
   this->setDisabled(false);
   setMouseTracking(true);
 }
 
+/*if user entered a wrong file name*/
 void Window::_open_error(){
   QMessageBox *error = new QMessageBox(this);
@@ -84,18 +89,20 @@
   error->addButton("ok",QMessageBox::YesRole);
   error->show();  
+  this->setDisabled(false);
 }  
 
-
+/*save functions*/
 void Window::_save(){
   if(file_open){
     if (wa_open)
       wa->close();
-    if(save_as || first_save || (current_name==NULL)){//if "save as" or if it's the first time the user click on save (new file) -> save as
+    if(save_as){//if "save as" 
       current_name = QFileDialog::getSaveFileName(this,"","./data");
       save_as = false;
-      first_save = false;
+      parse->save_file(current_name.toStdString(),0);
     }
     else {
-      status->showMessage("file " + current_name + " saved",900);
+      parse->save_file(current.toStdString(),0);
+      status->showMessage("file " + current + " saved",900);
       is_save = true;//file saved
     }
@@ -133,18 +140,20 @@
 }
 
+/*close function*/
 void Window::_close(){
   paint = false;
+  repaint();
   parse->closeBaseV();
-  lname->setText("");
-  ln->setText("");
-  lt->setText("");
-  write_name("");
-  write_comment("");
-  comment->hide();
+  erase_line(ln,lname);
+  erase_line(lt,ltype);
+  erase_comment();
   winfo->show();
+  wscroll->hide();
+  scroll_hide = true;
+  wparam->show();
   file_open = false;
-  repaint();
 }
 
+/*quit functions*/
 void Window::_quit(){
   //if the file is not saved -> ask to the user if he wants to save it. If yes -> save, else quit.
@@ -171,5 +180,5 @@
     _quit2();
 }
-  
+/*close all the windows opened*/
 void Window::_quit2(){
   /*test if there are windows (other than the main window) opened*/
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_informations_window.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_informations_window.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_informations_window.cpp	(revision 32)
@@ -7,4 +7,5 @@
 using namespace morpheo::tools::viewer::graphics;
 
+/*informations window constructor*/
 void Window::winformations()
 {
@@ -12,7 +13,9 @@
   informations = new QBoxLayout(QBoxLayout::TopToBottom,0);
   winfo->setWindowTitle("informations");
-  winfo->setFixedSize(350,292);
+  winfo->setFixedSize(370,180);
   winfo->move(628,50);
+  
 
+  /*name line*/
   QBoxLayout *bname = new QBoxLayout(QBoxLayout::LeftToRight,0);
   ln = new QLabel();
@@ -23,4 +26,5 @@
   bname->addWidget(lname);
 
+  /*type line*/
   QBoxLayout *btype = new QBoxLayout(QBoxLayout::LeftToRight,0);
   lt = new QLabel();
@@ -30,9 +34,11 @@
   btype->addWidget(lt);
   btype->addWidget(ltype);
-
+  
+  /*comment line*/
   comment = new QLineEdit();
   comment->setText("");
   comment->setReadOnly(true);
 
+  /*buttons*/
   QPushButton *noselect = new QPushButton("cancel selection",wparam);
   QPushButton *back = new QPushButton("back",wparam);
@@ -50,15 +56,30 @@
 }
 
+/*write the comment of the componenet selected*/
 void Window::write_comment(string cm){
   QString c = QString::fromStdString(cm);
   comment->setText(c);
+  comment->setCursorPosition(1);
   comment->show();
 }
 
-void Window::write_name(string name){
-  QString n = QString::fromStdString(name);
-  lname->setText(n);
+void Window::erase_comment(){
+  comment->setText("");
+  comment->hide();
+}
+/*write the name of the component selected*/
+void Window::write_name(string type,string name){
+  QString n = QString::fromStdString(type);
+  ln->setText(n);
+  QString n2 = QString::fromStdString(name);
+  lname->setText(n2);
 }
 
+void Window::erase_line(QLabel *l1, QLabel *l2){
+  l1->setText("");
+  l2->setText("");
+}
+
+/*write the type of the component selected*/
 void Window::write_type(string type){
   lt->setText("type");
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_main.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_main.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_main.cpp	(revision 32)
@@ -16,4 +16,5 @@
 int main (int argc, char* argv[])
 {
+  /*if to many arguments*/
   if(argc>2){
     cout << "error : argument must be a file name or nothing" << endl;
@@ -22,10 +23,11 @@
   }
 
+  /*construct the base*/
   Parse *par = new Parse();
   
-  
+  /*create the window application*/
    QApplication *a=new QApplication (argc,argv);  
    
-  if(argc == 2){
+   if(argc == 2){
      if(par->open_file(argv[1],0)==-1){
 	cout << "file doesn't exist or is not a valid format" << endl;  
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_main_window.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_main_window.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_main_window.cpp	(revision 32)
@@ -16,5 +16,8 @@
   component_clicked = false;
   cpt_level=0;
-  
+  apply_display = false; 
+  scroll_hide = false;
+  parameter_modify = false; 
+
   /*menu bar*/
   QMenuBar *menu_bar = new QMenuBar(this);
@@ -122,5 +125,5 @@
 
   /*main window title*/
-  this->setWindowTitle("Viewer");
+  this->setWindowTitle("Morpheo Viewer");
    
   /*parameters window creation*/
@@ -145,5 +148,4 @@
   /*file unsaved at init*/
   save_as = false;
-  first_save = false; //first_save = true for a new file
   
   current_name = name;
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_mouseEvent.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_mouseEvent.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_mouseEvent.cpp	(revision 32)
@@ -6,4 +6,5 @@
 using namespace morpheo::tools::viewer::graphics;
 
+/*mouse press event handler*/
 void Window::mousePressEvent (QMouseEvent *e){
   if(paint && (p.getArchitecture() != NULL)){
@@ -16,9 +17,10 @@
     mouseY = mouseEvent->y();
     
-    bool bc = false;
+    bool bc,b3 = false;
     int cx,cy,tx,ty;
-    string cc,nc,type;
+    string s2,cc,nc,type,comm;
     bool found = false;
 
+    /*search the component under the mouse focus*/
     for(QList<Component>::iterator it=compo->begin();it!=compo->end();++it){
       Coord *co = it->get_Position();
@@ -28,4 +30,5 @@
       int tailley = co->get_size_y();
       QString t=QString::fromStdString(it->getType()).toLower();
+      /*go to the next level if comoponent doubleclicked*/
       if(e->type() == QMouseEvent::MouseButtonDblClick && e->button() == Qt::LeftButton){
 	
@@ -66,15 +69,12 @@
 	paint = true;
 	repaint();
-	write_name("");
-	write_comment("");
-	write_type("");
-	ln->setText("");
-	lt->setText("");
-	comment->hide();
+     	erase_line(lt,ltype);
+	erase_line(ln,lname);
+	erase_comment();
 	found = false;
 	this->setDisabled(false);
 	component_clicked = false;
       }
-      
+      /*search and display the informations of the component clicked*/
       if(e->type() == QMouseEvent::MouseButtonPress && e->button() == Qt::LeftButton){
 	if(mouseX >= px + MARGEX  && mouseY >= py +MARGEY && mouseX <= px+taillex + MARGEX  && mouseY <= py+tailley + MARGEY) {
@@ -88,20 +88,68 @@
 	  BaseP tp = base->get_BasePos(t.toStdString());
 	  if(&tp != NULL)
-		cc=tp.getComment();
+	    cc=tp.getComment();
 	  component_clicked = true;
+	}
+	
+	for(QList<Port>::iterator it=port_east.begin(); it!=port_east.end(); ++it){
+	  portX = it->get_x();
+	  portY = it->get_y();
+	  if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 +MARGEX && mouseY <= portY + 15 + MARGEY){
+	    b3 = true;
+	    s2 = it->getName();
+	    comm = it->getComment();
+	    type = it->getDirection();
+	  }
+	} 
+   
+	for(QList<Port>::iterator it=port_west.begin(); it!=port_west.end(); ++it){
+	  portX = it->get_x() ;
+	  portY = it->get_y() ;
+	  if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 + MARGEX && mouseY <= portY + 15 + MARGEY){
+	    b3 = true;
+	    s2 = it->getName();
+	    comm = it->getComment();
+	    type = it->getDirection();
+	  }
+	}
+   
+	for(QList<Port>::iterator it=port_north.begin(); it!=port_north.end(); ++it){
+	  portX = it->get_x() ;
+	  portY = it->get_y() ;
+	  if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 +MARGEY && mouseX <= portX + 15 + MARGEX && mouseY <= portY + 15 +MARGEY){
+	    b3 = true;
+	    s2 = it->getName();
+	    type = it->getDirection();
+	    comm = it->getComment();
+	  }
+	}
+   
+	for(QList<Port>::iterator it=port_south.begin(); it!=port_south.end(); ++it){
+	  portX = it->get_x() ;
+	  portY = it->get_y() ;
+	  if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 +MARGEX && mouseY <= portY + 15 + MARGEY){
+	    b3 = true;
+	    s2 = it->getName();
+	    comm = it->getComment();
+	    type = it->getDirection();
+	  }
 	}
       }
     }
     if(bc){
-      write_name(nc);
+      write_name("component",nc);
       write_type(type);
-      ln->setText("component");
-      lt->setText("type");
       write_comment(cc);
+    }
+    if(b3){
+      write_name("signal",s2);
+      write_type(type);
+      write_comment(comm);
+      component_clicked = true;
     }
   }
 }
 
-
+/*mouse move event handler*/
 void Window::mouseMoveEvent(QMouseEvent *e){
   bool b  = false;
@@ -110,130 +158,139 @@
   int px,py,taillex,tailley,ppx,ppy;
   string s,s2,c,type;
-
-   if(paint && (p.getArchitecture() != NULL) && !component_clicked){
-
-    compo = p.getComponent();
-    
-    QMouseEvent *mouseEvent = (QMouseEvent *) e;
-
-    mouseX = mouseEvent->x();
-    mouseY = mouseEvent->y();
-    
-    for(QList<Component>::iterator it=compo->begin();it!=compo->end();++it){
-      Coord *co = it->get_Position();
-      px = co->get_hg_x();
-      py = co->get_hg_y();
-      taillex = co->get_size_x();
-      tailley = co->get_size_y();
-      QString t=QString::fromStdString(it->getType()).toLower();
-      QList<PortMap> *pm=it->getPortMap();
-
-      if(e->type() == QMouseEvent::MouseMove){
-	if(mouseX >= px + MARGEX  && mouseY >= py +MARGEY && mouseX <= px+taillex + MARGEX  && mouseY <= py+tailley + MARGEY) {
-	  b = true;
-	  s = it->getName();
-	  type = it->getType();
-	  BaseP tp=base->get_BasePos(t.toStdString());
-	  if(&tp!=NULL)
-	    c=tp.getComment();
-	  ppx = px;
-	  ppy = py;
-	  break;
-	}
-	else{
-	  for (QList<PortMap>::iterator it3=pm->begin();it3!=pm->end();++it3) {
-	  	Signal *sig=base->getSignal(&p,it->getName(),new PortMap(*it3));
-	  	if(mouseX >= sig->get_src_x() - 15  + MARGEX  && mouseY >= sig->get_src_y() - 15 + MARGEY && mouseX <= sig->get_src_x() + 15  + MARGEX  && mouseY <= sig->get_src_y() + 15 +MARGEY){
-		  b2 = true;
-	  	  s = it3->getName();
-		  break;
-	  	}
-	  }
-	}   
-      }
-    }
-    
-    if(b){
-      write_name(s);
-      write_type(type);
-      ln->setText("component");
-      write_comment(c);
-      lt->setText("type");
-      b3 = false;
-      b2 = false;
-    }
-    
-    if(b2){
-      write_name(s);
-      write_type("");
-      lt->setText("");
-      write_comment("");
-      ln->setText("signal");
-      comment->hide();
-      b3 = false;
-      b = false;
-    }
-
-    if(!b && !b2){
-      write_name("");
-      write_type("");
-      ln->setText("");
-      lt->setText("");
-      write_comment("");
-      comment->hide();
-    }
+  string comm;
+
+   if(paint && !component_clicked){
+     if(p.getArchitecture() != NULL){
+
+       compo = p.getComponent();
+       
+       QMouseEvent *mouseEvent = (QMouseEvent *) e;
+       
+       mouseX = mouseEvent->x();
+       mouseY = mouseEvent->y();
+       
+       /*display the component under the mouse focus*/
+       for(QList<Component>::iterator it=compo->begin();it!=compo->end();++it){
+	 Coord *co = it->get_Position();
+	 px = co->get_hg_x();
+	 py = co->get_hg_y();
+	 taillex = co->get_size_x();
+	 tailley = co->get_size_y();
+	 QString t=QString::fromStdString(it->getType()).toLower();
+	 QList<PortMap> *pm=it->getPortMap();
+	 
+	 if(e->type() == QMouseEvent::MouseMove){
+	   if(mouseX >= px + MARGEX  && mouseY >= py +MARGEY && mouseX <= px+taillex + MARGEX  && mouseY <= py+tailley + MARGEY) {
+	     b = true;
+	     s = it->getName();
+	     type = it->getType();
+	     BaseP tp=base->get_BasePos(t.toStdString());
+	     if(&tp!=NULL)
+	       c=tp.getComment();
+	     ppx = px;
+	     ppy = py;
+	     break;
+	   }
+	   else{
+	     for (QList<PortMap>::iterator it3=pm->begin();it3!=pm->end();++it3) {
+	       Signal *sig=base->getSignal(&p,it->getName(),new PortMap(*it3));
+	       if(mouseX >= sig->get_src_x() - 15  + MARGEX  && mouseY >= sig->get_src_y() - 15 + MARGEY && mouseX <= sig->get_src_x() + 15  + MARGEX  && mouseY <= sig->get_src_y() + 15 +MARGEY){
+		 b2 = true;
+		 s = it3->getName();
+		 break;
+	       }
+	     }
+	   }   
+	 }
+       }
+       
+       if(b){
+	 write_name("component",s);
+	 write_type(type);
+	 write_comment(c);
+	 b3 = false;
+	 b2 = false;
+       }
+     
+       if(b2){
+	 write_name("signal",s);
+	 erase_line(lt,ltype);
+	 erase_comment();
+	 b3 = false;
+	 b = false;
+       }
+     
+       if(!b && !b2){
+	 erase_line(lt,ltype);
+	 erase_line(ln,lname);
+	 erase_comment();
+       }
+     }
+   
+     p=base->get_BasePos(current.toStdString());
+     Entity *ent = p.getEntity();
+     Coord *c = new Coord(250,250,250,250);
+     port_east = ent->getPortEast(c);
+     port_west = ent->getPortWest(c);
+     port_north = ent->getPortNorth(c);
+     port_south = ent->getPortSouth(c);
+
+     /*display the signal under the mouse focus*/
+     for(QList<Port>::iterator it=port_east.begin(); it!=port_east.end(); ++it){
+       portX = it->get_x();
+       portY = it->get_y();
+       if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 +MARGEX && mouseY <= portY + 15 + MARGEY){
+	 b3 = true;
+	 s2 = it->getName();
+	 comm = it->getComment();
+	 type = it->getDirection();
+       }
+     } 
+   
+     for(QList<Port>::iterator it=port_west.begin(); it!=port_west.end(); ++it){
+       portX = it->get_x() ;
+       portY = it->get_y() ;
+       if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 + MARGEX && mouseY <= portY + 15 + MARGEY){
+	 b3 = true;
+	 s2 = it->getName();
+	 comm = it->getComment();
+	 type = it->getDirection();
+       }
+     }
+   
+     for(QList<Port>::iterator it=port_north.begin(); it!=port_north.end(); ++it){
+       portX = it->get_x() ;
+       portY = it->get_y() ;
+       if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 +MARGEY && mouseX <= portX + 15 + MARGEX && mouseY <= portY + 15 +MARGEY){
+	 b3 = true;
+	 s2 = it->getName();
+	 comm = it->getComment();
+	 type = it->getDirection();
+       }
+     }
+   
+     for(QList<Port>::iterator it=port_south.begin(); it!=port_south.end(); ++it){
+       portX = it->get_x() ;
+       portY = it->get_y() ;
+       if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 +MARGEX && mouseY <= portY + 15 + MARGEY){
+	 b3 = true;
+	 s2 = it->getName();
+	 comm = it->getComment();
+	 type = it->getDirection();
+       }
+     }
+     if(b3){
+       b = false;
+       erase_line(ln,lname);
+       write_type(type);
+       erase_comment();
+       write_comment(comm);
+       write_name("signal",s2);
+     }
    }
-  
-  
-   for(QList<Port>::iterator it=port_east.begin(); it!=port_east.end(); ++it){
-      portX = it->get_x();
-      portY = it->get_y();
-      if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 +MARGEX && mouseY <= portY + 15 + MARGEY){
-	b3 = true;
-	s2 = it->getName();
-      }
-   } 
-   
-   for(QList<Port>::iterator it=port_west.begin(); it!=port_west.end(); ++it){
-     portX = it->get_x() ;
-     portY = it->get_y() ;
-     if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 + MARGEX && mouseY <= portY + 15 + MARGEY){
-       b3 = true;
-       s2 = it->getName();
-     }
-   }
-   
-   for(QList<Port>::iterator it=port_north.begin(); it!=port_north.end(); ++it){
-     portX = it->get_x() ;
-     portY = it->get_y() ;
-     if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 +MARGEY && mouseX <= portX + 15 + MARGEX && mouseY <= portY + 15 +MARGEY){
-	b3 = true;
-	s2 = it->getName();
-     }
-   }
-   
-    for(QList<Port>::iterator it=port_south.begin(); it!=port_south.end(); ++it){
-      portX = it->get_x() ;
-      portY = it->get_y() ;
-      if(mouseX >= portX - 15 + MARGEX && mouseY >= portY - 15 + MARGEY && mouseX <= portX + 15 +MARGEX && mouseY <= portY + 15 + MARGEY){
-	b3 = true;
-	s2 = it->getName();
-      }
-    }
-    if(b3){
-      b = false;
-      write_name("");
-      write_name(s2);
-      write_type(type);
-      ln->setText("signal");
-      lt->setText("");
-      write_comment("");
-      comment->hide();
-    }
 }
 
 
-   
- 
+/*return to the previous level if back button has been clicked*/
 void Window::_back(){
   if(cpt_level==0){
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_parameters_window.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_parameters_window.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_parameters_window.cpp	(revision 32)
@@ -7,24 +7,279 @@
 using namespace morpheo::tools::viewer::graphics;
 
+/*parameters window constructor*/
 void Window::wparameters()
 {
-  wparam = new QWidget();
+  wparam = new QMainWindow();
+  //  wparam = new QWidget();
   parameters = new QBoxLayout(QBoxLayout::TopToBottom,0);
   wparam->setWindowTitle("parameters");
-  wparam->setFixedSize(350,300);
-  wparam->move(628,370);
-
-  
-  QPushButton *apply = new QPushButton("apply",wparam);
-  connect(apply,SIGNAL(clicked()),this,SLOT(_apply()));
-  
-  parameters->addWidget(apply);
-
+  wparam->setFixedSize(370,415);
+  wparam->move(628,255);
   wparam->setLayout(parameters);
+  sc = new QScrollArea(wparam);
+  wscroll = new QWidget();
+  sc->setWidgetResizable(false);
+  sc->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+  sc->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+  sc->setGeometry(2,2,365,410);
   wparam->show();
 }
 
-
+/*display the parameters*/
+void Window::display_param(){
+
+  pbox = new QBoxLayout(QBoxLayout::TopToBottom,0);
+
+  string scpu;
+  string lgroup;
+  string sparam;
+  string ecart;
+  
+  if(!apply_display){
+    QPushButton *apply = new QPushButton("apply",wparam);
+    connect(apply,SIGNAL(clicked()),this,SLOT(_apply()));
+    apply->setFixedSize(310,25); 
+    pbox->addWidget(apply);
+    apply_display = true;
+  }
+  
+  /*top level name display*/
+  QLabel *cpu = new QLabel();
+  scpu.append("CPU : ");
+  scpu.append(parse->getTopLevelName());
+  scpu.append(" \n");
+  cpu ->setText(QString::fromStdString(scpu));
+  cpu->setFixedSize(300,50);
+  pbox->addWidget(cpu);
+  
+   /*architecture in tree view display*/
+   group = base->getGroups();
+   for(QList<Group>::iterator it=group->begin();it!=group->end();++it){
+   QLabel *lg = new QLabel();
+   lgroup = "";
+   lg->setFixedSize(200,30);
+   ecart = "";
+   if(it->getLevel() == 1)
+     ecart.append("     ");
+   if(it->getLevel() == 2)
+     ecart.append("        ");
+   if(it->getLevel() == 3)
+     ecart.append("          ");
+   if(it->getLevel() == 4)
+     ecart.append("            ");
+    if(it->getLevel() == 5)
+      ecart.append("              ");
+    lgroup.append(ecart);
+    lgroup.append("<");
+    lgroup.append(it->getName());
+    lgroup.append(">");
+    lg->setText(QString::fromStdString(lgroup));
+    pbox->addWidget(lg);
+    param = it->getParam();
+    for(QList<Param>::iterator it2=param.begin();it2!=param.end();++it2){
+
+      if(it2->getName() == "id"){
+	QBoxLayout *b = new QBoxLayout(QBoxLayout::LeftToRight,0);
+	QLabel *l = new QLabel();
+	QString st2 = "   ";
+	QString st;
+	st2.append(QString::fromStdString(ecart));
+	st2.append("nb_");
+	st2.append(QString::fromStdString(it->getName()));
+
+	st.append("nb_");
+	st.append(QString::fromStdString(it->getName()));
+	LimitParam lp = base->searchLimitParam(st.toStdString());
+
+	QLabel *lab = new QLabel();
+	QString s = "   ";
+	s.append(QString::fromStdString(ecart));
+	s.append(QString::fromStdString(it2->getName()));
+	s.append(" : ");
+	stringstream out;
+	string str;
+	out << it2->getValue();
+	str = out.str();
+	s.append(QString::fromStdString(str));
+	lab->setText(s);
+	pbox->addWidget(lab);
+	l->setText(st2);
+	QSpinBox *spin = new QSpinBox();
+	int min = lp.getMin();
+	int max = lp.getMax();
+	QString step = QString::fromStdString(lp.getStep());
+	
+	spin->setValue(base->nbGroup(it->getName()));
+	
+	if(step.contains("+")){
+	  step = step.right(step.length()-1);
+	  int pas = step.toInt(0,10);
+	  spin->setMinimum(min);
+	  spin->setMaximum(max);
+	  spin->setSingleStep(pas);
+	}
+      
+	if(step.contains("*")){
+	  step = step.right(step.length()-1);
+	  int pas = step.toInt(0,10);
+	  spin->setMinimum(min);
+	  spin->setMaximum(max);
+	  spin->setSingleStep(pas);
+	}
+	spin->setFixedSize(60,30);
+
+	QString name_obj = (QString::fromStdString(it->getName()));
+	spin->setObjectName(name_obj);
+
+	b->addWidget(l);
+	b->addWidget(spin);
+	pbox->addLayout(b);
+
+	connect(spin,SIGNAL(valueChanged(int)),this,SLOT(valueChanged(int)));
+
+      }
+      else{
+	QBoxLayout *b = new QBoxLayout(QBoxLayout::LeftToRight,0);
+	QLabel *l = new QLabel();
+	sparam ="   ";
+	sparam.append(ecart);
+	sparam.append(it2->getName());
+	sparam.append(" : ");
+	stringstream out;
+	string str;
+	out << it2->getValue();
+	str = out.str();
+	sparam.append(str);
+	l->setText(QString::fromStdString(sparam));
+	l->setFixedSize(200,30);
+	parameters->addWidget(l);
+	QComboBox *cb = new QComboBox();
+	LimitParam lp = base->searchLimitParam(it2->getName());
+	int min = lp.getMin();
+	int max = lp.getMax();
+	QString step = QString::fromStdString(lp.getStep());
+	int value = min;
+	if(step.contains("+")){
+	  step = step.right(step.length()-1);
+	  int pas = step.toInt(0,10);
+	  while(value!=max+pas){
+	    stringstream out2;
+	    string str2;
+	    out2 << value;
+	    str2 = out2.str();
+	    cb->addItem(QString::fromStdString(str2));
+	    value = value+pas;
+	  }
+	}
+	if(step.contains("*")){
+	  step = step.right(step.length()-1);
+	  int pas = step.toInt(0,10);
+	  while(value!=max*pas){
+	    stringstream out2;
+	    string str2;
+	    out2 << value;
+	    str2 = out2.str();
+	    cb->addItem(QString::fromStdString(str2));
+	    value = value*pas;
+	  }
+	}
+	stringstream out3;
+	string str3;
+	out3 << it2->getValue();
+	str3 = out3.str();
+	int index = cb->findText(QString::fromStdString(str3));
+	cb->setCurrentIndex(index);
+	cb->setFixedSize(60,30);
+	//QPushButton *pb = new QPushButton();
+	//pb->setText("change");
+	QString name_obj = (QString::fromStdString(it->getName()));
+	name_obj.append(":");
+	name_obj.append( QString::fromStdString(it2->getName()));
+	name_obj.append(":");
+	name_obj.append(cb->currentText());
+	cb->setObjectName(name_obj);
+	//cb->setFixedSize(60,30);
+	QString new_value = cb->currentText();
+	connect(cb,SIGNAL(currentIndexChanged(QString)),this,SLOT(currentIndexChanged(QString)));
+	//connect(pb,SIGNAL(clicked()),this,SLOT(_change_value()));
+	b->addWidget(l);
+	b->addWidget(cb);
+	//b->addWidget(pb);
+	pbox->addLayout(b);
+      }
+    }
+   }
+  
+  wscroll->setLayout(pbox);
+  parameters->addWidget(wscroll);
+  sc->setWidget(wscroll);
+  if(scroll_hide){
+    scroll_hide = false;
+    wscroll->show();
+  }
+}
+
+void Window::currentIndexChanged(QString value2){
+  //cout << QObject::sender()->objectName().toStdString() << endl;
+  
+  QString obj = QObject::sender()->objectName();
+  
+  int i,j,v;
+  QString param,group,value;
+  i = obj.indexOf(":");
+  group = obj.left(i);
+  //cout << "group : " << group.toStdString() << endl;
+  j = obj.indexOf(":",i+1);
+  value = obj.right(obj.size() - j - 1);
+  v = value2.toInt(0,10);
+  cout << "value : " << v << endl; 
+  param = obj.section(":",1,1);
+  //cout << "param : " << param.toStdString() << endl;
+
+  base->modifyValue(group.toStdString(),param.toStdString(),v);
+  wparam->close();
+  apply_display = false;
+  wparameters();
+  display_param();
+  parameter_modify = true;
+}
+
+
+void Window::valueChanged(int i){
+
+  //cout << QObject::sender()->objectName().toStdString() << endl;
+
+  QString obj = QObject::sender()->objectName();
+  int v,j;
+  //cout << "name : " << obj.toStdString() << endl;
+  v = i;
+  //cout << "value : " << v << endl; 
+  
+  j = base->nbGroup(obj.toStdString());
+  v = v - j;
+  cout << "value : " << v << " " << j<< endl; 
+  if(base->modifyGroup(obj.toStdString(),v)==-1){
+    cout << "error" << endl;
+    exit(1);
+  }
+  wparam->close();
+  apply_display = false;
+  wparameters();
+  parameter_modify = true;
+  display_param();
+  //  base->afficheParamConsole();
+}
+
+/*apply the parameters changes*/
 void Window::_apply(){
-  cout << "apply\n";
-}
+  if(!parameter_modify){
+    QMessageBox *m = new QMessageBox(wparam);
+    m->setText("no parameter changed");
+    m->addButton("ok",QMessageBox::YesRole);
+    m->show();
+  }
+  else{
+    parameter_modify = false;
+    cout << "apply\n";
+  }
+}
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_tools_actions.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_tools_actions.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_tools_actions.cpp	(revision 32)
@@ -6,4 +6,5 @@
 using namespace morpheo::tools::viewer::graphics;
 
+/*zoom functions*/
 void Window::_zoomIn(){
   cout << "zoom in" << endl;
@@ -22,4 +23,5 @@
 }
 
+/*open or close the informations window*/
 void Window::_informations(){
   if(!info_open){//if the informations window is not open, open it,else close it
@@ -33,8 +35,13 @@
 }
 
+/*open or close the parameters window*/
 void Window::_parameters(){//if the parameteres  window is not open, open it,else close it
   if(!param_open){
     this->wparameters();
     param_open = true;
+    if(info_open){
+      apply_display = false;
+      display_param();
+    }
   }
   else{ 
@@ -44,4 +51,5 @@
 }
 
+/*display or hide the components name*/
 void Window::_component_name(){
 
@@ -54,4 +62,5 @@
 }
 
+/*display or hide the signals name*/
 void Window::_signal_name(){
 
Index: unk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_window_actions.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Graphics/src/Graphics_window_actions.cpp	(revision 31)
+++ 	(revision )
@@ -1,249 +1,0 @@
-#include "window.h"
-
-using namespace std;
-using namespace morpheo::tools::viewer::parser;
-using namespace morpheo::tools::viewer::bdd;
-using namespace morpheo::tools::viewer::graphics;
-
-
-/*signals actions implementation*/
-
-void Window::_open(){
-  //if no file open or if the file opened has been saved -> open other file, else -> ask for saving file
-  if(!file_open || is_save){
-    wo = new QWidget();
-    wo_open = true; //the "open" window is open
-    if(wa_open)
-      wa->close();
-    QBoxLayout *open_box = new QBoxLayout(QBoxLayout::TopToBottom,0);
-    wo->setWindowTitle("open : file name");
-    wo->setFixedSize(500,500);
-    wo->move(50,100);
-    QDirModel *dir = new QDirModel();
-    QTreeView *tree = new QTreeView(wo);
-    tree->resize(400,400);
-    tree->setModel(dir);
-    tree->setRootIndex(dir->index("./data/"));
-    file_name = new QLineEdit(wo);
-    file_name->setText("data/");
-    QPushButton *ok_open = new QPushButton("ok",wo);
-    connect(ok_open,SIGNAL(clicked()),this,SLOT(_open_end()));
-    open_box->addWidget(tree);
-    open_box->addWidget(file_name);
-    open_box->addWidget(ok_open);
-    wo->setLayout(open_box);
-    wo->show();
-  }
-  else{
-    wa_open = true;
-    file_open = false;
-    wa = new QWidget();
-    QBoxLayout *other_box = new QBoxLayout(QBoxLayout::LeftToRight,0);
-    wa->setFixedSize(500,60);
-    wa->move(50,100);
-    QLabel *label = new QLabel("do you want to save this file?");
-    QPushButton *yes_save = new QPushButton("yes",wa);
-    QPushButton *no_save = new QPushButton("no",wa);
-    if(current_name!=NULL)
-      connect(yes_save,SIGNAL(clicked()),this,SLOT(_save()));
-    else 
-      connect(yes_save,SIGNAL(clicked()),this,SLOT(_saveAs()));
-    connect(no_save,SIGNAL(clicked()),this,SLOT(_open()));
-    other_box->addWidget(label);
-    other_box->addWidget(yes_save);
-    other_box->addWidget(no_save);
-    wa->setLayout(other_box);
-    wa->show();
-  }
-}
-
-
-void Window::_open_end(){
-  current_name=file_name->text();
-  wo->close();
-  wo_open = false;//the "open" window is now closed
-  if(!is_parse){
-    parse = new Parse();
-    is_parse=true;
-  }
-  if(parse->open_file( current_name.toStdString())==-1)
-    _open_error();
-  else{
-  paint = false;
-  repaint();
-  _init_file();
-  }
-}
-
-void Window::_init_file(){
-  is_save = true;
-  base = parse->getBaseV();//parse the base and open the file
-  base->afficheBaseConsole();
-  file_open = true;
-  QList <BaseP> *liste_compo = base->getBaseP();
-  p = liste_compo->at(0);
-  entity = p.getEntity();
-  c = new Coord(250,250,250,250);
-  port_east = entity->getPortEast(c);
-  port_west = entity->getPortWest(c);
-  port_north = entity->getPortNorth(c);
-  port_south = entity->getPortSouth(c);
-  paint = true;
-  repaint();
-}
-
-void Window::_open_error(){
-  QMessageBox *error = new QMessageBox(this);
-  error->setText("error : file doesn't exist or is not a valid format");
-  error->addButton("ok",QMessageBox::YesRole);
-  error->show();  
-}  
-
-
-void Window::_save(){
-  if (wa_open)
-    wa->close();
-  if(save_as || first_save || (current_name==NULL)){//if "save as" or if it's the first time the user click on save (new file) -> save as
-    ws = new QWidget();
-    ws_open = true;//the "save" window is open
-    QBoxLayout *save_box = new QBoxLayout(QBoxLayout::LeftToRight,0);
-    ws->setWindowTitle("save : file name");
-    ws->setFixedSize(300,60);
-    ws->move(50,100);
-    file_name = new QLineEdit(ws);
-    QPushButton *ok_save = new QPushButton("ok",ws);
-    connect(ok_save,SIGNAL(clicked()),this,SLOT(_saveAsOk()));
-    save_box->addWidget(file_name);
-    save_box->addWidget(ok_save);
-    ws->setLayout(save_box);
-    ws->show();
-    save_as = false;
-    first_save = false;
-  }
-  else {
-    status->showMessage("file " + current_name + " saved",900);
-    is_save = true;//file saved
-  }
-  if(wa_open){
-    wa_open = false;
-    _open();
-  }
-}
-
-void Window::_saveAs(){
-  if (wq_open){//if "quit" window is open, close it
-    wq->close();
-    wq_open = false;
-  }
-  save_as = true;
-  _save();
-}
-
-void Window::_saveAsOk(){
-  current_name = file_name->text();
-  ws->close();//close the "save" window
-  ws_open = false;
-  is_save = true;
-  status->showMessage("file " + current_name + " saved",900);
-  if(wa_open){
-    wa_open = false;
-    _open();
-  }
-  if(quit_demand)//if the user clicked on "quit" (but saved the file just before) -> quit the application
-    _quit2();
-}
-
-void Window::_close(){
-  paint = false;
-  repaint();
-}
-
-void Window::_quit(){
-  //if the file is not saved -> ask to the user if he wants to save it. If yes -> save, else quit.
-  if(file_open && !is_save){
-    wq_open = true;
-    quit_demand = true;
-    wq = new QWidget();
-    QBoxLayout *quit_box = new QBoxLayout(QBoxLayout::LeftToRight,0);
-    wq->setWindowTitle("save : file name");
-    wq->setFixedSize(500,60);
-    wq->move(50,100);
-    QLabel *label = new QLabel("do you want to save this file?");
-    QPushButton *yes_save = new QPushButton("yes",wq);
-    QPushButton *no_save = new QPushButton("no",wq);
-    connect(yes_save,SIGNAL(clicked()),this,SLOT(_saveAs()));
-    connect(no_save,SIGNAL(clicked()),this,SLOT(_quit2()));
-    quit_box->addWidget(label);
-    quit_box->addWidget(yes_save);
-    quit_box->addWidget(no_save);
-    wq->setLayout(quit_box);
-    wq->show();
-  }
-  else
-    _quit2();
-}
-  
-void Window::_quit2(){
-  /*test if there are windows (other than the main window) opened*/
-
-  if(wq_open)
-    wq->close();
-  if(wo_open)
-    wo->close();
-  if(ws_open)
-    ws->close();
-  if(wa_open)
-    wa->close();
-  if(param_open)
-    wparam->close();
-  if(info_open)
-    winfo->close();
-  close();
-}
-
-void Window::_zoomIn(){
-  cout << "zoom in" << endl;
-}
-
-void Window::_zoomOut(){
-  cout << "zoom out" << endl;
-}
-
-void Window::_defautZoom(){
-  cout << "defaut zoom" << endl;
-}
-
-void Window::_level(){
-  cout << "level" <<endl;
-}
-
-void Window::_informations(){
-  if(!info_open){//if the informations window is not open, open it,else close it
-    this->winformations();
-    info_open = true;
-  }
-  else{ 
-    winfo->close();
-    info_open = false;
-  }
-}
-
-void Window::_parameters(){//if the parameteres  window is not open, open it,else close it
-  if(!param_open){
-    this->wparameters();
-    param_open = true;
-  }
-  else{ 
-    wparam->close();
-    param_open = false;
-  }
-}
-
-void Window::_about(){
-  QMessageBox *mess = new QMessageBox(this);
-  mess->setText("Viewer beta 1.0\n\nmade by : \nChou Philippe\nLafaye Michaël\nRosière Mathieu\n\nLip6 - 2007");
-  mess->addButton("ok",QMessageBox::YesRole);
-  mess->show();  
-}
-
-
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Makefile
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Makefile	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Makefile	(revision 32)
@@ -1,5 +1,5 @@
 #############################################################################
 # Makefile for building: bin/Viewer
-# Generated by qmake (2.01a) (Qt 4.2.2) on: Sun May 20 18:09:08 2007
+# Generated by qmake (2.01a) (Qt 4.2.2) on: Wed May 30 11:19:29 2007
 # Project:  Viewer.pro
 # Template: app app
@@ -56,6 +56,7 @@
 		Bdd/src/BaseV_accessors.cpp \
 		Bdd/src/BaseV_addBaseP.cpp \
-		Bdd/src/BaseV_addParam.cpp \
 		Bdd/src/BaseV_afficheBaseConsole.cpp \
+		Bdd/src/BaseV_afficheParamConsole.cpp \
+		Bdd/src/BaseV_afficheLimitParamConsole.cpp \
 		Bdd/src/BaseV_alloc.cpp \
 		Bdd/src/BaseV_searchComponent.cpp \
@@ -92,5 +93,23 @@
 		Bdd/src/ListePorts_accessors.cpp \
 		Bdd/src/ListePorts_searchPort.cpp \
+		Bdd/src/LimitParam_accessors.cpp \
+		Bdd/src/LimitParam_unalloc.cpp \
+		Bdd/src/LimitParam_alloc.cpp \
+		Bdd/src/BaseV_searchGroup.cpp \
+		Bdd/src/BaseV_addGroup.cpp \
+		Bdd/src/BaseV_addLink.cpp \
+		Bdd/src/BaseV_searchLimitParam.cpp \
+		Bdd/src/BaseV_addLimitParam.cpp \
+		Bdd/src/BaseV_modify.cpp \
+		Bdd/src/Group_accessors.cpp \
+		Bdd/src/Group_alloc.cpp \
+		Bdd/src/Group_addParam.cpp \
+		Bdd/src/Group_unalloc.cpp \
+		Bdd/src/Param_accessors.cpp \
+		Bdd/src/Param_alloc.cpp \
+		Bdd/src/Param_unalloc.cpp \
+		Parser/src/Parse_createParam.cpp \
 		Parser/src/Parse_alloc.cpp \
+		Parser/src/Parse_save.cpp \
 		Parser/src/Parse_closeBaseV.cpp \
 		Parser/src/Parse_accessors.cpp \
@@ -99,4 +118,7 @@
 		Parser/src/Parse_unalloc.cpp \
 		Parser/src/Parse_open_file.cpp \
+		Parser/src/Parse_open_file_param.cpp \
+		Parser/src/Parse_parser_param.cpp \
+		Parser/src/Parse_parser_limitparam.cpp \
 		Graphics/src/Graphics_main.cpp \
 		Graphics/src/Graphics_file_actions.cpp \
@@ -120,6 +142,7 @@
 		obj/BaseV_accessors.o \
 		obj/BaseV_addBaseP.o \
-		obj/BaseV_addParam.o \
 		obj/BaseV_afficheBaseConsole.o \
+		obj/BaseV_afficheParamConsole.o \
+		obj/BaseV_afficheLimitParamConsole.o \
 		obj/BaseV_alloc.o \
 		obj/BaseV_searchComponent.o \
@@ -156,5 +179,23 @@
 		obj/ListePorts_accessors.o \
 		obj/ListePorts_searchPort.o \
+		obj/LimitParam_accessors.o \
+		obj/LimitParam_unalloc.o \
+		obj/LimitParam_alloc.o \
+		obj/BaseV_searchGroup.o \
+		obj/BaseV_addGroup.o \
+		obj/BaseV_addLink.o \
+		obj/BaseV_searchLimitParam.o \
+		obj/BaseV_addLimitParam.o \
+		obj/BaseV_modify.o \
+		obj/Group_accessors.o \
+		obj/Group_alloc.o \
+		obj/Group_addParam.o \
+		obj/Group_unalloc.o \
+		obj/Param_accessors.o \
+		obj/Param_alloc.o \
+		obj/Param_unalloc.o \
+		obj/Parse_createParam.o \
 		obj/Parse_alloc.o \
+		obj/Parse_save.o \
 		obj/Parse_closeBaseV.o \
 		obj/Parse_accessors.o \
@@ -163,4 +204,7 @@
 		obj/Parse_unalloc.o \
 		obj/Parse_open_file.o \
+		obj/Parse_open_file_param.o \
+		obj/Parse_parser_param.o \
+		obj/Parse_parser_limitparam.o \
 		obj/Graphics_main.o \
 		obj/Graphics_file_actions.o \
@@ -268,5 +312,5 @@
 dist: 
 	@$(CHK_DIR_EXISTS) obj/Viewer1.0.0 || $(MKDIR) obj/Viewer1.0.0 
-	$(COPY_FILE) --parents $(SOURCES) $(DIST) obj/Viewer1.0.0/ && $(COPY_FILE) --parents Bdd/include/Architecture.h Bdd/include/BaseP.h Bdd/include/BaseV.h Bdd/include/Component.h Bdd/include/Coord.h Bdd/include/Entity.h Bdd/include/ListePorts.h Bdd/include/Port.h Bdd/include/PortMap.h Bdd/include/Signal.h Graphics/include/window.h Parser/include/parser.h obj/Viewer1.0.0/ && $(COPY_FILE) --parents Bdd/src/Architecture_accessors.cpp Bdd/src/BaseP_accessors.cpp Bdd/src/Architecture_addComponent.cpp Bdd/src/Architecture_alloc.cpp Bdd/src/Architecture_searchComponent.cpp Bdd/src/Architecture_unalloc.cpp Bdd/src/BaseP_alloc.cpp Bdd/src/BaseP_unalloc.cpp Bdd/src/BaseV_accessors.cpp Bdd/src/BaseV_addBaseP.cpp Bdd/src/BaseV_addParam.cpp Bdd/src/BaseV_afficheBaseConsole.cpp Bdd/src/BaseV_alloc.cpp Bdd/src/BaseV_searchComponent.cpp Bdd/src/BaseV_unalloc.cpp Bdd/src/Component_accessors.cpp Bdd/src/Component_addPortMap.cpp Bdd/src/Component_alloc.cpp Bdd/src/Component_getPosition.cpp Bdd/src/Component_unalloc.cpp Bdd/src/Coord_alloc.cpp Bdd/src/Coord_unalloc.cpp Bdd/src/Signal_unalloc.cpp Bdd/src/ListePorts_getPortSouth.cpp Bdd/src/Port_accessors.cpp Bdd/src/Signal_alloc.cpp Bdd/src/Port_alloc.cpp Bdd/src/Signal_accessors.cpp Bdd/src/Coord_accessors.cpp Bdd/src/Port_unalloc.cpp Bdd/src/ListePorts_getPortEast.cpp Bdd/src/BaseV_getSignal.cpp Bdd/src/PortMap_alloc.cpp Bdd/src/Entity_alloc.cpp Bdd/src/PortMap_unalloc.cpp Bdd/src/ListePorts_alloc.cpp Bdd/src/PortMap_accessors.cpp Bdd/src/ListePorts_unalloc.cpp Bdd/src/ListePorts_countPort.cpp Bdd/src/ListePorts_getPortWest.cpp Bdd/src/Entity_unalloc.cpp Bdd/src/ListePorts_getPortNorth.cpp Bdd/src/Entity_accessors.cpp Bdd/src/ListePorts_addPort.cpp Bdd/src/ListePorts_accessors.cpp Bdd/src/ListePorts_searchPort.cpp Parser/src/Parse_alloc.cpp Parser/src/Parse_closeBaseV.cpp Parser/src/Parse_accessors.cpp Parser/src/Parse_parser_pos.cpp Parser/src/Parse_getBaseV.cpp Parser/src/Parse_unalloc.cpp Parser/src/Parse_open_file.cpp Graphics/src/Graphics_main.cpp Graphics/src/Graphics_file_actions.cpp Graphics/src/Graphics_tools_actions.cpp Graphics/src/Graphics_about_actions.cpp Graphics/src/Graphics_main_window.cpp Graphics/src/Graphics_informations_window.cpp Graphics/src/Graphics_drawPort.cpp Graphics/src/Graphics_parameters_window.cpp Graphics/src/Graphics_setParse.cpp Graphics/src/Graphics_drawAll.cpp Graphics/src/Graphics_mouseEvent.cpp obj/Viewer1.0.0/ && (cd `dirname obj/Viewer1.0.0` && $(TAR) Viewer1.0.0.tar Viewer1.0.0 && $(COMPRESS) Viewer1.0.0.tar) && $(MOVE) `dirname obj/Viewer1.0.0`/Viewer1.0.0.tar.gz . && $(DEL_FILE) -r obj/Viewer1.0.0
+	$(COPY_FILE) --parents $(SOURCES) $(DIST) obj/Viewer1.0.0/ && $(COPY_FILE) --parents Bdd/include/Architecture.h Bdd/include/BaseP.h Bdd/include/BaseV.h Bdd/include/Component.h Bdd/include/Coord.h Bdd/include/Entity.h Bdd/include/Group.h Bdd/include/LimitParam.h Bdd/include/ListePorts.h Bdd/include/Param.h Bdd/include/Port.h Bdd/include/PortMap.h Bdd/include/Signal.h Graphics/include/window.h Parser/include/parser.h obj/Viewer1.0.0/ && $(COPY_FILE) --parents Bdd/src/Architecture_accessors.cpp Bdd/src/BaseP_accessors.cpp Bdd/src/Architecture_addComponent.cpp Bdd/src/Architecture_alloc.cpp Bdd/src/Architecture_searchComponent.cpp Bdd/src/Architecture_unalloc.cpp Bdd/src/BaseP_alloc.cpp Bdd/src/BaseP_unalloc.cpp Bdd/src/BaseV_accessors.cpp Bdd/src/BaseV_addBaseP.cpp Bdd/src/BaseV_afficheBaseConsole.cpp Bdd/src/BaseV_afficheParamConsole.cpp Bdd/src/BaseV_afficheLimitParamConsole.cpp Bdd/src/BaseV_alloc.cpp Bdd/src/BaseV_searchComponent.cpp Bdd/src/BaseV_unalloc.cpp Bdd/src/Component_accessors.cpp Bdd/src/Component_addPortMap.cpp Bdd/src/Component_alloc.cpp Bdd/src/Component_getPosition.cpp Bdd/src/Component_unalloc.cpp Bdd/src/Coord_alloc.cpp Bdd/src/Coord_unalloc.cpp Bdd/src/Signal_unalloc.cpp Bdd/src/ListePorts_getPortSouth.cpp Bdd/src/Port_accessors.cpp Bdd/src/Signal_alloc.cpp Bdd/src/Port_alloc.cpp Bdd/src/Signal_accessors.cpp Bdd/src/Coord_accessors.cpp Bdd/src/Port_unalloc.cpp Bdd/src/ListePorts_getPortEast.cpp Bdd/src/BaseV_getSignal.cpp Bdd/src/PortMap_alloc.cpp Bdd/src/Entity_alloc.cpp Bdd/src/PortMap_unalloc.cpp Bdd/src/ListePorts_alloc.cpp Bdd/src/PortMap_accessors.cpp Bdd/src/ListePorts_unalloc.cpp Bdd/src/ListePorts_countPort.cpp Bdd/src/ListePorts_getPortWest.cpp Bdd/src/Entity_unalloc.cpp Bdd/src/ListePorts_getPortNorth.cpp Bdd/src/Entity_accessors.cpp Bdd/src/ListePorts_addPort.cpp Bdd/src/ListePorts_accessors.cpp Bdd/src/ListePorts_searchPort.cpp Bdd/src/LimitParam_accessors.cpp Bdd/src/LimitParam_unalloc.cpp Bdd/src/LimitParam_alloc.cpp Bdd/src/BaseV_searchGroup.cpp Bdd/src/BaseV_addGroup.cpp Bdd/src/BaseV_addLink.cpp Bdd/src/BaseV_searchLimitParam.cpp Bdd/src/BaseV_addLimitParam.cpp Bdd/src/BaseV_modify.cpp Bdd/src/Group_accessors.cpp Bdd/src/Group_alloc.cpp Bdd/src/Group_addParam.cpp Bdd/src/Group_unalloc.cpp Bdd/src/Param_accessors.cpp Bdd/src/Param_alloc.cpp Bdd/src/Param_unalloc.cpp Parser/src/Parse_createParam.cpp Parser/src/Parse_alloc.cpp Parser/src/Parse_save.cpp Parser/src/Parse_closeBaseV.cpp Parser/src/Parse_accessors.cpp Parser/src/Parse_parser_pos.cpp Parser/src/Parse_getBaseV.cpp Parser/src/Parse_unalloc.cpp Parser/src/Parse_open_file.cpp Parser/src/Parse_open_file_param.cpp Parser/src/Parse_parser_param.cpp Parser/src/Parse_parser_limitparam.cpp Graphics/src/Graphics_main.cpp Graphics/src/Graphics_file_actions.cpp Graphics/src/Graphics_tools_actions.cpp Graphics/src/Graphics_about_actions.cpp Graphics/src/Graphics_main_window.cpp Graphics/src/Graphics_informations_window.cpp Graphics/src/Graphics_drawPort.cpp Graphics/src/Graphics_parameters_window.cpp Graphics/src/Graphics_setParse.cpp Graphics/src/Graphics_drawAll.cpp Graphics/src/Graphics_mouseEvent.cpp obj/Viewer1.0.0/ && (cd `dirname obj/Viewer1.0.0` && $(TAR) Viewer1.0.0.tar Viewer1.0.0 && $(COMPRESS) Viewer1.0.0.tar) && $(MOVE) `dirname obj/Viewer1.0.0`/Viewer1.0.0.tar.gz . && $(DEL_FILE) -r obj/Viewer1.0.0
 
 
@@ -342,10 +386,13 @@
 	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/BaseV_addBaseP.o Bdd/src/BaseV_addBaseP.cpp
 
-obj/BaseV_addParam.o: Bdd/src/BaseV_addParam.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/BaseV_addParam.o Bdd/src/BaseV_addParam.cpp
-
 obj/BaseV_afficheBaseConsole.o: Bdd/src/BaseV_afficheBaseConsole.cpp 
 	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/BaseV_afficheBaseConsole.o Bdd/src/BaseV_afficheBaseConsole.cpp
 
+obj/BaseV_afficheParamConsole.o: Bdd/src/BaseV_afficheParamConsole.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/BaseV_afficheParamConsole.o Bdd/src/BaseV_afficheParamConsole.cpp
+
+obj/BaseV_afficheLimitParamConsole.o: Bdd/src/BaseV_afficheLimitParamConsole.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/BaseV_afficheLimitParamConsole.o Bdd/src/BaseV_afficheLimitParamConsole.cpp
+
 obj/BaseV_alloc.o: Bdd/src/BaseV_alloc.cpp 
 	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/BaseV_alloc.o Bdd/src/BaseV_alloc.cpp
@@ -450,7 +497,61 @@
 	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/ListePorts_searchPort.o Bdd/src/ListePorts_searchPort.cpp
 
+obj/LimitParam_accessors.o: Bdd/src/LimitParam_accessors.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/LimitParam_accessors.o Bdd/src/LimitParam_accessors.cpp
+
+obj/LimitParam_unalloc.o: Bdd/src/LimitParam_unalloc.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/LimitParam_unalloc.o Bdd/src/LimitParam_unalloc.cpp
+
+obj/LimitParam_alloc.o: Bdd/src/LimitParam_alloc.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/LimitParam_alloc.o Bdd/src/LimitParam_alloc.cpp
+
+obj/BaseV_searchGroup.o: Bdd/src/BaseV_searchGroup.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/BaseV_searchGroup.o Bdd/src/BaseV_searchGroup.cpp
+
+obj/BaseV_addGroup.o: Bdd/src/BaseV_addGroup.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/BaseV_addGroup.o Bdd/src/BaseV_addGroup.cpp
+
+obj/BaseV_addLink.o: Bdd/src/BaseV_addLink.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/BaseV_addLink.o Bdd/src/BaseV_addLink.cpp
+
+obj/BaseV_searchLimitParam.o: Bdd/src/BaseV_searchLimitParam.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/BaseV_searchLimitParam.o Bdd/src/BaseV_searchLimitParam.cpp
+
+obj/BaseV_addLimitParam.o: Bdd/src/BaseV_addLimitParam.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/BaseV_addLimitParam.o Bdd/src/BaseV_addLimitParam.cpp
+
+obj/BaseV_modify.o: Bdd/src/BaseV_modify.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/BaseV_modify.o Bdd/src/BaseV_modify.cpp
+
+obj/Group_accessors.o: Bdd/src/Group_accessors.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Group_accessors.o Bdd/src/Group_accessors.cpp
+
+obj/Group_alloc.o: Bdd/src/Group_alloc.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Group_alloc.o Bdd/src/Group_alloc.cpp
+
+obj/Group_addParam.o: Bdd/src/Group_addParam.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Group_addParam.o Bdd/src/Group_addParam.cpp
+
+obj/Group_unalloc.o: Bdd/src/Group_unalloc.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Group_unalloc.o Bdd/src/Group_unalloc.cpp
+
+obj/Param_accessors.o: Bdd/src/Param_accessors.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Param_accessors.o Bdd/src/Param_accessors.cpp
+
+obj/Param_alloc.o: Bdd/src/Param_alloc.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Param_alloc.o Bdd/src/Param_alloc.cpp
+
+obj/Param_unalloc.o: Bdd/src/Param_unalloc.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Param_unalloc.o Bdd/src/Param_unalloc.cpp
+
+obj/Parse_createParam.o: Parser/src/Parse_createParam.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Parse_createParam.o Parser/src/Parse_createParam.cpp
+
 obj/Parse_alloc.o: Parser/src/Parse_alloc.cpp 
 	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Parse_alloc.o Parser/src/Parse_alloc.cpp
 
+obj/Parse_save.o: Parser/src/Parse_save.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Parse_save.o Parser/src/Parse_save.cpp
+
 obj/Parse_closeBaseV.o: Parser/src/Parse_closeBaseV.cpp 
 	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Parse_closeBaseV.o Parser/src/Parse_closeBaseV.cpp
@@ -471,4 +572,13 @@
 	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Parse_open_file.o Parser/src/Parse_open_file.cpp
 
+obj/Parse_open_file_param.o: Parser/src/Parse_open_file_param.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Parse_open_file_param.o Parser/src/Parse_open_file_param.cpp
+
+obj/Parse_parser_param.o: Parser/src/Parse_parser_param.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Parse_parser_param.o Parser/src/Parse_parser_param.cpp
+
+obj/Parse_parser_limitparam.o: Parser/src/Parse_parser_limitparam.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Parse_parser_limitparam.o Parser/src/Parse_parser_limitparam.cpp
+
 obj/Graphics_main.o: Graphics/src/Graphics_main.cpp Graphics/include/window.h
 	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/Graphics_main.o Graphics/src/Graphics_main.cpp
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/include/parser.h
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/include/parser.h	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/include/parser.h	(revision 32)
@@ -17,8 +17,12 @@
 #include "Tools/Viewer/Bdd/include/PortMap.h"
 
+
+#include "Tools/Viewer/Bdd/include/Param.h"
+#include "Tools/Viewer/Bdd/include/LimitParam.h"
+#include "Tools/Viewer/Bdd/include/Group.h"
+
 #define LEVEL_MAX 8
 
 using namespace std;
-
 
 namespace morpheo{
@@ -39,6 +43,14 @@
   morpheo::tools::viewer::bdd::Architecture *arch[LEVEL_MAX];
   morpheo::tools::viewer::bdd::Component *ctemp[LEVEL_MAX];
-  
-protected:
+  morpheo::tools::viewer::bdd::Param *param;
+  morpheo::tools::viewer::bdd::Group *group;
+
+  morpheo::tools::viewer::bdd::LimitParam *limit;
+
+  void parser_pos(QDomNode n,int level);
+  void parser_limitparam(QDomNode n);
+  void parser_param(QDomNode n,int level);
+  morpheo::tools::viewer::bdd::Param *createAddP(string namegrp,string nameparam);
+  void createParam();
 
 public:
@@ -46,14 +58,19 @@
   Parse(void);
   ~Parse(void);
-  void parser_pos(QDomNode n,int level);
-
+  int open_file_param(string name);
   int open_file(string name,int level);
-  //void saveFile(string name);
+  /*save configuration file
+   * name: file name
+   * type: 0 ->user save a file 
+   *       1 ->function apply() temporary save
+   */
+  int save_file(string name,int type);
   morpheo::tools::viewer::bdd::BaseV *getBaseV();
   string getTopLevelName();
   string getAbsolutePath();
+  void refresh();  
   /*Close and erase baseV*/
   void closeBaseV();
- //void refresh();
+  
  
 
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_closeBaseV.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_closeBaseV.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_closeBaseV.cpp	(revision 32)
@@ -11,17 +11,8 @@
 
    void Parse::closeBaseV(){
-     int i;
-     for(i==0;i<LEVEL_MAX;i++)
-      {
-      delete ctemp[i];
-      delete arch[i];
-      delete ent[i];
-     }
-     delete pos;
      delete base;
      toplevel.clear();
      absolutePath.clear();
      base=NULL;
-     
    }
 
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_createParam.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_createParam.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_createParam.cpp	(revision 32)
@@ -0,0 +1,283 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Parser/include/parser.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace parser{
+
+  morpheo::tools::viewer::bdd::Param *Parse::createAddP(string namegrp,string nameparam)
+  {
+    morpheo::tools::viewer::bdd::Param *p;
+    morpheo::tools::viewer::bdd::LimitParam lp=base->searchLimitParam(nameparam);
+    if(lp.getName()=="")
+      p=new morpheo::tools::viewer::bdd::Param(nameparam,0,namegrp);
+    else
+      p=new morpheo::tools::viewer::bdd::Param(nameparam,lp.getDefault(),namegrp);
+    return p;
+  }
+
+  void Parse::createParam(){
+    int i,j,k,l;
+    morpheo::tools::viewer::bdd::LimitParam lp;
+    morpheo::tools::viewer::bdd::Group *g;
+    morpheo::tools::viewer::bdd::Param *p;
+    g=new morpheo::tools::viewer::bdd::Group("core",0);
+    g->addParam(createAddP("core","size_data"));
+    base->addGroup(g);
+    
+    g=new morpheo::tools::viewer::bdd::Group("cache_unit",1);
+    base->addGroup(g);
+    
+    g=new morpheo::tools::viewer::bdd::Group("icache",2);
+    lp=base->searchLimitParam("nb_icache");
+    for(i=0;i<lp.getDefault();i++)
+       {
+	 p=new morpheo::tools::viewer::bdd::Param("id",i,"icache");
+	 g->addParam(p);
+	 g->addParam(createAddP("icache","arbiter"));
+	 g->addParam(createAddP("icache","nb_port"));
+       }
+    base->addGroup(g);
+    
+    g=new morpheo::tools::viewer::bdd::Group("dcache",2);
+    lp=base->searchLimitParam("nb_dcache");
+    for(i=0;i<lp.getDefault();i++)
+      {
+	p=new morpheo::tools::viewer::bdd::Param("id",i,"dcache");
+	g->addParam(p);
+	g->addParam(createAddP("dcache","arbiter"));
+	g->addParam(createAddP("dcache","nb_port"));
+      }
+    base->addGroup(g);
+    
+    lp=base->searchLimitParam("nb_front_end");
+    j=lp.getDefault();
+    for(i=0;i<j;i++)
+      {
+	g=new morpheo::tools::viewer::bdd::Group("front_end",1);
+	p=new morpheo::tools::viewer::bdd::Param("id",i,"front_end");
+	g->addParam(p);
+	g->addParam(createAddP("front_end","link_icache"));
+	g->addParam(createAddP("front_end","link_out_of_order_engine"));
+	base->addGroup(g);
+	//
+	g=new morpheo::tools::viewer::bdd::Group("fetch_unit",2);
+	base->addGroup(g);
+	//
+	lp=base->searchLimitParam("nb_ifetch");
+	k=lp.getDefault();
+	for(l=0;l<k;l++)
+	  {
+	    g=new morpheo::tools::viewer::bdd::Group("ifetch",3);
+	    p=new morpheo::tools::viewer::bdd::Param("id",i,"ifetch");
+	    g->addParam(p);
+	    g->addParam(createAddP("ifetch","nb_inst"));
+	    g->addParam(createAddP("ifetch","size_queue"));
+	    g->addParam(createAddP("ifetch","link_decod"));
+	    base->addGroup(g);
+	  }
+	//
+	g=new morpheo::tools::viewer::bdd::Group("prediction_unit",2);
+	g->addParam(createAddP("prediction_unit","arbiter"));
+	g->addParam(createAddP("prediction_unit","nb_prediction"));
+	g->addParam(createAddP("prediction_unit","nb_branch_complete"));
+	base->addGroup(g);
+	//
+	g=new morpheo::tools::viewer::bdd::Group("branch_target_buffer",3);
+	g->addParam(createAddP("branch_target_buffer","size_queue"));
+	g->addParam(createAddP("branch_target_buffer","associativity"));
+	base->addGroup(g);
+	//
+	g=new morpheo::tools::viewer::bdd::Group("return_adress_stack",3);
+	g->addParam(createAddP("return_adress_stack","size_queue"));
+	base->addGroup(g);
+	//
+	g=new morpheo::tools::viewer::bdd::Group("branch_context",3);
+	g->addParam(createAddP("branch_context","size_queue"));
+	base->addGroup(g);
+	
+	//
+	g=new morpheo::tools::viewer::bdd::Group("meta_predictor",3);
+	g->addParam(createAddP("meta_predictor","have_meta_predictor"));
+
+	g->addParam(createAddP("meta_predictor","predictor_0_have_bht"));
+	g->addParam(createAddP("meta_predictor","predictor_0_bht_size_shifter"));
+	g->addParam(createAddP("meta_predictor","predictor_0_bht_nb_shifter"));
+	g->addParam(createAddP("meta_predictor","predictor_0_have_pht"));
+	g->addParam(createAddP("meta_predictor","predictor_0_pht_size_counter"));
+	g->addParam(createAddP("meta_predictor","predictor_0_pht_nb_counter"));
+	g->addParam(createAddP("meta_predictor","predictor_0_pht_size_address_share"));
+	
+	g->addParam(createAddP("meta_predictor","predictor_1_have_bht"));
+	g->addParam(createAddP("meta_predictor","predictor_1_bht_size_shifter"));
+	g->addParam(createAddP("meta_predictor","predictor_1_bht_nb_shifter"));
+	g->addParam(createAddP("meta_predictor","predictor_1_have_pht"));
+	g->addParam(createAddP("meta_predictor","predictor_1_pht_size_counter"));
+	g->addParam(createAddP("meta_predictor","predictor_1_pht_nb_counter"));
+	g->addParam(createAddP("meta_predictor","predictor_1_pht_size_address_share"));
+	
+	g->addParam(createAddP("meta_predictor","predictor_2_have_bht"));
+	g->addParam(createAddP("meta_predictor","predictor_2_bht_size_shifter"));
+	g->addParam(createAddP("meta_predictor","predictor_2_bht_nb_shifter"));
+	g->addParam(createAddP("meta_predictor","predictor_2_have_pht"));
+	g->addParam(createAddP("meta_predictor","predictor_2_pht_size_counter"));
+	g->addParam(createAddP("meta_predictor","predictor_2_pht_nb_counter"));
+	g->addParam(createAddP("meta_predictor","predictor_2_pht_size_address_share"));
+	
+	base->addGroup(g);
+	//
+	g=new morpheo::tools::viewer::bdd::Group("decod_unit",2);
+	base->addGroup(g);
+	//
+	lp=base->searchLimitParam("nb_decod");
+	k=lp.getDefault();
+	for(l=0;l<k;l++)
+	  {
+	    g=new morpheo::tools::viewer::bdd::Group("decod",3);
+	    p=new morpheo::tools::viewer::bdd::Param("id",i,"decod");
+	    g->addParam(p);
+	    g->addParam(createAddP("decod","arbiter"));
+	    g->addParam(createAddP("decod","nb_branch_decod"));
+	    g->addParam(createAddP("decod","nb_inst"));
+	    g->addParam(createAddP("decod","size_queue"));
+	    g->addParam(createAddP("decod","link_rename"));
+	    base->addGroup(g);
+	  }
+      }//end front_end
+
+    lp=base->searchLimitParam("nb_out_of_order_engine");
+    j=lp.getDefault();
+    for(i=0;i<j;i++)
+      {
+	g=new morpheo::tools::viewer::bdd::Group("out_of_order_engine",1);
+	p=new morpheo::tools::viewer::bdd::Param("id",i,"out_of_order_engine");
+	g->addParam(p);
+	g->addParam(createAddP("out_of_order_engine","link_execution_loop"));
+
+	base->addGroup(g);
+
+	g=new morpheo::tools::viewer::bdd::Group("rename",2);
+	g->addParam(createAddP("rename","arbiter"));
+	g->addParam(createAddP("rename","nb_inst"));
+	g->addParam(createAddP("rename","size_queue"));
+	g->addParam(createAddP("rename","size_windows"));
+	g->addParam(createAddP("rename","nb_gpr_physical"));
+	g->addParam(createAddP("rename","nb_gpr_free"));
+	g->addParam(createAddP("rename","nb_spr_physical"));
+	g->addParam(createAddP("rename","nb_spr_free"));
+	base->addGroup(g);
+
+	g=new morpheo::tools::viewer::bdd::Group("commit",2);
+	g->addParam(createAddP("commit","arbiter"));
+	g->addParam(createAddP("commit","nb_inst"));
+	g->addParam(createAddP("commit","size_queue"));
+	g->addParam(createAddP("commit","size_windows"));
+	g->addParam(createAddP("commit","commit_out_of_order_thread"));
+	base->addGroup(g);
+	
+      }//end out_of_order
+
+    lp=base->searchLimitParam("nb_execution_loop");
+    j=lp.getDefault();
+    for(i=0;i<j;i++)
+      {
+	g=new morpheo::tools::viewer::bdd::Group("execution_loop",1);
+	p=new morpheo::tools::viewer::bdd::Param("id",i,"execution_loop");
+	g->addParam(p);
+	g->addParam(createAddP("execution_loop","link_dcache"));
+	base->addGroup(g);
+
+	g=new morpheo::tools::viewer::bdd::Group("read_unit",2);
+	base->addGroup(g);
+
+	lp=base->searchLimitParam("nb_reservation_station");
+	k=lp.getDefault();
+	for(l=0;l<k;l++)
+	  {
+	    g=new morpheo::tools::viewer::bdd::Group("reservation_station",3);
+	    p=new morpheo::tools::viewer::bdd::Param("id",i,"reservation_station");
+	    g->addParam(p);
+	    g->addParam(createAddP("reservation_station","size_queue"));
+	    g->addParam(createAddP("reservation_station","one_queue"));
+	    base->addGroup(g);
+	    
+	    g=new morpheo::tools::viewer::bdd::Group("link",4);
+	    p=new morpheo::tools::viewer::bdd::Param("id",0,"link");
+	    g->addParam(p);
+	    base->addGroup(g);
+	    
+	  }
+	    g=new morpheo::tools::viewer::bdd:: Group("memory_unit",2);
+	    g->addParam(createAddP("memory_unit","size_queue"));
+	    g->addParam(createAddP("memory_unit","one_queue"));
+	    g->addParam(createAddP("memory_unit","nb_inst"));
+	    g->addParam(createAddP("memory_unit","size_windows"));
+	    g->addParam(createAddP("memory_unit","bypass_memory_out"));
+	    g->addParam(createAddP("memory_unit","keep_data"));
+	    g->addParam(createAddP("memory_unit","speculated_memory_read"));
+	    base->addGroup(g);
+	    
+	    g=new morpheo::tools::viewer::bdd::Group("link",3);
+	    p=new morpheo::tools::viewer::bdd::Param("id",0,"link");
+	    g->addParam(p);
+	    base->addGroup(g);
+
+	g=new morpheo::tools::viewer::bdd::Group("execution_unit",2);
+	base->addGroup(g);
+
+	lp=base->searchLimitParam("nb_execution");
+	k=lp.getDefault();
+	for(l=0;l<k;l++)
+	  {
+	    g=new morpheo::tools::viewer::bdd::Group("execution",3);
+	    p=new morpheo::tools::viewer::bdd::Param("id",i,"execution");
+	    g->addParam(p);
+	    g->addParam(createAddP("execution","type_mul"));
+	    g->addParam(createAddP("execution","type_div"));
+	    g->addParam(createAddP("execution","type_ext"));
+	    g->addParam(createAddP("execution","type_ff1"));
+	    g->addParam(createAddP("execution","type_fl1"));
+	    base->addGroup(g);
+	    
+	  }
+	
+	g=new morpheo::tools::viewer::bdd:: Group("write_unit",2);
+	base->addGroup(g);
+
+	lp=base->searchLimitParam("nb_writeback");
+	k=lp.getDefault();
+	for(l=0;l<k;l++)
+	  {
+	    g=new morpheo::tools::viewer::bdd::Group("writeback",3);
+	    p=new morpheo::tools::viewer::bdd::Param("id",i,"writeback");
+	    g->addParam(p);
+	    g->addParam(createAddP("writeback","size_queue"));
+	    g->addParam(createAddP("writeback","one_queue"));
+	    g->addParam(createAddP("writeback","bypass_execute_gpr"));
+	    g->addParam(createAddP("writeback","bypass_execute_spr"));
+	    g->addParam(createAddP("writeback","bypass_memory_in"));
+	    base->addGroup(g);
+
+	    g=new morpheo::tools::viewer::bdd::Group("link",4);
+	    p=new morpheo::tools::viewer::bdd::Param("id",0,"link");
+	    g->addParam(p);
+	    base->addGroup(g);
+	    
+	  }
+	
+	    
+	
+      }//end execution_loop
+    
+     
+   }
+
+
+};//end parser
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_open_file.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_open_file.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_open_file.cpp	(revision 32)
@@ -4,5 +4,5 @@
  */
 #include "Tools/Viewer/Parser/include/parser.h"
-
+#include "qfileinfo.h"
 namespace morpheo{
 namespace tools{
@@ -11,22 +11,22 @@
 
    int Parse::open_file(string name,int level){
-
+     bool pere=false;
     QFile file(QString::fromStdString(name));
-    QString testname,testname2;
-    QString tmppath=QString::fromStdString(name);
-    QString path=tmppath.left(tmppath.lastIndexOf('/',-1,Qt::CaseSensitive)+1);
-    absolutePath=path.toStdString();
-    testname=tmppath.right(tmppath.lastIndexOf('.',-1,Qt::CaseSensitive)-1);
-    testname2=testname.left(testname.lastIndexOf('.',-1,Qt::CaseSensitive));
-    
-    if(tmppath.contains('-') && level==0) //file not top level (first open file)
+    QFileInfo info(file);
+    QString testname;
+    absolutePath=info.absolutePath().toStdString();
+    absolutePath.append("/");
+    testname=info.baseName();
+    if(testname.contains('-') && level==0) //file not top level (first open file)
       {
-	testname2=testname2.left(testname2.lastIndexOf('-',-1,Qt::CaseSensitive));
+	testname=testname.left(testname.lastIndexOf('-',-1,Qt::CaseSensitive));
       }
+    else
+      pere=true;
     
     
      if( !file.open( QIODevice::ReadOnly ) )
        {
-	 cout << "Failed to load file. 1\n";
+	 cerr << "Position File :: Failed to load file. \n";
 	 return -1;
        }
@@ -35,5 +35,5 @@
      if( !doc.setContent( &file ) )
       {
-	cout <<  "Failed to load file.2\n";
+	cerr <<  "Failed XML parse file.\n";
 	file.close();
 	return -1;
@@ -43,5 +43,5 @@
      if( root.tagName() != "description" )
        {
-	 cout <<"Invalid file.\n";
+	 cerr <<"Invalid file.\n";
 	 return -1;
        }
@@ -54,14 +54,18 @@
 	 if(!base){
 	   base=new morpheo::tools::viewer::bdd::BaseV(); 
-	   toplevel=testname2.toStdString();
+	   toplevel=info.baseName().toStdString();
+	   if(pere==true)
+	     {
+	       string op="";
+	       op.append(absolutePath);
+	       op.append(toplevel);
+	       open_file_param(op);
+	     }
 	 }
 	 pos=new morpheo::tools::viewer::bdd::BaseP();
-	 //base->addBaseP(pos);
 	 parser_pos(root.firstChild(),level);    
+
 	 
        }
-
-     //     delete pos;
-     //delete ctemp;
      return 0;
    }
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_open_file_param.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_open_file_param.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_open_file_param.cpp	(revision 32)
@@ -0,0 +1,106 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Parser/include/parser.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace parser{
+
+  int Parse::open_file_param(string name){
+    /*!! name of entity top level!!*/
+    QString s,s2;
+
+    s.append(QString::fromStdString(name));
+
+    s2.append(QString::fromStdString(name));
+    
+    QFile file2(s.append(".gen"));
+
+    QFile file(s2.append(".cfg"));
+
+    
+    if( !file2.open( QIODevice::ReadOnly ) )
+       {
+	 cerr << "Failed to load file. File not found\n";
+	 return -1;
+       }
+
+    QDomDocument doc2( "pos" );
+     if( !doc2.setContent( &file2 ) )
+      {
+	cerr <<  "Failed to load file.Not Xml File\n";
+	file2.close();
+	return -1;
+      }
+     file2.close();
+     QDomElement root2 = doc2.documentElement();
+     if( root2.tagName() != "parameters" )
+       {
+	 cerr <<"Invalid file.\n";
+	 return -1;
+       }
+     else
+       {
+         #ifdef DBUG_PARSE
+	 cout << "parameters limit" <<endl;
+         #endif
+	 	 	 
+	 parser_limitparam(root2.firstChild());    
+	 
+       }
+    
+
+     if( !file.open( QIODevice::ReadOnly ) )
+       {
+	 cerr << "Failed to load file. File not found.\n";
+	 cerr << "search temporary file if exists.\n";
+	 file.setFileName (s2.append("~"));
+	 if( !file.open( QIODevice::ReadOnly ) )
+	   {
+	     cerr << "Failed to load temporary file. Create a default configuration.\n";
+	     createParam();
+	     return 0;
+	   }
+       
+	 
+       }
+
+     QDomDocument doc( "gen2" );
+     if( !doc.setContent( &file ) )
+      {
+	cerr <<  "Failed to load file.Not Xml File\n";
+	file.close();
+	return -1;
+      }
+     file.close();
+     QDomElement root = doc.documentElement();
+     if( root.tagName() != "cpu" && \
+	 strcmp((root.attribute("name","").toStdString()).c_str(),name.c_str()))
+       {
+	 cout <<"Invalid file.\n";
+	 return -1;
+       }
+     else
+       {
+         #ifdef DBUG_PARSE
+	 cout << "parameters" <<endl;
+         #endif
+	 
+	 parser_param(root.firstChild(),0);    
+	 
+       }
+
+     return 0;
+
+
+   }
+
+
+};//end parser
+};//end viewer
+};//end tools
+};//end morpheo
+
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_parser_limitparam.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_parser_limitparam.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_parser_limitparam.cpp	(revision 32)
@@ -0,0 +1,68 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Parser/include/parser.h"
+using namespace morpheo::tools::viewer::bdd;
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace parser{     
+
+  void Parse::parser_limitparam(QDomNode n){
+       while( !n.isNull() )
+      {
+	QDomElement e = n.toElement();
+	if( !e.isNull() )
+	  {
+	    
+	    if (e.tagName() == "parameter" )
+	      {
+                #ifdef DBUG_PARSE
+		cout << "parameter" <<endl;
+		cout << e.attribute("name","").toStdString() <<endl;
+		#endif
+		limit=new morpheo::tools::viewer::bdd::LimitParam\
+		  (e.attribute("name","").toStdString(),\
+		   e.attribute("min","").toInt(0,10),\
+		   e.attribute("max","").toInt(0,10),\
+		   e.attribute("step","").toStdString(),\
+		   e.attribute("default","").toInt(0,10),\
+		   e.attribute("level","").toInt(0,10));
+		
+		//base->addLimitParam(limit);		
+		parser_limitparam(n.firstChild());
+		if( (n.nextSibling().toElement()).tagName()!= "group"){
+		  base->addLimitParam(limit);		
+		  delete limit;
+		}
+	      } 
+	    if (e.tagName() == "group" )
+	      {
+
+		limit->setGroup(e.attribute("name","").toStdString());
+		base->addLimitParam(limit);		
+		delete limit;
+		
+	      }
+	    if (e.tagName() == "link" )
+	      {
+
+		base->addLinksrc(e.attribute("name","").toStdString(),\
+				 e.attribute("src","").toStdString());
+		base->addLinkdest(e.attribute("name","").toStdString(),\
+				 e.attribute("dest","").toStdString());
+	      }
+      
+	  }
+	n = n.nextSibling(); //next channel
+	    
+      }
+      
+  }
+
+};//end parser
+};//end viewer
+};//end tools
+};//end morpheo
+
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_parser_param.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_parser_param.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_parser_param.cpp	(revision 32)
@@ -0,0 +1,45 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Parser/include/parser.h"
+using namespace morpheo::tools::viewer::bdd;
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace parser{     
+
+  void Parse::parser_param(QDomNode n,int level){
+       while( !n.isNull() )
+      {
+	QDomElement e = n.toElement();
+	QDomNamedNodeMap a;
+	QDomAttr ab;
+	unsigned i;
+	if( !e.isNull() )
+	  {
+	    group=new Group(e.tagName().toStdString(),level);
+	    a=e.attributes();
+	    for(i=0;i<a.length();i++)
+	    {
+	      ab=a.item(i).toAttr();
+	      param=new Param(ab.name().toStdString(),ab.value().toInt(),e.tagName().toStdString());
+	      //cout << ab.name().toStdString()<<endl;
+	      group->addParam(param);
+	      delete param;
+	    }
+	    base->addGroup(group);
+	    delete group;
+	    parser_param(n.firstChild(),level+1);
+	  }
+	n = n.nextSibling(); //next channel
+	    
+      }
+      
+  }
+
+};//end parser
+};//end viewer
+};//end tools
+};//end morpheo
+
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_parser_pos.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_parser_pos.cpp	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_parser_pos.cpp	(revision 32)
@@ -51,5 +51,5 @@
 		    #endif
 		    base->addBaseP(pos,s);
-		    
+		    delete pos;
 		  }
 	      } 
@@ -76,6 +76,6 @@
 		
 		base->addBaseP(pos,s);
-
-		parser_pos(n.firstChild(),level);    
+		delete pos;
+		parser_pos(n.firstChild(),level);
 	      } 
 	    if (e.tagName() == "component" )
@@ -114,4 +114,5 @@
 		  ctemp[level]->addport(new Port(*it));
 		
+		
 	      } 
 	    if (e.tagName() == "port_map" )
@@ -127,5 +128,5 @@
 		
 		ctemp[level]->addPortMap(p);
-		
+		delete p;
 	      } 
       
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_refresh.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_refresh.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_refresh.cpp	(revision 32)
@@ -0,0 +1,30 @@
+/*
+ *
+ * [desc.]
+ */
+#include "Tools/Viewer/Parser/include/parser.h"
+
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace parser{
+
+   int Parse::refresh(){
+     cout << "enregistrer dans un fichier tmp\n";
+     //save_file(new_name,1);
+     cout<< "detruire la base\n"; 
+     //delete base;
+     //toplevel.clear();
+     //absolutePath.clear();
+     //base=NULL;
+     cout <<"j'appelle les fonctions de regeneration de la lib Morpheo\n";
+     //??
+     cout <<"j'envoie un \"message\" que la partie graphique puisse l'ouvrir\n";
+     return 0;
+   }
+
+
+};//end parser
+};//end viewer
+};//end tools
+};//end morpheo
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_save.cpp
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_save.cpp	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Parser/src/Parse_save.cpp	(revision 32)
@@ -0,0 +1,171 @@
+/*save configuration file
+ * name: file name
+ * type: 0 ->user save a file 
+ *       1 ->function apply() temporary save
+ */
+#include "Tools/Viewer/Parser/include/parser.h"
+#include "qmessagebox.h"
+namespace morpheo{
+namespace tools{
+namespace viewer{
+namespace parser{
+
+//   QDomElement Parse::createXMLNode( QDomDocument &d , morpheo::tools::viewer::bdd::Group &grp)
+//   {
+//     QDomElement cn;
+//     cn= d.createElement( QString::fromStdString(grp.getName()));
+      
+//     QList<morpheo::tools::viewer::bdd::Param> p=grp.getParam();
+//     if(p.size()!=0)
+//       {
+// 	for(QList<morpheo::tools::viewer::bdd::Param>::iterator it2=p.begin();it2!=p.end();++it2)
+// 	  {
+// 	    cn.setAttribute( QString::fromStdString(it2->getName()) ,it2->getValue() );
+// 	  }
+//       }
+    
+       
+//     return cn;
+//   }
+
+  
+  int Parse::save_file(string name,int type){
+ //    int level=0;
+//     QDomDocument doc( "Viewercfg" );
+//     QDomElement root = doc.createElement("cpu"); 
+//     QDomNode child=root.setAttribute("name",toplevel);
+//     doc.appendChild(root);
+    
+    
+//     QList<morpheo::tools::viewer::bdd::Group> g=base->getGroups();
+//    for( QList<morpheo::tools::viewer::bdd::Group>::iterator it = g.begin(); it != g.end(); ++it )
+//       {
+// 	//3 cas
+// 	if(it->getLevel()==0)
+//  	  save=root.appendChild(createXMLNode( doc , it));
+// 	if(it->getLevel()>level){
+// 	  child=root.appendChild(createXMLNode( doc , it));
+// 	  root=(QDomElement)child;
+// 	}
+// 	if(it->getLevel()==level){
+// 	  root= createXMLNode( doc , it);
+// 	  save=root;
+// 	}
+// 	if(it->getLevel()<level){
+// 	  root.appendChild(createXMLNode( doc , it));
+	  
+// 	}
+// 	root.appendChild(createXMLNode( doc , it));
+    
+//     }
+
+    
+    
+    QString s; 
+    if (type==0)
+      s.append(QString::fromStdString(name));
+    else {
+      s.append(QString::fromStdString(name));
+      s.append("~");
+    }
+
+    QFile file(s);
+    if (!file.open(QIODevice::WriteOnly))
+      {
+	//QMessageBox::warning( this, "Saving", "Failed to save file." );
+	cerr <<"Failed to save file. " <<endl;
+	return -1;
+      }
+    QString ecart;
+    QTextStream ts( &file );
+    ts << "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" <<endl<<endl;
+    ts << "<cpu name=\"" << QString::fromStdString(toplevel) << "\" >" <<endl<<endl;
+    
+    
+    QList<morpheo::tools::viewer::bdd::Group> *g=base->getGroups();
+    for( QList<morpheo::tools::viewer::bdd::Group>::iterator it = g->begin(); it != g->end(); ++it )
+      {
+
+	ecart = "  ";
+	if(it->getLevel() == 1)
+	  ecart.append("     ");
+	if(it->getLevel() == 2)
+	  ecart.append("        ");
+	if(it->getLevel() == 3)
+	  ecart.append("          ");
+	if(it->getLevel() == 4)
+	  ecart.append("            ");
+	if(it->getLevel() == 5)
+	  ecart.append("              ");
+
+	ts << ecart << "<" << QString::fromStdString(it->getName()) ;
+	QList<morpheo::tools::viewer::bdd::Param> p=it->getParam();
+	if(p.size()!=0)
+	  {
+	    for(QList<morpheo::tools::viewer::bdd::Param>::iterator it2=p.begin();it2!=p.end();++it2)
+	      {
+		ts<< " " << QString::fromStdString(it2->getName()) << "=\"" << it2->getValue() << "\" " ;
+	      }
+	    if (it->getLevel()==0 ||it->getName()=="front_end" ||it->getName()=="prediction_unit"||\
+		it->getName()=="out_of_order_engine"||it->getName()=="execution_loop"||it->getName()=="reservation_station"||\
+		it->getName()=="writeback"||it->getName()=="memory_unit")
+	      ts  << "> " <<endl <<endl;
+	    else
+	      ts  << "/> " <<endl <<endl;
+	  }
+	else
+	  {
+	    ts << ">" <<endl <<endl;
+	  }
+
+	
+	if((it+1)!=g->end() && (it+1)->getName()=="front_end" && (it)->getName()=="dcache")
+	  ts << "     </cache_unit>" <<endl <<endl;
+	  
+	if((it+1)!=g->end() && (it+1)->getName()=="prediction_unit" && (it)->getName()=="ifetch")
+	  ts << "        </fetch_unit>" <<endl <<endl;
+	if((it+1)!=g->end() && (it+1)->getName()=="decod_unit" && (it)->getName()=="meta_predictor")
+	  ts << "        </prediction_unit>" <<endl <<endl;
+	  
+	if((it+1)!=g->end() && (it+1)->getName()=="out_of_order_engine" && (it)->getName()=="decod")
+	  {
+	    ts << "        </decod_unit>" <<endl <<endl;
+	    ts << "     </front_end>" <<endl <<endl;
+	  }
+	if((it+1)!=g->end() && (it+1)->getName()=="execution_loop" && (it)->getName()=="commit")
+	  ts << "       </out_of_order_engine>" <<endl <<endl;
+	if((it+1)!=g->end() && (it+1)->getName()=="memory_unit" && (it)->getName()=="link")
+	  {
+	    ts << "          </reservation_station>" <<endl <<endl;
+	    ts << "        </read_unit>" <<endl <<endl;
+	  }
+	
+	if((it+1)!=g->end() && (it+1)->getName()=="execution_unit" && (it)->getName()=="link")
+	    ts << "        </memory_unit>" <<endl <<endl;
+
+	if((it+1)!=g->end() && (it+1)->getName()=="write_unit" && (it)->getName()=="execution")
+	    ts << "        </execution_unit>" <<endl <<endl;
+
+	if((it+1)!=g->end() && (it+1)->getName()=="writeback" && (it)->getName()=="link")
+	    ts << "        </writeback>" <<endl <<endl;
+	
+	
+      }
+
+    ts << "         </writeback>" <<endl <<endl;
+    ts << "      </write_unit>" <<endl<<endl;
+    ts << "    </execution_loop>" <<endl<<endl;
+    ts << "  </core>" <<endl<<endl;
+    ts << "</cpu>" <<endl<<endl;
+    file.close();
+    return 0;
+
+
+  }
+
+
+};//end parser
+};//end viewer
+};//end tools
+};//end morpheo
+
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Viewer.pro
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Viewer.pro	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/Viewer.pro	(revision 32)
@@ -39,5 +39,8 @@
 			Bdd/include/Coord.h  						\
 			Bdd/include/Entity.h  						\
+                        Bdd/include/Group.h                                             \
+                        Bdd/include/LimitParam.h                                        \
 			Bdd/include/ListePorts.h  					\
+                        Bdd/include/Param.h                                             \
 			Bdd/include/Port.h  						\
 			Bdd/include/PortMap.h  						\
@@ -56,7 +59,8 @@
 			Bdd/src/BaseV_accessors.cpp					\
 			Bdd/src/BaseV_addBaseP.cpp					\
-			Bdd/src/BaseV_addParam.cpp					\
 			Bdd/src/BaseV_afficheBaseConsole.cpp				\
-			Bdd/src/BaseV_alloc.cpp						\
+                        Bdd/src/BaseV_afficheParamConsole.cpp				\
+                        Bdd/src/BaseV_afficheLimitParamConsole.cpp				\
+                        Bdd/src/BaseV_alloc.cpp						\
 			Bdd/src/BaseV_searchComponent.cpp				\
 			Bdd/src/BaseV_unalloc.cpp					\
@@ -92,5 +96,23 @@
 			Bdd/src/ListePorts_accessors.cpp				\
 			Bdd/src/ListePorts_searchPort.cpp				\
-			Parser/src/Parse_alloc.cpp					\		
+                        Bdd/src/LimitParam_accessors.cpp  \
+                        Bdd/src/LimitParam_unalloc.cpp \
+                        Bdd/src/LimitParam_alloc.cpp  \
+                        Bdd/src/BaseV_searchGroup.cpp \
+                        Bdd/src/BaseV_addGroup.cpp   \
+                        Bdd/src/BaseV_addLink.cpp   \
+                        Bdd/src/BaseV_searchLimitParam.cpp \
+                        Bdd/src/BaseV_addLimitParam.cpp  \
+                        Bdd/src/BaseV_modify.cpp  \
+                        Bdd/src/Group_accessors.cpp \
+                        Bdd/src/Group_alloc.cpp\
+                        Bdd/src/Group_addParam.cpp \
+                        Bdd/src/Group_unalloc.cpp\
+                        Bdd/src/Param_accessors.cpp  \
+                        Bdd/src/Param_alloc.cpp  \
+                        Bdd/src/Param_unalloc.cpp\
+                        Parser/src/Parse_createParam.cpp\
+			Parser/src/Parse_alloc.cpp					\	
+			Parser/src/Parse_save.cpp					\		
                         Parser/src/Parse_closeBaseV.cpp					\
 			Parser/src/Parse_accessors.cpp					\
@@ -99,4 +121,7 @@
 			Parser/src/Parse_unalloc.cpp					\
 			Parser/src/Parse_open_file.cpp					\
+                        Parser/src/Parse_open_file_param.cpp                            \
+                        Parser/src/Parse_parser_param.cpp                               \
+                        Parser/src/Parse_parser_limitparam.cpp                               \
 			Graphics/src/Graphics_main.cpp					\
 			Graphics/src/Graphics_file_actions.cpp				\
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/meta_predictor-meta_register.pos
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/meta_predictor-meta_register.pos	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/meta_predictor-meta_register.pos	(revision 32)
@@ -21,5 +21,5 @@
       <port name="branch_complete" 
             localisation="east"
-            direction="in">
+            direction="inout">
         Interface de mise à jour des branchement                           
       </port>
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/two_level_branch_predictor-branch_history_table.pos
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/two_level_branch_predictor-branch_history_table.pos	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/two_level_branch_predictor-branch_history_table.pos	(revision 32)
@@ -21,4 +21,11 @@
         Interface de prediction : demande de la direction pour une adresse
       </port>
+
+      <port name="interne" 
+            localisation="south"
+            direction="out">
+        blabla .............
+      </port>
+
       <port name="branch_complete" 
             localisation="east"
@@ -49,24 +56,4 @@
 
       </component>
-<!--
-     <component name="meta_predictor"
-                 type="Meta_Predictor"
-                 size_x="10"
-                 pos_x="50"
-                 size_y="10"
-                 pos_y="20" >
-
-         <port_map name="clock"        
-                   component="branch_history_table"
-                   port="clock" />
-         <port_map name="predict" 
-                   component="branch_history_table"
-                   port="predict"/>
-         <port_map name="branch_complete"
-                   component="branch_history_table"
-                   port="branch_complete" />
-
-      </component>
--->
    </architecture>
 
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/two_level_branch_predictor-two_level_branch_predictor_glue.pos
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/two_level_branch_predictor-two_level_branch_predictor_glue.pos	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/two_level_branch_predictor-two_level_branch_predictor_glue.pos	(revision 32)
@@ -22,4 +22,10 @@
       </port>
 
+      <port name="interne" 
+            localisation="north"
+            direction="in">
+        blabla .............
+      </port>
+
    </entity>
 
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/two_level_branch_predictor.gen
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/two_level_branch_predictor.gen	(revision 32)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/two_level_branch_predictor.gen	(revision 32)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!-- comment -->
+
+<parameters>
+
+ 	<parameter name="nb_icache"                           min="1"   max="32"  step="+1" default="1"   level="0" />
+	<parameter name="nb_dcache"                           min="1"   max="32"  step="+1" default="1"   level="0" />
+	<parameter name="nb_front_end"                        min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="nb_ifetch"                           min="1"   max="8"   step="+1" default="1"   level="0" /> 
+	<parameter name="nb_decod"                            min="1"   max="8"   step="+1" default="1"   level="0" /> 
+	<parameter name="nb_out_of_order_engine"              min="1"   max="8"   step="+1" default="1"   level="0" /> 
+	<parameter name="nb_execution_loop"                   min="1"   max="8"   step="+1" default="1"   level="0" /> 
+	<parameter name="nb_reservation_station"              min="1"   max="8"   step="+1" default="1"   level="0" /> 
+	<parameter name="nb_execution"                        min="1"   max="8"   step="+1" default="1"   level="0" /> 
+	<parameter name="nb_writeback"                        min="1"   max="8"   step="+1" default="1"   level="0" /> 
+	<parameter name="arbiter"                             min="0"   max="4"   step="+1" default="1"   level="0" />
+	<parameter name="associativity"                       min="1"   max="4"   step="+1" default="1"   level="0" />
+	<parameter name="bypass_execute_gpr"                  min="0"   max="1"   step="+1" default="1"   level="0" />
+	<parameter name="bypass_execute_spr"                  min="0"   max="1"   step="+1" default="1"   level="0" />
+	<parameter name="bypass_memory_in"                    min="0"   max="1"   step="+1" default="1"   level="0" />
+	<parameter name="bypass_memory_out"                   min="0"   max="1"   step="+1" default="1"   level="0" />
+	<parameter name="commit_out_of_order_thread"          min="0"   max="1"   step="+1" default="0"   level="0" />
+	<parameter name="have_meta_predictor"                 min="0"   max="1"   step="+1" default="0"   level="0" />
+	<parameter name="keep_data"                           min="0"   max="1"   step="+1" default="1"   level="0" />
+	<parameter name="nb_branch_complete"                  min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="nb_branch_decod"                     min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="nb_gpr_free"                         min="1"   max="4"   step="+1" default="1"   level="0" />
+	<parameter name="nb_gpr_physical"                     min="32"  max="512" step="*2" default="1"   level="0" />
+	<parameter name="nb_inst"                             min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="nb_port"                             min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="nb_prediction"                       min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="nb_spr_free"                         min="1"   max="4"   step="+1" default="1"   level="0" />
+	<parameter name="nb_spr_physical"                     min="2"   max="512" step="*2" default="1"   level="0" />
+	<parameter name="one_queue"                           min="0"   max="1"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_0_have_bht"                min="0"   max="1"   step="+1" default="0"   level="0" />
+	<parameter name="predictor_0_have_pht"                min="0"   max="1"   step="+1" default="0"   level="0" />
+	<parameter name="predictor_0_bht_nb_shifter"          min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_0_bht_size_shifter"        min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_0_pht_nb_counter"          min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_0_pht_size_address_share"  min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_0_pht_size_counter"        min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_1_have_bht"                min="0"   max="1"   step="+1" default="0"   level="0" />
+	<parameter name="predictor_1_have_pht"                min="0"   max="1"   step="+1" default="0"   level="0" />
+	<parameter name="predictor_1_bht_nb_shifter"          min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_1_bht_size_shifter"        min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_1_pht_nb_counter"          min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_1_pht_size_address_share"  min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_1_pht_size_counter"        min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_2_have_bht"                min="0"   max="1"   step="+1" default="0"   level="0" />
+	<parameter name="predictor_2_have_pht"                min="0"   max="1"   step="+1" default="0"   level="0" />
+	<parameter name="predictor_2_bht_nb_shifter"          min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_2_bht_size_shifter"        min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_2_pht_nb_counter"          min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_2_pht_size_address_share"  min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="predictor_2_pht_size_counter"        min="1"   max="8"   step="+1" default="1"   level="0" />
+	<parameter name="size_data"                           min="32"  max="64"  step="*2" default="32"  level="0" />
+	<parameter name="size_queue"                          min="1"   max="32"  step="*2" default="1"   level="0" />
+	<parameter name="size_windows"                        min="1"   max="32"  step="*2" default="1"   level="0" />
+	<parameter name="speculated_memory_read"              min="0"   max="1"   step="+1" default="1"   level="0" />
+	<parameter name="type_mul"                            min="0"   max="1"   step="+1" default="0"   level="0" />
+	<parameter name="type_div"                            min="0"   max="1"   step="+1" default="0"   level="0" />
+	<parameter name="type_ext"                            min="0"   max="1"   step="+1" default="0"   level="0" />
+	<parameter name="type_ff1"                            min="0"   max="1"   step="+1" default="0"   level="0" />
+	<parameter name="type_fl1"                            min="0"   max="1"   step="+1" default="0"   level="0" />
+		
+	<link      name="link_icache"                         src="front_end"           dest="icache"              />
+	<link      name="link_dcache"                         src="execution_loop"      dest="dcache"              />
+	<link      name="link_out_of_order_engine"            src="front_end"           dest="out_of_order_engine" />
+	<link      name="link_decod"                          src="ifetch"              dest="decod"               />
+	<link      name="link_rename"                         src="decod"               dest="rename"              />
+	<link      name="link_execution_loop"                 src="out_of_order_engine" dest="execution_loop"      />
+
+</parameters>
Index: /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/two_level_branch_predictor.pos
===================================================================
--- /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/two_level_branch_predictor.pos	(revision 31)
+++ /trunk/IPs/systemC/processor/Morpheo/Tools/Viewer/data/two_level_branch_predictor.pos	(revision 32)
@@ -23,5 +23,5 @@
       <port name="branch_complete" 
             localisation="east"
-            direction="in">
+            direction="out">
         Interface de mise à jour des branchement                           
       </port>
@@ -43,4 +43,9 @@
                    component="two_level_branch_predictor"
                    port="predict"/>
+	
+         <port_map name="interne" 
+                   component="two_level_branch_predictor_glue"
+                   port="interne"/>
+	
          <port_map name="branch_complete"
                    component="two_level_branch_predictor"
@@ -75,4 +80,7 @@
                  pos_y="50" >
 
+         <port_map name="interne" 
+                   component="branch_history_table"
+                   port="interne"/>
          <port_map name="predict"
                    component="two_level_branch_predictor"
