38 const std::vector<StateIceBasePtr>& topLevelBaseStates,
39 const std::vector<StateIceBasePtr>& topLevelRequestedStates)
41 if (componentName.empty())
46 requestedInstanceList[componentName] = topLevelRequestedStates;
49 markAllForDelete(invisibleRootItem());
52 QStandardItem* componentItem = updateComponent(componentName);
55 updateStates(componentItem->child(0), topLevelBaseStates, componentName,
eBaseStateItem);
61 deleteUnusedItems(componentItem);
67 std::map<std::string, std::vector<StateIceBasePtr>>::iterator it =
68 requestedInstanceList.find(componentName);
70 if (it == requestedInstanceList.end())
75 StateIceBasePtr result = NULL;
77 for (
unsigned int i = 0; i < it->second.size(); i++)
79 if (it->second[i]->globalStateIdentifier == globalStateIdStr)
97 const std::string& globalStateIdStr,
98 StateIceBasePtr& resultState)
100 for (
unsigned int i = 0; i < state->subStateList.size(); ++i)
102 StateIceBasePtr curState = StateIceBasePtr::dynamicCast(state->subStateList[i]);
104 if (curState->globalStateIdentifier == globalStateIdStr)
106 resultState = curState;
120 StateItemModel::updateComponent(std::string componentName)
122 QStandardItem* componentItem =
new QStandardItem(QString(componentName.c_str()));
125 componentItem->setData(QVariant(eUndefined),
STATE_TYPE);
127 componentItem = updateOrInsertItem(invisibleRootItem(), componentItem);
133 baseStateItem->setData(QVariant(eUndefined),
STATE_TYPE);
134 baseStateItem = updateOrInsertItem(componentItem, baseStateItem);
140 requestedStateItem->setData(QVariant(eUndefined),
STATE_TYPE);
141 requestedStateItem = updateOrInsertItem(componentItem, requestedStateItem);
143 return componentItem;
147 StateItemModel::updateStates(QStandardItem* componentItem,
148 const std::vector<StateIceBasePtr>& topLevelStates,
149 std::string componentName,
153 for (
unsigned int i = 0; i < topLevelStates.size(); ++i)
157 insertSubstates(componentItem, topLevelStates[i], componentName, itemType);
162 StateItemModel::updateOrInsertItem(QStandardItem* parent, QStandardItem*
insert)
165 for (
int r = 0; r < parent->rowCount(); r++)
167 QStandardItem* item = parent->child(r);
178 parent->appendRow(
insert);
185 StateItemModel::data(
const QModelIndex&
index,
int role)
const
189 if (role == Qt::BackgroundColorRole)
203 brush.setColor(Qt::white);
207 brush.setColor(Qt::blue);
210 case eDynamicRemoteState:
211 brush.setColor(Qt::blue);
212 brush.setColor(brush.color().lighter(120));
216 brush.setColor(Qt::yellow);
220 brush.setColor(Qt::white);
223 brush.setColor(brush.color().lighter(170));
225 return qVariantFromValue(brush.color());
227 else if (role == Qt::ToolTipRole)
238 description =
"Normal State";
242 description =
"Remote State";
245 case eDynamicRemoteState:
246 description =
"Dynamic Remote State";
250 description =
"Final State";
258 description =
"Unknown State Type";
261 if (description.length() > 0)
263 description +=
"; Id: " + globalId +
"; Component Name: " + componentName;
266 return qVariantFromValue(description);
276 StateItemModel::markAllForDelete(QStandardItem* stateItem)
279 std::list<QStandardItem*> markList;
280 markList.push_back(stateItem);
282 while (markList.size() > 0)
284 QStandardItem* current = markList.front();
285 markList.pop_front();
289 if (current->hasChildren())
291 for (
int r = 0; r < current->rowCount(); r++)
293 markList.push_back(current->child(r));
300 StateItemModel::deleteUnusedItems(QStandardItem* stateItem)
302 std::list<QStandardItem*> searchList;
303 std::vector<int> removeRows;
305 searchList.push_back(stateItem);
307 while (searchList.size() > 0)
309 QStandardItem* current = searchList.front();
310 searchList.pop_front();
312 if (current->hasChildren())
316 for (
int r = 0; r < current->rowCount(); r++)
320 removeRows.push_back(r);
324 searchList.push_back(current->child(r));
329 std::vector<int>::iterator iter = removeRows.begin();
331 while (iter != removeRows.end())
333 current->removeRow(*iter);
341 StateItemModel::insertSubstates(QStandardItem* parentStateItem,
342 StateIceBasePtr state,
343 std::string componentName,
348 QStandardItem* stateItem =
new QStandardItem(QString(state->stateName.c_str()));
351 stateItem->setData(QVariant(QString(state->globalStateIdentifier.c_str())),
353 stateItem->setData(QVariant(state->stateType),
STATE_TYPE);
359 componentName = remoteState->proxyName;
366 stateItem = updateOrInsertItem(parentStateItem, stateItem);
368 for (
unsigned int i = 0; i < state->subStateList.size(); ++i)
370 StateIceBasePtr curState = StateIceBasePtr::dynamicCast(state->subStateList[i]);
371 insertSubstates(stateItem, curState, componentName, itemType);
378 if (
index.row() == 0 &&
index.parent() == invisibleRootItem()->
index())
380 if (role == Qt::EditRole)