xbmc
GUIInfoManager.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 "guilib/guiinfo/GUIInfoProviders.h"
12 #include "interfaces/info/InfoBool.h"
13 #include "interfaces/info/SkinVariable.h"
14 #include "messaging/IMessageTarget.h"
15 #include "threads/CriticalSection.h"
16 
17 #include <map>
18 #include <memory>
19 #include <set>
20 #include <string>
21 #include <vector>
22 
23 class CFileItem;
24 class CVideoInfoTag;
25 
26 class CGUIListItem;
27 typedef std::shared_ptr<CGUIListItem> CGUIListItemPtr;
28 
29 namespace KODI
30 {
31 namespace GUILIB
32 {
33 namespace GUIINFO
34 {
35  class CGUIInfo;
36  class IGUIInfoProvider;
37 }
38 }
39 }
40 namespace INFO
41 {
42  class InfoSingle;
43 }
44 namespace MUSIC_INFO
45 {
46  class CMusicInfoTag;
47 }
48 
54 {
55 public:
56  CGUIInfoManager(void);
57  ~CGUIInfoManager(void) override;
58 
59  void Initialize();
60 
61  void Clear();
62  void ResetCache();
63 
64  // KODI::MESSAGING::IMessageTarget implementation
65  int GetMessageMask() override;
66  void OnApplicationMessage(KODI::MESSAGING::ThreadMessage* pMsg) override;
67 
78  INFO::InfoPtr Register(const std::string &expression, int context = 0);
79 
85  void UnRegister(const INFO::InfoPtr& expression);
86 
88  bool ConditionsChangedValues(const std::map<INFO::InfoPtr, bool>& map);
89 
96  bool EvaluateBool(const std::string& expression,
97  int context,
98  const CGUIListItemPtr& item = nullptr);
99 
100  int TranslateString(const std::string &strCondition);
101  int TranslateSingleString(const std::string &strCondition, bool &listItemDependent);
102 
103  std::string GetLabel(int info, int contextWindow, std::string* fallback = nullptr) const;
104  std::string GetImage(int info, int contextWindow, std::string *fallback = nullptr);
105  bool GetInt(int& value, int info, int contextWindow, const CGUIListItem* item = nullptr) const;
106  bool GetBool(int condition, int contextWindow, const CGUIListItem* item = nullptr);
107 
108  std::string GetItemLabel(const CFileItem *item, int contextWindow, int info, std::string *fallback = nullptr) const;
109  std::string GetItemImage(const CGUIListItem *item, int contextWindow, int info, std::string *fallback = nullptr) const;
118  bool GetItemInt(int &value, const CGUIListItem *item, int contextWindow, int info) const;
119  bool GetItemBool(const CGUIListItem *item, int contextWindow, int condition) const;
120 
123  void SetCurrentItem(const CFileItem &item);
124  void ResetCurrentItem();
125  void UpdateCurrentItem(const CFileItem &item);
126 
127  // Current song stuff
128  void SetCurrentAlbumThumb(const std::string &thumbFileName);
129  const MUSIC_INFO::CMusicInfoTag *GetCurrentSongTag() const;
130 
131  // Current video stuff
132  const CVideoInfoTag* GetCurrentMovieTag() const;
133 
134  void UpdateAVInfo();
135 
136  int RegisterSkinVariableString(const INFO::CSkinVariableString* info);
137  int TranslateSkinVariableString(const std::string& name, int context);
138 
142  void RegisterInfoProvider(KODI::GUILIB::GUIINFO::IGUIInfoProvider *provider);
143 
147  void UnregisterInfoProvider(KODI::GUILIB::GUIINFO::IGUIInfoProvider *provider);
148 
153 
154 private:
157  class Property
158  {
159  public:
160  Property(const std::string &property, const std::string &parameters);
161 
162  const std::string &param(unsigned int n = 0) const;
163  unsigned int num_params() const;
164 
165  std::string name;
166  private:
167  std::vector<std::string> params;
168  };
169 
180  void SplitInfoString(const std::string &infoString, std::vector<Property> &info);
181 
182  int TranslateSingleString(const std::string &strCondition);
183  int TranslateListItem(const Property& cat, const Property& prop, int id, bool container);
184  int TranslateMusicPlayerString(const std::string &info) const;
185  int TranslateVideoPlayerString(const std::string& info) const;
186  int TranslatePlayerString(const std::string& info) const;
187  static TIME_FORMAT TranslateTimeFormat(const std::string &format);
188 
189  std::string GetMultiInfoLabel(const KODI::GUILIB::GUIINFO::CGUIInfo &info, int contextWindow, std::string *fallback = nullptr) const;
190  bool GetMultiInfoInt(int &value, const KODI::GUILIB::GUIINFO::CGUIInfo &info, int contextWindow, const CGUIListItem *item) const;
191  bool GetMultiInfoBool(const KODI::GUILIB::GUIINFO::CGUIInfo &info, int contextWindow, const CGUIListItem *item);
192 
193  std::string GetMultiInfoItemLabel(const CFileItem *item, int contextWindow, const KODI::GUILIB::GUIINFO::CGUIInfo &info, std::string *fallback = nullptr) const;
194  std::string GetMultiInfoItemImage(const CFileItem *item, int contextWindow, const KODI::GUILIB::GUIINFO::CGUIInfo &info, std::string *fallback = nullptr) const;
195 
196  std::string GetSkinVariableString(int info,
197  int contextWindow,
198  bool preferImage = false,
199  const CGUIListItem* item = nullptr) const;
200 
201  int AddMultiInfo(const KODI::GUILIB::GUIINFO::CGUIInfo &info);
202 
203  int ResolveMultiInfo(int info) const;
204  bool IsListItemInfo(int info) const;
205 
206  void SetCurrentSongTag(const MUSIC_INFO::CMusicInfoTag &tag);
207  void SetCurrentVideoTag(const CVideoInfoTag &tag);
208 
209  // Vector of multiple information mapped to a single integer lookup
210  std::vector<KODI::GUILIB::GUIINFO::CGUIInfo> m_multiInfo;
211 
212  // Current playing stuff
213  CFileItem* m_currentFile;
214 
215  typedef std::set<INFO::InfoPtr, bool(*)(const INFO::InfoPtr&, const INFO::InfoPtr&)> INFOBOOLTYPE;
216  INFOBOOLTYPE m_bools;
217  unsigned int m_refreshCounter = 0;
218  std::vector<INFO::CSkinVariableString> m_skinVariableStrings;
219 
220  CCriticalSection m_critInfo;
221 
223 };
Definition: GUIInfoManager.h:53
A class wishing to receive messages should implement this and call.
Definition: IMessageTarget.h:23
Definition: GUIListItem.h:30
Definition: IGUIInfoProvider.h:28
Definition: ThreadMessage.h:25
Definition: ContextMenuItem.h:23
Controller configuration window.
Definition: AudioDecoder.h:18
Definition: SkinVariable.h:29
KODI::GUILIB::GUIINFO::CGUIInfoProviders & GetInfoProviders()
get access to the registered guiinfo providers
Definition: GUIInfoManager.h:152
Definition: GUIInfoProviders.h:43
Definition: GUIInfo.h:23
Definition: VideoInfoTag.h:51
Definition: MusicInfoTag.h:27
Represents a file on a share.
Definition: FileItem.h:102
Definition: Application.h:79