changed: Better updating of listitems in new list control.
[xbmc:xbmc-antiquated.git] / guilib / GUIListItem.cpp
1 #include "include.h"
2 #include "GUIListItem.h"
3 #include "GUIImage.h"
4 #include "GUIListContainer.h"
5
6 CGUIListItem::CGUIListItem(const CGUIListItem& item)
7 {
8   *this = item;
9   m_invalidated = true;
10 }
11
12 CGUIListItem::CGUIListItem(void)
13 {
14   m_bIsFolder = false;
15   m_strLabel2 = "";
16   m_strLabel = "";
17   m_pThumbnailImage = NULL;
18   m_pIconImage = NULL;
19   m_overlayImage = NULL;
20   m_bSelected = false;
21   m_strIcon = "";
22   m_strThumbnailImage = "";
23   m_overlayIcon = ICON_OVERLAY_NONE;
24   m_layout = NULL;
25   m_focusedLayout = NULL;
26   m_invalidated = true;
27 }
28
29 CGUIListItem::CGUIListItem(const CStdString& strLabel)
30 {
31   m_bIsFolder = false;
32   m_strLabel2 = "";
33   m_strLabel = strLabel;
34   m_pThumbnailImage = NULL;
35   m_pIconImage = NULL;
36   m_overlayImage = NULL;
37   m_bSelected = false;
38   m_strIcon = "";
39   m_strThumbnailImage = "";
40   m_overlayIcon = ICON_OVERLAY_NONE;
41   m_layout = NULL;
42   m_focusedLayout = NULL;
43   m_invalidated = true;
44 }
45
46 CGUIListItem::~CGUIListItem(void)
47 {
48   FreeMemory();
49 }
50
51 void CGUIListItem::SetLabel(const CStdString& strLabel)
52 {
53   m_strLabel = strLabel;
54   m_invalidated = true;
55 }
56
57 const CStdString& CGUIListItem::GetLabel() const
58 {
59   return m_strLabel;
60 }
61
62
63 void CGUIListItem::SetLabel2(const CStdString& strLabel2)
64 {
65   m_strLabel2 = strLabel2;
66   m_invalidated = true;
67 }
68
69 const CStdString& CGUIListItem::GetLabel2() const
70 {
71   return m_strLabel2;
72 }
73
74 void CGUIListItem::SetThumbnailImage(const CStdString& strThumbnail)
75 {
76   m_strThumbnailImage = strThumbnail;
77   m_invalidated = true;
78 }
79
80 const CStdString& CGUIListItem::GetThumbnailImage() const
81 {
82   return m_strThumbnailImage;
83 }
84
85 void CGUIListItem::SetIconImage(const CStdString& strIcon)
86 {
87   m_strIcon = strIcon;
88   m_invalidated = true;
89 }
90
91 const CStdString& CGUIListItem::GetIconImage() const
92 {
93   return m_strIcon;
94 }
95
96 void CGUIListItem::SetOverlayImage(GUIIconOverlay icon, bool bOnOff)
97 {
98   if (bOnOff)
99     m_overlayIcon = GUIIconOverlay((int)(icon)+1);
100   else
101     m_overlayIcon = icon;
102   m_invalidated = true;
103 }
104
105 CStdString CGUIListItem::GetOverlayImage() const
106 {
107   switch (m_overlayIcon)
108   {
109   case ICON_OVERLAY_RAR:
110     return "OverlayRAR.png";
111   case ICON_OVERLAY_ZIP:
112     return "OverlayZIP.png";
113   case ICON_OVERLAY_TRAINED:
114     return "OverlayTrained.png";
115   case ICON_OVERLAY_HAS_TRAINER:
116     return "OverlayHasTrainer.png";
117   case ICON_OVERLAY_LOCKED:
118     return "OverlayLocked.png";
119   case ICON_OVERLAY_UNWATCHED:
120     return "OverlayUnwatched.png";
121   case ICON_OVERLAY_WATCHED:
122     return "OverlayWatched.png";
123   }
124   return "";
125 }
126
127 void CGUIListItem::Select(bool bOnOff)
128 {
129   m_bSelected = bOnOff;
130 }
131
132 bool CGUIListItem::HasIcon() const
133 {
134   return (m_strIcon.size() != 0);
135 }
136
137
138 bool CGUIListItem::HasThumbnail() const
139 {
140   return (m_strThumbnailImage.size() != 0);
141 }
142
143 bool CGUIListItem::HasOverlay() const
144 {
145   return (m_overlayIcon != CGUIListItem::ICON_OVERLAY_NONE);
146 }
147
148 bool CGUIListItem::IsSelected() const
149 {
150   return m_bSelected;
151 }
152
153 CGUIImage* CGUIListItem::GetThumbnail()
154 {
155   return m_pThumbnailImage;
156 }
157
158 CGUIImage* CGUIListItem::GetIcon()
159 {
160   return m_pIconImage;
161 }
162
163 CGUIImage* CGUIListItem::GetOverlay()
164 {
165   return m_overlayImage;
166 }
167
168 void CGUIListItem::SetThumbnail(CGUIImage* pImage)
169 {
170   if (m_pThumbnailImage)
171   {
172     m_pThumbnailImage->FreeResources();
173     delete m_pThumbnailImage;
174   }
175   m_pThumbnailImage = pImage;
176 }
177
178 void CGUIListItem::SetIcon(CGUIImage* pImage)
179 {
180   if (m_pIconImage)
181   {
182     m_pIconImage->FreeResources();
183     delete m_pIconImage;
184   }
185   m_pIconImage = pImage;
186 }
187
188 void CGUIListItem::SetOverlay(CGUIImage *pImage)
189 {
190   if (m_overlayImage)
191   {
192     m_overlayImage->FreeResources();
193     delete m_overlayImage;
194   }
195   m_overlayImage = pImage;
196 }
197
198 const CGUIListItem& CGUIListItem::operator =(const CGUIListItem& item)
199 {
200   if (&item == this) return * this;
201   m_strLabel2 = item.m_strLabel2;
202   m_strLabel = item.m_strLabel;
203   m_pThumbnailImage = NULL;
204   m_pIconImage = NULL;
205   m_overlayImage = NULL;
206   m_bSelected = item.m_bSelected;
207   m_strIcon = item.m_strIcon;
208   m_strThumbnailImage = item.m_strThumbnailImage;
209   m_overlayIcon = item.m_overlayIcon;
210   m_bIsFolder = item.m_bIsFolder;
211   m_invalidated = true;
212   return *this;
213 }
214
215 void CGUIListItem::FreeIcons()
216 {
217   FreeMemory();
218   m_strThumbnailImage = "";
219   m_strIcon = "";
220   m_invalidated = true;
221 }
222
223 void CGUIListItem::FreeMemory()
224 {
225   if (m_pThumbnailImage)
226   {
227     m_pThumbnailImage->FreeResources();
228     delete m_pThumbnailImage;
229     m_pThumbnailImage = NULL;
230   }
231   if (m_pIconImage)
232   {
233     m_pIconImage->FreeResources();
234     delete m_pIconImage;
235     m_pIconImage = NULL;
236   }
237   if (m_overlayImage)
238   {
239     m_overlayImage->FreeResources();
240     delete m_overlayImage;
241     m_overlayImage = NULL;
242   }
243   if (m_layout)
244   {
245     delete m_layout;
246     m_layout = NULL;
247   }
248   if (m_focusedLayout)
249   {
250     delete m_focusedLayout;
251     m_focusedLayout = NULL;
252   }
253 }
254
255 void CGUIListItem::SetLayout(CGUIListItemLayout *layout)
256 {
257   if (m_layout)
258     delete m_layout;
259   m_layout = layout;
260 }
261
262 CGUIListItemLayout *CGUIListItem::GetLayout()
263 {
264   return m_layout;
265 }
266
267 void CGUIListItem::SetFocusedLayout(CGUIListItemLayout *layout)
268 {
269   if (m_focusedLayout)
270     delete m_focusedLayout;
271   m_focusedLayout = layout;
272 }
273
274 CGUIListItemLayout *CGUIListItem::GetFocusedLayout()
275 {
276   return m_focusedLayout;
277 }