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

Private GIT Repository
ba1c17915444b5a30cc5a99808ae33d761ea3ddf
[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 QList<AbstractInterface *> AbstractBlock::getDataInputs() {\r
123   QList<AbstractInterface *> list;\r
124   foreach(AbstractInterface* iface, inputs) {\r
125     if (iface->getPurpose() == AbstractInterface::Data) {\r
126       list.append(iface);\r
127     }\r
128   }\r
129   return list;\r
130 }\r
131 \r
132 AbstractInterface* AbstractBlock::getIfaceFromName(QString name) {\r
133 \r
134   foreach(AbstractInterface* iface, inputs) {\r
135     if (iface->getName() == name) return iface;\r
136   }\r
137   foreach(AbstractInterface* iface, outputs) {\r
138     if (iface->getName() == name) return iface;\r
139   }\r
140   foreach(AbstractInterface* iface, bidirs) {\r
141     if (iface->getName() == name) return iface;\r
142   }\r
143   return NULL;\r
144 }\r
145 \r
146 bool AbstractBlock::isWBConfigurable() {\r
147 \r
148   foreach(BlockParameter* p, params) {\r
149     if (p->isWishboneParameter()) return true;\r
150   }\r
151   return false;\r
152 }\r
153 \r
154 QList<BlockParameter *> AbstractBlock::getUserParameters() {\r
155   QList<BlockParameter *> lst;\r
156   foreach(BlockParameter* p, params) {\r
157     if (p->isUserParameter()) lst.append(p);\r
158   }\r
159   return lst;\r
160 }\r
161 \r
162 QList<BlockParameter *> AbstractBlock::getGenericParameters() {\r
163   QList<BlockParameter *> lst;\r
164   foreach(BlockParameter* p, params) {\r
165     if (p->isGenericParameter()) lst.append(p);\r
166   }\r
167   return lst;\r
168 }\r
169 \r
170 QList<BlockParameter *> AbstractBlock::getPortParameters() {\r
171   QList<BlockParameter *> lst;\r
172   foreach(BlockParameter* p, params) {\r
173     if (p->isPortParameter()) lst.append(p);\r
174   }\r
175   return lst;\r
176 }\r
177 \r
178 QList<BlockParameter *> AbstractBlock::getWishboneParameters() {\r
179   QList<BlockParameter *> lst;\r
180   foreach(BlockParameter* p, params) {\r
181     if (p->isWishboneParameter()) lst.append(p);\r
182   }\r
183   return lst;\r
184 }\r