本文整理汇总了C++中TiXmlElement::FirstChild方法的典型用法代码示例。如果您正苦于以下问题:C++ TiXmlElement::FirstChild方法的具体用法?C++ TiXmlElement::FirstChild怎么用?C++ TiXmlElement::FirstChild使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TiXmlElement
的用法示例。
在下文中一共展示了TiXmlElement::FirstChild方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Load
bool CGUIWindow::Load(TiXmlElement* pRootElement)
{
if (!pRootElement)
return false;
if (strcmpi(pRootElement->Value(), "window"))
{
CLog::Log(LOGERROR, "file : XML file doesnt contain <window>");
return false;
}
// we must create copy of root element as we will manipulate it when resolving includes
// and we don't want original root element to change
pRootElement = (TiXmlElement*)pRootElement->Clone();
// set the scaling resolution so that any control creation or initialisation can
// be done with respect to the correct aspect ratio
g_graphicsContext.SetScalingResolution(m_coordsRes, m_needsScaling);
// Resolve any includes that may be present and save conditions used to do it
g_SkinInfo->ResolveIncludes(pRootElement, &m_xmlIncludeConditions);
// now load in the skin file
SetDefaults();
CGUIControlFactory::GetInfoColor(pRootElement, "backgroundcolor", m_clearBackground, GetID());
CGUIControlFactory::GetActions(pRootElement, "onload", m_loadActions);
CGUIControlFactory::GetActions(pRootElement, "onunload", m_unloadActions);
CGUIControlFactory::GetHitRect(pRootElement, m_hitRect);
TiXmlElement *pChild = pRootElement->FirstChildElement();
while (pChild)
{
std::string strValue = pChild->Value();
if (strValue == "type" && pChild->FirstChild())
{
// if we have are a window type (ie not a dialog), and we have <type>dialog</type>
// then make this window act like a dialog
if (!IsDialog() && strcmpi(pChild->FirstChild()->Value(), "dialog") == 0)
m_isDialog = true;
}
else if (strValue == "previouswindow" && pChild->FirstChild())
{
m_previousWindow = CButtonTranslator::TranslateWindow(pChild->FirstChild()->Value());
}
else if (strValue == "defaultcontrol" && pChild->FirstChild())
{
const char *always = pChild->Attribute("always");
if (always && strcmpi(always, "true") == 0)
m_defaultAlways = true;
m_defaultControl = atoi(pChild->FirstChild()->Value());
}
else if(strValue == "menucontrol" && pChild->FirstChild())
{
m_menuControlID = atoi(pChild->FirstChild()->Value());
}
else if (strValue == "visible" && pChild->FirstChild())
{
std::string condition;
CGUIControlFactory::GetConditionalVisibility(pRootElement, condition);
m_visibleCondition = g_infoManager.Register(condition, GetID());
}
else if (strValue == "animation" && pChild->FirstChild())
{
CRect rect(0, 0, (float)m_coordsRes.iWidth, (float)m_coordsRes.iHeight);
CAnimation anim;
anim.Create(pChild, rect, GetID());
m_animations.push_back(anim);
}
else if (strValue == "zorder" && pChild->FirstChild())
{
m_renderOrder = atoi(pChild->FirstChild()->Value());
}
else if (strValue == "coordinates")
{
XMLUtils::GetFloat(pChild, "posx", m_posX);
XMLUtils::GetFloat(pChild, "posy", m_posY);
XMLUtils::GetFloat(pChild, "left", m_posX);
XMLUtils::GetFloat(pChild, "top", m_posY);
TiXmlElement *originElement = pChild->FirstChildElement("origin");
while (originElement)
{
COrigin origin;
originElement->QueryFloatAttribute("x", &origin.x);
originElement->QueryFloatAttribute("y", &origin.y);
if (originElement->FirstChild())
origin.condition = g_infoManager.Register(originElement->FirstChild()->Value(), GetID());
m_origins.push_back(origin);
originElement = originElement->NextSiblingElement("origin");
}
}
else if (strValue == "camera")
{ // z is fixed
pChild->QueryFloatAttribute("x", &m_camera.x);
pChild->QueryFloatAttribute("y", &m_camera.y);
m_hasCamera = true;
}
else if (strValue == "depth" && pChild->FirstChild())
{
float stereo = (float)atof(pChild->FirstChild()->Value());;
//.........这里部分代码省略.........
示例2: MapWindowActions
void CButtonTranslator::MapWindowActions(TiXmlNode *pWindow, int windowID)
{
if (!pWindow || windowID == WINDOW_INVALID)
return;
TiXmlNode* pDevice;
const char* types[] = {"gamepad", "remote", "universalremote", "keyboard", "mouse", "appcommand", NULL};
for (int i = 0; types[i]; ++i)
{
CStdString type(types[i]);
if (HasDeviceType(pWindow, type))
{
pDevice = pWindow->FirstChild(type);
TiXmlElement *pDeviceElement = pDevice->ToElement();
CStdString deviceName;
//check if exists, if not use "default"
deviceName = pDeviceElement->Attribute("name");
if (deviceName.empty())
deviceName = "default";
std::map<CStdString, std::map<int, buttonMap> >::iterator deviceMapIt = deviceMappings.find(deviceName);
if (deviceMapIt == deviceMappings.end())
{
//First time encountering this device, lets initialise the buttonMap for it.
deviceMapIt = deviceMappings.insert(pair<CStdString, std::map<int, buttonMap> >(deviceName, std::map<int, buttonMap>())).first;
}
std::map<int, buttonMap>::iterator windowIt = deviceMapIt->second.find(windowID);
if (windowIt == deviceMapIt->second.end())
{
//add it now
windowIt = deviceMapIt->second.insert(pair<int, buttonMap>(windowID, buttonMap())).first;
}
buttonMap& windowMap = windowIt->second;
TiXmlElement *pButton = pDevice->FirstChildElement();
while (pButton)
{
uint32_t buttonCode=0;
if (type == "gamepad")
buttonCode = TranslateGamepadString(pButton->Value());
else if (type == "remote")
buttonCode = TranslateRemoteString(pButton->Value());
else if (type == "universalremote")
buttonCode = TranslateUniversalRemoteString(pButton->Value());
else if (type == "keyboard")
buttonCode = TranslateKeyboardButton(pButton);
else if (type == "mouse")
buttonCode = TranslateMouseCommand(pButton->Value());
else if (type == "appcommand")
buttonCode = TranslateAppCommand(pButton->Value());
if (buttonCode && pButton->FirstChild())
MapAction(buttonCode, pButton->FirstChild()->Value(), windowMap);
pButton = pButton->NextSiblingElement();
}
}
}
#if defined(HAS_SDL_JOYSTICK) || defined(HAS_EVENT_SERVER)
if ((pDevice = pWindow->FirstChild("joystick")) != NULL)
{
// map joystick actions
while (pDevice)
{
MapJoystickActions(windowID, pDevice);
pDevice = pDevice->NextSibling("joystick");
}
}
#endif
}
示例3: ParseText
void Map::ParseText(const string &text)
{
// Create a tiny xml document and use it to parse the text.
TiXmlDocument doc;
doc.Parse(text.c_str());
// Check for parsing errors.
if (doc.Error())
{
has_error = true;
error_code = TMX_PARSING_ERROR;
error_text = doc.ErrorDesc();
return;
}
TiXmlNode *mapNode = doc.FirstChild("map");
TiXmlElement* mapElem = mapNode->ToElement();
// Read the map attributes.
mapElem->Attribute("version", &version);
mapElem->Attribute("width", &width);
mapElem->Attribute("height", &height);
mapElem->Attribute("tilewidth", &tile_width);
mapElem->Attribute("tileheight", &tile_height);
// Read the orientation
std::string orientationStr = mapElem->Attribute("orientation");
if (!orientationStr.compare("orthogonal"))
{
orientation = TMX_MO_ORTHOGONAL;
}
else if (!orientationStr.compare("isometric"))
{
orientation = TMX_MO_ISOMETRIC;
}
else if (!orientationStr.compare("staggered"))
{
orientation = TMX_MO_STAGGERED;
}
const TiXmlNode *node = mapElem->FirstChild();
int zOrder = 0;
while( node )
{
// Read the map properties.
if( strcmp( node->Value(), "properties" ) == 0 )
{
properties.Parse(node);
}
// Iterate through all of the tileset elements.
if( strcmp( node->Value(), "tileset" ) == 0 )
{
// Allocate a new tileset and parse it.
Tileset *tileset = new Tileset();
tileset->Parse(node->ToElement());
// Add the tileset to the list.
tilesets.push_back(tileset);
}
// Iterate through all of the layer elements.
if( strcmp( node->Value(), "layer" ) == 0 )
{
// Allocate a new layer and parse it.
Layer *layer = new Layer(this);
layer->Parse(node);
layer->SetZOrder( zOrder );
++zOrder;
// Add the layer to the list.
layers.push_back(layer);
}
// Iterate through all of the imagen layer elements.
if( strcmp( node->Value(), "imagelayer" ) == 0 )
{
// Allocate a new layer and parse it.
ImageLayer *imageLayer = new ImageLayer(this);
imageLayer->Parse(node);
imageLayer->SetZOrder( zOrder );
++zOrder;
// Add the layer to the list.
image_layers.push_back(imageLayer);
}
// Iterate through all of the objectgroup elements.
if( strcmp( node->Value(), "objectgroup" ) == 0 )
{
// Allocate a new object group and parse it.
ObjectGroup *objectGroup = new ObjectGroup();
objectGroup->Parse(node);
objectGroup->SetZOrder( zOrder );
++zOrder;
// Add the object group to the list.
object_groups.push_back(objectGroup);
//.........这里部分代码省略.........
示例4: GetCustomRegexpReplacers
void CExternalPlayer::GetCustomRegexpReplacers(TiXmlElement *pRootElement,
std::vector<std::string>& settings)
{
int iAction = 0; // overwrite
// for backward compatibility
const char* szAppend = pRootElement->Attribute("append");
if ((szAppend && stricmp(szAppend, "yes") == 0))
iAction = 1;
// action takes precedence if both attributes exist
const char* szAction = pRootElement->Attribute("action");
if (szAction)
{
iAction = 0; // overwrite
if (stricmp(szAction, "append") == 0)
iAction = 1; // append
else if (stricmp(szAction, "prepend") == 0)
iAction = 2; // prepend
}
if (iAction == 0)
settings.clear();
TiXmlElement* pReplacer = pRootElement->FirstChildElement("replacer");
int i = 0;
while (pReplacer)
{
if (pReplacer->FirstChild())
{
const char* szGlobal = pReplacer->Attribute("global");
const char* szStop = pReplacer->Attribute("stop");
bool bGlobal = szGlobal && stricmp(szGlobal, "true") == 0;
bool bStop = szStop && stricmp(szStop, "true") == 0;
std::string strMatch;
std::string strPat;
std::string strRep;
XMLUtils::GetString(pReplacer,"match",strMatch);
XMLUtils::GetString(pReplacer,"pat",strPat);
XMLUtils::GetString(pReplacer,"rep",strRep);
if (!strPat.empty() && !strRep.empty())
{
CLog::Log(LOGDEBUG," Registering replacer:");
CLog::Log(LOGDEBUG," Match:[%s] Pattern:[%s] Replacement:[%s]", strMatch.c_str(), strPat.c_str(), strRep.c_str());
CLog::Log(LOGDEBUG," Global:[%s] Stop:[%s]", bGlobal?"true":"false", bStop?"true":"false");
// keep literal commas since we use comma as a seperator
StringUtils::Replace(strMatch, ",",",,");
StringUtils::Replace(strPat, ",",",,");
StringUtils::Replace(strRep, ",",",,");
std::string strReplacer = strMatch + " , " + strPat + " , " + strRep + " , " + (bGlobal ? "g" : "") + (bStop ? "s" : "");
if (iAction == 2)
settings.insert(settings.begin() + i++, 1, strReplacer);
else
settings.push_back(strReplacer);
}
else
{
// error message about missing tag
if (strPat.empty())
CLog::Log(LOGERROR," Missing <Pat> tag");
else
CLog::Log(LOGERROR," Missing <Rep> tag");
}
}
pReplacer = pReplacer->NextSiblingElement("replacer");
}
}
示例5: main
int main()
{
//
// We start with the 'demoStart' todo list. Process it. And
// should hopefully end up with the todo list as illustrated.
//
const char* demoStart =
"<?xml version=\"1.0\" standalone='no' >\n"
"<!-- Our to do list data -->"
"<ToDo>\n"
"<!-- Do I need a secure PDA? -->\n"
"<Item priority=\"1\" distance='close'> Go to the <bold>Toy store!</bold></Item>"
"<Item priority=\"2\" distance='none'> Do bills </Item>"
"<Item priority=\"2\" distance='far & back'> Look for Evil Dinosaurs! </Item>"
"</ToDo>";
{
#ifdef TIXML_USE_STL
/* What the todo list should look like after processing.
In stream (no formatting) representation. */
const char* demoEnd =
"<?xml version=\"1.0\" standalone=\"no\" ?>"
"<!-- Our to do list data -->"
"<ToDo>"
"<!-- Do I need a secure PDA? -->"
"<Item priority=\"2\" distance=\"close\">Go to the"
"<bold>Toy store!"
"</bold>"
"</Item>"
"<Item priority=\"1\" distance=\"far\">Talk to:"
"<Meeting where=\"School\">"
"<Attendee name=\"Marple\" position=\"teacher\" />"
"<Attendee name=\"Voel\" position=\"counselor\" />"
"</Meeting>"
"<Meeting where=\"Lunch\" />"
"</Item>"
"<Item priority=\"2\" distance=\"here\">Do bills"
"</Item>"
"</ToDo>";
#endif
// The example parses from the character string (above):
#if defined( WIN32 ) && defined( TUNE )
_CrtMemCheckpoint( &startMemState );
#endif
{
// Write to a file and read it back, to check file I/O.
TiXmlDocument doc( "demotest.xml" );
doc.Parse( demoStart );
if ( doc.Error() )
{
printf( "Error in %s: %s\n", doc.Value(), doc.ErrorDesc() );
exit( 1 );
}
doc.SaveFile();
}
TiXmlDocument doc( "demotest.xml" );
bool loadOkay = doc.LoadFile();
if ( !loadOkay )
{
printf( "Could not load test file 'demotest.xml'. Error='%s'. Exiting.\n", doc.ErrorDesc() );
exit( 1 );
}
printf( "** Demo doc read from disk: ** \n\n" );
printf( "** Printing via doc.Print **\n" );
doc.Print( stdout );
{
printf( "** Printing via TiXmlPrinter **\n" );
TiXmlPrinter printer;
doc.Accept( &printer );
fprintf( stdout, "%s", printer.CStr() );
}
#ifdef TIXML_USE_STL
{
printf( "** Printing via operator<< **\n" );
std::cout << doc;
}
#endif
TiXmlNode* node = 0;
TiXmlElement* todoElement = 0;
TiXmlElement* itemElement = 0;
// --------------------------------------------------------
// An example of changing existing attributes, and removing
// an element from the document.
// --------------------------------------------------------
// Get the "ToDo" element.
// It is a child of the document, and can be selected by name.
node = doc.FirstChild( "ToDo" );
assert( node );
//.........这里部分代码省略.........
示例6: Load
// \brief Load the config file (sounds.xml) for nav sounds
// Can be located in a folder "sounds" in the skin or from a
// subfolder of the folder "sounds" in the root directory of
// xbmc
bool CGUIAudioManager::Load()
{
CSingleLock lock(m_cs);
UnLoad();
if (CSettings::Get().GetString("lookandfeel.soundskin")=="OFF")
return true;
else
Enable(true);
std::string soundSkin = CSettings::Get().GetString("lookandfeel.soundskin");
if (soundSkin == "SKINDEFAULT")
{
m_strMediaDir = URIUtils::AddFileToFolder(g_SkinInfo->Path(), "sounds");
}
else
{
//check if sound skin is located in home, otherwise fallback to built-ins
m_strMediaDir = URIUtils::AddFileToFolder("special://home/sounds", soundSkin);
if (!XFILE::CDirectory::Exists(m_strMediaDir))
m_strMediaDir = URIUtils::AddFileToFolder("special://xbmc/sounds", soundSkin);
}
std::string strSoundsXml = URIUtils::AddFileToFolder(m_strMediaDir, "sounds.xml");
// Load our xml file
CXBMCTinyXML xmlDoc;
CLog::Log(LOGINFO, "Loading %s", strSoundsXml.c_str());
// Load the config file
if (!xmlDoc.LoadFile(strSoundsXml))
{
CLog::Log(LOGNOTICE, "%s, Line %d\n%s", strSoundsXml.c_str(), xmlDoc.ErrorRow(), xmlDoc.ErrorDesc());
return false;
}
TiXmlElement* pRoot = xmlDoc.RootElement();
std::string strValue = pRoot->Value();
if ( strValue != "sounds")
{
CLog::Log(LOGNOTICE, "%s Doesn't contain <sounds>", strSoundsXml.c_str());
return false;
}
// Load sounds for actions
TiXmlElement* pActions = pRoot->FirstChildElement("actions");
if (pActions)
{
TiXmlNode* pAction = pActions->FirstChild("action");
while (pAction)
{
TiXmlNode* pIdNode = pAction->FirstChild("name");
int id = 0; // action identity
if (pIdNode && pIdNode->FirstChild())
{
CButtonTranslator::TranslateActionString(pIdNode->FirstChild()->Value(), id);
}
TiXmlNode* pFileNode = pAction->FirstChild("file");
std::string strFile;
if (pFileNode && pFileNode->FirstChild())
strFile += pFileNode->FirstChild()->Value();
if (id > 0 && !strFile.empty())
{
std::string filename = URIUtils::AddFileToFolder(m_strMediaDir, strFile);
IAESound *sound = LoadSound(filename);
if (sound)
m_actionSoundMap.insert(pair<int, IAESound *>(id, sound));
}
pAction = pAction->NextSibling();
}
}
// Load window specific sounds
TiXmlElement* pWindows = pRoot->FirstChildElement("windows");
if (pWindows)
{
TiXmlNode* pWindow = pWindows->FirstChild("window");
while (pWindow)
{
int id = 0;
TiXmlNode* pIdNode = pWindow->FirstChild("name");
if (pIdNode)
{
if (pIdNode->FirstChild())
id = CButtonTranslator::TranslateWindow(pIdNode->FirstChild()->Value());
}
//.........这里部分代码省略.........
示例7: Create
//.........这里部分代码省略.........
posX = rect.Width() - posX;
XMLUtils::GetString(pControlNode, "posy", pos);
if (pos.Right(1) == "r")
posY = rect.Height() - posY;
GetDimension(pControlNode, "width", width, minWidth);
XMLUtils::GetFloat(pControlNode, "height", height);
XMLUtils::GetFloat(pControlNode, "offsetx", offset.x);
XMLUtils::GetFloat(pControlNode, "offsety", offset.y);
// adjust width and height accordingly for groups. Groups should
// take the width/height of the parent (adjusted for positioning)
// if none is defined.
if (type == CGUIControl::GUICONTROL_GROUP || type == CGUIControl::GUICONTROL_GROUPLIST)
{
if (!width)
width = max(rect.x2 - posX, 0.0f);
if (!height)
height = max(rect.y2 - posY, 0.0f);
}
hitRect.SetRect(posX, posY, posX + width, posY + height);
GetHitRect(pControlNode, hitRect);
if (!GetNavigation(pControlNode, "onup", up, upActions)) up = id - 1;
if (!GetNavigation(pControlNode, "ondown", down, downActions)) down = id + 1;
if (!GetNavigation(pControlNode, "onleft", left, leftActions)) left = id;
if (!GetNavigation(pControlNode, "onright", right, rightActions)) right = id;
if (!GetNavigation(pControlNode, "onnext", next, nextActions)) next = id;
if (!GetNavigation(pControlNode, "onprev", prev, prevActions)) prev = id;
if (XMLUtils::GetInt(pControlNode, "defaultcontrol", defaultControl))
{
const char *always = pControlNode->FirstChildElement("defaultcontrol")->Attribute("always");
if (always && strnicmp(always, "true", 4) == 0)
defaultAlways = true;
}
XMLUtils::GetInt(pControlNode, "pagecontrol", pageControl);
GetInfoColor(pControlNode, "colordiffuse", colorDiffuse);
GetConditionalVisibility(pControlNode, iVisibleCondition, allowHiddenFocus);
GetCondition(pControlNode, "enable", enableCondition);
CRect animRect(posX, posY, posX + width, posY + height);
GetAnimations(pControlNode, animRect, animations);
GetInfoColor(pControlNode, "textcolor", labelInfo.textColor);
GetInfoColor(pControlNode, "focusedcolor", labelInfo.focusedColor);
GetInfoColor(pControlNode, "disabledcolor", labelInfo.disabledColor);
GetInfoColor(pControlNode, "shadowcolor", labelInfo.shadowColor);
GetInfoColor(pControlNode, "selectedcolor", labelInfo.selectedColor);
XMLUtils::GetFloat(pControlNode, "textoffsetx", labelInfo.offsetX);
XMLUtils::GetFloat(pControlNode, "textoffsety", labelInfo.offsetY);
int angle = 0; // use the negative angle to compensate for our vertically flipped cartesian plane
if (XMLUtils::GetInt(pControlNode, "angle", angle)) labelInfo.angle = (float)-angle;
CStdString strFont;
if (XMLUtils::GetString(pControlNode, "font", strFont))
labelInfo.font = g_fontManager.GetFont(strFont);
GetAlignment(pControlNode, "align", labelInfo.align);
uint32_t alignY = 0;
if (GetAlignmentY(pControlNode, "aligny", alignY))
labelInfo.align |= alignY;
if (XMLUtils::GetFloat(pControlNode, "textwidth", labelInfo.width))
labelInfo.align |= XBFONT_TRUNCATED;
示例8: upgradeFrom3_0
void upgradeFrom3_0()
{
// 3.0 had process definition files in /etc/sipxpbx/process.d
UtlString oldProcessDefinitionDirectory =
SipXecsService::Path(SipXecsService::ConfigurationDirType, "process-old.d");
OsSysLog::add(FAC_SUPERVISOR, PRI_DEBUG,"upgradeFrom3_0: searching '%s'",
oldProcessDefinitionDirectory.data()
);
if ( !OsFileSystem::exists( oldProcessDefinitionDirectory) )
{
return;
}
OsFileIterator definitions(oldProcessDefinitionDirectory);
OsPath oldProcessDefinitionFile;
bool okToRemoveDir = true; // set to false if any pre-4.0 process file cannot be upgraded
for ( OsStatus iteratorStatus = definitions.findFirst(oldProcessDefinitionFile,
OLD_PROCESS_DEFINITION_NAME_PATTERN,
OsFileIterator::FILES);
OS_SUCCESS == iteratorStatus;
iteratorStatus = definitions.findNext(oldProcessDefinitionFile)
)
{
OsPath oldProcessDefinitionPath( oldProcessDefinitionDirectory
+OsPath::separator
+oldProcessDefinitionFile
);
OsSysLog::add(FAC_SUPERVISOR, PRI_INFO,"upgradeFrom3_0: reading pre-4.0 process def '%s'",
oldProcessDefinitionPath.data()
);
// read the process name and the watchdog enable setting,
// and enable the process if necessary
TiXmlDocument processDefinitionDoc(oldProcessDefinitionPath);
bool definitionValid = true;
UtlString errorMsg;
if ( processDefinitionDoc.LoadFile() )
{
TiXmlElement *subroot = processDefinitionDoc.RootElement();
if (subroot != NULL)
{
bool bEnabled=false;
const char *enableString = subroot->Attribute("enable");
if (enableString == NULL || strcmp(enableString, "true")==0)
{
bEnabled=true;
}
TiXmlElement* processDefElement = subroot->FirstChildElement("process_definitions");
if (processDefElement)
{
TiXmlNode *pGroupNode = processDefElement->FirstChild("group");
if (pGroupNode)
{
TiXmlElement *processElement = pGroupNode->FirstChildElement("process");
if (processElement)
{
const char *pMsg = processElement->Attribute("name");
UtlString processName = pMsg;
// enable or disable process based on setting in old process def file
SipxProcess* newProcess;
if ((newProcess=SipxProcessManager::getInstance()->findProcess(processName)))
{
if (bEnabled)
{
OsSysLog::add(FAC_SUPERVISOR, PRI_NOTICE,
"upgradeFrom3_0: enabling process '%s'", processName.data());
newProcess->enable();
}
else
{
OsSysLog::add(FAC_SUPERVISOR, PRI_NOTICE,
"upgradeFrom3_0: disabling process '%s'", processName.data());
newProcess->disable();
}
if (OS_SUCCESS == OsFileSystem::remove(oldProcessDefinitionPath))
{
OsSysLog::add(FAC_SUPERVISOR, PRI_NOTICE,
"upgradeFrom3_0: removing pre-4.0 process def file '%s'",
oldProcessDefinitionPath.data());
}
else
{
OsSysLog::add(FAC_SUPERVISOR, PRI_ERR,
"upgradeFrom3_0: failed to remove pre-4.0 process def file '%s'",
oldProcessDefinitionPath.data());
}
}
else
{
OsSysLog::add(FAC_SUPERVISOR, PRI_ERR,
"upgradeFrom3_0: could not find process '%s'", processName.data());
okToRemoveDir = false;
}
}
//.........这里部分代码省略.........
示例9: Load
bool CGUIWindow::Load(TiXmlDocument &xmlDoc)
{
TiXmlElement* pRootElement = xmlDoc.RootElement();
if (strcmpi(pRootElement->Value(), "window"))
{
CLog::Log(LOGERROR, "file : XML file doesnt contain <window>");
return false;
}
// set the scaling resolution so that any control creation or initialisation can
// be done with respect to the correct aspect ratio
g_graphicsContext.SetScalingResolution(m_coordsRes, m_needsScaling);
// Resolve any includes that may be present
g_SkinInfo->ResolveIncludes(pRootElement);
// now load in the skin file
SetDefaults();
CGUIControlFactory::GetInfoColor(pRootElement, "backgroundcolor", m_clearBackground);
CGUIControlFactory::GetMultipleString(pRootElement, "onload", m_loadActions);
CGUIControlFactory::GetMultipleString(pRootElement, "onunload", m_unloadActions);
CGUIControlFactory::GetHitRect(pRootElement, m_hitRect);
TiXmlElement *pChild = pRootElement->FirstChildElement();
while (pChild)
{
CStdString strValue = pChild->Value();
if (strValue == "type" && pChild->FirstChild())
{
// if we have are a window type (ie not a dialog), and we have <type>dialog</type>
// then make this window act like a dialog
if (!IsDialog() && strcmpi(pChild->FirstChild()->Value(), "dialog") == 0)
m_isDialog = true;
}
else if (strValue == "previouswindow" && pChild->FirstChild())
{
m_previousWindow = CButtonTranslator::TranslateWindow(pChild->FirstChild()->Value());
}
else if (strValue == "defaultcontrol" && pChild->FirstChild())
{
const char *always = pChild->Attribute("always");
if (always && strcmpi(always, "true") == 0)
m_defaultAlways = true;
m_defaultControl = atoi(pChild->FirstChild()->Value());
}
else if (strValue == "visible" && pChild->FirstChild())
{
CStdString condition;
CGUIControlFactory::GetConditionalVisibility(pRootElement, condition);
m_visibleCondition = g_infoManager.Register(condition, GetID());
}
else if (strValue == "animation" && pChild->FirstChild())
{
CRect rect(0, 0, (float)m_coordsRes.iWidth, (float)m_coordsRes.iHeight);
CAnimation anim;
anim.Create(pChild, rect, GetID());
m_animations.push_back(anim);
}
else if (strValue == "zorder" && pChild->FirstChild())
{
m_renderOrder = atoi(pChild->FirstChild()->Value());
}
else if (strValue == "coordinates")
{
XMLUtils::GetFloat(pChild, "posx", m_posX);
XMLUtils::GetFloat(pChild, "posy", m_posY);
TiXmlElement *originElement = pChild->FirstChildElement("origin");
while (originElement)
{
COrigin origin;
originElement->QueryFloatAttribute("x", &origin.x);
originElement->QueryFloatAttribute("y", &origin.y);
if (originElement->FirstChild())
origin.condition = g_infoManager.Register(originElement->FirstChild()->Value(), GetID());
m_origins.push_back(origin);
originElement = originElement->NextSiblingElement("origin");
}
}
else if (strValue == "camera")
{ // z is fixed
pChild->QueryFloatAttribute("x", &m_camera.x);
pChild->QueryFloatAttribute("y", &m_camera.y);
m_hasCamera = true;
}
else if (strValue == "controls")
{
TiXmlElement *pControl = pChild->FirstChildElement();
while (pControl)
{
if (strcmpi(pControl->Value(), "control") == 0)
{
LoadControl(pControl, NULL);
}
pControl = pControl->NextSiblingElement();
}
}
else if (strValue == "allowoverlay")
{
bool overlay = false;
//.........这里部分代码省略.........
示例10: FindAlbuminfo
void CMusicInfoScraper::FindAlbuminfo()
{
CStdString strAlbum=m_strAlbum;
CStdString strHTML;
m_vecAlbums.erase(m_vecAlbums.begin(), m_vecAlbums.end());
CScraperParser parser;
if (!parser.Load(_P("q:\\system\\scrapers\\music\\"+m_info.strPath)))
return;
if (!m_info.settings.GetPluginRoot() || m_info.settings.GetSettings().IsEmpty())
{
m_info.settings.LoadSettingsXML(_P("q:\\system\\scrapers\\music\\"+m_info.strPath));
m_info.settings.SaveFromDefault();
}
parser.m_param[0] = strAlbum;
parser.m_param[1] = m_strArtist;
CUtil::URLEncode(parser.m_param[0]);
CUtil::URLEncode(parser.m_param[1]);
CScraperUrl scrURL;
scrURL.ParseString(parser.Parse("CreateAlbumSearchUrl"));
if (!CScraperUrl::Get(scrURL.m_url[0], strHTML, m_http) || strHTML.size() == 0)
{
CLog::Log(LOGERROR, "%s: Unable to retrieve web site",__FUNCTION__);
return;
}
parser.m_param[0] = strHTML;
CStdString strXML = parser.Parse("GetAlbumSearchResults",&m_info.settings);
if (strXML.IsEmpty())
{
CLog::Log(LOGERROR, "%s: Unable to parse web site",__FUNCTION__);
return;
}
if (strXML.Find("encoding=\"utf-8\"") < 0)
g_charsetConverter.stringCharsetToUtf8(strXML);
// ok, now parse the xml file
TiXmlDocument doc;
doc.Parse(strXML.c_str(),0,TIXML_ENCODING_UTF8);
if (!doc.RootElement())
{
CLog::Log(LOGERROR, "%s: Unable to parse xml",__FUNCTION__);
return;
}
TiXmlHandle docHandle( &doc );
TiXmlElement* album = docHandle.FirstChild( "results" ).FirstChild( "entity" ).Element();
if (!album)
return;
while (album)
{
TiXmlNode* title = album->FirstChild("title");
TiXmlElement* link = album->FirstChildElement("url");
TiXmlNode* artist = album->FirstChild("artist");
TiXmlNode* year = album->FirstChild("year");
if (title && title->FirstChild())
{
CStdString strTitle = title->FirstChild()->Value();
CStdString strArtist;
CStdString strAlbumName;
if (artist && artist->FirstChild())
{
strArtist = artist->FirstChild()->Value();
strAlbumName.Format("%s - %s",strArtist.c_str(),strTitle.c_str());
}
else
strAlbumName = strTitle;
if (year && year->FirstChild())
strAlbumName.Format("%s (%s)",strAlbumName.c_str(),year->FirstChild()->Value());
CScraperUrl url;
if (!link)
url.ParseString(scrURL.m_xml);
while (link && link->FirstChild())
{
url.ParseElement(link);
link = link->NextSiblingElement("url");
}
CMusicAlbumInfo newAlbum(strTitle, strArtist, strAlbumName, url);
m_vecAlbums.push_back(newAlbum);
}
album = album->NextSiblingElement();
}
if (m_vecAlbums.size()>0)
m_bSuccessfull=true;
return;
}
示例11: GetDirectory
bool CRSSDirectory::GetDirectory(const CStdString& path, CFileItemList &items)
{
CStdString strPath(path);
URIUtils::RemoveSlashAtEnd(strPath);
std::map<CStdString,CDateTime>::iterator it;
items.SetPath(strPath);
CSingleLock lock(m_section);
if ((it=m_cache.find(strPath)) != m_cache.end())
{
if (it->second > CDateTime::GetCurrentDateTime() &&
items.Load())
return true;
m_cache.erase(it);
}
lock.Leave();
CXBMCTinyXML xmlDoc;
if (!xmlDoc.LoadFile(strPath))
{
CLog::Log(LOGERROR,"failed to load xml from <%s>. error: <%d>", strPath.c_str(), xmlDoc.ErrorId());
return false;
}
if (xmlDoc.Error())
{
CLog::Log(LOGERROR,"error parsing xml doc from <%s>. error: <%d>", strPath.c_str(), xmlDoc.ErrorId());
return false;
}
TiXmlElement* rssXmlNode = xmlDoc.RootElement();
if (!rssXmlNode)
return false;
TiXmlHandle docHandle( &xmlDoc );
TiXmlElement* channelXmlNode = docHandle.FirstChild( "rss" ).FirstChild( "channel" ).Element();
if (channelXmlNode)
ParseItem(&items, channelXmlNode, path);
else
return false;
TiXmlElement* child = NULL;
for (child = channelXmlNode->FirstChildElement("item"); child; child = child->NextSiblingElement())
{
// Create new item,
CFileItemPtr item(new CFileItem());
ParseItem(item.get(), child, path);
item->SetProperty("isrss", "1");
if (!item->GetPath().IsEmpty())
items.Add(item);
}
items.AddSortMethod(SORT_METHOD_UNSORTED , 231, LABEL_MASKS("%L", "%D", "%L", "")); // FileName, Duration | Foldername, empty
items.AddSortMethod(SORT_METHOD_LABEL , 551, LABEL_MASKS("%L", "%D", "%L", "")); // FileName, Duration | Foldername, empty
items.AddSortMethod(SORT_METHOD_SIZE , 553, LABEL_MASKS("%L", "%I", "%L", "%I")); // FileName, Size | Foldername, Size
items.AddSortMethod(SORT_METHOD_DATE , 552, LABEL_MASKS("%L", "%J", "%L", "%J")); // FileName, Date | Foldername, Date
CDateTime time = CDateTime::GetCurrentDateTime();
int mins = 60;
TiXmlElement* ttl = docHandle.FirstChild("rss").FirstChild("ttl").Element();
if (ttl)
mins = strtol(ttl->FirstChild()->Value(),NULL,10);
time += CDateTimeSpan(0,0,mins,0);
items.SetPath(strPath);
items.Save();
CSingleLock lock2(m_section);
m_cache.insert(make_pair(strPath,time));
return true;
}
示例12: read_SettingsXML
void CSettingsManager::read_SettingsXML()
{
TiXmlDocument xmlDoc;
if(!xmlDoc.LoadFile(m_XMLFilename))
{
KODI->Log(LOG_NOTICE, "No initial settings XML file found.");
return;
}
TiXmlElement *pRootElement = xmlDoc.RootElement();
if(!pRootElement)
{
KODI->Log(LOG_NOTICE, "Settings XML file is empty.");
return;
}
string mainCategory = pRootElement->Value();
for(TiXmlNode *pGroupNode = pRootElement->FirstChild(); pGroupNode != NULL; pGroupNode = pRootElement->IterateChildren(pGroupNode))
{
if(pGroupNode->ValueStr() == "settings_group")
{
ATTRIBUTES_LIST groupAttributesList;
if(pGroupNode && pGroupNode->Type() == TiXmlNode::TINYXML_ELEMENT)
{
getAttributesAsList(pGroupNode->ToElement(), groupAttributesList);
}
if(pGroupNode && pGroupNode->Type() == TiXmlNode::TINYXML_ELEMENT && groupAttributesList.size() == 2 && pGroupNode->ValueStr() == "settings_group")
{
string subCategory = "";
string groupName = "";
for(ATTRIBUTES_LIST::iterator iter = groupAttributesList.begin(); iter != groupAttributesList.end(); iter++)
{
if(iter->first == "sub_category")
{
subCategory = iter->second;
}
if(iter->first == "group_name")
{
groupName = iter->second;
}
}
for(TiXmlNode *pKeyNode = pGroupNode->FirstChild(); pKeyNode != NULL; pKeyNode = pGroupNode->IterateChildren(pKeyNode))
{
if(pKeyNode && pKeyNode->Type() == TiXmlNode::TINYXML_ELEMENT && pKeyNode->ValueStr() == "setting")
{
ATTRIBUTES_LIST settingAttributesList;
if(getAttributesAsList(pKeyNode->ToElement(), settingAttributesList) == 2)
{
string key = "";
ISettingsElement::SettingsTypes type = ISettingsElement::UNKNOWN_SETTING;
string value = "";
for(ATTRIBUTES_LIST::iterator iter = settingAttributesList.begin(); iter != settingAttributesList.end(); iter++)
{
if(iter->first == "key")
{
key = iter->second;
}
else
{
type = CSettingsHelpers::TranslateTypeStrToEnum(iter->first);
value = iter->second;
}
}
ISettingsElement *setting = find_Setting(mainCategory, subCategory, groupName, key);
if(setting && setting->get_Type() == type)
{
switch(type)
{
case ISettingsElement::STRING_SETTING:
STRING_SETTINGS(setting)->set_Setting(value);
break;
case ISettingsElement::UNSIGNED_INT_SETTING:
{
unsigned int val = stringToVal<unsigned int>(value);
UNSIGNED_INT_SETTINGS(setting)->set_Setting(val);
}
break;
case ISettingsElement::INT_SETTING:
{
int val = stringToVal<int>(value);
INT_SETTINGS(setting)->set_Setting(val);
}
break;
case ISettingsElement::FLOAT_SETTING:
{
float val = stringToVal<float>(value);
FLOAT_SETTINGS(setting)->set_Setting(val);
}
break;
case ISettingsElement::DOUBLE_SETTING:
{
double val = stringToVal<double>(value);
//.........这里部分代码省略.........
示例13: ParseExpression
void CScraperParser::ParseExpression(const std::string& input, std::string& dest, TiXmlElement* element, bool bAppend)
{
std::string strOutput = XMLUtils::GetAttribute(element, "output");
TiXmlElement* pExpression = element->FirstChildElement("expression");
if (pExpression)
{
bool bInsensitive=true;
const char* sensitive = pExpression->Attribute("cs");
if (sensitive)
if (stricmp(sensitive,"yes") == 0)
bInsensitive=false; // match case sensitive
CRegExp::utf8Mode eUtf8 = CRegExp::autoUtf8;
const char* const strUtf8 = pExpression->Attribute("utf8");
if (strUtf8)
{
if (stricmp(strUtf8, "yes") == 0)
eUtf8 = CRegExp::forceUtf8;
else if (stricmp(strUtf8, "no") == 0)
eUtf8 = CRegExp::asciiOnly;
else if (stricmp(strUtf8, "auto") == 0)
eUtf8 = CRegExp::autoUtf8;
}
CRegExp reg(bInsensitive, eUtf8);
std::string strExpression;
if (pExpression->FirstChild())
strExpression = pExpression->FirstChild()->Value();
else
strExpression = "(.*)";
ReplaceBuffers(strExpression);
ReplaceBuffers(strOutput);
if (!reg.RegComp(strExpression.c_str()))
{
return;
}
bool bRepeat = false;
const char* szRepeat = pExpression->Attribute("repeat");
if (szRepeat)
if (stricmp(szRepeat,"yes") == 0)
bRepeat = true;
const char* szClear = pExpression->Attribute("clear");
if (szClear)
if (stricmp(szClear,"yes") == 0)
dest=""; // clear no matter if regexp fails
bool bClean[MAX_SCRAPER_BUFFERS];
GetBufferParams(bClean,pExpression->Attribute("noclean"),true);
bool bTrim[MAX_SCRAPER_BUFFERS];
GetBufferParams(bTrim,pExpression->Attribute("trim"),false);
bool bFixChars[MAX_SCRAPER_BUFFERS];
GetBufferParams(bFixChars,pExpression->Attribute("fixchars"),false);
bool bEncode[MAX_SCRAPER_BUFFERS];
GetBufferParams(bEncode,pExpression->Attribute("encode"),false);
int iOptional = -1;
pExpression->QueryIntAttribute("optional",&iOptional);
int iCompare = -1;
pExpression->QueryIntAttribute("compare",&iCompare);
if (iCompare > -1)
StringUtils::ToLower(m_param[iCompare-1]);
std::string curInput = input;
for (int iBuf=0;iBuf<MAX_SCRAPER_BUFFERS;++iBuf)
{
if (bClean[iBuf])
InsertToken(strOutput,iBuf+1,"!!!CLEAN!!!");
if (bTrim[iBuf])
InsertToken(strOutput,iBuf+1,"!!!TRIM!!!");
if (bFixChars[iBuf])
InsertToken(strOutput,iBuf+1,"!!!FIXCHARS!!!");
if (bEncode[iBuf])
InsertToken(strOutput,iBuf+1,"!!!ENCODE!!!");
}
int i = reg.RegFind(curInput.c_str());
while (i > -1 && (i < (int)curInput.size() || curInput.empty()))
{
if (!bAppend)
{
dest = "";
bAppend = true;
}
std::string strCurOutput=strOutput;
if (iOptional > -1) // check that required param is there
{
char temp[12];
sprintf(temp,"\\%i",iOptional);
std::string szParam = reg.GetReplaceString(temp);
CRegExp reg2;
reg2.RegComp("(.*)(\\\\\\(.*\\\\2.*)\\\\\\)(.*)");
int i2=reg2.RegFind(strCurOutput.c_str());
while (i2 > -1)
//.........这里部分代码省略.........