changed: Move the label control and multiimage control to using UpdateInfo().
[xbmc:xbmc-antiquated.git] / XBMC / guilib / GUILabelControl.h
1 /*!
2 \file GUILabelControl.h
3 \brief
4 */
5
6 #ifndef GUILIB_GUILABELCONTROL_H
7 #define GUILIB_GUILABELCONTROL_H
8
9 #pragma once
10
11 /*
12  *      Copyright (C) 2005-2008 Team XBMC
13  *      http://www.xbmc.org
14  *
15  *  This Program is free software; you can redistribute it and/or modify
16  *  it under the terms of the GNU General Public License as published by
17  *  the Free Software Foundation; either version 2, or (at your option)
18  *  any later version.
19  *
20  *  This Program is distributed in the hope that it will be useful,
21  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
22  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23  *  GNU General Public License for more details.
24  *
25  *  You should have received a copy of the GNU General Public License
26  *  along with XBMC; see the file COPYING.  If not, write to
27  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
28  *  http://www.gnu.org/copyleft/gpl.html
29  *
30  */
31
32 #include "GUIControl.h"
33 #include "GUITextLayout.h"
34
35 class CGUIListItem;
36
37 class CGUIInfoLabel
38 {
39 public:
40   CGUIInfoLabel();
41   CGUIInfoLabel(const CStdString &label, const CStdString &fallback = "");
42
43   void SetLabel(const CStdString &label, const CStdString &fallback);
44   CStdString GetLabel(DWORD contextWindow, bool preferImage = false) const;
45   CStdString GetItemLabel(const CGUIListItem *item, bool preferImage = false) const;
46   bool IsConstant() const;
47   bool IsEmpty() const;
48
49   const CStdString GetFallback() const { return m_fallback; };
50
51   static CStdString GetLabel(const CStdString &label, bool preferImage = false);
52 private:
53   void Parse(const CStdString &label);
54
55   class CInfoPortion
56   {
57   public:
58     CInfoPortion(int info, const CStdString &prefix, const CStdString &postfix);
59     int m_info;
60     CStdString m_prefix;
61     CStdString m_postfix;
62   };
63
64   CStdString m_fallback;
65   std::vector<CInfoPortion> m_info;
66 };
67
68 /*!
69  \ingroup controls
70  \brief
71  */
72 class CGUILabelControl :
73       public CGUIControl
74 {
75 public:
76   CGUILabelControl(DWORD dwParentID, DWORD dwControlId, float posX, float posY, float width, float height, const CLabelInfo& labelInfo, bool wrapMultiLine, bool bHasPath);
77   virtual ~CGUILabelControl(void);
78   virtual CGUILabelControl *Clone() const { return new CGUILabelControl(*this); };
79
80   virtual void Render();
81   virtual void UpdateInfo(const CGUIListItem *item = NULL);
82   virtual bool CanFocus() const;
83   virtual bool OnMessage(CGUIMessage& message);
84   virtual CStdString GetDescription() const;
85
86   const CLabelInfo& GetLabelInfo() const { return m_label; };
87   void SetLabel(const std::string &strLabel);
88   void ShowCursor(bool bShow = true);
89   void SetCursorPos(int iPos);
90   int GetCursorPos() const { return m_iCursorPos;};
91   void SetInfo(const CGUIInfoLabel&labelInfo);
92   void SetWidthControl(bool bScroll, int scrollSpeed);
93   void SetTruncate(bool bTruncate);
94   void SetAlignment(DWORD align);
95   void SetHighlight(unsigned int start, unsigned int end);
96
97 protected:
98   void UpdateColors();
99   CStdString ShortenPath(const CStdString &path);
100
101   CLabelInfo m_label;
102   CGUITextLayout m_textLayout;
103
104   bool m_bHasPath;
105   bool m_bShowCursor;
106   int m_iCursorPos;
107   DWORD m_dwCounter;
108   // stuff for scrolling
109   bool m_ScrollInsteadOfTruncate;
110   CScrollInfo m_ScrollInfo;
111
112   // multi-info stuff
113   CGUIInfoLabel m_infoLabel;
114
115   unsigned int m_startHighlight;
116   unsigned int m_endHighlight;
117 };
118 #endif