aboutsummaryrefslogtreecommitdiff
path: root/guilib/GUIControlFactory.cpp
diff options
context:
space:
mode:
authortheuni <theuni-nospam-@xbmc.org>2011-01-24 16:05:21 -0500
committertheuni <theuni-nospam-@xbmc.org>2011-01-24 16:05:21 -0500
commitc51b1189e3d5353e842991f5859ddcea0f73e426 (patch)
treeef2cb8a6184699aa614f3655dca4ce661cdc108e /guilib/GUIControlFactory.cpp
parentbe61ebdc9e897fe40c6f371111724de79ddee8d5 (diff)
Merged cptspiff's code-reshuffle branch.
Squashed commit due to build breakage during code-reshuffle history. Conflicts: xbmc/Util.cpp xbmc/cdrip/CDDARipper.cpp xbmc/filesystem/Directory.cpp xbmc/filesystem/File.cpp
Diffstat (limited to 'guilib/GUIControlFactory.cpp')
-rw-r--r--guilib/GUIControlFactory.cpp1356
1 files changed, 0 insertions, 1356 deletions
diff --git a/guilib/GUIControlFactory.cpp b/guilib/GUIControlFactory.cpp
deleted file mode 100644
index 63bac831cc..0000000000
--- a/guilib/GUIControlFactory.cpp
+++ /dev/null
@@ -1,1356 +0,0 @@
-/*
- * Copyright (C) 2005-2008 Team XBMC
- * http://www.xbmc.org
- *
- * This Program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This Program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with XBMC; see the file COPYING. If not, write to
- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- */
-
-#include "GUIControlFactory.h"
-#include "LocalizeStrings.h"
-#include "GUIButtonControl.h"
-#include "GUIRadioButtonControl.h"
-#include "GUISpinControl.h"
-#include "GUIRSSControl.h"
-#include "GUIImage.h"
-#include "GUIBorderedImage.h"
-#include "GUILabelControl.h"
-#include "GUIEditControl.h"
-#include "GUIFadeLabelControl.h"
-#include "GUICheckMarkControl.h"
-#include "GUIToggleButtonControl.h"
-#include "GUITextBox.h"
-#include "GUIVideoControl.h"
-#include "GUIProgressControl.h"
-#include "GUISliderControl.h"
-#include "GUISelectButtonControl.h"
-#include "GUIMoverControl.h"
-#include "GUIResizeControl.h"
-#include "GUIButtonScroller.h"
-#include "GUISpinControlEx.h"
-#include "GUIVisualisationControl.h"
-#include "GUISettingsSliderControl.h"
-#include "GUIMultiImage.h"
-#include "GUIControlGroup.h"
-#include "GUIControlGroupList.h"
-#include "GUIScrollBarControl.h"
-#include "GUIListContainer.h"
-#include "GUIFixedListContainer.h"
-#include "GUIWrappingListContainer.h"
-#include "GUIPanelContainer.h"
-#include "GUIMultiSelectText.h"
-#include "GUIListLabel.h"
-#include "GUIListGroup.h"
-#include "utils/GUIInfoManager.h"
-#include "utils/CharsetConverter.h"
-#include "utils/log.h"
-#include "ButtonTranslator.h"
-#include "XMLUtils.h"
-#include "GUIFontManager.h"
-#include "GUIColorManager.h"
-#include "Settings.h"
-#include "StringUtils.h"
-
-using namespace std;
-
-typedef struct
-{
- const char* name;
- CGUIControl::GUICONTROLTYPES type;
-} ControlMapping;
-
-static const ControlMapping controls[] =
- {{"button", CGUIControl::GUICONTROL_BUTTON},
- {"checkmark", CGUIControl::GUICONTROL_CHECKMARK},
- {"fadelabel", CGUIControl::GUICONTROL_FADELABEL},
- {"image", CGUIControl::GUICONTROL_IMAGE},
- {"largeimage", CGUIControl::GUICONTROL_IMAGE},
- {"image", CGUIControl::GUICONTROL_BORDEREDIMAGE},
- {"label", CGUIControl::GUICONTROL_LABEL},
- {"label", CGUIControl::GUICONTROL_LISTLABEL},
- {"group", CGUIControl::GUICONTROL_GROUP},
- {"group", CGUIControl::GUICONTROL_LISTGROUP},
- {"progress", CGUIControl::GUICONTROL_PROGRESS},
- {"radiobutton", CGUIControl::GUICONTROL_RADIO},
- {"rss", CGUIControl::GUICONTROL_RSS},
- {"selectbutton", CGUIControl::GUICONTROL_SELECTBUTTON},
- {"slider", CGUIControl::GUICONTROL_SLIDER},
- {"sliderex", CGUIControl::GUICONTROL_SETTINGS_SLIDER},
- {"spincontrol", CGUIControl::GUICONTROL_SPIN},
- {"spincontrolex", CGUIControl::GUICONTROL_SPINEX},
- {"textbox", CGUIControl::GUICONTROL_TEXTBOX},
- {"togglebutton", CGUIControl::GUICONTROL_TOGGLEBUTTON},
- {"videowindow", CGUIControl::GUICONTROL_VIDEO},
- {"mover", CGUIControl::GUICONTROL_MOVER},
- {"resize", CGUIControl::GUICONTROL_RESIZE},
- {"buttonscroller", CGUIControl::GUICONTROL_BUTTONBAR},
- {"edit", CGUIControl::GUICONTROL_EDIT},
- {"visualisation", CGUIControl::GUICONTROL_VISUALISATION},
- {"karvisualisation", CGUIControl::GUICONTROL_VISUALISATION},
- {"renderaddon", CGUIControl::GUICONTROL_RENDERADDON},
- {"multiimage", CGUIControl::GUICONTROL_MULTI_IMAGE},
- {"grouplist", CGUIControl::GUICONTROL_GROUPLIST},
- {"scrollbar", CGUIControl::GUICONTROL_SCROLLBAR},
- {"multiselect", CGUIControl::GUICONTROL_MULTISELECT},
- {"list", CGUIControl::GUICONTAINER_LIST},
- {"wraplist", CGUIControl::GUICONTAINER_WRAPLIST},
- {"fixedlist", CGUIControl::GUICONTAINER_FIXEDLIST},
- {"panel", CGUIControl::GUICONTAINER_PANEL}};
-
-CGUIControl::GUICONTROLTYPES CGUIControlFactory::TranslateControlType(const CStdString &type)
-{
- for (unsigned int i = 0; i < sizeof(controls) / sizeof(controls[0]); ++i)
- if (0 == type.CompareNoCase(controls[i].name))
- return controls[i].type;
- return CGUIControl::GUICONTROL_UNKNOWN;
-}
-
-CStdString CGUIControlFactory::TranslateControlType(CGUIControl::GUICONTROLTYPES type)
-{
- for (unsigned int i = 0; i < sizeof(controls) / sizeof(controls[0]); ++i)
- if (type == controls[i].type)
- return controls[i].name;
- return "";
-}
-
-CGUIControlFactory::CGUIControlFactory(void)
-{}
-
-CGUIControlFactory::~CGUIControlFactory(void)
-{}
-
-bool CGUIControlFactory::GetIntRange(const TiXmlNode* pRootNode, const char* strTag, int& iMinValue, int& iMaxValue, int& iIntervalValue)
-{
- const TiXmlNode* pNode = pRootNode->FirstChild(strTag);
- if (!pNode || !pNode->FirstChild()) return false;
- iMinValue = atoi(pNode->FirstChild()->Value());
- const char* maxValue = strchr(pNode->FirstChild()->Value(), ',');
- if (maxValue)
- {
- maxValue++;
- iMaxValue = atoi(maxValue);
-
- const char* intervalValue = strchr(maxValue, ',');
- if (intervalValue)
- {
- intervalValue++;
- iIntervalValue = atoi(intervalValue);
- }
- }
-
- return true;
-}
-
-bool CGUIControlFactory::GetFloatRange(const TiXmlNode* pRootNode, const char* strTag, float& fMinValue, float& fMaxValue, float& fIntervalValue)
-{
- const TiXmlNode* pNode = pRootNode->FirstChild(strTag);
- if (!pNode || !pNode->FirstChild()) return false;
- fMinValue = (float)atof(pNode->FirstChild()->Value());
- const char* maxValue = strchr(pNode->FirstChild()->Value(), ',');
- if (maxValue)
- {
- maxValue++;
- fMaxValue = (float)atof(maxValue);
-
- const char* intervalValue = strchr(maxValue, ',');
- if (intervalValue)
- {
- intervalValue++;
- fIntervalValue = (float)atof(intervalValue);
- }
- }
-
- return true;
-}
-
-bool CGUIControlFactory::GetDimension(const TiXmlNode *pRootNode, const char* strTag, float &value, float &min)
-{
- const TiXmlElement* pNode = pRootNode->FirstChildElement(strTag);
- if (!pNode || !pNode->FirstChild()) return false;
- if (0 == strnicmp("auto", pNode->FirstChild()->Value(), 4))
- { // auto-width - at least min must be set
- pNode->QueryFloatAttribute("max", &value);
- pNode->QueryFloatAttribute("min", &min);
- if (!min) min = 1;
- return true;
- }
- value = (float)atof(pNode->FirstChild()->Value());
- return true;
-}
-
-bool CGUIControlFactory::GetMultipleString(const TiXmlNode* pRootNode, const char* strTag, std::vector<CGUIActionDescriptor>& vecStringValue)
-{
- const TiXmlNode* pNode = pRootNode->FirstChild(strTag );
- if (!pNode) return false;
- vecStringValue.clear();
- bool bFound = false;
- while (pNode)
- {
- CGUIActionDescriptor action;
- if (CGUIControlFactory::GetAction((const TiXmlElement*) pNode, action))
- {
- vecStringValue.push_back(action);
- bFound = true;
- }
- pNode = pNode->NextSibling(strTag);
- }
- return bFound;
-}
-
-bool CGUIControlFactory::GetAction(const TiXmlElement* pElement, CGUIActionDescriptor &action)
-{
- CStdString langStr = pElement->Attribute("lang");
- if (langStr.CompareNoCase("python") == 0 )
- action.m_lang = CGUIActionDescriptor::LANG_PYTHON;
- else
- action.m_lang = CGUIActionDescriptor::LANG_XBMC;
-
- if (pElement->FirstChild())
- {
- action.m_action = pElement->FirstChild()->Value();
- return true;
- }
- else
- {
- action.m_action = "";
- return false;
- }
-}
-
-bool CGUIControlFactory::GetAspectRatio(const TiXmlNode* pRootNode, const char* strTag, CAspectRatio &aspect)
-{
- CStdString ratio;
- const TiXmlElement *node = pRootNode->FirstChildElement(strTag);
- if (!node || !node->FirstChild())
- return false;
-
- ratio = node->FirstChild()->Value();
- if (ratio.CompareNoCase("keep") == 0) aspect.ratio = CAspectRatio::AR_KEEP;
- else if (ratio.CompareNoCase("scale") == 0) aspect.ratio = CAspectRatio::AR_SCALE;
- else if (ratio.CompareNoCase("center") == 0) aspect.ratio = CAspectRatio::AR_CENTER;
- else if (ratio.CompareNoCase("stretch") == 0) aspect.ratio = CAspectRatio::AR_STRETCH;
-
- const char *attribute = node->Attribute("align");
- if (attribute)
- {
- CStdString align(attribute);
- if (align.CompareNoCase("center") == 0) aspect.align = ASPECT_ALIGN_CENTER | (aspect.align & ASPECT_ALIGNY_MASK);
- else if (align.CompareNoCase("right") == 0) aspect.align = ASPECT_ALIGN_RIGHT | (aspect.align & ASPECT_ALIGNY_MASK);
- else if (align.CompareNoCase("left") == 0) aspect.align = ASPECT_ALIGN_LEFT | (aspect.align & ASPECT_ALIGNY_MASK);
- }
- attribute = node->Attribute("aligny");
- if (attribute)
- {
- CStdString align(attribute);
- if (align.CompareNoCase("center") == 0) aspect.align = ASPECT_ALIGNY_CENTER | (aspect.align & ASPECT_ALIGN_MASK);
- else if (align.CompareNoCase("bottom") == 0) aspect.align = ASPECT_ALIGNY_BOTTOM | (aspect.align & ASPECT_ALIGN_MASK);
- else if (align.CompareNoCase("top") == 0) aspect.align = ASPECT_ALIGNY_TOP | (aspect.align & ASPECT_ALIGN_MASK);
- }
- attribute = node->Attribute("scalediffuse");
- if (attribute)
- {
- CStdString scale(attribute);
- if (scale.CompareNoCase("true") == 0 || scale.CompareNoCase("yes") == 0)
- aspect.scaleDiffuse = true;
- else
- aspect.scaleDiffuse = false;
- }
- return true;
-}
-
-bool CGUIControlFactory::GetInfoTexture(const TiXmlNode* pRootNode, const char* strTag, CTextureInfo &image, CGUIInfoLabel &info)
-{
- GetTexture(pRootNode, strTag, image);
- image.filename = "";
- GetInfoLabel(pRootNode, strTag, info);
- return true;
-}
-
-bool CGUIControlFactory::GetTexture(const TiXmlNode* pRootNode, const char* strTag, CTextureInfo &image)
-{
- const TiXmlElement* pNode = pRootNode->FirstChildElement(strTag);
- if (!pNode) return false;
- const char *border = pNode->Attribute("border");
- if (border)
- GetRectFromString(border, image.border);
- image.orientation = 0;
- const char *flipX = pNode->Attribute("flipx");
- if (flipX && strcmpi(flipX, "true") == 0) image.orientation = 1;
- const char *flipY = pNode->Attribute("flipy");
- if (flipY && strcmpi(flipY, "true") == 0) image.orientation = 3 - image.orientation; // either 3 or 2
- image.diffuse = pNode->Attribute("diffuse");
- const char *background = pNode->Attribute("background");
- if (background && strnicmp(background, "true", 4) == 0)
- image.useLarge = true;
- image.filename = (pNode->FirstChild() && pNode->FirstChild()->ValueStr() != "-") ? pNode->FirstChild()->Value() : "";
- return true;
-}
-
-void CGUIControlFactory::GetRectFromString(const CStdString &string, CRect &rect)
-{
- // format is rect="left[,top,right,bottom]"
- CStdStringArray strRect;
- StringUtils::SplitString(string, ",", strRect);
- if (strRect.size() == 1)
- {
- rect.x1 = (float)atof(strRect[0].c_str());
- rect.y1 = rect.x1;
- rect.x2 = rect.x1;
- rect.y2 = rect.x1;
- }
- else if (strRect.size() == 4)
- {
- rect.x1 = (float)atof(strRect[0].c_str());
- rect.y1 = (float)atof(strRect[1].c_str());
- rect.x2 = (float)atof(strRect[2].c_str());
- rect.y2 = (float)atof(strRect[3].c_str());
- }
-}
-
-bool CGUIControlFactory::GetAlignment(const TiXmlNode* pRootNode, const char* strTag, uint32_t& alignment)
-{
- const TiXmlNode* pNode = pRootNode->FirstChild(strTag);
- if (!pNode || !pNode->FirstChild()) return false;
-
- CStdString strAlign = pNode->FirstChild()->Value();
- if (strAlign == "right" || strAlign == "bottom") alignment = XBFONT_RIGHT;
- else if (strAlign == "center") alignment = XBFONT_CENTER_X;
- else if (strAlign == "justify") alignment = XBFONT_JUSTIFIED;
- else alignment = XBFONT_LEFT;
- return true;
-}
-
-bool CGUIControlFactory::GetAlignmentY(const TiXmlNode* pRootNode, const char* strTag, uint32_t& alignment)
-{
- const TiXmlNode* pNode = pRootNode->FirstChild(strTag );
- if (!pNode || !pNode->FirstChild())
- {
- return false;
- }
-
- CStdString strAlign = pNode->FirstChild()->Value();
-
- alignment = 0;
- if (strAlign == "center")
- {
- alignment = XBFONT_CENTER_Y;
- }
-
- return true;
-}
-
-bool CGUIControlFactory::GetConditionalVisibility(const TiXmlNode* control, int &condition, CGUIInfoBool &allowHiddenFocus)
-{
- const TiXmlElement* node = control->FirstChildElement("visible");
- if (!node) return false;
- vector<CStdString> conditions;
- while (node)
- {
- const char *hidden = node->Attribute("allowhiddenfocus");
- if (hidden)
- allowHiddenFocus.Parse(hidden);
- // add to our condition string
- if (!node->NoChildren())
- conditions.push_back(node->FirstChild()->Value());
- node = node->NextSiblingElement("visible");
- }
- if (!conditions.size())
- return false;
- if (conditions.size() == 1)
- condition = g_infoManager.TranslateString(conditions[0]);
- else
- { // multiple conditions should be anded together
- CStdString conditionString = "[";
- for (unsigned int i = 0; i < conditions.size() - 1; i++)
- conditionString += conditions[i] + "] + [";
- conditionString += conditions[conditions.size() - 1] + "]";
- condition = g_infoManager.TranslateString(conditionString);
- }
- return (condition != 0);
-}
-
-bool CGUIControlFactory::GetCondition(const TiXmlNode *control, const char *tag, int &condition)
-{
- CStdString condString;
- if (XMLUtils::GetString(control, tag, condString))
- {
- condition = g_infoManager.TranslateString(condString);
- return true;
- }
- return false;
-}
-
-bool CGUIControlFactory::GetConditionalVisibility(const TiXmlNode *control, int &condition)
-{
- CGUIInfoBool allowHiddenFocus;
- return GetConditionalVisibility(control, condition, allowHiddenFocus);
-}
-
-bool CGUIControlFactory::GetAnimations(TiXmlNode *control, const CRect &rect, vector<CAnimation> &animations)
-{
- TiXmlElement* node = control->FirstChildElement("animation");
- bool ret = false;
- if (node)
- animations.clear();
- while (node)
- {
- ret = true;
- if (node->FirstChild())
- {
- CAnimation anim;
- anim.Create(node, rect);
- animations.push_back(anim);
- if (strcmpi(node->FirstChild()->Value(), "VisibleChange") == 0)
- { // add the hidden one as well
- TiXmlElement hidden(*node);
- hidden.FirstChild()->SetValue("hidden");
- const char *start = hidden.Attribute("start");
- const char *end = hidden.Attribute("end");
- if (start && end)
- {
- CStdString temp = end;
- hidden.SetAttribute("end", start);
- hidden.SetAttribute("start", temp.c_str());
- }
- else if (start)
- hidden.SetAttribute("end", start);
- else if (end)
- hidden.SetAttribute("start", end);
- CAnimation anim2;
- anim2.Create(&hidden, rect);
- animations.push_back(anim2);
- }
- }
- node = node->NextSiblingElement("animation");
- }
- return ret;
-}
-
-bool CGUIControlFactory::GetHitRect(const TiXmlNode *control, CRect &rect)
-{
- const TiXmlElement* node = control->FirstChildElement("hitrect");
- if (node)
- {
- node->QueryFloatAttribute("x", &rect.x1);
- node->QueryFloatAttribute("y", &rect.y1);
- if (node->Attribute("w"))
- rect.x2 = (float)atof(node->Attribute("w")) + rect.x1;
- if (node->Attribute("h"))
- rect.y2 = (float)atof(node->Attribute("h")) + rect.y1;
- return true;
- }
- return false;
-}
-
-bool CGUIControlFactory::GetColor(const TiXmlNode *control, const char *strTag, color_t &value)
-{
- const TiXmlElement* node = control->FirstChildElement(strTag);
- if (node && node->FirstChild())
- {
- value = g_colorManager.GetColor(node->FirstChild()->Value());
- return true;
- }
- return false;
-}
-
-bool CGUIControlFactory::GetInfoColor(const TiXmlNode *control, const char *strTag, CGUIInfoColor &value)
-{
- const TiXmlElement* node = control->FirstChildElement(strTag);
- if (node && node->FirstChild())
- {
- value.Parse(node->FirstChild()->Value());
- return true;
- }
- return false;
-}
-
-bool CGUIControlFactory::GetNavigation(const TiXmlElement *node, const char *tag, int &direction, vector<CGUIActionDescriptor> &actions)
-{
- if (!GetMultipleString(node, tag, actions))
- return false; // no tag specified
- if (actions.size() == 1 && StringUtils::IsNaturalNumber(actions[0].m_action))
- { // single numeric tag specified
- direction = atol(actions[0].m_action.c_str());
- actions.clear();
- }
- else
- direction = 0;
- return true;
-}
-
-void CGUIControlFactory::GetInfoLabel(const TiXmlNode *pControlNode, const CStdString &labelTag, CGUIInfoLabel &infoLabel)
-{
- vector<CGUIInfoLabel> labels;
- GetInfoLabels(pControlNode, labelTag, labels);
- if (labels.size())
- infoLabel = labels[0];
-}
-
-bool CGUIControlFactory::GetInfoLabelFromElement(const TiXmlElement *element, CGUIInfoLabel &infoLabel)
-{
- if (!element || !element->FirstChild())
- return false;
-
- CStdString label = element->FirstChild()->Value();
- if (label.IsEmpty() || label == "-")
- return false;
-
- CStdString fallback = element->Attribute("fallback");
- if (StringUtils::IsNaturalNumber(label))
- label = g_localizeStrings.Get(atoi(label));
- else // we assume the skin xml's aren't encoded as UTF-8
- g_charsetConverter.unknownToUTF8(label);
- if (StringUtils::IsNaturalNumber(fallback))
- fallback = g_localizeStrings.Get(atoi(fallback));
- else
- g_charsetConverter.unknownToUTF8(fallback);
- infoLabel.SetLabel(label, fallback);
- return true;
-}
-
-void CGUIControlFactory::GetInfoLabels(const TiXmlNode *pControlNode, const CStdString &labelTag, vector<CGUIInfoLabel> &infoLabels)
-{
- // we can have the following infolabels:
- // 1. <number>1234</number> -> direct number
- // 2. <label>number</label> -> lookup in localizestrings
- // 3. <label fallback="blah">$LOCALIZE(blah) $INFO(blah)</label> -> infolabel with given fallback
- // 4. <info>ListItem.Album</info> (uses <label> as fallback)
- int labelNumber = 0;
- if (XMLUtils::GetInt(pControlNode, "number", labelNumber))
- {
- CStdString label;
- label.Format("%i", labelNumber);
- infoLabels.push_back(CGUIInfoLabel(label));
- return; // done
- }
- const TiXmlElement *labelNode = pControlNode->FirstChildElement(labelTag);
- while (labelNode)
- {
- CGUIInfoLabel label;
- if (GetInfoLabelFromElement(labelNode, label))
- infoLabels.push_back(label);
- labelNode = labelNode->NextSiblingElement(labelTag);
- }
- const TiXmlNode *infoNode = pControlNode->FirstChild("info");
- if (infoNode)
- { // <info> nodes override <label>'s (backward compatibility)
- CStdString fallback;
- if (infoLabels.size())
- fallback = infoLabels[0].GetLabel(0);
- infoLabels.clear();
- while (infoNode)
- {
- if (infoNode->FirstChild())
- {
- CStdString info;
- info.Format("$INFO[%s]", infoNode->FirstChild()->Value());
- infoLabels.push_back(CGUIInfoLabel(info, fallback));
- }
- infoNode = infoNode->NextSibling("info");
- }
- }
-}
-
-// Convert a string to a GUI label, by translating/parsing the label for localisable strings
-CStdString CGUIControlFactory::FilterLabel(const CStdString &label)
-{
- CStdString viewLabel = label;
- if (StringUtils::IsNaturalNumber(viewLabel))
- viewLabel = g_localizeStrings.Get(atoi(label));
- else
- g_charsetConverter.unknownToUTF8(viewLabel);
- return viewLabel;
-}
-
-bool CGUIControlFactory::GetString(const TiXmlNode* pRootNode, const char *strTag, CStdString &text)
-{
- if (!XMLUtils::GetString(pRootNode, strTag, text))
- return false;
- if (text == "-")
- text.Empty();
- if (StringUtils::IsNaturalNumber(text))
- text = g_localizeStrings.Get(atoi(text.c_str()));
- else
- g_charsetConverter.unknownToUTF8(text);
- return true;
-}
-
-CStdString CGUIControlFactory::GetType(const TiXmlElement *pControlNode)
-{
- CStdString type;
- const char *szType = pControlNode->Attribute("type");
- if (szType)
- type = szType;
- else // backward compatibility - not desired
- XMLUtils::GetString(pControlNode, "type", type);
- return type;
-}
-
-CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlElement* pControlNode, bool insideContainer)
-{
- // get the control type
- CStdString strType = GetType(pControlNode);
- CGUIControl::GUICONTROLTYPES type = TranslateControlType(strType);
-
- int id = 0;
- float posX = 0, posY = 0;
- float width = 0, height = 0;
- float minWidth = 0;
-
- int left = 0, right = 0, up = 0, down = 0, next = 0, prev = 0;
- vector<CGUIActionDescriptor> leftActions, rightActions, upActions, downActions, nextActions, prevActions;
-
- int pageControl = 0;
- CGUIInfoColor colorDiffuse(0xFFFFFFFF);
- int defaultControl = 0;
- bool defaultAlways = false;
- CStdString strTmp;
- int singleInfo = 0;
- CStdString strLabel;
- int iUrlSet=0;
- int iToggleSelect;
-
- float spinWidth = 16;
- float spinHeight = 16;
- float spinPosX = 0, spinPosY = 0;
- float checkWidth = 0, checkHeight = 0;
- CStdString strSubType;
- int iType = SPIN_CONTROL_TYPE_TEXT;
- int iMin = 0;
- int iMax = 100;
- int iInterval = 1;
- float fMin = 0.0f;
- float fMax = 1.0f;
- float fInterval = 0.1f;
- bool bReverse = true;
- bool bReveal = false;
- CTextureInfo textureBackground, textureLeft, textureRight, textureMid, textureOverlay;
- CTextureInfo textureNib, textureNibFocus, textureBar, textureBarFocus;
- CTextureInfo textureLeftFocus, textureRightFocus;
- CTextureInfo textureUp, textureDown;
- CTextureInfo textureUpFocus, textureDownFocus;
- CTextureInfo texture, borderTexture;
- CGUIInfoLabel textureFile;
- CTextureInfo textureCheckMark, textureCheckMarkNF;
- CTextureInfo textureFocus, textureNoFocus;
- CTextureInfo textureAltFocus, textureAltNoFocus;
- CTextureInfo textureRadioOn, textureRadioOff;
- CTextureInfo imageNoFocus, imageFocus;
- CGUIInfoLabel texturePath;
- CRect borderSize;
-
- float sliderWidth = 150, sliderHeight = 16;
- CPoint offset;
-
- bool bHasPath = false;
- vector<CGUIActionDescriptor> clickActions;
- vector<CGUIActionDescriptor> altclickActions;
- vector<CGUIActionDescriptor> focusActions;
- vector<CGUIActionDescriptor> unfocusActions;
- vector<CGUIActionDescriptor> textChangeActions;
- CStdString strTitle = "";
- CStdString strRSSTags = "";
-
- int iNumSlots = 7;
- float buttonGap = 5;
- int iDefaultSlot = 2;
- int iMovementRange = 0;
- bool bHorizontal = false;
- int iAlpha = 0;
- bool bWrapAround = true;
- bool bSmoothScrolling = true;
- CAspectRatio aspect;
-#ifdef PRE_SKIN_VERSION_9_10_COMPATIBILITY
- if (insideContainer) // default for inside containers is keep
- aspect.ratio = CAspectRatio::AR_KEEP;
-#endif
-
- int iVisibleCondition = 0;
- CGUIInfoBool allowHiddenFocus(false);
- int enableCondition = 0;
-
- vector<CAnimation> animations;
-
- bool bScrollLabel = false;
- bool bPulse = true;
- unsigned int timePerImage = 0;
- unsigned int fadeTime = 0;
- unsigned int timeToPauseAtEnd = 0;
- bool randomized = false;
- bool loop = true;
- bool wrapMultiLine = false;
- ORIENTATION orientation = VERTICAL;
- bool showOnePage = true;
- bool scrollOut = true;
- int preloadItems = 0;
-
- CLabelInfo labelInfo;
- CLabelInfo spinInfo;
-
- CGUIInfoColor textColor3;
- CGUIInfoColor headlineColor;
-
- float radioWidth = 0;
- float radioHeight = 0;
- float radioPosX = 0;
- float radioPosY = 0;
-
- CStdString altLabel;
- CStdString strLabel2;
-
- int focusPosition = 0;
- int scrollTime = 200;
- bool useControlCoords = false;
- bool renderFocusedLast = false;
-
- CRect hitRect;
- CPoint camera;
- bool hasCamera = false;
- bool resetOnLabelChange = true;
- bool bPassword = false;
-
- /////////////////////////////////////////////////////////////////////////////
- // Read control properties from XML
- //
-
- if (!pControlNode->Attribute("id", (int*) &id))
- XMLUtils::GetInt(pControlNode, "id", (int&) id); // backward compatibility - not desired
- // TODO: Perhaps we should check here whether id is valid for focusable controls
- // such as buttons etc. For labels/fadelabels/images it does not matter
-
- XMLUtils::GetFloat(pControlNode, "posx", posX);
- XMLUtils::GetFloat(pControlNode, "posy", posY);
- // Convert these from relative coords
- CStdString pos;
- XMLUtils::GetString(pControlNode, "posx", pos);
- if (pos.Right(1) == "r")
- 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;
-
- GetMultipleString(pControlNode, "onclick", clickActions);
- GetMultipleString(pControlNode, "ontextchange", textChangeActions);
- GetMultipleString(pControlNode, "onfocus", focusActions);
- GetMultipleString(pControlNode, "onunfocus", unfocusActions);
- GetMultipleString(pControlNode, "altclick", altclickActions);
-
- CStdString infoString;
- if (XMLUtils::GetString(pControlNode, "info", infoString))
- singleInfo = g_infoManager.TranslateString(infoString);
-
- GetTexture(pControlNode, "texturefocus", textureFocus);
- GetTexture(pControlNode, "texturenofocus", textureNoFocus);
- GetTexture(pControlNode, "alttexturefocus", textureAltFocus);
- GetTexture(pControlNode, "alttexturenofocus", textureAltNoFocus);
- CStdString strToggleSelect;
- XMLUtils::GetString(pControlNode, "usealttexture", strToggleSelect);
- XMLUtils::GetString(pControlNode, "selected", strToggleSelect);
- iToggleSelect = g_infoManager.TranslateString(strToggleSelect);
-
- XMLUtils::GetBoolean(pControlNode, "haspath", bHasPath);
-
- GetTexture(pControlNode, "textureup", textureUp);
- GetTexture(pControlNode, "texturedown", textureDown);
- GetTexture(pControlNode, "textureupfocus", textureUpFocus);
- GetTexture(pControlNode, "texturedownfocus", textureDownFocus);
-
- GetTexture(pControlNode, "textureleft", textureLeft);
- GetTexture(pControlNode, "textureright", textureRight);
- GetTexture(pControlNode, "textureleftfocus", textureLeftFocus);
- GetTexture(pControlNode, "texturerightfocus", textureRightFocus);
-
- GetInfoColor(pControlNode, "spincolor", spinInfo.textColor);
- if (XMLUtils::GetString(pControlNode, "spinfont", strFont))
- spinInfo.font = g_fontManager.GetFont(strFont);
- if (!spinInfo.font) spinInfo.font = labelInfo.font;
-
- XMLUtils::GetFloat(pControlNode, "spinwidth", spinWidth);
- XMLUtils::GetFloat(pControlNode, "spinheight", spinHeight);
- XMLUtils::GetFloat(pControlNode, "spinposx", spinPosX);
- XMLUtils::GetFloat(pControlNode, "spinposy", spinPosY);
-
- XMLUtils::GetFloat(pControlNode, "markwidth", checkWidth);
- XMLUtils::GetFloat(pControlNode, "markheight", checkHeight);
- XMLUtils::GetFloat(pControlNode, "sliderwidth", sliderWidth);
- XMLUtils::GetFloat(pControlNode, "sliderheight", sliderHeight);
- GetTexture(pControlNode, "texturecheckmark", textureCheckMark);
- GetTexture(pControlNode, "texturecheckmarknofocus", textureCheckMarkNF);
- GetTexture(pControlNode, "textureradiofocus", textureRadioOn); // backward compatibility
- GetTexture(pControlNode, "textureradionofocus", textureRadioOff);
- GetTexture(pControlNode, "textureradioon", textureRadioOn);
- GetTexture(pControlNode, "textureradiooff", textureRadioOff);
-
- GetTexture(pControlNode, "texturesliderbackground", textureBackground);
- GetTexture(pControlNode, "texturesliderbar", textureBar);
- GetTexture(pControlNode, "texturesliderbarfocus", textureBarFocus);
- GetTexture(pControlNode, "textureslidernib", textureNib);
- GetTexture(pControlNode, "textureslidernibfocus", textureNibFocus);
-
- XMLUtils::GetString(pControlNode, "title", strTitle);
- XMLUtils::GetString(pControlNode, "tagset", strRSSTags);
- GetInfoColor(pControlNode, "headlinecolor", headlineColor);
- GetInfoColor(pControlNode, "titlecolor", textColor3);
-
- if (XMLUtils::GetString(pControlNode, "subtype", strSubType))
- {
- strSubType.ToLower();
-
- if ( strSubType == "int")
- iType = SPIN_CONTROL_TYPE_INT;
- else if ( strSubType == "page")
- iType = SPIN_CONTROL_TYPE_PAGE;
- else if ( strSubType == "float")
- iType = SPIN_CONTROL_TYPE_FLOAT;
- else
- iType = SPIN_CONTROL_TYPE_TEXT;
- }
-
- if (!GetIntRange(pControlNode, "range", iMin, iMax, iInterval))
- {
- GetFloatRange(pControlNode, "range", fMin, fMax, fInterval);
- }
-
- XMLUtils::GetBoolean(pControlNode, "reverse", bReverse);
- XMLUtils::GetBoolean(pControlNode, "reveal", bReveal);
-
- GetTexture(pControlNode, "texturebg", textureBackground);
- GetTexture(pControlNode, "lefttexture", textureLeft);
- GetTexture(pControlNode, "midtexture", textureMid);
- GetTexture(pControlNode, "righttexture", textureRight);
- GetTexture(pControlNode, "overlaytexture", textureOverlay);
-
- // the <texture> tag can be overridden by the <info> tag
- GetInfoTexture(pControlNode, "texture", texture, textureFile);
-
- GetTexture(pControlNode, "bordertexture", borderTexture);
-
- GetTexture(pControlNode, "imagefolder", imageNoFocus);
- GetTexture(pControlNode, "imagefolderfocus", imageFocus);
-
- // fade label can have a whole bunch, but most just have one
- vector<CGUIInfoLabel> infoLabels;
- GetInfoLabels(pControlNode, "label", infoLabels);
-
- GetString(pControlNode, "label", strLabel);
- GetString(pControlNode, "altlabel", altLabel);
- GetString(pControlNode, "label2", strLabel2);
-
- XMLUtils::GetBoolean(pControlNode, "wrapmultiline", wrapMultiLine);
- XMLUtils::GetInt(pControlNode,"urlset",iUrlSet);
-
- // stuff for button scroller
- if ( XMLUtils::GetString(pControlNode, "orientation", strTmp) )
- {
- if (strTmp.ToLower() == "horizontal")
- {
- bHorizontal = true;
- orientation = HORIZONTAL;
- }
- }
- XMLUtils::GetFloat(pControlNode, "buttongap", buttonGap);
- XMLUtils::GetFloat(pControlNode, "itemgap", buttonGap);
- XMLUtils::GetInt(pControlNode, "numbuttons", iNumSlots);
- XMLUtils::GetInt(pControlNode, "movement", iMovementRange);
- XMLUtils::GetInt(pControlNode, "defaultbutton", iDefaultSlot);
- XMLUtils::GetInt(pControlNode, "alpha", iAlpha);
- XMLUtils::GetBoolean(pControlNode, "wraparound", bWrapAround);
- XMLUtils::GetBoolean(pControlNode, "smoothscrolling", bSmoothScrolling);
- GetAspectRatio(pControlNode, "aspectratio", aspect);
- XMLUtils::GetBoolean(pControlNode, "scroll", bScrollLabel);
- XMLUtils::GetBoolean(pControlNode,"pulseonselect", bPulse);
-
- GetInfoTexture(pControlNode, "imagepath", texture, texturePath);
-
- XMLUtils::GetUInt(pControlNode,"timeperimage", timePerImage);
- XMLUtils::GetUInt(pControlNode,"fadetime", fadeTime);
- XMLUtils::GetUInt(pControlNode,"pauseatend", timeToPauseAtEnd);
- XMLUtils::GetBoolean(pControlNode, "randomize", randomized);
- XMLUtils::GetBoolean(pControlNode, "loop", loop);
- XMLUtils::GetBoolean(pControlNode, "scrollout", scrollOut);
-
- XMLUtils::GetFloat(pControlNode, "radiowidth", radioWidth);
- XMLUtils::GetFloat(pControlNode, "radioheight", radioHeight);
- XMLUtils::GetFloat(pControlNode, "radioposx", radioPosX);
- XMLUtils::GetFloat(pControlNode, "radioposy", radioPosY);
- CStdString borderStr;
- if (XMLUtils::GetString(pControlNode, "bordersize", borderStr))
- GetRectFromString(borderStr, borderSize);
-
- XMLUtils::GetBoolean(pControlNode, "showonepage", showOnePage);
- XMLUtils::GetInt(pControlNode, "focusposition", focusPosition);
- XMLUtils::GetInt(pControlNode, "scrolltime", scrollTime);
- XMLUtils::GetInt(pControlNode, "preloaditems", preloadItems, 0, 2);
-
- XMLUtils::GetBoolean(pControlNode, "usecontrolcoords", useControlCoords);
- XMLUtils::GetBoolean(pControlNode, "renderfocusedlast", renderFocusedLast);
- XMLUtils::GetBoolean(pControlNode, "resetonlabelchange", resetOnLabelChange);
-
- XMLUtils::GetBoolean(pControlNode, "password", bPassword);
-
- // view type
- VIEW_TYPE viewType = VIEW_TYPE_NONE;
- CStdString viewLabel;
- if (type == CGUIControl::GUICONTAINER_PANEL)
- {
- viewType = VIEW_TYPE_ICON;
- viewLabel = g_localizeStrings.Get(536);
- }
- else if (type == CGUIControl::GUICONTAINER_LIST)
- {
- viewType = VIEW_TYPE_LIST;
- viewLabel = g_localizeStrings.Get(535);
- }
- else
- {
- viewType = VIEW_TYPE_WRAP;
- viewLabel = g_localizeStrings.Get(541);
- }
- TiXmlElement *itemElement = pControlNode->FirstChildElement("viewtype");
- if (itemElement && itemElement->FirstChild())
- {
- CStdString type = itemElement->FirstChild()->Value();
- if (type == "list")
- viewType = VIEW_TYPE_LIST;
- else if (type == "icon")
- viewType = VIEW_TYPE_ICON;
- else if (type == "biglist")
- viewType = VIEW_TYPE_BIG_LIST;
- else if (type == "bigicon")
- viewType = VIEW_TYPE_BIG_ICON;
- else if (type == "wide")
- viewType = VIEW_TYPE_WIDE;
- else if (type == "bigwide")
- viewType = VIEW_TYPE_BIG_WIDE;
- else if (type == "wrap")
- viewType = VIEW_TYPE_WRAP;
- else if (type == "bigwrap")
- viewType = VIEW_TYPE_BIG_WRAP;
- const char *label = itemElement->Attribute("label");
- if (label)
- viewLabel = CGUIInfoLabel::GetLabel(FilterLabel(label));
- }
-
- TiXmlElement *cam = pControlNode->FirstChildElement("camera");
- if (cam)
- {
- hasCamera = true;
- cam->QueryFloatAttribute("x", &camera.x);
- cam->QueryFloatAttribute("y", &camera.y);
- }
-
- XMLUtils::GetInt(pControlNode, "scrollspeed", labelInfo.scrollSpeed);
- spinInfo.scrollSpeed = labelInfo.scrollSpeed;
-
- GetString(pControlNode, "scrollsuffix", labelInfo.scrollSuffix);
- spinInfo.scrollSuffix = labelInfo.scrollSuffix;
-
- /////////////////////////////////////////////////////////////////////////////
- // Instantiate a new control using the properties gathered above
- //
-
- CGUIControl *control = NULL;
- if (type == CGUIControl::GUICONTROL_GROUP)
- {
- if (insideContainer)
- {
- control = new CGUIListGroup(parentID, id, posX, posY, width, height);
- }
- else
- {
- control = new CGUIControlGroup(
- parentID, id, posX, posY, width, height);
- ((CGUIControlGroup *)control)->SetDefaultControl(defaultControl, defaultAlways);
- ((CGUIControlGroup *)control)->SetRenderFocusedLast(renderFocusedLast);
- }
- }
- else if (type == CGUIControl::GUICONTROL_GROUPLIST)
- {
- control = new CGUIControlGroupList(
- parentID, id, posX, posY, width, height, buttonGap, pageControl, orientation, useControlCoords, labelInfo.align, scrollTime);
- ((CGUIControlGroup *)control)->SetRenderFocusedLast(renderFocusedLast);
- }
- else if (type == CGUIControl::GUICONTROL_LABEL)
- {
- const CGUIInfoLabel &content = (infoLabels.size()) ? infoLabels[0] : CGUIInfoLabel("");
- if (insideContainer)
- { // inside lists we use CGUIListLabel
- control = new CGUIListLabel(parentID, id, posX, posY, width, height, labelInfo, content, bScrollLabel);
- }
- else
- {
- control = new CGUILabelControl(
- parentID, id, posX, posY, width, height,
- labelInfo, wrapMultiLine, bHasPath);
- ((CGUILabelControl *)control)->SetInfo(content);
- ((CGUILabelControl *)control)->SetWidthControl(minWidth, bScrollLabel);
- }
- }
- else if (type == CGUIControl::GUICONTROL_EDIT)
- {
- control = new CGUIEditControl(
- parentID, id, posX, posY, width, height, textureFocus, textureNoFocus,
- labelInfo, strLabel);
-
- if (bPassword)
- ((CGUIEditControl *) control)->SetInputType(CGUIEditControl::INPUT_TYPE_PASSWORD, 0);
- ((CGUIEditControl *) control)->SetTextChangeActions(textChangeActions);
- }
- else if (type == CGUIControl::GUICONTROL_VIDEO)
- {
- control = new CGUIVideoControl(
- parentID, id, posX, posY, width, height);
- }
- else if (type == CGUIControl::GUICONTROL_FADELABEL)
- {
- control = new CGUIFadeLabelControl(
- parentID, id, posX, posY, width, height,
- labelInfo, scrollOut, timeToPauseAtEnd, resetOnLabelChange);
-
- ((CGUIFadeLabelControl *)control)->SetInfo(infoLabels);
- }
- else if (type == CGUIControl::GUICONTROL_RSS)
- {
- control = new CGUIRSSControl(
- parentID, id, posX, posY, width, height,
- labelInfo, textColor3, headlineColor, strRSSTags);
-
- std::map<int,CSettings::RssSet>::iterator iter=g_settings.m_mapRssUrls.find(iUrlSet);
- if (iter != g_settings.m_mapRssUrls.end())
- {
- ((CGUIRSSControl *)control)->SetUrls(iter->second.url,iter->second.rtl);
- ((CGUIRSSControl *)control)->SetIntervals(iter->second.interval);
- }
- else
- CLog::Log(LOGERROR,"invalid rss url set referenced in skin");
- }
- else if (type == CGUIControl::GUICONTROL_BUTTON)
- {
- control = new CGUIButtonControl(
- parentID, id, posX, posY, width, height,
- textureFocus, textureNoFocus,
- labelInfo);
-
- ((CGUIButtonControl *)control)->SetLabel(strLabel);
- ((CGUIButtonControl *)control)->SetLabel2(strLabel2);
- ((CGUIButtonControl *)control)->SetClickActions(clickActions);
- ((CGUIButtonControl *)control)->SetFocusActions(focusActions);
- ((CGUIButtonControl *)control)->SetUnFocusActions(unfocusActions);
- }
- else if (type == CGUIControl::GUICONTROL_TOGGLEBUTTON)
- {
- control = new CGUIToggleButtonControl(
- parentID, id, posX, posY, width, height,
- textureFocus, textureNoFocus,
- textureAltFocus, textureAltNoFocus, labelInfo);
-
- ((CGUIToggleButtonControl *)control)->SetLabel(strLabel);
- ((CGUIToggleButtonControl *)control)->SetAltLabel(altLabel);
- ((CGUIToggleButtonControl *)control)->SetClickActions(clickActions);
- ((CGUIToggleButtonControl *)control)->SetAltClickActions(altclickActions);
- ((CGUIToggleButtonControl *)control)->SetFocusActions(focusActions);
- ((CGUIToggleButtonControl *)control)->SetUnFocusActions(unfocusActions);
- ((CGUIToggleButtonControl *)control)->SetToggleSelect(iToggleSelect);
- }
- else if (type == CGUIControl::GUICONTROL_CHECKMARK)
- {
- control = new CGUICheckMarkControl(
- parentID, id, posX, posY, width, height,
- textureCheckMark, textureCheckMarkNF,
- checkWidth, checkHeight, labelInfo);
-
- ((CGUICheckMarkControl *)control)->SetLabel(strLabel);
- }
- else if (type == CGUIControl::GUICONTROL_RADIO)
- {
- control = new CGUIRadioButtonControl(
- parentID, id, posX, posY, width, height,
- textureFocus, textureNoFocus,
- labelInfo,
- textureRadioOn, textureRadioOff);
-
- ((CGUIRadioButtonControl *)control)->SetLabel(strLabel);
- ((CGUIRadioButtonControl *)control)->SetRadioDimensions(radioPosX, radioPosY, radioWidth, radioHeight);
- ((CGUIRadioButtonControl *)control)->SetToggleSelect(iToggleSelect);
- ((CGUIRadioButtonControl *)control)->SetClickActions(clickActions);
- ((CGUIRadioButtonControl *)control)->SetFocusActions(focusActions);
- ((CGUIRadioButtonControl *)control)->SetUnFocusActions(unfocusActions);
- }
- else if (type == CGUIControl::GUICONTROL_MULTISELECT)
- {
- CGUIInfoLabel label;
- if (infoLabels.size())
- label = infoLabels[0];
- control = new CGUIMultiSelectTextControl(
- parentID, id, posX, posY, width, height,
- textureFocus, textureNoFocus, labelInfo, label);
- }
- else if (type == CGUIControl::GUICONTROL_SPIN)
- {
- control = new CGUISpinControl(
- parentID, id, posX, posY, width, height,
- textureUp, textureDown, textureUpFocus, textureDownFocus,
- labelInfo, iType);
-
- ((CGUISpinControl *)control)->SetReverse(bReverse);
-
- if (iType == SPIN_CONTROL_TYPE_INT)
- {
- ((CGUISpinControl *)control)->SetRange(iMin, iMax);
- }
- else if (iType == SPIN_CONTROL_TYPE_PAGE)
- {
- ((CGUISpinControl *)control)->SetRange(iMin, iMax);
- ((CGUISpinControl *)control)->SetShowRange(true);
- ((CGUISpinControl *)control)->SetReverse(false);
- ((CGUISpinControl *)control)->SetShowOnePage(showOnePage);
- }
- else if (iType == SPIN_CONTROL_TYPE_FLOAT)
- {
- ((CGUISpinControl *)control)->SetFloatRange(fMin, fMax);
- ((CGUISpinControl *)control)->SetFloatInterval(fInterval);
- }
- }
- else if (type == CGUIControl::GUICONTROL_SLIDER)
- {
- control = new CGUISliderControl(
- parentID, id, posX, posY, width, height,
- textureBar, textureNib, textureNibFocus, SPIN_CONTROL_TYPE_TEXT);
-
- ((CGUISliderControl *)control)->SetInfo(singleInfo);
- }
- else if (type == CGUIControl::GUICONTROL_SETTINGS_SLIDER)
- {
- labelInfo.align |= XBFONT_CENTER_Y; // always center text vertically
- control = new CGUISettingsSliderControl(
- parentID, id, posX, posY, width, height, sliderWidth, sliderHeight, textureFocus, textureNoFocus,
- textureBar, textureNib, textureNibFocus, labelInfo, SPIN_CONTROL_TYPE_TEXT);
-
- ((CGUISettingsSliderControl *)control)->SetText(strLabel);
- ((CGUISettingsSliderControl *)control)->SetInfo(singleInfo);
- }
- else if (type == CGUIControl::GUICONTROL_SCROLLBAR)
- {
- control = new CGUIScrollBar(
- parentID, id, posX, posY, width, height,
- textureBackground, textureBar, textureBarFocus, textureNib, textureNibFocus, orientation, showOnePage);
- }
- else if (type == CGUIControl::GUICONTROL_PROGRESS)
- {
- control = new CGUIProgressControl(
- parentID, id, posX, posY, width, height,
- textureBackground, textureLeft, textureMid, textureRight,
- textureOverlay, bReveal);
- ((CGUIProgressControl *)control)->SetInfo(singleInfo);
- }
- else if (type == CGUIControl::GUICONTROL_IMAGE)
- {
- if (strType == "largeimage")
- texture.useLarge = true;
-
- // use a bordered texture if we have <bordersize> or <bordertexture> specified.
- if (borderTexture.filename.IsEmpty() && borderStr.IsEmpty())
- control = new CGUIImage(
- parentID, id, posX, posY, width, height, texture);
- else
- control = new CGUIBorderedImage(
- parentID, id, posX, posY, width, height, texture, borderTexture, borderSize);
-#ifdef PRE_SKIN_VERSION_9_10_COMPATIBILITY
- if (insideContainer && textureFile.IsConstant())
- aspect.ratio = CAspectRatio::AR_STRETCH;
-#endif
- ((CGUIImage *)control)->SetInfo(textureFile);
- ((CGUIImage *)control)->SetAspectRatio(aspect);
- ((CGUIImage *)control)->SetCrossFade(fadeTime);
- }
- else if (type == CGUIControl::GUICONTROL_MULTI_IMAGE)
- {
- control = new CGUIMultiImage(
- parentID, id, posX, posY, width, height, texture, timePerImage, fadeTime, randomized, loop, timeToPauseAtEnd);
- ((CGUIMultiImage *)control)->SetInfo(texturePath);
- ((CGUIMultiImage *)control)->SetAspectRatio(aspect);
- }
- else if (type == CGUIControl::GUICONTAINER_LIST)
- {
- control = new CGUIListContainer(parentID, id, posX, posY, width, height, orientation, scrollTime, preloadItems);
- ((CGUIListContainer *)control)->LoadLayout(pControlNode);
- ((CGUIListContainer *)control)->LoadContent(pControlNode);
- ((CGUIListContainer *)control)->SetType(viewType, viewLabel);
- ((CGUIListContainer *)control)->SetPageControl(pageControl);
- ((CGUIListContainer *)control)->SetRenderOffset(offset);
- }
- else if (type == CGUIControl::GUICONTAINER_WRAPLIST)
- {
- control = new CGUIWrappingListContainer(parentID, id, posX, posY, width, height, orientation, scrollTime, preloadItems, focusPosition);
- ((CGUIWrappingListContainer *)control)->LoadLayout(pControlNode);
- ((CGUIWrappingListContainer *)control)->LoadContent(pControlNode);
- ((CGUIWrappingListContainer *)control)->SetType(viewType, viewLabel);
- ((CGUIWrappingListContainer *)control)->SetPageControl(pageControl);
- ((CGUIWrappingListContainer *)control)->SetRenderOffset(offset);
- }
- else if (type == CGUIControl::GUICONTAINER_FIXEDLIST)
- {
- control = new CGUIFixedListContainer(parentID, id, posX, posY, width, height, orientation, scrollTime, preloadItems, focusPosition, iMovementRange);
- ((CGUIFixedListContainer *)control)->LoadLayout(pControlNode);
- ((CGUIFixedListContainer *)control)->LoadContent(pControlNode);
- ((CGUIFixedListContainer *)control)->SetType(viewType, viewLabel);
- ((CGUIFixedListContainer *)control)->SetPageControl(pageControl);
- ((CGUIFixedListContainer *)control)->SetRenderOffset(offset);
- }
- else if (type == CGUIControl::GUICONTAINER_PANEL)
- {
- control = new CGUIPanelContainer(parentID, id, posX, posY, width, height, orientation, scrollTime, preloadItems);
- ((CGUIPanelContainer *)control)->LoadLayout(pControlNode);
- ((CGUIPanelContainer *)control)->LoadContent(pControlNode);
- ((CGUIPanelContainer *)control)->SetType(viewType, viewLabel);
- ((CGUIPanelContainer *)control)->SetPageControl(pageControl);
- ((CGUIPanelContainer *)control)->SetRenderOffset(offset);
- }
- else if (type == CGUIControl::GUICONTROL_TEXTBOX)
- {
- control = new CGUITextBox(
- parentID, id, posX, posY, width, height,
- labelInfo, scrollTime);
-
- ((CGUITextBox *)control)->SetPageControl(pageControl);
- if (infoLabels.size())
- ((CGUITextBox *)control)->SetInfo(infoLabels[0]);
- ((CGUITextBox *)control)->SetAutoScrolling(pControlNode);
- }
- else if (type == CGUIControl::GUICONTROL_SELECTBUTTON)
- {
- control = new CGUISelectButtonControl(
- parentID, id, posX, posY,
- width, height, textureFocus, textureNoFocus,
- labelInfo,
- textureBackground, textureLeft, textureLeftFocus, textureRight, textureRightFocus);
-
- ((CGUISelectButtonControl *)control)->SetLabel(strLabel);
- }
- else if (type == CGUIControl::GUICONTROL_MOVER)
- {
- control = new CGUIMoverControl(
- parentID, id, posX, posY, width, height,
- textureFocus, textureNoFocus);
- }
- else if (type == CGUIControl::GUICONTROL_RESIZE)
- {
- control = new CGUIResizeControl(
- parentID, id, posX, posY, width, height,
- textureFocus, textureNoFocus);
- }
- else if (type == CGUIControl::GUICONTROL_BUTTONBAR)
- {
- control = new CGUIButtonScroller(
- parentID, id, posX, posY, width, height, buttonGap, iNumSlots, iDefaultSlot,
- iMovementRange, bHorizontal, iAlpha, bWrapAround, bSmoothScrolling,
- textureFocus, textureNoFocus, labelInfo);
- ((CGUIButtonScroller *)control)->LoadButtons(pControlNode);
- }
- else if (type == CGUIControl::GUICONTROL_SPINEX)
- {
- control = new CGUISpinControlEx(
- parentID, id, posX, posY, width, height, spinWidth, spinHeight,
- labelInfo, textureFocus, textureNoFocus, textureUp, textureDown, textureUpFocus, textureDownFocus,
- labelInfo, iType);
-
- ((CGUISpinControlEx *)control)->SetSpinPosition(spinPosX);
- ((CGUISpinControlEx *)control)->SetText(strLabel);
- ((CGUISpinControlEx *)control)->SetReverse(bReverse);
- }
- else if (type == CGUIControl::GUICONTROL_VISUALISATION)
- {
- control = new CGUIVisualisationControl(parentID, id, posX, posY, width, height);
- }
-
- // things that apply to all controls
- if (control)
- {
- control->SetHitRect(hitRect);
- control->SetVisibleCondition(iVisibleCondition, allowHiddenFocus);
- control->SetEnableCondition(enableCondition);
- control->SetAnimations(animations);
- control->SetColorDiffuse(colorDiffuse);
- control->SetNavigation(up, down, left, right);
- control->SetTabNavigation(next,prev);
- control->SetNavigationActions(upActions, downActions, leftActions, rightActions);
- control->SetPulseOnSelect(bPulse);
- if (hasCamera)
- control->SetCamera(camera);
- }
- return control;
-}