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); } }
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(); } } }
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)); }