Changed indicator bg color.
[platform/framework/native/uifw.git] / src / ui / controls / FUiCtrl_GalleryModel.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0/
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 #include <FBaseSysLog.h>
18 #include "FUiCtrl_GalleryModel.h"
19 #include "FUiCtrl_GalleryItem.h"
20 #include "FUiCtrl_GalleryItemProviderAdaptor.h"
21
22 namespace Tizen { namespace Ui { namespace Controls {
23
24 namespace
25 {
26
27 const int GALLERY_ITEM_CACHE_SIZE = 5;
28
29 } // unnamed namespace
30
31 _GalleryModel::_GalleryModel(void)
32         : __pGalleryItemProviderAdaptor(null)
33         , __itemCount(0)
34 {
35         // Do nothing.
36 }
37
38 _GalleryModel::~_GalleryModel(void)
39 {
40         result r = __listViewModel.RemoveAllItem();
41
42         delete __pGalleryItemProviderAdaptor;
43         SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
44 }
45
46 _GalleryModel*
47 _GalleryModel::CreateGalleryModelN(_IGalleryItemProvider& galleryItemProvider)
48 {
49         result r = E_SUCCESS;
50
51         _GalleryItemProviderAdaptor* pGalleryItemProviderAdaptor = new (std::nothrow) _GalleryItemProviderAdaptor(galleryItemProvider);
52         SysTryReturn(NID_UI_CTRL, pGalleryItemProviderAdaptor != null, null, E_OUT_OF_MEMORY,
53                                         "[E_OUT_OF_MEMORY] Memory allocation failed.");
54
55         _GalleryModel* pGalleryModel = new (std::nothrow) _GalleryModel();
56         SysTryCatch(NID_UI_CTRL, pGalleryModel != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
57
58         r = pGalleryModel->RegisterItemProviderAdaptor(pGalleryItemProviderAdaptor);
59         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
60
61         r = pGalleryModel->SetCacheSize(GALLERY_ITEM_CACHE_SIZE);
62         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
63
64         SetLastResult(E_SUCCESS);
65         return pGalleryModel;
66
67 CATCH:
68         delete pGalleryItemProviderAdaptor;
69         delete pGalleryModel;
70
71         return null;
72 }
73
74 result
75 _GalleryModel::RegisterItemProviderAdaptor(_GalleryItemProviderAdaptor* pGalleryItemProviderAdaptor)
76 {
77         __pGalleryItemProviderAdaptor = pGalleryItemProviderAdaptor;
78         return __listViewModel.RegisterItemProviderAdaptor(pGalleryItemProviderAdaptor);
79 }
80
81 _GalleryItem*
82 _GalleryModel::GetItem(int index) const
83 {
84         SysTryReturn(NID_UI_CTRL, index >= 0, null, E_INVALID_ARG, "[E_INVALID_ARG] The argument(%d) is negative value.", index);
85
86         _GalleryItem* pItem = static_cast<_GalleryItem*>(const_cast<_ListViewModel*>(&__listViewModel)->LoadItem(0, index));
87         SysTryReturn(NID_UI_CTRL, pItem != null, null, GetLastResult(),
88                         "[%s] gallery item(%d) is invalid object", GetErrorMessage(GetLastResult()), index);
89
90         SetLastResult(E_SUCCESS);
91
92         return pItem;
93 }
94
95 result
96 _GalleryModel::SetItemProvider(_IGalleryItemProvider& provider)
97 {
98         return __pGalleryItemProviderAdaptor->SetGalleryItemProvider(provider);
99 }
100
101 int
102 _GalleryModel::GetItemCount(void) const
103 {
104         return __itemCount;
105 }
106
107 int
108 _GalleryModel::GetItemCountFromProvider(void) const
109 {
110         return __pGalleryItemProviderAdaptor->GetItemCount(0);
111 }
112
113 void
114 _GalleryModel::UpdateItemCount(void)
115 {
116         __itemCount = GetItemCountFromProvider();
117 }
118
119 result
120 _GalleryModel::RequestToLoadItem(int index)
121 {
122         SysTryReturn(NID_UI_CTRL, index >= 0, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
123                                         "[E_OUT_OF_RANGE] The argument(%d) is out of range.", index);
124         SysTryReturnResult(NID_UI_CTRL, index <= GetItemCount(), E_OUT_OF_RANGE, "Item index is out of range.");
125
126         _IListItemCommon* pCommonItem = __pGalleryItemProviderAdaptor->LoadItem(0, index);
127         SysTryReturnResult(NID_UI_CTRL, pCommonItem != null, GetLastResult(), "Propagating.");
128
129         // pCommonItem is always _GalleryItem type.
130         _GalleryItem* pItem = static_cast<_GalleryItem*>(pCommonItem);
131         result r = __listViewModel.InsertItemToGroup(pItem, 0, index);
132         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
133         __itemCount++;
134
135         return E_SUCCESS;
136 }
137
138 result
139 _GalleryModel::RequestToUnloadItem(int index)
140 {
141         SysTryReturn(NID_UI_CTRL, index >= 0 && index < GetItemCount(), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
142                                         "[E_OUT_OF_RANGE] The argument(%d) is out of range.", index);
143
144         result r = __listViewModel.RemoveItemAt(0, index);
145         SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
146         __itemCount--;
147
148         return E_SUCCESS;
149 }
150
151
152 result
153 _GalleryModel::RequestToUnloadAllItems(void)
154 {
155         return __listViewModel.DeleteAllGroupAndItem();
156 }
157
158 result
159 _GalleryModel::RequestToUpdateItem(int index)
160 {
161         SysTryReturn(NID_UI_CTRL, index >= 0 && index < GetItemCount(), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
162                         "[E_OUT_OF_RANGE] The argument(%d) is out of range.", index);
163
164         _IListItemCommon* pItem = __pGalleryItemProviderAdaptor->LoadItem(0, index);
165         result r = GetLastResult();
166         SysTryReturn(NID_UI_CTRL, pItem != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
167
168         r = __listViewModel.SetItem(*pItem, 0, index);
169         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
170
171         return E_SUCCESS;
172 }
173
174 result
175 _GalleryModel::RequestToUpdateAllItems(void)
176 {
177         UpdateItemCount();
178         result r = RequestToUnloadAllItems();
179         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
180
181         r = AddGroup();
182         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
183
184         return E_SUCCESS;
185 }
186
187 result
188 _GalleryModel::SetCacheSize(int size)
189 {
190         SysTryReturn(NID_UI_CTRL, size >= 0, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
191                                         "[E_OUT_OF_RANGE] The argument(%d) is out of range.", size);
192         return __listViewModel.SetMaxCachingSize(size);
193 }
194
195 int
196 _GalleryModel::GetCacheSize(void) const
197 {
198         return __listViewModel.GetMaxCachingSize();
199 }
200
201 result
202 _GalleryModel::AddGroup(void)
203 {
204         int itemCount = GetItemCount();
205         if (__listViewModel.GetAllGroupCount() == 0)
206         {
207                 result r = __listViewModel.AddGroup(itemCount);
208                 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
209
210                 //r = __listViewModel.SetAllItemCountAndHeight(1, itemCount, 1);
211                 //SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
212         }
213
214         return E_SUCCESS;
215 }
216
217 }}} // Tizen::Ui::Controls