/** * @ingroup XmlParser * @brief XML 의 모든 하위 element 중에서 입력된 이름과 일치하는 element 를 검색한다. * @param pclsList element 리스트 * @param pszName 이름 * @param pszChildName 하위 이름 * @param iIndex 순번 * @param iCount 현재 검색된 이름 개수 * @returns 검색되면 해당 element 의 포인터를 리턴하고 그렇지 않으면 NULL 을 리턴한다. */ CXmlElement * CXmlSearch::SelectElement(XML_ELEMENT_LIST * pclsList, const char * pszName, const char * pszChildName, const int iIndex, int & iCount) { XML_ELEMENT_LIST::iterator itEL; CXmlElement * pclsElement = NULL; for (itEL = pclsList->begin(); itEL != pclsList->end(); ++itEL) { if (!strcmp(pszName, itEL->GetName())) { pclsElement = SelectElement(itEL->GetElementList(), pszChildName, iIndex, iCount); if (pclsElement) { return pclsElement; } } else { pclsElement = SelectElement(itEL->GetElementList(), pszName, pszChildName, iIndex, iCount); if (pclsElement) { return pclsElement; } } } return NULL; }
void CGraphicsContainerSelect::SelectElements(CElementCollection elements) { for(int i=0; i<elements.Count();i++) { IElementPtr pElement= elements.QueryElement(i); SelectElement(pElement); } }
CXmlElement * CXmlSearch::SelectElement(const char * pszName, const char * pszChildName, const int iIndex) { int iCount = 0; if (iIndex < 0) return NULL; return SelectElement(&m_clsElementList, pszName, pszChildName, iIndex, iCount); }
/** * @ingroup XmlParser * @brief 애트리뷰트에 해당하는 값을 검색하여 int 변수에 저장한다. * @param pszName Element 이름 * @param pszAttrName 애트리뷰트 이름 * @param iValue 애트리뷰트 값 * @param iIndex Element 인덱스. 0 을 입력하면 첫번째 검색된 하위 Element 를 리턴하고 1 을 입력하면 두번째 검색된 하위 Element 를 리턴한다. * @returns 성공하면 true 를 리턴하고 실패하면 false 를 리턴한다. */ bool CXmlSearch::SelectAttribute(const char * pszName, const char * pszAttrName, int & iValue, const int iIndex) { CXmlElement * pclsElement = SelectElement(pszName, iIndex); if (pclsElement) { return pclsElement->SelectAttribute(pszAttrName, iValue); } return false; }
/** * @ingroup XmlParser * @brief 애트리뷰트에 해당하는 값을 검색한다. * @param pszName Element 이름 * @param pszAttrName 애트리뷰트 이름 * @param iIndex Element 인덱스. 0 을 입력하면 첫번째 검색된 하위 Element 를 리턴하고 1 을 입력하면 두번째 검색된 하위 Element 를 리턴한다. * @returns 성공하면 애트리뷰트의 값을 리턴하고 그렇지 않으면 NULL 을 리턴한다. */ const char * CXmlSearch::SelectAttribute(const char * pszName, const char * pszAttrName, const int iIndex) { CXmlElement * pclsElement = SelectElement(pszName, iIndex); if (pclsElement) { return pclsElement->SelectAttribute(pszAttrName); } return NULL; }
/** * @brief N 개의 tag 와 일치하는 element 를 검색한다. * @param iIndex 순번. 0 을 입력하면 첫번째 검색된 element 를 검색한다. 2 를 입력하면 세번째 검색된 element 를 검색한다. * @param iNameCount 이름 개수 * @param ... 이름 * @returns 검색되면 해당 element 의 포인터를 리턴하고 그렇지 않으면 NULL 을 리턴한다. */ CXmlElement * CXmlSearch::SelectElement(const int iIndex, int iNameCount, ...) { if (iIndex < 0) return NULL; if (iNameCount <= 0) return NULL; int iCount = 0; MAKE_NAME_LIST return SelectElement(&m_clsElementList, clsNameList, 0, iIndex, iCount); }
/** * @brief N 개의 tag 와 일치하는 element 를 검색한다. * @param pclsList element 리스트 * @param clsNameList 검색 이름 리스트. 상위 tag 이름부터 하위 tag 이름으로 순서대로 저장되어야 한다. * @param iNameIndex 검색 이름 리스트에서 현재 검색할 이름 인덱스 * @param iIndex 순번 * @param iCount 현재 검색된 이름 개수 * @returns 검색되면 해당 element 의 포인터를 리턴하고 그렇지 않으면 NULL 을 리턴한다. */ CXmlElement * CXmlSearch::SelectElement(XML_ELEMENT_LIST * pclsList, XML_NAME_LIST & clsNameList, int iNameIndex, const int iIndex, int & iCount) { XML_ELEMENT_LIST::iterator itEL; CXmlElement * pclsElement = NULL; int iNameSize = (int)clsNameList.size(); const char * pszName = clsNameList[iNameIndex].c_str(); for (itEL = pclsList->begin(); itEL != pclsList->end(); ++itEL) { if (!strcmp(pszName, itEL->GetName())) { if (iNameSize == (iNameIndex + 1)) { if (iCount == iIndex) { return &(*itEL); } ++iCount; } else { pclsElement = SelectElement(itEL->GetElementList(), clsNameList, iNameIndex + 1, iIndex, iCount); if (pclsElement) { return pclsElement; } } } else { pclsElement = SelectElement(itEL->GetElementList(), clsNameList, iNameIndex, iIndex, iCount); if (pclsElement) { return pclsElement; } } } return NULL; }
/** * @ingroup XmlParser * @brief 모든 하위 Element 를 검색하여서 bool 내용을 가져온다. * @param pszName Element 이름 * @param pszChildName 하위 element 이름 * @param bData 하위 Element 의 값을 저장하는 변수 * @param iIndex 하위 Element 인덱스. 0 을 입력하면 첫번째 검색된 하위 Element 를 리턴하고 1 을 입력하면 두번째 검색된 하위 Element 를 리턴한다. * @returns 성공하면 true 를 리턴하고 실패하면 false 를 리턴한다. */ bool CXmlSearch::SelectElementData(const char * pszName, const char * pszChildName, bool & bData, const int iIndex) { CXmlElement * pclsElement = SelectElement(pszName, pszChildName, iIndex); if (pclsElement) { bData = GetBoolean(pclsElement->GetData()); return true; } return false; }
/** * @ingroup XmlParser * @brief 모든 하위 Element 를 검색하여서 내용을 저장한다. * @param pszName Element 이름 * @param pszChildName 하위 Element 이름 * @param strData Elemnet 의 내용을 저장할 변수 * @param iIndex Element 인덱스. 0 을 입력하면 첫번째 검색된 하위 Element 를 리턴하고 1 을 입력하면 두번째 검색된 하위 Element 를 리턴한다. * @returns 성공하면 true 를 리턴하고 실패하면 false 를 리턴한다. */ bool CXmlSearch::SelectElementData(const char * pszName, const char * pszChildName, std::string & strData, const int iIndex) { CXmlElement * pclsElement = SelectElement(pszName, pszChildName, iIndex); if (pclsElement) { strData = pclsElement->GetData(); return true; } return false; }
/** * @ingroup XmlParser * @brief 모든 하위 Element 를 검색하여서 정수 내용을 가져온다. * @param pszName Element 이름 * @param iData Element 의 값을 저장하는 변수 * @param iIndex Element 인덱스. 0 을 입력하면 첫번째 검색된 하위 Element 를 리턴하고 1 을 입력하면 두번째 검색된 하위 Element 를 리턴한다. * @returns 성공하면 true 를 리턴하고 실패하면 false 를 리턴한다. */ bool CXmlSearch::SelectElementData(const char * pszName, int & iData, const int iIndex) { CXmlElement * pclsElement = SelectElement(pszName, iIndex); if (pclsElement) { iData = atoi(pclsElement->GetData()); return true; } return false; }
/** * @ingroup XmlParser * @brief 하위 Element 를 검색하여서 내용을 저장한다. * @param pszName 하위 Element 이름 * @param strData 하위 Elemnet 의 내용을 저장할 변수 * @param iIndex 하위 Element 인덱스. 0 을 입력하면 첫번째 검색된 하위 Element 를 리턴하고 1 을 입력하면 두번째 검색된 하위 Element 를 리턴한다. * @returns 성공하면 true 를 리턴하고 실패하면 false 를 리턴한다. */ bool CXmlElement::SelectElementData(const char * pszName, std::string & strData, const int iIndex) { strData.clear(); CXmlElement * pclsElement = SelectElement(pszName, iIndex); if (pclsElement) { strData = pclsElement->m_strData; return true; } return false; }
/** * @ingroup XmlParser * @brief 하위 Element 를 검색하여서 bool 내용을 가져온다. * @param pszName 하위 Element 이름 * @param bData 하위 Element 의 값을 저장하는 변수 * @param iIndex 하위 Element 인덱스. 0 을 입력하면 첫번째 검색된 하위 Element 를 리턴하고 1 을 입력하면 두번째 검색된 하위 Element 를 리턴한다. * @returns 성공하면 true 를 리턴하고 실패하면 false 를 리턴한다. */ bool CXmlElement::SelectElementData(const char * pszName, bool & bData, const int iIndex) { bData = false; CXmlElement * pclsElement = SelectElement(pszName, iIndex); if (pclsElement) { bData = GetBoolean(pclsElement->m_strData.c_str()); return true; } return false; }
/** * @brief N 개의 tag 와 일치하는 element 의 값을 검색한다. * @param iIndex 순번. 0 을 입력하면 첫번째 검색된 element 를 검색한다. 2 를 입력하면 세번째 검색된 element 를 검색한다. * @param bData 검색된 데이터 저장 변수 * @param iNameCount 이름 개수 * @param ... 이름 * @returns 검색되면 해당 element 의 포인터를 리턴하고 그렇지 않으면 NULL 을 리턴한다. */ bool CXmlSearch::SelectElementData(const int iIndex, bool & bData, int iNameCount, ...) { if (iIndex < 0) return false; if (iNameCount <= 0) return false; int iCount = 0; MAKE_NAME_LIST CXmlElement * pclsElement = SelectElement(&m_clsElementList, clsNameList, 0, iIndex, iCount); if (pclsElement) { bData = GetBoolean(pclsElement->GetData()); return true; } return false; }
/*---------------------------------------------------------------------- TtaSelectElementWithoutPath Selects a single element but don't update the selection path. The element is highlighted in all views where it can be displayed. If it cannot be displayed in any existing view, a new view is eventually open for displaying it. Parameters: document: the document containing the element to be selected. selectedElement: the element to be selected. NULL for cancelling the selection in the document. ----------------------------------------------------------------------*/ void TtaSelectElementWithoutPath (Document document, Element selectedElement) { DisplayMode dispMode; UserErrorCode = 0; if (selectedElement && ((PtrElement) selectedElement)->ElParent == NULL) TtaError (ERR_invalid_parameter); /* Checks the parameter document */ else if (document < 1 || document > MAX_DOCUMENTS) TtaError (ERR_invalid_document_parameter); else if (LoadedDocument[document - 1] == NULL) TtaError (ERR_invalid_document_parameter); else { dispMode = TtaGetDisplayMode (document); if (dispMode == DisplayImmediately && selectedElement) SelectElement (LoadedDocument[document - 1], (PtrElement) selectedElement, TRUE, FALSE, FALSE); } }
/*---------------------------------------------------------------------- TtaSelectElement Selects a single element. This element is highlighted in all views where it can be displayed. If it cannot be displayed in any existing view, a new view is eventually open for displaying it. Parameters: document: the document containing the element to be selected. selectedElement: the element to be selected. NULL for cancelling the selection in the document. ----------------------------------------------------------------------*/ void TtaSelectElement (Document document, Element selectedElement) { DisplayMode dispMode; UserErrorCode = 0; if (selectedElement && ((PtrElement) selectedElement)->ElParent == NULL) TtaError (ERR_invalid_parameter); /* Checks the parameter document */ else if (document < 1 || document > MAX_DOCUMENTS) TtaError (ERR_invalid_document_parameter); else if (LoadedDocument[document - 1] == NULL) TtaError (ERR_invalid_document_parameter); else { dispMode = TtaGetDisplayMode (document); if (dispMode == DisplayImmediately) { if (selectedElement == NULL) /* Abort the selection */ ResetSelection (LoadedDocument[document - 1]); else { SelectElement (LoadedDocument[document - 1], (PtrElement) selectedElement, TRUE, FALSE, TRUE); #ifdef _WX // update the status bar TtaSetStatusSelectedElement (document, 1, selectedElement); #endif /* _WX */ } } else { CancelSelection (); NewSelection (document, selectedElement, NULL, 0, 0); } } }
//////////////////////////////////////////////////////////////////////// // // Function: SelectTarget // Date: 04/03/99 // Author: JIM // // Description: // //////////////////////////////////////////////////////////////////////// ItemPtr FormationItem::SelectTarget(ItemPtr currtarget,int* selectedelt,int counter/*=0*/) { ItemPtr rv=NULL; if (currtarget) if (currtarget->Status.size>=FORMATIONSIZE) { FormationItemPtr curr=*currtarget; while (curr->leader) curr=curr->Leader(); rv=curr; if (rv && selectedelt) *selectedelt=counter; } else { //count up damage //count up live tokens //if (damage-100*livetokens>700) // pick another target //DEADCODE DAW 01/07/99 Bool bombableSGT=CheckForWeapon(LT_BOMB); //DAW 01/07/99 UniqueID SGT=currtarget->SGT; if (SGT==UID_NULL) SGT=currtarget->uniqueID.count; //DeadCode DAW 01Jul99 if (!bombableSGT && Persons2::getbandfromUID(SGT)!=AmberAirfieldBAND && Persons2::getbandfromUID(SGT)!=AmberBridgeBAND) //DeadCode DAW 01Jul99 bombableSGT=TRUE; int damage=0,livetokens=0; //DeadCode DAW 01Jul99 if (!bombableSGT && !currtarget->SGT) //DeadCode DAW 01Jul99 damage=800; //DeadCode DAW 01Jul99 else if (currtarget->shape==EMPTY) damage=1000; else for (GroupItterator gi(currtarget->shape,currtarget->Anim);gi;gi++) if (gi.AnimDataMAD().itemstate) damage+=gi.DamageWeight()*gi.AnimDataMAD().itemstate; else if (gi.IsStoresToken()) livetokens++; //DEADCODE JIM 22/03/00 if ((duty&DUTYMASK)==DC_WW) //DEADCODE JIM 22/03/00 { //DEADCODE JIM 22/03/00 if (selectedelt) //DEADCODE JIM 22/03/00 *selectedelt=SelectElement(rv,counter); //DEADCODE JIM 22/03/00 rv=currtarget; //DEADCODE JIM 22/03/00 } //DEADCODE JIM 22/03/00 else if (damage-livetokens*100<700) rv=currtarget; else { //DeadCode DAW 27Jun99 UniqueID SGT=currtarget->SGT; //DeadCode DAW 27Jun99 if (SGT==UID_NULL) //DeadCode DAW 27Jun99 SGT=currtarget->uniqueID.count; ItemPtr test=*Persons2::ConvertPtrUID(SGT); int lowestdamage=900; int scan=-1; if (test) do{ damage=0;livetokens=0; //DeadCode DAW 01Jul99 if (!bombableSGT) //DeadCode DAW 01Jul99 damage=1000; //DeadCode DAW 01Jul99 else if (currtarget->shape==EMPTY) damage=1000; else for (GroupItterator gi(test->shape,test->Anim);gi;gi++) { if (gi.AnimDataMAD().itemstate) damage+=gi.DamageWeight()*gi.AnimDataMAD().itemstate; else if (gi.IsStoresToken()) livetokens++; } //DeadCode DAW 01Jul99 bombableSGT=TRUE; if (damage-livetokens*200<lowestdamage) { rv=test; lowestdamage=damage-livetokens*200; } while (++scan<IllegalSepID) { if (scan<WayPointBAND || scan>=WayPointBANDEND) if ((test=*Persons2::ConvertPtrUID(UniqueID(scan)))!=NULL) if (test->SGT==SGT && test->shape!=EMPTY) break; } }while (scan<IllegalSepID); } if (rv && selectedelt) //DAW 27Jun99 *selectedelt=SelectElement(rv,counter); //DAW 27Jun99 } //DeadCode DAW 27Jun99 if (rv && selectedelt) //DeadCode DAW 27Jun99 if (rv->Status.size>=FORMATIONSIZE) //DeadCode DAW 27Jun99 { //DeadCode DAW 27Jun99 selectedelt=0; //DeadCode DAW 27Jun99 rv=SelectConvoyMember(*rv,counter); //DeadCode DAW 27Jun99 } //DeadCode DAW 27Jun99 else if(!rv) return currtarget; return rv; }