Exemplo n.º 1
0
void BTEditor::buildOperationList(BTDisplay &d, BTSpecialBody *body, std::vector<BTDisplay::selectItem> &list, std::vector<operationList> &ops, int level /*= 0*/)
{
 std::string spaces(level, ' ');
 for (int i = 0; i < body->numOfOperations(false); ++i)
 {
  std::vector<std::string> lines;
  BTSpecialOperation *op = body->getOperation(i);
  std::string words = spaces + op->print();
  d.splitText(words.c_str(), spaces + "\\", lines);
  for (std::vector<std::string>::const_iterator itr(lines.begin()); itr != lines.end(); itr++)
  {
   list.push_back(BTDisplay::selectItem(*itr));
   list.back().value = ops.size();
   if (itr != lines.begin())
    list.back().flags.set(BTSELECTFLAG_UNSELECTABLE);
  }
  ops.push_back(operationList(body, op));
  BTSpecialBody *subBody = dynamic_cast<BTSpecialBody*>(op);
  if (subBody)
  {
   buildOperationList(d, subBody, list, ops, level + 1);
  }
  else
  {
   BTSpecialConditional *conditional = dynamic_cast<BTSpecialConditional*>(op);
   if (conditional)
   {
    buildOperationList(d, conditional->getThenClause(), list, ops, level + 1);
    list.push_back(BTDisplay::selectItem(spaces + "ELSE"));
    list.back().flags.set(BTSELECTFLAG_UNSELECTABLE);
    buildOperationList(d, conditional->getElseClause(), list, ops, level + 1);
   }
  }
 }
 list.push_back(BTDisplay::selectItem(spaces + "<New Operation>"));
 list.back().value = ops.size();
 ops.push_back(operationList(body, NULL));
}