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_Clipboard.cpp
20 * @brief This is the implementation file for the _Clipboard class.
24 #include <FTextUtf8Encoding.h>
25 #include <FBaseColLinkedList.h>
26 #include <FBaseErrorDefine.h>
27 #include <FUiIClipboardPopupEventListener.h>
28 #include <FUiClipboard.h>
29 #include <FMediaImageTypes.h>
30 #include <FGrpBitmap.h>
31 #include <FBaseSysLog.h>
32 #include <FMedia_ImageEncoder.h>
33 #include <FMedia_ImageDecoder.h>
34 #include <FMedia_ImageUtil.h>
35 #include <FGrp_BitmapImpl.h>
36 #include "FUi_Clipboard.h"
37 #include "FUi_ClipboardItem.h"
38 #include "FUi_ControlManager.h"
39 #include "FUi_EcoreEvasMgr.h"
40 #include "FUiCtrl_PublicClipboardPopupEvent.h"
41 #include "FUi_IClipboardPopupEventListener.h"
44 using namespace Tizen::Base;
45 using namespace Tizen::Base::Collection;
46 using namespace Tizen::Base::Runtime;
47 using namespace Tizen::Graphics;
48 using namespace Tizen::Io;
49 using namespace Tizen::Media;
50 using namespace Tizen::Text;
51 using namespace Tizen::Ui::Controls;
55 const int _CLIPBOARD_ITEM_MAX = 12;
56 const int _CBHM_ITEM_MAX = 12;
57 const String _CLIPBOARD_DEFAULT_PATH = L"/tmp/clipboard_";
58 const String _CLIPBOARD_DEFAULT_EXTENSION = L".png";
61 namespace Tizen { namespace Ui
63 _Clipboard* _Clipboard::__pInstance = null;
66 _Clipboard::GetInstance(void)
73 if (_ControlManager::GetInstance())
75 __pInstance = new (std::nothrow) _Clipboard;
76 SysAssert(__pInstance);
85 _Clipboard::ReleaseInstance(void)
94 _Clipboard::~_Clipboard(void)
96 if (IsPopupVisible() == true)
103 delete __pPublicEvent;
104 __pPublicEvent = null;
109 _Clipboard::CopyItem(const _ClipboardItem& item)
111 SysTryReturn(NID_UI, IsValidDataType(item.GetDataType()), E_INVALID_ARG, E_INVALID_ARG,
112 "[E_INVALID_ARG] The data type is invalid.");
114 _ClipFormat format = ConvertToClipFormat(item.GetDataType());
115 SysTryReturn(NID_UI, format != _CLIP_FORMAT_NONE, E_INVALID_ARG, E_INVALID_ARG,
116 "[E_INVALID_ARG] The data type is invalid.");
118 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
119 SysTryReturn(NID_UI, pEcoreEvas, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
122 if (format == _CLIP_FORMAT_IMAGE)
124 const Bitmap* pBitmap = dynamic_cast <const Bitmap*>(item.GetData());
125 SysTryReturn(NID_UI, pBitmap, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The data is invalid.");
127 pChar = CreateImageFileN(*pBitmap);
131 const String* pString = dynamic_cast <const String*>(item.GetData());
132 SysTryReturn(NID_UI, pString, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The data is invalid.");
134 pChar = EncodeToCharN(*pString);
137 result r = GetLastResult();
138 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
140 r = pEcoreEvas->CopyClip(format, pChar);
141 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
143 SysLog(NID_UI, "[Clipboard] Clip : format = [%d], char = [%s] is copied.", format, pChar);
157 _Clipboard::RetrieveItemsN(unsigned long dataTypes)
159 SysTryReturn(NID_UI, IsValidDataType(dataTypes), null, E_INVALID_ARG,
160 "[E_INVALID_ARG] The data type is invalid.");
162 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
163 SysTryReturn(NID_UI, pEcoreEvas, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
165 int count = pEcoreEvas->GetClipCount();
166 SysTryReturn(NID_UI, count > 0, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The item of the specified data types is not found.");
168 LinkedList* pList = new (std::nothrow) LinkedList;
169 SysTryReturn(NID_UI, pList, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
172 int format = _CLIP_FORMAT_NONE;
174 ClipboardDataType type = CLIPBOARD_DATA_TYPE_NONE;
175 for (int i = 0; i < count; i++)
177 // Get the clip with index.
178 bool ret = pEcoreEvas->RetrieveClipN(i, &format, &pData);
182 SysLog(NID_UI, "It's failed to get the clip from _EcoreEvas.");
186 //if (!pData) // prevent -> SLP CBHM
188 // SysLog(NID_UI, "It's failed to get the clip from _EcoreEvas.");
192 type = ConvertToDataType(format, pData);
194 if (!IsValidDataType(type))
196 SysLog(NID_UI, "The type of a clip to be get form _EcoreEvas is invalid.");
201 // If the clip to be get from _EcoreEvas is in agreement with dataTypes.
202 if (dataTypes & type)
204 result r = E_SUCCESS;
205 _ClipboardItem* pItem = null;
207 if (type == CLIPBOARD_DATA_TYPE_IMAGE)
209 const Bitmap* pBitmap = LoadBitmapN(String(pData));
212 if (!pBitmap || (r != E_SUCCESS))
214 SysLog(NID_UI, "It's failed to load a bitmap.");
219 pItem = _ClipboardItem::CreateInstanceN(type, *pBitmap);
222 SysLog(NID_UI, "It's failed to create a image item.");
230 pItem = _ClipboardItem::CreateInstanceN(type, String(pData));
233 SysLog(NID_UI, "It's failed to create a clipboard item.");
241 r = pList->Add(*pItem);
245 SysLog(NID_UI, "It's failed to add a item into a list.");
259 SysTryCatch(NID_UI, pList->GetCount() > 0, , E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The item of the specified data types is not found.");
261 SetLastResult(E_SUCCESS);
270 const _ClipboardItem*
271 _Clipboard::RetrieveLatestItemN(unsigned long dataTypes)
273 SysTryReturn(NID_UI, IsValidDataType(dataTypes), null, E_INVALID_ARG,
274 "[E_INVALID_ARG] The data type is invalid.");
276 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
277 SysTryReturn(NID_UI, pEcoreEvas, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
279 int count = pEcoreEvas->GetClipCount();
280 SysTryReturn(NID_UI, count > 0, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The item of the specified data types is not found.");
282 // Find the item with dataTypes.
283 int format = _CLIP_FORMAT_NONE;
285 ClipboardDataType type = CLIPBOARD_DATA_TYPE_NONE;
287 for (int i = 0; i < count; i++)
289 // Get the clip with index.
290 bool ret = pEcoreEvas->RetrieveClipN(i, &format, &pData);
294 SysLog(NID_UI, "It's failed to get the clip from _EcoreEvas.");
298 //if (!pData) // prevent -> SLP CBHM
300 // SysLog(NID_UI, "It's failed to get the clip from _EcoreEvas.");
304 type = ConvertToDataType(format, pData);
306 if (!IsValidDataType(type))
308 SysLog(NID_UI, "The type of a clip to be get form _EcoreEvas is invalid.");
313 // If the clip to be get from _EcoreEvas is in agreement with dataTypes.
314 if (dataTypes & type)
325 SysTryReturn(NID_UI, found == true, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The item of the specified data types is not found.");
327 SysLog(NID_UI, "[Clipboard] Clip : format = [%d], char = [%s] is retrieved.", format, pData);
329 result r = E_SUCCESS;
330 _ClipboardItem* pItem = null;
331 if (type == CLIPBOARD_DATA_TYPE_IMAGE)
333 const Bitmap* pBitmap = LoadBitmapN(String(pData));
335 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
337 pItem = _ClipboardItem::CreateInstanceN(type, *pBitmap);
341 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
345 pItem = _ClipboardItem::CreateInstanceN(type, String(pData));
347 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
352 SetLastResult(E_SUCCESS);
367 _Clipboard::ShowPopup(unsigned long dataTypes, const IClipboardPopupEventListener &listener)
369 SysTryReturn(NID_UI, IsPopupVisible() == false, E_INVALID_OPERATION, E_INVALID_OPERATION,
370 "[E_INVALID_OPERATION] The popup is already shown.");
372 result r = E_SUCCESS;
374 if (__pPublicEvent == null)
376 __pPublicEvent = _PublicClipboardPopupEvent::CreateInstanceN();
378 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
381 r = __pPublicEvent->AddListener(listener);
382 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
384 unsigned long clipFormats = _CLIP_FORMAT_NONE;
385 if (CLIPBOARD_DATA_TYPE_IMAGE & dataTypes)
387 clipFormats = _CLIP_FORMAT_IMAGE;
390 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
392 pEcoreEvas->OpenClipboard(clipFormats);
398 _Clipboard::HidePopup(void)
400 SysTryReturn(NID_UI, IsPopupVisible() == true, E_INVALID_OPERATION, E_INVALID_OPERATION,
401 "[E_INVALID_OPERATION] The popup is not shown.");
403 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
404 pEcoreEvas->CloseClipboard();
408 delete __pPublicEvent;
409 __pPublicEvent = null;
416 _Clipboard::IsPopupVisible(void)
418 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
420 bool opened = pEcoreEvas->IsClipboardOpened();
422 SetLastResult(E_SUCCESS);
427 _Clipboard::FireEvent(int format, char* pData)
431 SysLog(NID_UI, "__pPublicEvent is null.");
437 result r = E_SUCCESS;
438 _ClipboardItem* pItemCore = null;
439 ClipboardItem* pItem = null;
443 ClipboardDataType type = ConvertToDataType(format, pData);
444 if (!IsValidDataType(type))
446 SysLog(NID_UI, "The type of a clip to be get form _EcoreEvas is invalid.");
453 if (type == CLIPBOARD_DATA_TYPE_IMAGE)
455 const Bitmap* pBitmap = LoadBitmapN(String(pData));
458 if (!pBitmap || (r != E_SUCCESS))
460 SysLog(NID_UI, "It's failed to load a bitmap.");
472 pItemCore = _ClipboardItem::CreateInstanceN(type, *pBitmap);
475 SysLog(NID_UI, "It's failed to create a image item.");
483 pItemCore = _ClipboardItem::CreateInstanceN(type, String(pData));
486 SysLog(NID_UI, "It's failed to create a clipboard item.");
494 SysLog(NID_UI, "pItemCore is null.");
500 pItem = new (std::nothrow) ClipboardItem;
501 pItem->Construct(pItemCore->GetDataType(), *(pItemCore->GetData()));
506 IEventArg* pArg = _PublicClipboardPopupEvent::CreateClipboardPopupEventArgN(pItem);
508 SysTryReturnVoidResult(NID_UI, pArg, r, "[%s] Propagating.", GetErrorMessage(r));
510 __pPublicEvent->Fire(*pArg);
513 SetLastResult(E_SUCCESS);
517 _Clipboard::AddClipboardPopupEventListener(_IClipboardPopupEventListener& listener)
519 result r = E_SUCCESS;
521 if (__pEvent.get() == null)
523 unique_ptr<_ClipboardPopupEvent> pEvent(_ClipboardPopupEvent::CreateInstanceN());
524 SysTryReturnResult(NID_UI, pEvent, E_OUT_OF_MEMORY, "Memory is insufficient.");
527 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
529 __pEvent = move(pEvent);
532 r = __pEvent->AddListener(listener);
538 _Clipboard::RemoveClipboardPopupEventListener(_IClipboardPopupEventListener& listener)
540 SysTryReturnResult(NID_UI, __pEvent.get(), E_OBJ_NOT_FOUND, "The _IClipboardPopupEventListener does not exist in the event listener list.");
542 result r = __pEvent->RemoveListener(listener);
543 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
549 _Clipboard::FirePopupEvent(_ClipboardPopupState state, int width, int height)
551 if (__pEvent.get() == null)
556 Dimension clipboardPopupSize(width, height);
557 IEventArg* pArg = _ClipboardPopupEvent::CreateClipboardPopupEventArgN(state, clipboardPopupSize);
558 result r = GetLastResult();
559 SysTryReturnVoidResult(NID_UI, pArg, r, "[%s] Propagating.", GetErrorMessage(r));
561 __pEvent->Fire(*pArg);
563 SetLastResult(E_SUCCESS);
567 _Clipboard::ConvertToClipFormat(ClipboardDataType type)
569 _ClipFormat format = _CLIP_FORMAT_NONE;
572 case CLIPBOARD_DATA_TYPE_TEXT:
574 case CLIPBOARD_DATA_TYPE_VIDEO:
576 case CLIPBOARD_DATA_TYPE_AUDIO:
577 format = _CLIP_FORMAT_TEXT;
579 case CLIPBOARD_DATA_TYPE_HTML:
580 format = _CLIP_FORMAT_HTML;
582 case CLIPBOARD_DATA_TYPE_IMAGE:
583 format = _CLIP_FORMAT_IMAGE;
593 _Clipboard::ConvertToDataType(int format, const char* pData)
595 ClipboardDataType type = CLIPBOARD_DATA_TYPE_NONE;
598 case _CLIP_FORMAT_TEXT:
599 if (IsVideoDataType(pData))
601 type = CLIPBOARD_DATA_TYPE_VIDEO;
603 else if (IsAudioDataType(pData))
605 type = CLIPBOARD_DATA_TYPE_AUDIO;
609 type = CLIPBOARD_DATA_TYPE_TEXT;
612 case _CLIP_FORMAT_HTML:
613 type = CLIPBOARD_DATA_TYPE_HTML;
615 case _CLIP_FORMAT_IMAGE:
616 type = CLIPBOARD_DATA_TYPE_IMAGE;
626 _Clipboard::EncodeToCharN(const String& string)
628 Utf8Encoding encoder;
629 ByteBuffer* pByteBuffer = encoder.GetBytesN(string);
631 result r = GetLastResult();
632 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
634 char* pChar = strdup((char*)pByteBuffer->GetPointer());
635 SysTryCatch(NID_UI, pChar, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
637 SetLastResult(E_SUCCESS);
647 _Clipboard::CreateImageFileN(const Bitmap& bitmap)
649 // Obtain the buffer information from the bitmap.
650 Bitmap& tmpBitmap = const_cast<Bitmap&>(bitmap);
651 BufferInfo bufferInfo;
653 result r = tmpBitmap.Lock(bufferInfo);
654 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
656 // Create a source buffer.
657 ByteBuffer* pSrcBuf = new (std::nothrow) ByteBuffer;
658 SysTryReturn(NID_UI, pSrcBuf, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
660 int outLength = bufferInfo.width * bufferInfo.height * bufferInfo.bitsPerPixel / 8;
662 BitmapPixelFormat bmpPixelFormat = bitmap.GetPixelColorFormat();
663 MediaPixelFormat mediaPixelFormat = MEDIA_PIXEL_FORMAT_NONE;
664 ImageFormat imageFormat = IMG_FORMAT_PNG;
666 ByteBuffer* pImageBuffer = null;
670 bool existFile = false;
672 r = pSrcBuf->Construct(outLength);
673 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
675 r = pSrcBuf->SetArray((const byte*)bufferInfo.pPixels, 0, outLength);
676 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
681 switch (bmpPixelFormat)
683 case BITMAP_PIXEL_FORMAT_RGB565:
684 mediaPixelFormat = MEDIA_PIXEL_FORMAT_RGB565LE;
686 case BITMAP_PIXEL_FORMAT_ARGB8888:
688 case BITMAP_PIXEL_FORMAT_R8G8B8A8:
689 mediaPixelFormat = MEDIA_PIXEL_FORMAT_BGRA8888;
692 SysLogException(NID_UI, E_INVALID_ARG, "[E_INVALID_ARG] The invalid argument is given.");
696 // Encode for getting a image buffer.
697 pImageBuffer = _ImageEncoder::EncodeToBufferN(*pSrcBuf, bufferInfo.width, bufferInfo.height, mediaPixelFormat, imageFormat);
699 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
704 // Create a image file.
705 filePath = CreateImageFilePath();
707 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
709 r = file.Construct(filePath, L"w+");
710 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
714 r = file.Write(*pImageBuffer);
715 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
720 pChar = EncodeToCharN(filePath);
722 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
724 SetLastResult(E_SUCCESS);
741 File::Remove(filePath);
753 _Clipboard::CreateImageFilePath(void)
755 result r = RemoveUnnecessaryImageFiles();
756 SysTryReturn(NID_UI, r == E_SUCCESS, String(""), r, "[%s] Propagating.", GetErrorMessage(r));
759 String extension(_CLIPBOARD_DEFAULT_EXTENSION);
762 for (int i = 0; i < _CLIPBOARD_ITEM_MAX; i++)
764 filePath = _CLIPBOARD_DEFAULT_PATH;
766 r = filePath.Append(i);
767 SysTryReturn(NID_UI, r == E_SUCCESS, String(""), r, "[%s] Propagating.", GetErrorMessage(r));
769 r = filePath.Append(extension);
770 SysTryReturn(NID_UI, r == E_SUCCESS, String(""), r, "[%s] Propagating.", GetErrorMessage(r));
772 if (File::IsFileExist(filePath) == false)
779 SysTryReturn(NID_UI, find == true, String(""), E_SYSTEM, "[E_SYSTEM] A system error occurred.");
781 SetLastResult(E_SUCCESS);
787 _Clipboard::RemoveUnnecessaryImageFiles(void)
789 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
790 SysTryReturn(NID_UI, pEcoreEvas, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
792 result r = E_SUCCESS;
794 int clipCount = pEcoreEvas->GetClipCount();
797 r = RemoveAllImageFiles();
798 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
803 ArrayList imageClipList;
805 r = imageClipList.Construct();
806 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
808 int format = _CLIP_FORMAT_NONE;
810 for (int i = 0; i < clipCount; i++)
812 bool ret = pEcoreEvas->RetrieveClipN(i, &format, &pData);
816 SysLog(NID_UI, "It's failed to get the clip from _EcoreEvas.");
820 //if (!pData) // prevent -> SLP CBHM
822 // SysLog(NID_UI, "It's failed to get the clip from _EcoreEvas.");
826 if (format == _CLIP_FORMAT_IMAGE)
829 int length = temp.GetLength();
830 int defaultLength = _CLIPBOARD_DEFAULT_PATH.GetLength();
832 if (length < defaultLength)
838 temp.Remove(defaultLength, length - defaultLength);
840 int compare = temp.CompareTo(_CLIPBOARD_DEFAULT_PATH);
844 String* pString = new (std::nothrow) String(pData);
845 imageClipList.Add(*pString);
853 IEnumerator* pEnumerator = null;
855 int imageClipCount = imageClipList.GetCount();
857 if (imageClipCount < 1)
859 r = RemoveAllImageFiles();
860 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
864 else if (imageClipCount == _CBHM_ITEM_MAX)
866 String* plastImageClip = dynamic_cast<String*>(imageClipList.GetAt(_CBHM_ITEM_MAX - 1));
867 SysTryCatch(NID_UI, plastImageClip, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
869 if (File::IsFileExist(*plastImageClip))
871 r = File::Remove(*plastImageClip);
872 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
876 pEnumerator = imageClipList.GetEnumeratorN();
877 SysTryCatch(NID_UI, pEnumerator, , r, "[%s] Propagating.", GetErrorMessage(r));
879 for (int i = 0; i < _CLIPBOARD_ITEM_MAX; i++)
881 filePath = _CLIPBOARD_DEFAULT_PATH;
883 r = filePath.Append(i);
884 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
886 r = filePath.Append(_CLIPBOARD_DEFAULT_EXTENSION);
887 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
890 while (pEnumerator->MoveNext() == E_SUCCESS)
892 String* pImageClip = dynamic_cast<String*>(pEnumerator->GetCurrent());
893 SysTryCatch(NID_UI, pImageClip, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
895 equal = filePath.Equals(*pImageClip);
902 r = pEnumerator->Reset();
903 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
907 if (File::IsFileExist(filePath))
909 r = File::Remove(filePath);
910 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
918 imageClipList.RemoveAll(true);
929 _Clipboard::RemoveAllImageFiles(void)
932 result r = E_SUCCESS;
934 for (int i = 0; i < _CLIPBOARD_ITEM_MAX; i++)
936 filePath = _CLIPBOARD_DEFAULT_PATH;
938 r = filePath.Append(i);
939 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
941 r = filePath.Append(_CLIPBOARD_DEFAULT_EXTENSION);
942 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
944 if (File::IsFileExist(filePath))
946 r = File::Remove(filePath);
947 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
955 _Clipboard::LoadBitmapN(const String& path)
957 result r = E_SUCCESS;
959 String* pStr = const_cast<String*>(&path);
962 r = pStr->IndexOf(L"file://", 0, index);
964 if (r != E_OBJ_NOT_FOUND)
969 bool hasAlpha = _ImageUtil::HasAlphaChannel(*pStr);
972 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
974 BitmapPixelFormat bmpPixelFormat = BITMAP_PIXEL_FORMAT_RGB565;
975 MediaPixelFormat mediaPixelFormat = MEDIA_PIXEL_FORMAT_RGB565LE;
977 if (hasAlpha == true)
979 bmpPixelFormat = BITMAP_PIXEL_FORMAT_ARGB8888;
980 mediaPixelFormat = MEDIA_PIXEL_FORMAT_BGRA8888;
987 ByteBuffer* pBuffer = _ImageDecoder::DecodeToBufferN(*pStr, mediaPixelFormat, bmpWidth, bmpHeight);
989 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
992 Bitmap* pBitmap = _BitmapImpl::GetNonScaledBitmapN(*pBuffer, Dimension(bmpWidth, bmpHeight), bmpPixelFormat);
994 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
998 SetLastResult(E_SUCCESS);
1014 _Clipboard::IsValidDataType(unsigned long dataTypes)
1016 return ((CLIPBOARD_DATA_TYPE_TEXT & dataTypes) ||
1017 (CLIPBOARD_DATA_TYPE_HTML & dataTypes) ||
1018 (CLIPBOARD_DATA_TYPE_IMAGE & dataTypes) ||
1019 (CLIPBOARD_DATA_TYPE_VIDEO & dataTypes) ||
1020 (CLIPBOARD_DATA_TYPE_AUDIO & dataTypes));
1024 _Clipboard::IsVideoDataType(const char* pChar)
1027 return (strstr(pChar, ".mp4") != null);
1031 _Clipboard::IsAudioDataType(const char* pChar)
1034 return (strstr(pChar, ".mp3") != null);
1037 _Clipboard::_Clipboard(void)
1038 : __pPublicEvent(null)