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

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