]> AND Private Git Repository - blast.git/blob - AbstractBlock.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
added impl xsd + patterns in impls
[blast.git] / AbstractBlock.cpp
1 #include <AbstractBlock.h>\r
2 #include <QInputDialog>\r
3 #include <QMessageBox>\r
4 #include "AbstractInterface.h"\r
5 #include "BlockParameter.h"\r
6 \r
7 AbstractBlock::AbstractBlock() {\r
8   name = "";\r
9   parent = NULL;\r
10 }\r
11 \r
12 AbstractBlock::AbstractBlock(const QString& _name) {\r
13   name = _name;\r
14   parent = NULL;\r
15 }\r
16 \r
17 AbstractBlock::~AbstractBlock() {\r
18 \r
19   removeAllInterfaces();\r
20 \r
21   foreach(BlockParameter* p, params) {\r
22     delete p;\r
23   }\r
24   params.clear();\r
25 }\r
26 \r
27 void AbstractBlock::setName(const QString& str) {\r
28   name = str;\r
29 }\r
30 \r
31 void AbstractBlock::setParent(AbstractBlock* _parent) {\r
32   parent = _parent;\r
33 }\r
34 \r
35 bool AbstractBlock::isReferenceBlock() {\r
36   return false;\r
37 }\r
38 \r
39 bool AbstractBlock::isFunctionalBlock() {\r
40   return false;\r
41 }\r
42 \r
43 bool AbstractBlock::isGroupBlock() {\r
44   return false;\r
45 }\r
46 \r
47 void AbstractBlock::addParameter(BlockParameter *param) {\r
48   params.append(param);\r
49 }\r
50 \r
51 \r
52 BlockParameter* AbstractBlock::getParameterFromName(QString name) {\r
53   foreach(BlockParameter* p, params) {\r
54     if (p->getName() == name) return p;\r
55   }\r
56   return NULL;\r
57 }\r
58 \r
59 void AbstractBlock::addInterface(AbstractInterface *inter) {\r
60   if(inter->getDirection() == AbstractInterface::Input){\r
61     inputs.append(inter);\r
62   } else if(inter->getDirection() == AbstractInterface::Output){\r
63     outputs.append(inter);\r
64   } else if(inter->getDirection() == AbstractInterface::InOut){\r
65     bidirs.append(inter);\r
66   }\r
67 }\r
68 \r
69 void AbstractBlock::removeInterface(AbstractInterface *inter) {\r
70   /* CAUTION: no check is done about the connection state of this interface\r
71      Thus, if it is still connected to/from, there will be a crash\r
72    */\r
73   if(inter->getDirection() == AbstractInterface::Input){\r
74     inputs.removeAll(inter);\r
75   } else if(inter->getDirection() == AbstractInterface::Output){\r
76     outputs.removeAll(inter);\r
77   } else if(inter->getDirection() == AbstractInterface::InOut){\r
78     bidirs.removeAll(inter);\r
79   }\r
80   delete inter;\r
81 }\r
82 \r
83 void AbstractBlock::removeAllInterfaces() {\r
84 \r
85   foreach(AbstractInterface* iface, inputs) {\r
86     delete iface;\r
87   }\r
88   foreach(AbstractInterface* iface, outputs) {\r
89     delete iface;\r
90   }\r
91   foreach(AbstractInterface* iface, bidirs) {\r
92     delete iface;\r
93   }\r
94   inputs.clear();\r
95   outputs.clear();\r
96   bidirs.clear();\r
97 \r
98 }\r
99 \r
100 void AbstractBlock::defineBlockParam(BlockParameter *param)\r
101 {\r
102   cout << "definition of param : " << param->getName().toStdString() << endl;\r
103   bool ok = false;\r
104   QString value = QInputDialog::getText(NULL, "Block parameter", "value for the "+ param->getName() +" parameter of " + param->getOwner()->getName() + "?", QLineEdit::Normal, param->getValue().toString(), &ok);\r
105 \r
106   while (!ok && value.isEmpty())\r
107   {\r
108     QMessageBox::critical(NULL, "Error", "You have to insert a value for the parameter or accept the default value !");\r
109     value = QInputDialog::getText(NULL, "Block parameter", "value for the "+ param->getName() +" parameter of " + param->getOwner()->getName() + " ?", QLineEdit::Normal, param->getValue().toString(), &ok);\r
110   }\r
111   param->setValue(value);  \r
112 }\r
113 \r
114 QList<AbstractInterface *> AbstractBlock::getInterfaces() {\r
115   QList<AbstractInterface *> list;\r
116   list.append(inputs);\r
117   list.append(outputs);\r
118   list.append(bidirs);\r
119   return list;\r
120 }\r
121 \r
122 AbstractInterface* AbstractBlock::getIfaceFromName(QString name) {\r
123 \r
124   foreach(AbstractInterface* iface, inputs) {\r
125     if (iface->getName() == name) return iface;\r
126   }\r
127   foreach(AbstractInterface* iface, outputs) {\r
128     if (iface->getName() == name) return iface;\r
129   }\r
130   foreach(AbstractInterface* iface, bidirs) {\r
131     if (iface->getName() == name) return iface;\r
132   }\r
133   return NULL;\r
134 }\r
135 \r
136 bool AbstractBlock::isWBConfigurable() {\r
137 \r
138   foreach(BlockParameter* p, params) {\r
139     if (p->isWishboneParameter()) return true;\r
140   }\r
141   return false;\r
142 }\r
143 \r
144 QList<BlockParameter *> AbstractBlock::getUserParameters() {\r
145   QList<BlockParameter *> lst;\r
146   foreach(BlockParameter* p, params) {\r
147     if (p->isUserParameter()) lst.append(p);\r
148   }\r
149   return lst;\r
150 }\r
151 \r
152 QList<BlockParameter *> AbstractBlock::getGenericParameters() {\r
153   QList<BlockParameter *> lst;\r
154   foreach(BlockParameter* p, params) {\r
155     if (p->isGenericParameter()) lst.append(p);\r
156   }\r
157   return lst;\r
158 }\r
159 \r
160 QList<BlockParameter *> AbstractBlock::getPortParameters() {\r
161   QList<BlockParameter *> lst;\r
162   foreach(BlockParameter* p, params) {\r
163     if (p->isPortParameter()) lst.append(p);\r
164   }\r
165   return lst;\r
166 }\r
167 \r
168 QList<BlockParameter *> AbstractBlock::getWishboneParameters() {\r
169   QList<BlockParameter *> lst;\r
170   foreach(BlockParameter* p, params) {\r
171     if (p->isWishboneParameter()) lst.append(p);\r
172   }\r
173   return lst;\r
174 }\r