xbmc
GUIIncludes.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "interfaces/info/InfoBool.h"
12 
13 #include <map>
14 #include <set>
15 #include <string>
16 #include <utility>
17 #include <vector>
18 
19 // forward definitions
20 class TiXmlElement;
21 namespace INFO
22 {
23  class CSkinVariableString;
24 }
25 
27 {
28 public:
29  CGUIIncludes();
30  ~CGUIIncludes();
31 
35  void Clear();
36 
44  void Load(const std::string &file);
45 
53  void Resolve(TiXmlElement *node, std::map<INFO::InfoPtr, bool>* includeConditions = NULL);
54 
62  const INFO::CSkinVariableString* CreateSkinVariable(const std::string& name, int context);
63 
64 private:
65  enum ResolveParamsResult
66  {
67  NO_PARAMS_FOUND,
68  PARAMS_RESOLVED,
69  SINGLE_UNDEFINED_PARAM_RESOLVED
70  };
71 
79  bool Load_Internal(const std::string &file);
80 
81  bool HasLoaded(const std::string &file) const;
82 
83  void LoadDefaults(const TiXmlElement *node);
84  void LoadIncludes(const TiXmlElement *node);
85  void LoadVariables(const TiXmlElement *node);
86  void LoadConstants(const TiXmlElement *node);
87  void LoadExpressions(const TiXmlElement *node);
88 
92  void FlattenExpressions();
93 
100  void FlattenExpression(std::string &expression, const std::vector<std::string> &resolved);
101 
105  void FlattenSkinVariableConditions();
106 
107  void SetDefaults(TiXmlElement *node);
108  void ResolveIncludes(TiXmlElement *node, std::map<INFO::InfoPtr, bool>* xmlIncludeConditions = NULL);
109  void ResolveConstants(TiXmlElement *node);
110  void ResolveExpressions(TiXmlElement *node);
111 
112  typedef std::map<std::string, std::string> Params;
113  static void InsertNested(TiXmlElement* controls, TiXmlElement* include, TiXmlElement* node);
114  static bool GetParameters(const TiXmlElement *include, const char *valueAttribute, Params& params);
115  static void ResolveParametersForNode(TiXmlElement *node, const Params& params);
116  static ResolveParamsResult ResolveParameters(const std::string& strInput, std::string& strOutput, const Params& params);
117 
118  std::string ResolveConstant(const std::string &constant) const;
119  std::string ResolveExpressions(const std::string &expression) const;
120 
121  std::vector<std::string> m_files;
122  std::map<std::string, std::pair<TiXmlElement, Params>> m_includes;
123  std::map<std::string, TiXmlElement> m_defaults;
124  std::map<std::string, TiXmlElement> m_skinvariables;
125  std::map<std::string, std::string> m_constants;
126  std::map<std::string, std::string> m_expressions;
127 
128  std::set<std::string> m_constantAttributes;
129  std::set<std::string> m_constantNodes;
130 
131  std::set<std::string> m_expressionAttributes;
132  std::set<std::string> m_expressionNodes;
133 };
Definition: ContextMenuItem.h:23
Definition: SkinVariable.h:29
Definition: GUIIncludes.h:26