summaryrefslogtreecommitdiffstats
path: root/xbmc/guilib/GUIControlFactory.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--xbmc/guilib/GUIControlFactory.h160
1 files changed, 160 insertions, 0 deletions
diff --git a/xbmc/guilib/GUIControlFactory.h b/xbmc/guilib/GUIControlFactory.h
new file mode 100644
index 0000000..9cdf56c
--- /dev/null
+++ b/xbmc/guilib/GUIControlFactory.h
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+/*!
+\file GUIControlFactory.h
+\brief
+*/
+
+#include "GUIControl.h"
+#include "utils/ColorUtils.h"
+#include "utils/MovingSpeed.h"
+
+#include <string>
+#include <vector>
+
+class CTextureInfo; // forward
+class CAspectRatio;
+class TiXmlNode;
+class CGUIAction;
+
+namespace KODI
+{
+namespace GUILIB
+{
+namespace GUIINFO
+{
+ class CGUIInfoLabel;
+}
+}
+}
+
+/*!
+ \ingroup controls
+ \brief
+ */
+class CGUIControlFactory
+{
+public:
+ CGUIControlFactory(void);
+ virtual ~CGUIControlFactory(void);
+ CGUIControl* Create(int parentID, const CRect &rect, TiXmlElement* pControlNode, bool insideContainer = false);
+
+ /*! \brief translate from control name to control type
+ \param type name of the control
+ \return type of control
+ */
+ static CGUIControl::GUICONTROLTYPES TranslateControlType(const std::string &type);
+
+ /*! \brief translate from control type to control name
+ \param type type of the control
+ \return name of control
+ */
+ static std::string TranslateControlType(CGUIControl::GUICONTROLTYPES type);
+
+ static bool GetAspectRatio(const TiXmlNode* pRootNode, const char* strTag, CAspectRatio &aspectRatio);
+ static bool GetInfoTexture(const TiXmlNode* pRootNode, const char* strTag, CTextureInfo &image, KODI::GUILIB::GUIINFO::CGUIInfoLabel &info, int parentID);
+ static bool GetTexture(const TiXmlNode* pRootNode, const char* strTag, CTextureInfo &image);
+ static bool GetAlignment(const TiXmlNode* pRootNode, const char* strTag, uint32_t& dwAlignment);
+ static bool GetAlignmentY(const TiXmlNode* pRootNode, const char* strTag, uint32_t& dwAlignment);
+ static bool GetAnimations(TiXmlNode *control, const CRect &rect, int context, std::vector<CAnimation> &animation);
+
+ /*! \brief Create an info label from an XML element
+ Processes XML elements of the form
+ <xmltag fallback="fallback_value">info_value</xmltag>
+ where info_value may use $INFO[], $LOCALIZE[], $NUMBER[] etc.
+ If either the fallback_value or info_value are natural numbers they are interpreted
+ as ids for lookup in strings.po. The fallback attribute is optional.
+ \param element XML element to process
+ \param infoLabel Returned infoLabel
+ \param parentID The parent id
+ \return true if a valid info label was read, false otherwise
+ */
+
+ /*! \brief Parse a position string
+ Handles strings of the form
+ ### number of pixels
+ ###r number of pixels measured from the right
+ ###% percentage of parent size
+ \param pos the string to parse.
+ \param parentSize the size of the parent.
+ \sa GetPosition
+ */
+ static float ParsePosition(const char* pos, const float parentSize);
+
+ static bool GetInfoLabelFromElement(const TiXmlElement *element, KODI::GUILIB::GUIINFO::CGUIInfoLabel &infoLabel, int parentID);
+ static void GetInfoLabel(const TiXmlNode *pControlNode, const std::string &labelTag, KODI::GUILIB::GUIINFO::CGUIInfoLabel &infoLabel, int parentID);
+ static void GetInfoLabels(const TiXmlNode *pControlNode, const std::string &labelTag, std::vector<KODI::GUILIB::GUIINFO::CGUIInfoLabel> &infoLabels, int parentID);
+ static bool GetColor(const TiXmlNode* pRootNode, const char* strTag, UTILS::COLOR::Color& value);
+ static bool GetInfoColor(const TiXmlNode* pRootNode, const char* strTag, KODI::GUILIB::GUIINFO::CGUIInfoColor &value, int parentID);
+ static std::string FilterLabel(const std::string &label);
+ static bool GetConditionalVisibility(const TiXmlNode* control, std::string &condition);
+ static bool GetActions(const TiXmlNode* pRootNode, const char* strTag, CGUIAction& actions);
+ static void GetRectFromString(const std::string &string, CRect &rect);
+ static bool GetHitRect(const TiXmlNode* pRootNode, CRect &rect, const CRect &parentRect);
+ static bool GetScroller(const TiXmlNode *pControlNode, const std::string &scrollerTag, CScroller& scroller);
+private:
+ static std::string GetType(const TiXmlElement *pControlNode);
+ static bool GetMovingSpeedConfig(const TiXmlNode* pRootNode,
+ const char* strTag,
+ UTILS::MOVING_SPEED::MapEventConfig& movingSpeedCfg);
+ static bool GetConditionalVisibility(const TiXmlNode* control, std::string &condition, std::string &allowHiddenFocus);
+ bool GetString(const TiXmlNode* pRootNode, const char* strTag, std::string& strString);
+ static bool GetFloatRange(const TiXmlNode* pRootNode, const char* strTag, float& iMinValue, float& iMaxValue, float& iIntervalValue);
+ static bool GetIntRange(const TiXmlNode* pRootNode, const char* strTag, int& iMinValue, int& iMaxValue, int& iIntervalValue);
+
+ /*! \brief Get the value of a position tag from XML
+ Handles both absolute and relative values.
+ \param node the <control> XML node.
+ \param tag the XML node to parse.
+ \param parentSize the size of the parent, for relative positioning.
+ \param value [out] the returned value.
+ \sa ParsePosition, GetDimension, GetDimensions.
+ */
+ static bool GetPosition(const TiXmlNode *node, const char* tag, const float parentSize, float& value);
+
+ /*! \brief grab a dimension out of the XML
+
+ Supports plain reading of a number (or constant) and, in addition allows "auto" as the value
+ for the dimension, whereby value is set to the max attribute (if it exists) and min is set the min
+ attribute (if it exists) or 1. Auto values are thus detected by min != 0.
+
+ \param node the <control> XML node to read
+ \param strTag tag within node to read
+ \param parentSize the size of the parent for relative sizing.
+ \param value value to set, or maximum value if using auto
+ \param min minimum value - set != 0 if auto is used.
+ \return true if we found and read the tag.
+ \sa GetPosition, GetDimensions, ParsePosition.
+ */
+ static bool GetDimension(const TiXmlNode *node, const char* strTag, const float parentSize, float &value, float &min);
+
+ /*! \brief Retrieve the dimensions for a control.
+
+ Handles positioning based on at least 2 of left/right/center/width.
+
+ \param node the <control> node describing the control.
+ \param leftTag the tag that holds the left field.
+ \param rightTag the tag that holds the right field.
+ \param centerLeftTag the tag that holds the center left field.
+ \param centerRightTag the tag that holds the center right field.
+ \param widthTag the tag holding the width.
+ \param parentSize the size of the parent, for relative sizing.
+ \param pos [out] the discovered position.
+ \param width [out] the discovered width.
+ \param min_width [out] the discovered minimum width.
+ \return true if we can successfully derive the position and size, false otherwise.
+ \sa GetDimension, GetPosition, ParsePosition.
+ */
+ static bool GetDimensions(const TiXmlNode *node, const char *leftTag, const char *rightTag, const char *centerLeftTag,
+ const char *centerRightTag, const char *widthTag, const float parentSize, float &left,
+ float &width, float &min_width);
+};
+