Пример #1
0
 void CEntity::Init(TConfigurationNode& t_tree) {
    try {
       /*
        * Set the id of the entity from XML or type description
        */
       /* Was an id specified explicitly? */
       if(NodeAttributeExists(t_tree, "id")) {
          /* Yes, use that */
          GetNodeAttribute(t_tree, "id", m_strId);
       }
       else {
          /* No, derive it from the parent */
          if(m_pcParent != NULL) {
             UInt32 unIdCount = 0;
             while(GetParent().HasComponent(GetTypeDescription() +
                                            "[" + GetTypeDescription() +
                                            "_" + ToString(unIdCount) +
                                            "]")) {
                ++unIdCount;
             }
             m_strId = GetTypeDescription() + "_" + ToString(unIdCount);
          }
          else {
             THROW_ARGOSEXCEPTION("Root entities must provide the identifier tag");
          }
       }
    }
    catch(CARGoSException& ex) {
       THROW_ARGOSEXCEPTION_NESTED("Failed to initialize an entity.", ex);
    }
 }
Пример #2
0
 void CEntity::Init(TConfigurationNode& t_tree) {
    /*
     * Set an ID if it has not been set yet
     * In this way, entities that are part of a composable can have an ID set by the parent
     */
    if(m_strId == "") {
       if(! HasParent()) {
          /*
           * Root-level entity
           */
          try {
             /* Get the id of the entity */
             GetNodeAttribute(t_tree, "id", m_strId);
          }
          catch(CARGoSException& ex) {
             THROW_ARGOSEXCEPTION_NESTED("Failed to initialize an entity.", ex);
          }
       }
       else {
          /*
           * Part of a component
           */
          m_strId = GetParent().GetId() + "." + GetTypeDescription();
       }
    }
 }
Пример #3
0
void
InfoBoxManager::SetupFocused()
{
  int i = GetFocused();
  if (i < 0)
    return;

  const enum mode mode = GetCurrentMode();
  int old_type = GetType(i, mode);

  /* create a fake WndProperty for dlgComboPicker() */
  /* XXX reimplement properly */

  DataFieldEnum *dfe = new DataFieldEnum(old_type, NULL);
  for (unsigned i = 0; i < InfoBoxFactory::NUM_TYPES; i++)
    dfe->addEnumText(gettext(GetTypeDescription(i)));
  dfe->Sort(0);
  dfe->Set(old_type);

  ComboList *list = dfe->CreateComboList();
  delete dfe;

  /* let the user select */

  info_box_combo_list = list;
  int result = ComboPicker(XCSoarInterface::main_window, _("InfoBox"), *list,
                           OnInfoBoxHelp);
  if (result < 0) {
    delete list;
    return;
  }

  /* was there a modification? */

  int new_type = (*list)[result].DataFieldIndex;
  delete list;
  if (new_type == old_type)
    return;

  /* yes: apply and save it */

  SetType(i, new_type, mode);
  DisplayInfoBox();
  Profile::SetInfoBoxes(i, GetTypes(i));
}