2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0/
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.
19 * @file FUi_ClipboardImpl.cpp
20 * @brief This is the implementation file for the _ClipboardImpl class.
23 #include <FUiClipboard.h>
24 #include <FUiClipboardItem.h>
25 #include <FUiIClipboardPopupEventListener.h>
26 #include <FBaseColLinkedList.h>
27 #include <FBaseResult.h>
28 #include <FBaseSysLog.h>
29 #include "FUi_ClipboardImpl.h"
30 #include "FUi_Clipboard.h"
31 #include "FUi_ClipboardItemImpl.h"
32 #include "FUi_ClipboardItem.h"
34 using namespace Tizen::Base::Collection;
36 namespace Tizen { namespace Ui
40 _ClipboardImpl::CreateInstanceN(void)
42 _ClipboardImpl* pClipboardImpl = new (std::nothrow) _ClipboardImpl;
43 SysTryReturn(NID_UI, pClipboardImpl, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
45 SetLastResult(E_SUCCESS);
47 return pClipboardImpl;
50 _ClipboardImpl::~_ClipboardImpl(void)
55 _ClipboardImpl::GetCore(void)
57 return _Clipboard::GetInstance();
61 _ClipboardImpl::GetCore(void) const
63 return _Clipboard::GetInstance();
67 _ClipboardImpl::CopyItem(const _ClipboardItemImpl& item)
71 result r = GetCore()->CopyItem(item.GetCore());
73 if ((r == E_INVALID_ARG) || (r == E_SYSTEM))
75 SysLogException(NID_UI, r, "[%s] Propagating.", GetErrorMessage(r));
77 else if (r != E_SUCCESS)
80 SysLogException(NID_UI, r, "[E_SYSTEM] A system error occurred.");
86 Tizen::Base::Collection::IList*
87 _ClipboardImpl::RetrieveItemsN(unsigned long dataTypes)
89 SysTryReturn(NID_UI, IsValidDataType(dataTypes), null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The item of the specified data types is not found.");
92 // Get items from _Clipboard.
93 IList* pRetrievedList = GetCore()->RetrieveItemsN(dataTypes);
94 result r = GetLastResult();
96 if ((r == E_OBJ_NOT_FOUND) || (r == E_OUT_OF_MEMORY) || (r == E_SYSTEM))
98 SysLogException(NID_UI, r, "[%s] Propagating.", GetErrorMessage(r));
102 SysTryReturn(NID_UI, r == E_SUCCESS, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
104 IEnumerator* pEnumerator = null;
105 _ClipboardItem* pItemCore = null;
106 ClipboardItem* pItem = null;
109 LinkedList* pList = new (std::nothrow) LinkedList;
110 SysTryCatch(NID_UI, pList, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
112 pEnumerator = pRetrievedList->GetEnumeratorN();
114 SysTryCatch(NID_UI, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
116 while (pEnumerator->MoveNext() == E_SUCCESS)
118 // [ToDo] Use a template list.
119 pItemCore = dynamic_cast<_ClipboardItem*>(pEnumerator->GetCurrent());
122 pItem = new (std::nothrow) ClipboardItem;
123 SysTryCatch(NID_UI, pItem, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
125 r = pItem->Construct(pItemCore->GetDataType(), *(pItemCore->GetData()));
129 SysLogException(NID_UI, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
133 r = pList->Add(*pItem);
137 SysLogException(NID_UI, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
145 pRetrievedList->RemoveAll(true);
146 delete pRetrievedList;
148 SetLastResult(E_SUCCESS);
153 pRetrievedList->RemoveAll(true);
154 delete pRetrievedList;
158 pList->RemoveAll(true);
171 _ClipboardImpl::RetrieveLatestItemN(unsigned long dataTypes)
173 SysTryReturn(NID_UI, IsValidDataType(dataTypes), null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The item of the specified data types is not found.");
174 SysAssert(GetCore());
176 const _ClipboardItem* pItemCore = GetCore()->RetrieveLatestItemN(dataTypes);
177 result r = GetLastResult();
179 ClipboardItem* pItem = null;
180 _ClipboardItemImpl* pItemImpl = null;
182 if ((r == E_OBJ_NOT_FOUND) || (r == E_OUT_OF_MEMORY) || (r == E_SYSTEM))
184 SysLogException(NID_UI, r, "[%s] Propagating.", GetErrorMessage(r));
187 else if (r != E_SUCCESS)
189 SysLogException(NID_UI, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
193 pItem = new (std::nothrow) ClipboardItem;
194 SysTryCatch(NID_UI, pItem, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
196 r = pItem->Construct(pItemCore->GetDataType(), *(pItemCore->GetData()));
197 SysTryCatch(NID_UI, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
201 pItemImpl = _ClipboardItemImpl::GetInstance(*pItem);
203 SetLastResult(E_SUCCESS);
222 _ClipboardImpl::ShowPopup(unsigned long dataTypes, const IClipboardPopupEventListener& listener)
224 SysTryReturn(NID_UI, IsValidDataType(dataTypes), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
225 SysTryReturn(NID_UI, GetCore(), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
227 result r = GetCore()->ShowPopup(dataTypes, listener);
229 if ((r == E_INVALID_OPERATION) || (r == E_SYSTEM))
231 SysLogException(NID_UI, r, "[%s] Propagating.", GetErrorMessage(r));
233 else if (r != E_SUCCESS)
236 SysLogException(NID_UI, r, "[E_SYSTEM] A system error occurred.");
243 _ClipboardImpl::HidePopup(void)
245 SysTryReturn(NID_UI, GetCore(), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
247 result r = GetCore()->HidePopup();
249 if ((r == E_INVALID_OPERATION) || (r == E_SYSTEM))
251 SysLogException(NID_UI, r, "[%s] Propagating.", GetErrorMessage(r));
253 else if (r != E_SUCCESS)
256 SysLogException(NID_UI, r, "[E_SYSTEM] A system error occurred.");
263 _ClipboardImpl::IsPopupVisible(void)
265 if (GetCore() == null)
270 return GetCore()->IsPopupVisible();
274 _ClipboardImpl::GetInstance(Clipboard& clipboard)
276 return clipboard.__pClipboardImpl;
279 const _ClipboardImpl*
280 _ClipboardImpl::GetInstance(const Clipboard& clipboard)
282 return clipboard.__pClipboardImpl;
286 _ClipboardImpl::IsValidDataType(unsigned long dataTypes)
288 return ((CLIPBOARD_DATA_TYPE_TEXT & dataTypes) ||
289 (CLIPBOARD_DATA_TYPE_HTML & dataTypes) ||
290 (CLIPBOARD_DATA_TYPE_IMAGE & dataTypes) ||
291 (CLIPBOARD_DATA_TYPE_VIDEO & dataTypes) ||
292 (CLIPBOARD_DATA_TYPE_AUDIO & dataTypes));
295 _ClipboardImpl::_ClipboardImpl(void)