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

Private GIT Repository
correct relative positionning of source/group
[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 bool AbstractBlock::isTopGroupBlock() {  \r
48   return false;\r
49 }\r
50 \r
51 bool AbstractBlock::isSourceBlock() {\r
52   return false;\r
53 }\r
54 \r
55 void AbstractBlock::addParameter(BlockParameter *param) {\r
56   params.append(param);\r
57 }\r
58 \r
59 \r
60 BlockParameter* AbstractBlock::getParameterFromName(QString name) {\r
61   foreach(BlockParameter* p, params) {\r
62     if (p->getName() == name) return p;\r
63   }\r
64   return NULL;\r
65 }\r
66 \r
67 void AbstractBlock::addInterface(AbstractInterface *inter) {\r
68   if(inter->getDirection() == AbstractInterface::Input){\r
69     inputs.append(inter);\r
70   } else if(inter->getDirection() == AbstractInterface::Output){\r
71     outputs.append(inter);\r
72   } else if(inter->getDirection() == AbstractInterface::InOut){\r
73     bidirs.append(inter);\r
74   }\r
75 }\r
76 \r
77 void AbstractBlock::removeInterface(AbstractInterface *inter) {\r
78   /* CAUTION: no check is done about the connection state of this interface\r
79      Thus, if it is still connected to/from, there will be a crash\r
80    */\r
81   if(inter->getDirection() == AbstractInterface::Input){\r
82     inputs.removeAll(inter);\r
83   } else if(inter->getDirection() == AbstractInterface::Output){\r
84     outputs.removeAll(inter);\r
85   } else if(inter->getDirection() == AbstractInterface::InOut){\r
86     bidirs.removeAll(inter);\r
87   }\r
88   delete inter;\r
89 }\r
90 \r
91 void AbstractBlock::removeAllInterfaces() {\r
92 \r
93   foreach(AbstractInterface* iface, inputs) {\r
94     delete iface;\r
95   }\r
96   foreach(AbstractInterface* iface, outputs) {\r
97     delete iface;\r
98   }\r
99   foreach(AbstractInterface* iface, bidirs) {\r
100     delete iface;\r
101   }\r
102   inputs.clear();\r
103   outputs.clear();\r
104   bidirs.clear();\r
105 \r
106 }\r
107 \r
108 void AbstractBlock::defineBlockParam(BlockParameter *param)\r
109 {\r
110   cout << "definition of param : " << param->getName().toStdString() << endl;\r
111   bool ok = false;\r
112   QString value = QInputDialog::getText(NULL, "Block parameter", "value for the "+ param->getName() +" parameter of " + param->getOwner()->getName() + "?", QLineEdit::Normal, param->getValue().toString(), &ok);\r
113 \r
114   while (!ok && value.isEmpty())\r
115   {\r
116     QMessageBox::critical(NULL, "Error", "You have to insert a value for the parameter or accept the default value !");\r
117     value = QInputDialog::getText(NULL, "Block parameter", "value for the "+ param->getName() +" parameter of " + param->getOwner()->getName() + " ?", QLineEdit::Normal, param->getValue().toString(), &ok);\r
118   }\r
119   param->setValue(value);  \r
120 }\r
121 \r
122 QList<AbstractInterface *> AbstractBlock::getInterfaces() {\r
123   QList<AbstractInterface *> list;\r
124   list.append(inputs);\r
125   list.append(outputs);\r
126   list.append(bidirs);\r
127   return list;\r
128 }\r
129 \r
130 QList<AbstractInterface *> AbstractBlock::getDataInputs() {\r
131   QList<AbstractInterface *> list;\r
132   foreach(AbstractInterface* iface, inputs) {\r
133     if (iface->getPurpose() == AbstractInterface::Data) {\r
134       list.append(iface);\r
135     }\r
136   }\r
137   return list;\r
138 }\r
139 \r
140 AbstractInterface* AbstractBlock::getIfaceFromName(QString name) {\r
141 \r
142   foreach(AbstractInterface* iface, inputs) {\r
143     if (iface->getName() == name) return iface;\r
144   }\r
145   foreach(AbstractInterface* iface, outputs) {\r
146     if (iface->getName() == name) return iface;\r
147   }\r
148   foreach(AbstractInterface* iface, bidirs) {\r
149     if (iface->getName() == name) return iface;\r
150   }\r
151   return NULL;\r
152 }\r
153 \r
154 bool AbstractBlock::isWBConfigurable() {\r
155 \r
156   foreach(BlockParameter* p, params) {\r
157     if (p->isWishboneParameter()) return true;\r
158   }\r
159   return false;\r
160 }\r
161 \r
162 QList<BlockParameter *> AbstractBlock::getUserParameters() {\r
163   QList<BlockParameter *> lst;\r
164   foreach(BlockParameter* p, params) {\r
165     if (p->isUserParameter()) lst.append(p);\r
166   }\r
167   return lst;\r
168 }\r
169 \r
170 QList<BlockParameter *> AbstractBlock::getGenericParameters() {\r
171   QList<BlockParameter *> lst;\r
172   foreach(BlockParameter* p, params) {\r
173     if (p->isGenericParameter()) lst.append(p);\r
174   }\r
175   return lst;\r
176 }\r
177 \r
178 QList<BlockParameter *> AbstractBlock::getPortParameters() {\r
179   QList<BlockParameter *> lst;\r
180   foreach(BlockParameter* p, params) {\r
181     if (p->isPortParameter()) lst.append(p);\r
182   }\r
183   return lst;\r
184 }\r
185 \r
186 QList<BlockParameter *> AbstractBlock::getWishboneParameters() {\r
187   QList<BlockParameter *> lst;\r
188   foreach(BlockParameter* p, params) {\r
189     if (p->isWishboneParameter()) lst.append(p);\r
190   }\r
191   return lst;\r
192 }\r