BOOL CUserMeetingDlg::CreateMenuGroup(CXMLElement* pXML, HMENU hParent) { UINT nMenuId = MIN_GROUP; for ( POSITION pos = pXML->GetElementIterator() ; pos ; ) { CXMLElement* pSync = pXML->GetNextElement( pos ); if ( ! pSync->IsNamed( "SyncOrder" ) ) continue; static LPCTSTR pszGroup[] = { _T("xgroupname"), _T("xgroupnum") }; CXMLAttribute* pAttri = pSync->GetAttribute( pszGroup[0] ); if ( ! pAttri || pAttri->GetValue().IsEmpty() ) pAttri = pSync->GetAttribute( pszGroup[1] ); if ( pAttri && m_wndGroup.FindStringExact( -1, pAttri->GetValue() ) != m_wndGroup.GetCurSel() ) continue; HMENU hMenu = FindMenuGroup( hParent, pAttri->GetValue() ); if ( ! hMenu ) { hMenu = CreatePopupMenu(); AppendMenu( hParent, MF_STRING|MF_POPUP, (UINT)hMenu, pAttri->GetValue() ); } CString strText = pSync->GetAttributeValue( _T("xname") ); if ( ! strText.IsEmpty() ) strText += '\t'; strText += pSync->GetAttributeValue( _T("xphone") ); AppendMenu( hMenu, MF_STRING, nMenuId++, strText ); if ( nMenuId > MAX_GROUP ) break; } return TRUE; }
void CGroupingDlg::OnSelChangeGroup() { m_wndList.DeleteAllItems(); CWaitCursor pCursor; int nItem = m_wndGroup.GetCurSel(); if ( nItem < 0 ) return; CXMLElement* pXML = (CXMLElement*)m_wndGroup.GetItemDataPtr( nItem ); ASSERT( pXML != NULL ); for ( POSITION posNext = pXML->GetElementIterator(); posNext; ) { CXMLElement* pSync = pXML->GetNextElement( posNext ); if ( ! pSync->IsNamed( "SyncOrder" ) ) continue; static LPCTSTR pszGroup[] = { _T("xgroupname"), _T("xgroupnum") }; CXMLAttribute* pAttri = pSync->GetAttribute( pszGroup[0] ); if ( ! pAttri || pAttri->GetValue().IsEmpty() ) pAttri = pSync->GetAttribute( pszGroup[1] ); if ( pAttri && m_wndGroup.FindStringExact( -1, pAttri->GetValue() ) != nItem ) continue; static LPCTSTR pszSuffix[] = { _T("xphone"), _T("xname"), NULL }; int nItem = m_wndList.InsertItem( LVIF_TEXT|LVIF_PARAM, m_wndList.GetItemCount(), NULL, 0, 0, 0, (LPARAM)pSync ); for ( int i = 0; pszSuffix[i] != NULL; i ++ ) { CXMLAttribute* pAttri = pSync->GetAttribute( pszSuffix[i] ); if ( pAttri ) m_wndList.SetItemText( nItem, i, pAttri->GetValue() ); } } }
ALERROR WriteModuleImages (CXMLElement *pModule, const CString &sFolder, CSymbolTable &Resources, CDataFile &Out) { ALERROR error; int i; for (i = 0; i < pModule->GetContentElementCount(); i++) { CXMLElement *pItem = pModule->GetContentElement(i); if (strEquals(pItem->GetTag(), TAG_IMAGES)) { CString sSubFolder = pathAddComponent(sFolder, pItem->GetAttribute(ATTRIB_FOLDER)); if (error = WriteModuleImages(pItem, sSubFolder, Resources, Out)) return error; } else if (strEquals(pItem->GetTag(), TAG_IMAGE)) { CString sFilename = pItem->GetAttribute(ATTRIB_BITMAP); if (!sFilename.IsBlank()) { if (error = WriteResource(sFilename, sFolder, Resources, Out)) continue; } sFilename = pItem->GetAttribute(ATTRIB_BITMASK); if (!sFilename.IsBlank()) { if (error = WriteResource(sFilename, sFolder, Resources, Out)) continue; } } } return NOERROR; }
ALERROR WriteSubModules (CTDBCompiler &Ctx, CXMLElement *pModule, const CString &sFolder, CDataFile &Out) { int i, j; for (i = 0; i < pModule->GetContentElementCount(); i++) { CXMLElement *pItem = pModule->GetContentElement(i); if (strEquals(pItem->GetTag(), TAG_MODULES)) { for (j = 0; j < pItem->GetContentElementCount(); j++) { CXMLElement *pDesc = pItem->GetContentElement(j); CString sFilename = pDesc->GetAttribute(ATTRIB_FILENAME); if (WriteModule(Ctx, sFilename, sFolder, Out) != NOERROR) continue; } } else if (strEquals(pItem->GetTag(), TAG_MODULE)) { CString sFilename = pItem->GetAttribute(ATTRIB_FILENAME); if (WriteModule(Ctx, sFilename, sFolder, Out) != NOERROR) continue; } } return NOERROR; }
BOOL CGroupingDlg::OnSyncDataViewResp(CXMLElement* pXML) { CWaitCursor pCursor; m_wndGroup.ResetContent(); m_pXML->Delete(); m_pXML = pXML; for ( POSITION posNext = pXML->GetElementIterator(); posNext; ) { CXMLElement* pSync = pXML->GetNextElement( posNext ); if ( ! pSync->IsNamed( "SyncOrder" ) ) continue; static LPCTSTR pszGroup[] = { _T("xgroupname"), _T("xgroupnum") }; CXMLAttribute* pAttri = pSync->GetAttribute( pszGroup[0] ); if ( ! pAttri || pAttri->GetValue().IsEmpty() ) pAttri = pSync->GetAttribute( pszGroup[1] ); if ( pAttri && m_wndGroup.FindStringExact( -1, pAttri->GetValue() ) == CB_ERR ) m_wndGroup.SetItemDataPtr( m_wndGroup.AddString( pAttri->GetValue() ), pXML ); } m_wndGroup.SetCurSel( 0 ); SendMessage(WM_COMMAND, MAKELONG(m_wndGroup.GetDlgCtrlID(),CBN_SELCHANGE), (LPARAM)m_hWnd); return TRUE; }
BOOL CPlayProfilePage::LoadXML() { CString strValue; CXMLAttribute* pAttri = NULL; for ( POSITION pos = m_pXML->GetElementIterator() ; pos ; ) { CXMLElement* pMap = m_pXML->GetNextElement( pos ); if ( ! pMap->IsNamed( _T("Map") ) ) continue; if ( pAttri = pMap->GetAttribute( _T("ID") ) ) { strValue = pAttri->GetValue(); int nItem = m_wndList.InsertItem( LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM, m_wndList.GetItemCount(), strValue, 0, 0, CoolInterface.ImageForID(ID_REPORT_MUSIC), (LPARAM)pMap ); if ( pAttri = pMap->GetAttribute( _T("Play") ) ) { m_wndList.SetItemText( nItem, 1, pAttri->GetValue() ); } } } return TRUE; }
BOOL CAnalogProfilePage::LoadXML() { CString strValue; CXMLAttribute* pAttri = NULL; for ( POSITION pos = m_pXML->GetElementIterator() ; pos ; ) { CXMLElement* pMap = m_pXML->GetNextElement( pos ); if ( ! pMap->IsNamed( _T("Map") ) ) continue; if ( pAttri = pMap->GetAttribute( _T("ID") ) ) { int nItem = m_wndList.InsertItem( LVIF_IMAGE|LVIF_PARAM, m_wndList.GetItemCount(), NULL, 0, 0, 28, (LPARAM)pMap ); strValue = pAttri->GetValue(); m_wndList.SetItemText( nItem, 1, pAttri->GetValue() ); if ( pAttri = pMap->GetAttribute( _T("LinkId") ) ) { m_wndList.SetItemText( nItem, 0, pAttri->GetValue() ); } if ( pAttri = pMap->GetAttribute( _T("LocalId") ) ) { m_wndList.SetItemText( nItem, 2, pAttri->GetValue() ); } } } return TRUE; }
ALERROR WriteModuleSounds (CTDBCompiler &Ctx, CXMLElement *pModule, const CString &sFolder, CDataFile &Out) { ALERROR error; int i; for (i = 0; i < pModule->GetContentElementCount(); i++) { CXMLElement *pItem = pModule->GetContentElement(i); if (strEquals(pItem->GetTag(), TAG_SOUNDS)) { CString sSubFolder = pathAddComponent(sFolder, pItem->GetAttribute(ATTRIB_FOLDER)); if (error = WriteModuleSounds(Ctx, pItem, sSubFolder, Out)) return error; } else if (strEquals(pItem->GetTag(), TAG_SOUND)) { CString sFilename = pItem->GetAttribute(ATTRIB_FILENAME); if (error = WriteResource(Ctx, sFilename, sFolder, false, Out)) continue; } } return NOERROR; }
ALERROR CLevelTableOfItemGenerators::LoadFromXML (SDesignLoadCtx &Ctx, CXMLElement *pDesc) // LoadFromXML // // Load table from XML { int i; ALERROR error; for (i = 0; i < pDesc->GetContentElementCount(); i++) { CXMLElement *pEntry = pDesc->GetContentElement(i); SEntry *pNewEntry = m_Table.Insert(); pNewEntry->sLevelFrequency = pEntry->GetAttribute(LEVEL_FREQUENCY_ATTRIB); pNewEntry->Count.LoadFromXML(pEntry->GetAttribute(COUNT_ATTRIB)); if (pNewEntry->Count.IsEmpty()) pNewEntry->Count.SetConstant(1); if (error = IItemGenerator::CreateFromXML(Ctx, pEntry, &pNewEntry->pEntry)) return error; } m_iComputedLevel = -1; return NOERROR; }
ALERROR WriteModuleImages (CTDBCompiler &Ctx, CXMLElement *pModule, const CString &sFolder, CDataFile &Out) { ALERROR error; int i; for (i = 0; i < pModule->GetContentElementCount(); i++) { CXMLElement *pItem = pModule->GetContentElement(i); if (strEquals(pItem->GetTag(), TAG_IMAGES)) { CString sSubFolder = pathAddComponent(sFolder, pItem->GetAttribute(ATTRIB_FOLDER)); if (error = WriteModuleImages(Ctx, pItem, sSubFolder, Out)) return error; } else if (strEquals(pItem->GetTag(), TAG_IMAGE)) { CString sFilename = pItem->GetAttribute(ATTRIB_BITMAP); if (!sFilename.IsBlank()) { bool bCompress = strEquals(strToLower(pathGetExtension(sFilename)), CONSTLIT("bmp")); if (error = WriteResource(Ctx, sFilename, sFolder, bCompress, Out)) continue; } sFilename = pItem->GetAttribute(ATTRIB_BITMASK); if (!sFilename.IsBlank()) { bool bCompress = strEquals(strToLower(pathGetExtension(sFilename)), CONSTLIT("bmp")); if (error = WriteResource(Ctx, sFilename, sFolder, bCompress, Out)) continue; } sFilename = pItem->GetAttribute(ATTRIB_SHADOW_MASK); if (!sFilename.IsBlank()) { bool bCompress = strEquals(strToLower(pathGetExtension(sFilename)), CONSTLIT("bmp")); if (error = WriteResource(Ctx, sFilename, sFolder, bCompress, Out)) continue; } sFilename = pItem->GetAttribute(ATTRIB_HIT_MASK); if (!sFilename.IsBlank()) { bool bCompress = strEquals(strToLower(pathGetExtension(sFilename)), CONSTLIT("bmp")); if (error = WriteResource(Ctx, sFilename, sFolder, bCompress, Out)) continue; } } } return NOERROR; }
BOOL CProfiles::IsDenied(IN_ADDR* pAddress) { CSingleLock pLock( &m_pSection, TRUE ); if ( ! m_pXMLSecure ) return FALSE; CString strValue; BOOL bFound = FALSE; CXMLAttribute* pAttri = NULL; for ( POSITION pos = m_pXMLSecure->GetElementIterator() ; pos ; ) { CXMLElement* pMap = m_pXMLSecure->GetNextElement( pos ); if ( ! pMap->IsNamed( _T("Map") ) ) continue; if ( pAttri = pMap->GetAttribute( _T("Host") ) ) { strValue = pAttri->GetValue(); if ( strValue.CompareNoCase( _T("任意") ) == 0 || inet_addr((LPCTSTR)strValue) == *(DWORD*)pAddress ) { bFound = TRUE; break; } } } // 拒绝条件: 拒绝 && bFound ==> TRUE // : !拒绝 && !Found ==> TRUE // 受理方法: 异或 = 0 ==> TRUE, 否则 FALSE CString xAction = m_pXMLSecure->GetAttributeValue( _T("Action") ); if ( xAction.CompareNoCase( _T("拒绝") ) ^ bFound ) return FALSE; return TRUE; }
ALERROR CConquerNodesProc::LoadNodeWeightTable (SDesignLoadCtx &Ctx, CXMLElement *pDesc, TArray<SNodeWeight> *retTable) // LoadNodeWeightTable // // Loads a node criteria/weight table { ALERROR error; int i; // OK if NULL; it means the element is missing if (pDesc == NULL) return NOERROR; // Load for (i = 0; i < pDesc->GetContentElementCount(); i++) { CXMLElement *pChanceXML = pDesc->GetContentElement(i); SNodeWeight *pChance = retTable->Insert(); if (error = CTopologyNode::ParseCriteria(pChanceXML->GetAttribute(CRITERIA_ATTRIB), &pChance->Criteria, &Ctx.sError)) return error; pChance->iWeight = pChanceXML->GetAttributeIntegerBounded(WEIGHT_ATTRIB, 0, -1, 1); pChance->iSuccessChance = pChanceXML->GetAttributeIntegerBounded(SUCCESS_CHANCE_ATTRIB, 0, 100, 100); } return NOERROR; }
CXMLElement* CProfiles::FindProcess(LPCTSTR xJobId, POSITION& posNext, CXMLElement** ppActionXML) { CSingleLock pLock( &m_pSection, TRUE ); if ( ! m_pXMLMonitor ) return NULL; CXMLElement* pAction = NULL; if ( ! ppActionXML ) ppActionXML = &pAction; *ppActionXML = m_pXMLMonitor->GetElementByName( _T("ShortMessage") ); if ( CXMLElement* pXML = m_pXMLMonitor->GetElementByName( _T("Process") ) ) { if ( ! posNext ) posNext = pXML->GetElementIterator(); if ( ! posNext ) return NULL; CXMLElement* pMap = pXML->GetNextElement( posNext ); if ( ! pMap->IsNamed( _T("Map") ) ) return posNext ? FindProcess( xJobId, posNext ) : NULL; if ( ! xJobId || ! _tcscmp(xJobId, _T("ÈÎÒâ")) ) return pMap; CXMLAttribute* pAttri = pMap->GetAttribute( "Host" ); if ( pAttri && pAttri->GetValue() == xJobId ) return pMap; return posNext ? FindProcess( xJobId, posNext, ppActionXML ) : NULL; } return NULL; }
void CSovereign::InitRelationships (void) // InitRelationships // // Initialize relationships from XML element { int i; DeleteRelationships(); if (m_pInitialRelationships) { for (i = 0; i < m_pInitialRelationships->GetContentElementCount(); i++) { CXMLElement *pRelDesc = m_pInitialRelationships->GetContentElement(i); CSovereign *pTarget = g_pUniverse->FindSovereign(pRelDesc->GetAttributeInteger(SOVEREIGN_ATTRIB)); if (pTarget) { CString sDisposition = pRelDesc->GetAttribute(DISPOSITION_ATTRIB); if (strEquals(sDisposition, DISP_FRIEND)) SetDispositionTowards(pTarget, dispFriend); else if (strEquals(sDisposition, DISP_NEUTRAL)) SetDispositionTowards(pTarget, dispNeutral); else if (strEquals(sDisposition, DISP_ENEMY)) SetDispositionTowards(pTarget, dispEnemy); } } } }
ALERROR CGroupOfGenerators::LoadFromXML (SDesignLoadCtx &Ctx, CXMLElement *pDesc) // LoadFromXML // // Load from XML { int i; ALERROR error; // Load content elements m_Table.InsertEmpty(pDesc->GetContentElementCount()); for (i = 0; i < m_Table.GetCount(); i++) { CXMLElement *pEntry = pDesc->GetContentElement(i); m_Table[i].iChance = pEntry->GetAttributeInteger(CHANCE_ATTRIB); if (m_Table[i].iChance == 0) m_Table[i].iChance = 100; CString sCount = pEntry->GetAttribute(COUNT_ATTRIB); if (sCount.IsBlank()) m_Table[i].Count = DiceRange(0, 0, 1); else m_Table[i].Count.LoadFromXML(sCount); if (error = IItemGenerator::CreateFromXML(Ctx, pEntry, &m_Table[i].pItem)) return error; } // See if we force an average value CString sAttrib; if (pDesc->FindAttribute(LEVEL_VALUE_ATTRIB, &sAttrib)) { TArray<int> Values; ParseIntegerList(sAttrib, 0, &Values); m_AverageValue.InsertEmpty(MAX_ITEM_LEVEL + 1); m_AverageValue[0] = 0; for (i = 0; i < Values.GetCount(); i++) m_AverageValue[i + 1] = Values[i]; for (i = Values.GetCount() + 1; i <= MAX_ITEM_LEVEL; i++) m_AverageValue[i] = 0; } else if (pDesc->FindAttribute(VALUE_ATTRIB, &sAttrib)) { int iValue = strToInt(sAttrib, 0); m_AverageValue.InsertEmpty(MAX_ITEM_LEVEL + 1); m_AverageValue[0] = 0; for (i = 1; i <= MAX_ITEM_LEVEL; i++) m_AverageValue[i] = iValue; } return NOERROR; }
bool AddTrait (CNPWorld *pWorld, CXMLElement *pTraitTable, CXMLElement *pTrait, CSymbolTable &Symbols) { int i; // First check to see if the world has any of the traits // listed in the "unless" sections for (i = 0; i < pTrait->GetContentElementCount(); i++) { CXMLElement *pUnless = pTrait->GetContentElement(i); if (strCompare(pUnless->GetTag(), CONSTLIT("Unless")) != 0) continue; // If the world has the prohibited trait then we cannot // add the desired trait. if (pWorld->HasTrait(GetSymbolicAttribute(Symbols, pUnless, CONSTLIT("Trait")))) return false; } // Add the trait pWorld->SetTrait(GetSymbolicAttribute(Symbols, pTrait, CONSTLIT("Trait"))); // Add any traits that are implied by this trait for (i = 0; i < pTrait->GetContentElementCount(); i++) { CXMLElement *pImply = pTrait->GetContentElement(i); if (strCompare(pImply->GetTag(), CONSTLIT("Imply")) != 0) continue; // Random chance of actually having this trait if (mathRandom(1, 100) > pImply->GetAttributeInteger(CONSTLIT("Prob"))) continue; // If we already have this trait the don't bother if (pWorld->HasTrait(GetSymbolicAttribute(Symbols, pImply, CONSTLIT("Trait")))) continue; // Look for the implied trait in the table CXMLElement *pNewTrait = FindTraitInTable(pTraitTable, pImply->GetAttribute(CONSTLIT("Trait"))); // Add it. Note that we don't care if we cannot if (pNewTrait) AddTrait(pWorld, pTraitTable, pNewTrait, Symbols); } return true; }
ALERROR CHighScoreList::Load (const CString &sFilename) // Load // // Load the high score list { ALERROR error; m_iCount = 0; // Load XML CFileReadBlock DataFile(sFilename); CXMLElement *pData; CString sError; if (error = CXMLElement::ParseXML(&DataFile, &pData, &sError)) // Means we can't find it or is corrupt... return NOERROR; // Get the most recent player name m_sMostRecentPlayerName = pData->GetAttribute(LAST_PLAYER_NAME_ATTRIB); m_iMostRecentPlayerGenome = CGameRecord::LoadGenome(pData->GetAttribute(LAST_PLAYER_GENOME_ATTRIB)); // Fill the structures for (int i = 0; i < pData->GetContentElementCount(); i++) { if (error = m_List[m_iCount].InitFromXML(pData->GetContentElement(i))) return error; m_iCount++; } m_bModified = false; // Done delete pData; return NOERROR; }
ALERROR CSovereign::OnCreateFromXML (SDesignLoadCtx &Ctx, CXMLElement *pDesc) // OnCreateFromXML // // Create from XML { int i; // Initialize m_sName = pDesc->GetAttribute(CONSTLIT(g_NameAttrib)); // Alignment CString sAlignment = pDesc->GetAttribute(ALIGNMENT_ATTRIB); if (strEquals(sAlignment, CONSTRUCTIVE_CHAOS_ALIGN)) m_iAlignment = alignConstructiveChaos; else if (strEquals(sAlignment, CONSTRUCTIVE_ORDER_ALIGN)) m_iAlignment = alignConstructiveOrder; else if (strEquals(sAlignment, NEUTRAL_ALIGN)) m_iAlignment = alignNeutral; else if (strEquals(sAlignment, DESTRUCTIVE_ORDER_ALIGN)) m_iAlignment = alignDestructiveOrder; else if (strEquals(sAlignment, DESTRUCTIVE_CHAOS_ALIGN)) m_iAlignment = alignDestructiveChaos; else return ERR_FAIL; // Load language CXMLElement *pLanguage = pDesc->GetContentElementByTag(LANGUAGE_TAG); if (pLanguage) { int iCount = pLanguage->GetContentElementCount(); for (i = 0; i < iCount; i++) { CXMLElement *pItem = pLanguage->GetContentElement(i); CString *pText = new CString(pItem->GetAttribute(TEXT_ATTRIB)); DWORD dwID = pItem->GetAttributeInteger(ID_ATTRIB); if (dwID != 0) m_Language.AddEntry(dwID, pText); } } // Load relationships m_pInitialRelationships = pDesc->GetContentElementByTag(RELATIONSHIPS_TAG); if (m_pInitialRelationships) m_pInitialRelationships = m_pInitialRelationships->OrphanCopy(); // Done return NOERROR; }
CXMLElement *FindTraitInTable (CXMLElement *pTraitTable, const CString &sTrait) { for (int i = 0; i < pTraitTable->GetContentElementCount(); i++) { CXMLElement *pTrait = pTraitTable->GetContentElement(i); if (strCompare(pTrait->GetAttribute(CONSTLIT("Trait")), sTrait) == 0) return pTrait; } return NULL; }
BOOL CNetworkMonitorBox::ProcessXML(POSITION posNext) { CXMLElement* pXML = Profiles.FindProcess( NULL, posNext ); if ( pXML == NULL ) return FALSE; CSingleLock pLock( &Network.m_pSection, TRUE ); CString strValue = pXML->GetAttributeValue( "Host" ); if ( CChannel* pChannel = Network.FindChannel( strValue ) ) { if ( pChannel->m_hSocket == INVALID_SOCKET && pChannel->TimeOut( 60 * 1000 ) ) { CXMLAttribute* pAttri = pXML->GetAttribute( "Retry" ); if ( ! pAttri ) pAttri = pXML->AddAttribute( "Retry" ); if ( _ttoi( pAttri->GetValue() ) >= 2 ) { AlarmToShortMessage( (LPCTSTR)strValue ); strValue = pXML->GetAttributeValue( _T("Path") ); RestartMachine( (LPCTSTR)strValue ); pXML->DeleteAttribute( "Retry" ); } else { strValue.Format( "%i", _ttoi( pAttri->GetValue() ) + 1 ); pAttri->SetValue( (LPCTSTR)strValue ); pChannel->LinkRestart(); pChannel->m_tConnected = GetTickCount(); } } else if ( pChannel->IsConnected() ) { pXML->DeleteAttribute( "Retry" ); } } else { CChannel* pChannel = new CSentryChannel( pXML ); Network.SetChannel( pChannel ); pChannel->LinkRestart(); } if ( posNext ) return ProcessXML( posNext ); return TRUE; }
BOOL CPlayProfilePage::LoadXML(CXMLElement* pParent) { m_wndList.DeleteAllItems(); if ( pParent->IsNamed( "Album" ) ) { m_wndList.InsertItem( LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM, 0, "..", 0, 0, 23, (LPARAM)pParent->GetParent() ); } for ( POSITION pos = pParent->GetElementIterator() ; pos ; ) { CXMLElement* pXML = pParent->GetNextElement( pos ); if ( CXMLAttribute* pAttri = pXML->GetAttribute( _T("ID") ) ) { CString strValue = pAttri->GetValue(); int nItem = m_wndList.InsertItem( LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM, m_wndList.GetItemCount(), strValue, 0, 0, pXML->IsNamed( "Album" ) ? 23 : 24, (LPARAM)pXML ); if ( pAttri = pXML->GetAttribute( _T("Play") ) ) { m_wndList.SetItemText( nItem, 1, pAttri->GetValue() ); } if ( pAttri = pXML->GetAttribute( _T("Host") ) ) { m_wndList.SetItemText( nItem, 2, pAttri->GetValue() ); } } } m_pXML = pParent; return TRUE; }
ALERROR CLocationCriteriaTableEntry::InitFromXML (SDesignLoadCtx &Ctx, CIDCounter &IDGen, CXMLElement *pDesc) // InitFromXML // // Initialize from XML { ALERROR error; int i; m_dwID = IDGen.GetID(); m_iDefault = -1; // Load each sub-entry in turn int iCount = pDesc->GetContentElementCount(); if (iCount == 0) return NOERROR; m_Table.InsertEmpty(iCount); for (i = 0; i < iCount; i++) { CXMLElement *pItem = pDesc->GetContentElement(i); if (error = CCompositeImageDesc::InitEntryFromXML(Ctx, pItem, IDGen, &m_Table[i].pImage)) return error; // Load the criteria CString sCriteria = pItem->GetAttribute(CRITERIA_ATTRIB); if (error = m_Table[i].Criteria.Parse(sCriteria, 0, &Ctx.sError)) return error; if (m_iDefault == -1 && m_Table[i].Criteria.MatchesDefault()) m_iDefault = i; } // If we don't have a default, the pick the last item. if (m_iDefault == -1 && m_Table.GetCount() > 0) m_iDefault = m_Table.GetCount() - 1; // Done return NOERROR; }
ALERROR CSystemMap::ExecuteCreator (STopologyCreateCtx &Ctx, CTopology &Topology, CXMLElement *pCreator) // ExecuteCreator // // Runs a specific creator { ALERROR error; int i; // If this is a root node tag then we add it and all its connections. if (strEquals(pCreator->GetTag(), ROOT_NODE_TAG)) { if (error = Topology.AddTopologyNode(Ctx, pCreator->GetAttribute(ID_ATTRIB))) return error; } // Otherwise we process the creator element else { for (i = 0; i < pCreator->GetContentElementCount(); i++) { CXMLElement *pDirective = pCreator->GetContentElement(i); if (strEquals(pDirective->GetTag(), NODE_TAG)) { if (error = Topology.AddTopologyNode(Ctx, pDirective->GetAttribute(ID_ATTRIB))) return error; } else if (strEquals(pDirective->GetTag(), STARGATE_TAG) || strEquals(pDirective->GetTag(), STARGATES_TAG)) { if (error = Topology.AddStargateFromXML(Ctx, pDirective)) return error; } else { Ctx.sError = strPatternSubst(CONSTLIT("Unknown TopologyCreator directive: %s."), pDirective->GetTag()); return ERR_FAIL; } } } return NOERROR; }
ALERROR CGroupOfDeviceGenerators::LoadFromXML (SDesignLoadCtx &Ctx, CXMLElement *pDesc) // LoadFromXML // // Load from XML { int i; ALERROR error; m_Count.LoadFromXML(pDesc->GetAttribute(COUNT_ATTRIB)); if (m_Count.IsEmpty()) m_Count.SetConstant(1); // Load either a <DeviceSlot> element or another device generator. for (i = 0; i < pDesc->GetContentElementCount(); i++) { CXMLElement *pEntry = pDesc->GetContentElement(i); if (strEquals(pEntry->GetTag(), DEVICE_SLOT_TAG)) { SSlotDesc *pSlotDesc = m_SlotDesc.Insert(); CItem::ParseCriteria(pEntry->GetAttribute(CRITERIA_ATTRIB), &pSlotDesc->Criteria); if (error = IDeviceGenerator::InitDeviceDescFromXML(Ctx, pEntry, &pSlotDesc->DefaultDesc)) return error; pSlotDesc->iMaxCount = pEntry->GetAttributeIntegerBounded(MAX_COUNT_ATTRIB, 0, -1, -1); } else { SEntry *pTableEntry = m_Table.Insert(); pTableEntry->iChance = pEntry->GetAttributeIntegerBounded(CHANCE_ATTRIB, 0, -1, 100); if (error = IDeviceGenerator::CreateFromXML(Ctx, pEntry, &pTableEntry->pDevice)) { pTableEntry->pDevice = NULL; return error; } } } return NOERROR; }
ALERROR CUniverse::InitSounds (SDesignLoadCtx &Ctx, CXMLElement *pSounds, CResourceDb &Resources) // InitSounds // // Loads sound resources { ALERROR error; // Nothing to do if we don't want sound resources if (m_pSoundMgr == NULL || Ctx.bNoResources) return NOERROR; // Figure out if we've got a special folder for the resources CString sRoot = pSounds->GetAttribute(FOLDER_ATTRIB); // Loop over all sound resources for (int i = 0; i < pSounds->GetContentElementCount(); i++) { CXMLElement *pItem = pSounds->GetContentElement(i); DWORD dwUNID = (DWORD)pItem->GetAttributeInteger(UNID_ATTRIB); CString sFilename = pItem->GetAttribute(FILENAME_ATTRIB); int iChannel; // Load the resource if (error = Resources.LoadSound(*m_pSoundMgr, sRoot, sFilename, &iChannel)) { Ctx.sError = strPatternSubst(CONSTLIT("Unable to load sound file: %s"), sFilename); return error; } // Add to our map if (error = m_Sounds.AddEntry((int)dwUNID, (CObject *)iChannel)) { Ctx.sError = strPatternSubst(CONSTLIT("Unable to add sound file: %x"), dwUNID); return error; } } return NOERROR; }
ALERROR CUniverse::LoadModules (SDesignLoadCtx &Ctx, CXMLElement *pModules) // LoadModules // // Load all sub-modules { ALERROR error; int i; for (i = 0; i < pModules->GetContentElementCount(); i++) { CXMLElement *pModule = pModules->GetContentElement(i); CString sFilename = pModule->GetAttribute(FILENAME_ATTRIB); #ifdef DEBUG_SOURCE_LOAD_TRACE kernelDebugLogMessage("Loading module %s...", sFilename.GetASCIIZPointer()); #endif // Load the module CXMLElement *pModuleXML; if (error = Ctx.pResDb->LoadModule(NULL_STR, sFilename, &pModuleXML, &Ctx.sError)) return error; #ifdef DEBUG_SOURCE_LOAD_TRACE kernelDebugLogMessage("...loaded XML from database"); #endif if (error = LoadModule(Ctx, pModuleXML)) { Ctx.sError = strPatternSubst(CONSTLIT("Unable to load module (%s): %s"), sFilename.GetASCIIZPointer(), Ctx.sError.GetASCIIZPointer()); return error; } delete pModuleXML; #ifdef DEBUG_SOURCE_LOAD_TRACE kernelDebugLogMessage("Done loading module", sFilename.GetASCIIZPointer()); #endif } return NOERROR; }
ALERROR CTableOfGenerators::LoadFromXML (SDesignLoadCtx &Ctx, CXMLElement *pDesc) // LoadFromXML // // Load from XML { int i; ALERROR error; m_iTotalChance = 0; int iCount = pDesc->GetContentElementCount(); if (iCount > 0) { m_Table.InsertEmpty(iCount); // Pre-initialize to NULL in case we exit with an error for (i = 0; i < iCount; i++) m_Table[i].pItem = NULL; // Load for (i = 0; i < iCount; i++) { CXMLElement *pEntry = pDesc->GetContentElement(i); m_Table[i].iChance = pEntry->GetAttributeInteger(CHANCE_ATTRIB); m_iTotalChance += m_Table[i].iChance; CString sCount = pEntry->GetAttribute(COUNT_ATTRIB); if (sCount.IsBlank()) m_Table[i].Count = DiceRange(0, 0, 1); else m_Table[i].Count.LoadFromXML(sCount); if (error = IItemGenerator::CreateFromXML(Ctx, pEntry, &m_Table[i].pItem)) return error; } } return NOERROR; }
ALERROR CGroupOfGenerators::LoadFromXML (SDesignLoadCtx &Ctx, CXMLElement *pDesc) // LoadFromXML // // Load from XML { int i; ALERROR error; m_iCount = pDesc->GetContentElementCount(); if (m_iCount > 0) { m_Table = new SEntry [m_iCount]; utlMemSet(m_Table, sizeof(SEntry) * m_iCount, 0); for (i = 0; i < m_iCount; i++) { CXMLElement *pEntry = pDesc->GetContentElement(i); m_Table[i].iChance = pEntry->GetAttributeInteger(CHANCE_ATTRIB); if (m_Table[i].iChance == 0) m_Table[i].iChance = 100; CString sCount = pEntry->GetAttribute(COUNT_ATTRIB); if (sCount.IsBlank()) m_Table[i].Count = DiceRange(0, 0, 1); else m_Table[i].Count.LoadFromXML(sCount); if (error = IItemGenerator::CreateFromXML(Ctx, pEntry, &m_Table[i].pItem)) return error; } } else m_Table = NULL; return NOERROR; }
BOOL CRulerSettingsPage::LoadXML() { CString strValue; CXMLElement* pXML = NULL; CXMLAttribute* pAttri = NULL; if ( pXML = m_pXML->GetElementByName( _T("BlackList") ) ) { for ( POSITION pos = pXML->GetElementIterator() ; pos ; ) { CXMLElement* pMap = pXML->GetNextElement( pos ); if ( ! pMap->IsNamed( _T("Map") ) ) continue; if ( pAttri = pMap->GetAttribute( _T("ID") ) ) { strValue = pAttri->GetValue(); m_wndExtList.AddString( strValue ); } } } return TRUE; }
void CHisReport::Register(int nInk) { DWORD nValue; CString strValue; CXMLAttribute* pAttri; CXMLElement* pXML = FindToday( TRUE ); pAttri = pXML->GetAttribute( "Total" ); if ( ! pAttri ) pAttri = pXML->AddAttribute( "Total" ); strValue = pAttri->GetValue(); nValue = _ttol( strValue ); strValue.Format( _T("%lu"), nValue + nInk ); pAttri->SetValue( strValue ); pAttri = m_pXML->GetAttribute( "Total" ); if ( ! pAttri ) pAttri = m_pXML->AddAttribute( "Total" ); strValue = pAttri->GetValue(); nValue = _ttol( strValue ); strValue.Format( _T("%lu"), nValue + nInk ); pAttri->SetValue( strValue ); }