3f139a499c45bd79bf0b70db19c9789a3d261e85
[apps/osp/Internet.git] / src / IntAddBookmarkForm.cpp
1 //
2
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Flora License, Version 1.1 (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://floralicense.org/license/
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
18 // !Internet
19 /*@file:    AddBookmarkForm.cpp
20  *@brief:       This header file contains the definitions of the AddBookmarkForm class.
21  *
22  */
23
24 #include <FAppUiApp.h>
25 #include <FUi.h>
26
27 #include "IntAddBookmarkForm.h"
28 #include "IntBookmarkData.h"
29 #include "IntBookmarkPresentationModel.h"
30 #include "IntCommonLib.h"
31 #include "IntDropDownCustomItem.h"
32 #include "IntMultipleWindowPresentationModel.h"
33 #include "IntRadioCustomItem.h"
34 #include "IntSceneRegister.h"
35
36 using namespace Tizen::App;
37 using namespace Tizen::Base;
38 using namespace Tizen::Base::Collection;
39 using namespace Tizen::Base::Utility;
40 using namespace Tizen::Graphics;
41 using namespace Tizen::Ui;
42 using namespace Tizen::Ui::Controls;
43 using namespace Tizen::Ui::Scenes;
44
45 static const int LIST_ITEM_HEIGHT = 112;
46 static const int H_ITEM_HEIGHT = 112;
47 static const int H_TITLE_ITEM_HEIGHT = 144;
48 static const wchar_t* IDB_LIST_LEFT_SIDE = L"ListLeftSide.png";
49
50 const int AddBookmarkForm::IDA_CREATE_BOOKMARK_FOLDER = 101;
51 const int AddBookmarkForm::IDA_BUTTON_DONE = 102;
52 const int AddBookmarkForm::IDA_BUTTON_CANCEL = 103;
53 const int AddBookmarkForm::IDA_LIST_LEFT_SIDE_MARGIN = 104;
54 const int AddBookmarkForm::IDA_LIST_LEFT_SIDE_MARGIN_DROPDOWN = 105;
55
56 AddBookmarkForm::AddBookmarkForm(void)
57 :__fontSize(36)
58 ,__folderCount(0)
59 ,__folderName(CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS"))
60 ,__listHeight(H_TITLE_ITEM_HEIGHT)
61 , __oldFolderCount(0)
62 , __pBookmark(null)
63 , __pEditFieldTitle(null)
64 , __pEditFieldUrl(null)
65 ,__pList(null)
66 , __pListPanel(null)
67 , __previousScene(null)
68 , __pScrollPanel(null)
69 , __pWindowInfo(null)
70 , __selectedIndex(0)
71 , __showFolderList(false)
72 ,__titleOnViewDeactivated(L"")
73 , __view(L"")
74 ,__urlOnViewDeactivated(L"")
75 , __itemHeight(0)
76 , __dropdownItemHeight(0)
77 {
78
79 }
80
81 AddBookmarkForm::~AddBookmarkForm(void)
82 {
83         //      RemoveAllControls();
84 }
85
86 bool
87 AddBookmarkForm::Initialize(void)
88 {
89         Construct(L"IDL_ADD_BOOKMARK");
90
91         return true;
92 }
93
94 result
95 AddBookmarkForm::OnInitializing(void)
96 {
97         result r = E_SUCCESS;
98         Header* pHeader = null;
99
100         SceneManager* pSceneManager = SceneManager::GetInstance();
101         if (pSceneManager == null)
102         {
103                 return E_FAILURE;
104         }
105         pSceneManager->AddSceneEventListener(IDSCN_ADD_BOOKMARK, *this);
106
107         pHeader = GetHeader();
108
109         SetFormBackEventListener(this);
110         if (pHeader != null)
111         {
112                 pHeader->AddActionEventListener(*this);
113         }
114
115         // Main Panel which is a Scroll Panel
116         __pScrollPanel = static_cast< ScrollPanel* >(GetControl(L"IDC_SCROLLPANEL2"));
117
118         if (__pScrollPanel == null)
119         {
120                 return E_FAILURE;
121         }
122         //__pScrollPanel->SetPageScrollEnabled(true);
123         // Title EditField added on the Scroll Panel
124         __pEditFieldTitle = static_cast< EditField* >(__pScrollPanel->GetControl(L"IDC_EDITFIELD1"));
125
126         if (__pEditFieldTitle == null)
127         {
128                 return E_FAILURE;
129         }
130
131         __pEditFieldTitle->SetGuideText(CommonUtil::GetString(L"IDS_BR_POP_ENTER_BOOKMARK_NAME"));
132         __pEditFieldTitle->AddTextEventListener(*this);
133         __pEditFieldTitle->AddKeypadEventListener(*this);
134         __pEditFieldTitle->SetOverlayKeypadCommandButtonVisible(false);
135
136         // Url Editfield added on the Scroll Panel
137         __pEditFieldUrl = static_cast< EditField* >(__pScrollPanel->GetControl(L"IDC_EDITFIELD2"));
138
139         if (__pEditFieldUrl == null)
140         {
141                 return E_FAILURE;
142         }
143
144         __pEditFieldUrl->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL"));
145         __pEditFieldUrl->AddTextEventListener(*this);
146         __pEditFieldUrl->AddKeypadEventListener(*this);
147         __pEditFieldUrl->AddFocusEventListener(*this);
148         __pEditFieldUrl->SetOverlayKeypadCommandButtonVisible(false);
149
150         __pList = static_cast< ListView* >(__pScrollPanel->GetControl(L"IDC_LISTVIEW1"));
151
152         if (__pList == null)
153         {
154                 return E_FAILURE;
155         }
156         __pList->SetItemProvider(*this);
157         __pList->AddListViewItemEventListener(*this);
158         AddOrientationEventListener(*this);
159
160         __pScrollPanel->SetSize(GetClientAreaBounds().width, GetClientAreaBounds().height);
161         r = __pScrollPanel->SetClientAreaHeight(__pList->GetY() + __listHeight);
162         ScrollPanelScrollDirection direction = __pScrollPanel->GetScrollDirection();
163         AppLogDebug("ScrollDirection = %d SetClientAreaHeight ret = %s value = %d autoresize = %d",direction,GetErrorMessage(r),__pScrollPanel->GetClientAreaBounds().height,__pScrollPanel->IsScrollAreaAutoResizingEnabled());
164         __fontSize = CommonUtil::GetFontSize();
165         __itemHeight = 112 + (__fontSize-44);
166         r = E_SUCCESS;
167
168         return r;
169 }
170
171 result
172 AddBookmarkForm::OnTerminating(void)
173 {
174         result r = E_SUCCESS;
175         return r;
176 }
177
178 void
179 AddBookmarkForm::OnActionPerformed(const Control& source, int actionId)
180 {
181         AppLog("AddBookmarkForm::OnActionPerformed entered actionId %d",actionId);
182
183         SceneManager* pSceneManager = SceneManager::GetInstance();
184
185         if (pSceneManager == null)
186         {
187                 return ;
188         }
189
190         switch (actionId)
191         {
192         case IDA_CREATE_BOOKMARK_FOLDER:
193         {
194                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CREATE_BOOKMARK_FOLDER, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
195         }
196         break;
197
198         case IDA_BUTTON_DONE:
199         {
200                 // Code to save the Bookmark
201                 String title = L"";
202                 String Url = L"";
203                 String bookMarkID = L"";
204                 String folderTitle = L"";
205                 ArrayList folderList;
206                 result r= E_SUCCESS;
207                 int count = 0;
208                 bool exist = false;
209                 bool ret = false;
210                 bool flag = false;
211                 bool valid = false;
212
213
214                 String firstPattern(L"((ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)");
215                 String secondPattern(L"^[A-Za-z0-9\.\+-:#@%/;$~?]+\\.[A-Za-z0-9\+-=:#@%/;$~()_?\\\.&]{2,}$");   // Url of type  abc.com (i.e without protocol in front of it)
216
217                 RegularExpression firstRegex;
218                 RegularExpression secondRegex;
219
220                 firstRegex.Construct(firstPattern, REGEX_CASELESS);
221                 secondRegex.Construct(secondPattern, REGEX_CASELESS);
222
223                 title = __pEditFieldTitle->GetText();
224                 Url = __pEditFieldUrl->GetText();
225
226                 // Match
227                 ret = firstRegex.Match(Url, false); // This returns true value
228                 flag = secondRegex.Match(Url, false);  // Checks whether Url typed is of type  abc.com (i.e without protocol in front of it)
229
230                 if (ret == true)
231                 {
232                         valid = true ;
233                 }
234                 else
235                 {
236                         String tempUrl;
237                         if(Url.Contains("http://") == true)
238                         {
239                                 tempUrl.Append(Url);
240                         }
241                         else
242                         {
243                                 tempUrl = L"http://";
244                                 tempUrl.Append(Url);
245                         }
246
247                         if(flag == true)
248                         {
249                                 valid = true;
250                                 Url = tempUrl;
251                         }
252                 }
253
254                 if (valid == false)
255                 {
256                         String msg = CommonUtil::GetString(L"IDS_COM_POP_INVALID_URL");
257                         CreateMessage(msg);
258                 }
259                 else
260                 {
261                         if (__view == CommonUtil::GetString(L"IDS_BR_SK_EDIT"))
262                         {
263                                 String tempUrl ;
264                                 String tempTitle;
265                                 String tempParentId;
266
267                                 tempUrl = __pBookmark->GetUrl();
268                                 tempTitle = __pBookmark->GetBookmarkTitle();
269                                 tempParentId = __pBookmark->GetParentId();
270
271
272
273                                 r = BookmarkPresentationModel::GetInstance()->GetFolder("0", 0, __folderCount, folderList);
274                                 TryCatch(r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r));
275
276                                 for (count = 0; count < __folderCount; count++)
277                                 {
278                                         BookmarkData* pBookmark = null;
279                                         pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count));
280                                         if (pBookmark == NULL)
281                                         {
282                                                 return;
283                                         }
284                                         folderTitle = pBookmark->GetBookmarkTitle();
285
286                                         if (folderTitle == __folderName)
287                                         {
288                                                 bookMarkID = pBookmark->GetBookmarkId();
289                                                 break;
290                                         }
291                                 }
292
293                                 if(bookMarkID.GetLength() == 0)
294                                 {
295                                         bookMarkID = L"0";
296                                 }
297
298                                 AppLog("IDA_BUTTON_DONE tempParentId ID is %S",tempParentId.GetPointer());
299                                 AppLog("IDA_BUTTON_DONE bookMarkID ID is %S",bookMarkID.GetPointer());
300                                 String urlText = __pEditFieldUrl->GetText();
301                                 String urlWithSlash = L"";
302                                 String urlWithoutSlash = L"";
303                                 if(urlText.EndsWith(L"/"))
304                                 {
305                                         urlWithSlash = urlText;
306                                         urlText.SubString(0,urlText.GetLength()-1,urlWithoutSlash);
307                                 }
308                                 else
309                                 {
310                                         urlWithoutSlash = urlText;
311                                         urlWithSlash = urlWithoutSlash;
312                                         urlWithSlash.Append(L"/");
313                                 }
314
315                                 if (bookMarkID.CompareTo(tempParentId) == 0 && (urlWithSlash.CompareTo(tempUrl) == 0 || urlWithoutSlash.CompareTo(tempUrl) == 0 )&& __pEditFieldTitle->GetText().CompareTo(tempTitle) == 0)
316                                 {
317                                         pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
318                                         return;
319                                 }
320
321                                 if(tempUrl != __pEditFieldUrl->GetText() || tempParentId != bookMarkID)
322                                 {
323                                         r = BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(Url,exist, bookMarkID, true);
324                                         TryCatch( r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r));
325                                 }
326
327
328                                 if ( exist == true && !(urlWithSlash.CompareTo(tempUrl) == 0 || urlWithoutSlash.CompareTo(tempUrl) == 0 ))
329                                 {
330                                         String msg = CommonUtil::GetString(L"IDS_BR_POP_ALREADY_EXISTS");
331                                         CreateMessage(msg);
332
333                                         AppLogDebug("Bookmark already exists");
334                                 }
335                                 else
336                                 {
337                                         __pBookmark->SetUrl(Url);
338                                         __pBookmark->SetBookmarkTitle(title);
339
340                                         if (bookMarkID == L"")
341                                         {
342                                                 __pBookmark->SetParentId(L"0");
343                                         }
344                                         else
345                                         {
346                                                 __pBookmark->SetParentId(bookMarkID);
347                                         }
348
349                                         r = BookmarkPresentationModel::GetInstance()->SaveTempBookmark(*__pBookmark);
350                                         AppLogDebug("ID_BUTTON_DONE SaveBookmark = %s", GetErrorMessage(r));
351                                         AppLogDebug("parent id = %ls",__pBookmark->GetParentId().GetPointer());
352                                         pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
353                                 }
354                         }
355                         else
356                         {
357                                 AppLog("AddBookmarkForm::OnActionPerformed does url exist 1");
358
359                                 r = BookmarkPresentationModel::GetInstance()->GetFolder(L"0", 0, __folderCount, folderList);
360                                 TryCatch(r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r));
361
362                                 for (count = 0; count < __folderCount; count++)
363                                 {
364                                         BookmarkData* pBookmark = null;
365                                         pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count));
366                                         if (pBookmark == NULL)
367                                         {
368                                                 return;
369                                         }
370                                         folderTitle = pBookmark->GetBookmarkTitle();
371
372                                         if (folderTitle == __folderName)
373                                         {
374                                                 bookMarkID = pBookmark->GetBookmarkId();
375                                                 break;
376                                         }
377                                 }
378                                 if(bookMarkID.GetLength() == 0)
379                                 {
380                                         bookMarkID = L"0";
381                                 }
382                                 r = BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(Url,exist, bookMarkID, true);
383
384                                 TryCatch( r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r));
385                                 AppLog("AddBookmarkForm::OnActionPerformed does url exist 2");
386                                 if ( exist  == true)
387                                 {
388                                         String msg = CommonUtil::GetString(L"IDS_BR_POP_ALREADY_EXISTS");
389                                         CreateMessage(msg);
390
391                                         AppLogDebug("Bookmark already exists");
392                                 }
393                                 else
394                                 {
395                                         r = BookmarkPresentationModel::GetInstance()->GetFolder("0", 0, __folderCount, folderList);
396                                         TryCatch( r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r));
397
398                                         for (count = 0; count < __folderCount; count++)
399                                         {
400                                                 BookmarkData* pBookmark = null;
401                                                 pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count));
402                                                 if ( pBookmark == NULL )
403                                                 {
404                                                         return;
405                                                 }
406                                                 folderTitle = pBookmark->GetBookmarkTitle();
407
408                                                 if (folderTitle == __folderName)
409                                                 {
410                                                         bookMarkID = pBookmark->GetBookmarkId();
411                                                         break;
412                                                 }
413                                         }
414                                         BookmarkData bookmark;
415
416                                         if (__folderName != CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS"))
417                                         {
418                                                 bookmark.SetParentId(bookMarkID);
419                                         }
420
421                                         bookmark.SetBookmarkTitle(title);
422                                         bookmark.SetUrl(Url);
423                                         if (__pBookmark != null)
424                                         {
425                                                 bookmark.SetFaviconId(__pBookmark->GetFaviconId());
426                                         }
427                                         BookmarkPresentationModel::GetInstance()->SaveTempBookmark(bookmark);
428                                         pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
429                                 }
430                         }
431                 }
432
433                 folderList.RemoveAll(true);
434         }
435         break;
436
437         case IDA_BUTTON_CANCEL:
438         {
439                 if (__pEditFieldTitle != NULL)
440                 {
441                         __pEditFieldTitle->Clear();
442                 }
443
444                 if (__pEditFieldUrl != NULL)
445                 {
446                         __pEditFieldUrl->Clear();
447                 }
448
449                 pSceneManager->GoBackward(BackwardSceneTransition());
450
451         }
452         break;
453
454         default:
455                 break;
456         }
457
458         CATCH: return;
459 }
460
461 void
462 AddBookmarkForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
463 {
464         SceneManager* pSceneManager = SceneManager::GetInstance();
465
466         if (pSceneManager == null)
467         {
468                 return ;
469         }
470
471         if (__pEditFieldTitle != NULL)
472         {
473                 __pEditFieldTitle->Clear();
474         }
475
476         if (__pEditFieldUrl != NULL)
477         {
478                 __pEditFieldUrl->Clear();
479         }
480
481         pSceneManager->GoBackward(BackwardSceneTransition());
482
483
484 }
485 void
486 AddBookmarkForm::OnListViewItemLongPressed(ListView& listView, int index, int elementId, bool& invokeListViewItemCallback)
487 {
488         return;
489 }
490
491 void
492 AddBookmarkForm::OnListViewItemStateChanged(ListView& listView, int index, int elementId, ListItemStatus status)
493 {
494         AppLog("AddBookmarkForm::OnListViewItemStateChanged listitemstatus %d for index",status,index);
495         if (__pEditFieldTitle != NULL)
496         {
497                 __pEditFieldTitle->HideKeypad();
498         }
499
500         if (__pEditFieldUrl != NULL)
501         {
502                 __pEditFieldUrl->HideKeypad();
503         }
504         if (index == 0)
505         {
506                 if (__showFolderList == false)
507                 {
508                         AppLog("AddBookmarkForm::OnListViewItemStateChanged false");
509                         __showFolderList = true;
510                         __pList->UpdateList();
511                         __listHeight = __dropdownItemHeight + (__pList->GetItemCount() -1) * __itemHeight;
512
513                 }
514                 else
515                 {
516                         AppLog("AddBookmarkForm::OnListViewItemStateChanged true");
517                         __showFolderList = false;
518                         __pList->UpdateList();
519                         __listHeight = __dropdownItemHeight + (__pList->GetItemCount() - 1) * __itemHeight;
520
521                 }
522
523         }
524         else
525         {
526                 __pList->SetItemChecked(__selectedIndex,false);
527                 __pList->SetItemChecked(index,true);
528                 __selectedIndex = index;
529
530                 if (index > 1 && __pList->GetItemCount() != index +1)
531                 {
532                         String parentID = "0";
533                         ArrayList folderList;
534                         BookmarkData* pBookmark = null;
535                         BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList);
536
537                         pBookmark = static_cast<BookmarkData*>(folderList.GetAt(index-2));
538                         __folderName = pBookmark->GetBookmarkTitle();
539                 }
540                 else if(index == 1)
541                 {
542                         __folderName = CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS") ;
543                 }
544                 __listHeight = __dropdownItemHeight + (__pList->GetItemCount()-1) * __itemHeight;
545                 if (__pList->GetItemCount() == index +1)
546                 {
547                         SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_CREATE_BOOKMARK_FOLDER, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
548                         return;
549                 }
550
551 //              __pList->UpdateList();//removed for issue 53372
552                                 __pList->RefreshList(0, LIST_REFRESH_TYPE_ITEM_MODIFY);
553
554         }
555
556         result r = __pList->SetBounds(Rectangle(__pList->GetX(), __pList->GetY(), __pList->GetWidth(), __listHeight));
557         //__pList->Invalidate(true);
558         Invalidate(true);
559         AppLog("the result is %s", GetErrorMessage(r));
560         AppLog("the list height is %d", __pList->GetHeight());
561         return;
562 }
563
564 void
565 AddBookmarkForm::OnListViewItemSwept(ListView& listView, int index, SweepDirection direction)
566 {
567         __pList->RefreshList(0, LIST_REFRESH_TYPE_ITEM_MODIFY);
568         return;
569 }
570
571 void
572 AddBookmarkForm::OnListViewContextItemStateChanged(ListView& listView, int index, int elementId, ListContextItemStatus state)
573 {
574         return;
575 }
576
577 int
578 AddBookmarkForm::GetItemCount(void)
579 {
580         AppLogDebug("AddBookmarkForm::GetItemCount");
581         int count = 0;
582         ArrayList folderList;
583         String parentID = "0";
584         BookmarkData* pBookmark = null;
585         BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList);
586
587         if (__selectedIndex == 0 && __view == CommonUtil::GetString(L"IDS_BR_SK_EDIT"))
588         {
589                 for(int count = 0; count < __folderCount; count++)
590                 {
591                         pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count));
592
593                         if (__pBookmark != null && pBookmark != NULL && __pBookmark->GetParentId() == pBookmark->GetBookmarkId())
594                         {
595                                 __selectedIndex = count + 2;
596                                 __folderName = pBookmark->GetBookmarkTitle();
597                                 break;
598                         }
599                         else
600                         {
601                                 __selectedIndex = 1;
602                         }
603                 }
604         }
605
606         folderList.RemoveAll(true);
607
608         if (__showFolderList == false)
609         {
610                 return 1;
611         }
612         else
613         {
614                 result r = BookmarkPresentationModel::GetInstance()->GetFolderCount(L"0",count);
615                 TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetBookmarkCount query failed  %s",GetErrorMessage(r));
616                 AppLog("count = %d", count);
617                 return count + 3;
618                 CATCH:
619                 return E_FAILURE;
620         }
621
622 }
623
624 ListItemBase*
625 AddBookmarkForm::CreateItem(int index, int itemWidth)
626 {
627         AppLog("AddBookmarkForm::CreateItem index = %d itemWidth %d list width = %d",index,itemWidth,__pList->GetWidth());
628         result r = E_FAILURE;
629         String folderTitle = L"";
630         RadioCustomItem* radioItem = null;
631         DropDownCustomItem* pItem = null;
632         Bitmap* pBitmap = null;
633         pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_LIST_LEFT_SIDE);
634         const Color ITEM_RADIO_ITEM_BACKGROUND_COLOR = CUSTOM_COLOR_SETTINGS_LISTITEM_RADIO_BACKGROUND;
635         const Color ITEM_BACKGROUND_COLOR_HIGHLIGHTED = CUSTOM_BACKGROUND_COLOR_LISTVIEW_PRESSED_HIGHLIGHTED;
636         if(itemWidth == 0)
637         {
638                 itemWidth = __pList->GetWidth();
639         }
640         if (index == 0)
641         {
642                 pItem = new(std::nothrow) DropDownCustomItem();
643                 r = pItem->Construct(itemWidth);
644
645                 if (IsFailed(r))
646                 {
647                         AppLog("Create Item Failed with error %s", GetErrorMessage(r));
648                         delete pItem;
649                         delete pBitmap;
650                         return null;
651                 }
652
653                 __dropdownItemHeight = 140 + (__fontSize - 44);
654                 if ( __showFolderList == true )
655                 {
656                         pItem->SetCurState(DROP_DOWN_ITEM_STATE_OPENED);
657                 }
658                 else
659                 {
660                         pItem->SetCurState(DROP_DOWN__ITEM_STATE_CLOSED);
661                 }
662
663
664                 pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
665                 pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, ITEM_BACKGROUND_COLOR_HIGHLIGHTED);
666                 pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, ITEM_BACKGROUND_COLOR_HIGHLIGHTED);
667                 pItem->SetMainText(CommonUtil::GetString(L"IDS_BR_HEADER_FOLDER"));
668                 pItem->SetSubText(__folderName);
669                 pItem->Make();
670                 if (pBitmap != null)
671                 {
672                         //pItem->AddElement(Rectangle(0, 0, 10, H_ITEM_HEIGHT), IDA_LIST_LEFT_SIDE_MARGIN_DROPDOWN, *pBitmap, null);
673                         delete pBitmap;
674                 }
675                 return pItem;
676         }
677         else
678         {
679                 String parentID = "0";
680                 ArrayList folderList;
681
682                 BookmarkData* pBookmark = null;
683                 r = BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList);
684
685                 if (index == 1)
686                 {
687                         radioItem = new(std::nothrow) RadioCustomItem();
688                         //                      r = radioItem->Construct(GetClientAreaBounds().width, __itemHeight);
689                         r = radioItem->Construct(itemWidth, __itemHeight);
690                         if (IsFailed(r))
691                         {
692                                 AppLog("Create Item Failed with error %s", GetErrorMessage(r));
693                                 delete radioItem;
694                                 delete pBitmap;
695                                 return null;
696                         }
697
698                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL,ITEM_RADIO_ITEM_BACKGROUND_COLOR);
699                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED,ITEM_BACKGROUND_COLOR_HIGHLIGHTED);
700
701 //                      radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
702 //                      radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
703 //                      radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
704                         folderTitle = CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS") ;
705                         radioItem->SetText(folderTitle);
706                 }
707                 else if (index <= __folderCount + 1)
708                 {
709                         pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(index - 2));
710                         if (pBookmark != null)
711                         {
712                                 folderTitle = pBookmark->GetBookmarkTitle();
713                         }
714                         radioItem = new(std::nothrow) RadioCustomItem();
715                         //                      r = radioItem->Construct(GetClientAreaBounds().width, __itemHeight);
716                         r = radioItem->Construct(itemWidth, __itemHeight);
717                         if (IsFailed(r))
718                         {
719                                 AppLog("Create Item Failed with error %s", GetErrorMessage(r));
720                                 delete radioItem;
721                                 delete pBitmap;
722                                 return null;
723                         }
724
725                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL,ITEM_RADIO_ITEM_BACKGROUND_COLOR);
726                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED,ITEM_BACKGROUND_COLOR_HIGHLIGHTED);
727 //                      radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
728 //                      radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
729 //                      radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
730                         radioItem->SetText(folderTitle);
731                 }
732                 else
733                 {
734                         radioItem = new(std::nothrow) RadioCustomItem();
735                         //                      r = radioItem->Construct(GetClientAreaBounds().width, __itemHeight);
736                         r = radioItem->Construct(itemWidth, __itemHeight);
737                         if (IsFailed(r))
738                         {
739                                 AppLog("Create Item Failed with error %s", GetErrorMessage(r));
740                                 delete radioItem;
741                                 delete pBitmap;
742                                 return null;
743                         }
744                         //radioItem->AddElement(Rectangle(MARGIN_X, 0, __pList->GetBounds().width, itemHeight), IDA_FORMAT_STRING1, CommonUtil::GetString(L"IDS_CREATE_NEW_FOLDER"), textsize, Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), true);
745                         folderTitle = CommonUtil::GetString(L"IDS_BR_OPT_NEW_FOLDER");
746                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL,ITEM_RADIO_ITEM_BACKGROUND_COLOR);
747                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED,ITEM_BACKGROUND_COLOR_HIGHLIGHTED);
748 //                      radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
749 //                      radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
750 //                      radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
751                         radioItem->SetText(folderTitle);
752
753                 }
754
755                 if (__selectedIndex == index)
756                 {
757 //                      radioItem->SetSelected(true);
758                         __pList->SetItemChecked(index,true);
759                 }
760                 else
761                 {
762 //                      radioItem->SetSelected(false);
763                         __pList->SetItemChecked(index,false);
764                 }
765
766                 if(__selectedIndex == 0 && index == 1)
767                 {
768 //                      radioItem->SetSelected(true);
769                         __pList->SetItemChecked(index,true);
770                 }
771                 if (__pList->IsItemChecked(index) == true)
772                 {
773                         __folderName = radioItem->GetText();
774                 }
775
776                 if (pBitmap != null)
777                 {
778                         //radioItem->AddElement(Rectangle(0, 0, 10, itemHeight), IDA_LIST_LEFT_SIDE_MARGIN, *pBitmap, null);
779                         delete pBitmap;
780                 }
781
782                 folderList.RemoveAll(true);
783                 radioItem->Make();
784                 return radioItem;
785         }
786 }
787
788 bool
789 AddBookmarkForm::DeleteItem(int index, ListItemBase* pItem, int itemWidth)
790 {
791         if (pItem != null)
792         {
793                 delete pItem;
794                 pItem = null;
795         }
796
797         return true;
798 }
799
800 void
801 AddBookmarkForm::OnKeypadActionPerformed(Control& source, KeypadAction keypadAction)
802 {
803         return;
804 }
805
806 void
807 AddBookmarkForm::OnKeypadClosed(Control& source)
808 {
809
810         AppLog("the client area height is %d",GetClientAreaBounds().height);
811
812         __pScrollPanel->SetBounds(Rectangle(0, 0, GetClientAreaBounds().width, GetClientAreaBounds().height));
813         __pScrollPanel->Invalidate(true);
814
815         Invalidate(true);
816         return;
817 }
818
819 void
820 AddBookmarkForm::OnKeypadOpened(Control& source)
821 {
822         return;
823 }
824
825 void
826 AddBookmarkForm::OnKeypadWillOpen(Control& source)
827 {
828         AppLog("the client area height is %d",GetClientAreaBounds().height);
829
830         //      __pScrollPanel->SetBounds(Rectangle(0, 0, GetClientAreaBounds().width, GetClientAreaBounds().height));
831
832         //      __pScrollPanel->Invalidate(true);
833         //      __pScrollPanel->SetScrollPosition(source.GetY()-48,false);
834         __pScrollPanel->SetSize(GetClientAreaBounds().width,GetClientAreaBounds().height);
835         __pScrollPanel->SetClientAreaWidth(__pScrollPanel->GetWidth());
836         __pScrollPanel->SetClientAreaHeight(__pList->GetY()+__listHeight);
837         Invalidate(true);
838         AppLog("the scroll panel height is Rect(%d,%d,%d,%d) ClientHeight =  %d",__pScrollPanel->GetX(),__pScrollPanel->GetY(),__pScrollPanel->GetWidth(),__pScrollPanel->GetHeight(),__pScrollPanel->GetClientAreaBounds().height);
839         return;
840 }
841
842 void
843 AddBookmarkForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs)
844 {
845         // Code to handle events when the AddBookmarkForm is activated.
846         String str = "0";
847         String pageTitle = L"";
848         String pageUrl = L"";
849         String title = L"";
850         String url = L"";
851         result r = E_FAILURE;
852         Header* pHeader = GetHeader();
853
854         r = BookmarkPresentationModel::GetInstance()->GetFolderCount(str, __folderCount);
855         TryCatch( r == E_SUCCESS, ,"Failed to intitialize GETFOLDERCOUNT  %s",GetErrorMessage(r));
856
857         if ( pHeader == NULL )
858         {
859                 return ;
860         }
861         if ( previousSceneId != IDSCN_CREATE_BOOKMARK_FOLDER )
862         {
863                 // check first argument of pargs 0 for Add, 1 - for Edit
864                 String* firstValue = NULL;
865                 if(pArgs)
866                 {
867                         firstValue = dynamic_cast<String*>(pArgs->GetAt(0));
868                 }
869
870                 if( firstValue == NULL || pArgs == NULL)
871                 {
872                         return ;
873                 }
874                 if (firstValue->CompareTo(L"1") == 0)
875                 {
876                         __view = CommonUtil::GetString(L"IDS_BR_SK_EDIT");
877
878                         pHeader->SetTitleText(CommonUtil::GetString(L"IDS_BR_HEADER_EDIT_BOOKMARK"));
879
880                         if (__pBookmark != NULL && pArgs != NULL)
881                         {
882                                 delete __pBookmark;
883                                 __pBookmark = null;
884                         }
885
886                         if (__pBookmark == NULL && pArgs != NULL)
887                         {
888                                 __pBookmark = dynamic_cast<BookmarkData*>(pArgs->GetAt(1));
889                         }
890
891                         if (__pBookmark)
892                         {
893                                 pageTitle = __pBookmark->GetBookmarkTitle();
894                                 pageUrl = __pBookmark->GetUrl();
895                         }
896                 }
897                 else if (firstValue->CompareTo(L"0") == 0)
898                 {
899                         __view = CommonUtil::GetString(L"IDS_COM_SK_ADD");
900                         pHeader->SetTitleText(CommonUtil::GetString(L"IDS_BR_HEADER_EDIT_BOOKMARK"));
901
902                         WindowInfo* pWindowInfo = MultipleWindowPresentationModel::GetInstance()->GetActiveWindowInfo();
903
904                         if( pWindowInfo == NULL )
905                         {
906                                 return;
907                         }
908
909                         if(pWindowInfo->pageTitle.CompareTo(CommonUtil::GetString(L"IDS_BR_BODY_BLANK_PAGE")) != 0)
910                                 pageTitle = pWindowInfo->pageTitle;
911
912                         if(pWindowInfo->pageUrl.IsEmpty() == false)
913                         {
914                                 pageUrl = pWindowInfo->pageUrl;
915                         }
916                         String* parentID = dynamic_cast<String*>(pArgs->GetAt(1));
917
918                         ArrayList folderList;
919
920                         BookmarkData* pBookmark = null;
921                         BookmarkPresentationModel::GetInstance()->GetFolder(L"0", 0, __folderCount, folderList);
922                         for(int count = 0; count < folderList.GetCount(); count++)
923                         {
924                                 pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count));
925
926                                 if ( pBookmark == null )
927                                 {
928                                         return ;
929                                 }
930
931                                 if (parentID != NULL && pBookmark->GetBookmarkId().CompareTo(parentID->GetPointer()) == 0)
932                                 {
933                                         __selectedIndex = count + 2;
934                                         __folderName = pBookmark->GetBookmarkTitle();
935                                         break;
936                                 }
937                                 else
938                                 {
939                                         __selectedIndex = 1 ;
940                                         __folderName = CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS") ;
941                                 }
942
943                         }
944
945                         if (__folderCount == 0)
946                         {
947                                 __selectedIndex = 1 ;
948                                 __folderName = CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS") ;
949                         }
950
951                         folderList.RemoveAll(true);
952                 }
953         }
954
955         if ( previousSceneId == IDSCN_CREATE_BOOKMARK_FOLDER )
956         {
957                 pageTitle = __titleOnViewDeactivated;
958                 pageUrl = __urlOnViewDeactivated;
959                 if(__pList && __pScrollPanel)
960                 {
961                         AppLog("__pList->GetItemCount() %d",__pList->GetItemCount());
962                         __pList->ScrollToItem(__pList->GetItemCount());
963 //                      __pList->Invalidate(true);
964                         __pScrollPanel->ScrollToBottom();
965                 }
966         }
967
968 //      if(__pEditFieldTitle != NULL)
969 //      {
970 //              __pEditFieldTitle->ShowKeypad();
971 //      }
972         if ( previousSceneId != IDSCN_CREATE_BOOKMARK_FOLDER )
973         {
974                 if (__pEditFieldTitle != NULL)
975                 {
976                         __pEditFieldTitle->SetText(pageTitle);
977                         __pEditFieldTitle->ShowKeypad();
978                 }
979                 if (__pEditFieldUrl != NULL)
980                 {
981                         __pEditFieldUrl->SetText(pageUrl);
982                         __pEditFieldUrl->HideKeypad();
983                 }
984
985         }
986         else
987         {
988                 if (__pEditFieldTitle != NULL)
989                 {
990                         __pEditFieldTitle->SetText(pageTitle);
991                         __pEditFieldTitle->HideKeypad();
992                 }
993                 if (__pEditFieldUrl != NULL)
994                 {
995                         __pEditFieldUrl->SetText(pageUrl);
996                         __pEditFieldUrl->HideKeypad();
997                 }
998         }
999         if (__view == CommonUtil::GetString(L"IDS_BR_SK_EDIT") && previousSceneId == IDSCN_CREATE_BOOKMARK_FOLDER )
1000         {
1001                 if (__oldFolderCount == 0)
1002                 {
1003                         if (__folderCount == 1)
1004                         {
1005                                 __selectedIndex = 2;
1006                         }
1007                 }
1008                 else if (__oldFolderCount != __folderCount)
1009                 {
1010                         __selectedIndex = __folderCount + 1;
1011                 }
1012                 if(__selectedIndex > 1)
1013                 {
1014                         String parentID = L"0";
1015                         ArrayList folderList;
1016                         BookmarkData* pBookmark = null;
1017                         BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList);
1018                         pBookmark = static_cast<BookmarkData*>(folderList.GetAt(__selectedIndex-2));
1019                         if(pBookmark != null)
1020                         {
1021                                 __folderName = pBookmark->GetBookmarkTitle();
1022                         }
1023                 }
1024         }
1025
1026         if (__view == CommonUtil::GetString(L"IDS_COM_SK_ADD")  && previousSceneId == IDSCN_CREATE_BOOKMARK_FOLDER)
1027         {
1028
1029                 if (__oldFolderCount == 0)
1030                 {
1031                         if (__folderCount == 1)
1032                         {
1033                                 __selectedIndex = 2;
1034                         }
1035                 }
1036                 else if (__oldFolderCount != __folderCount)
1037                 {
1038                         __selectedIndex = __folderCount + 1;
1039
1040                 }
1041                 else if (__oldFolderCount == __folderCount )
1042                 {
1043                         __selectedIndex = __folderCount + 1;
1044                 }
1045                 if(__selectedIndex > 1)
1046                 {
1047                         String parentID = L"0";
1048                         ArrayList folderList;
1049                         BookmarkData* pBookmark = null;
1050                         BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList);
1051                         pBookmark = static_cast<BookmarkData*>(folderList.GetAt(__selectedIndex-2));
1052                         if(pBookmark != null)
1053                         {
1054                                 __folderName = pBookmark->GetBookmarkTitle();
1055                         }
1056                 }
1057         }
1058         if (__pEditFieldTitle != NULL)
1059         {
1060                 title = __pEditFieldTitle->GetText();
1061                 title.Trim();
1062         }
1063
1064         if (__pEditFieldUrl != NULL)
1065         {
1066                 url = __pEditFieldUrl->GetText();
1067                 url.Trim();
1068         }
1069
1070         // To disable done button if either of the Title or Url field is empty
1071         if (title.GetLength() == 0 || url.GetLength() == 0)
1072         {
1073                 pHeader->SetButtonEnabled(BUTTON_POSITION_RIGHT, false);
1074                 pHeader->Invalidate(true);
1075         }
1076         else
1077         {
1078                 pHeader->SetButtonEnabled(BUTTON_POSITION_RIGHT, true);
1079                 pHeader->Invalidate(true);
1080         }
1081
1082         if(__pList != null)
1083         {
1084
1085                 __pList->UpdateList();
1086                 __listHeight = __dropdownItemHeight + (__pList->GetItemCount() - 1) * __itemHeight;
1087                 __pList->SetBounds(__pList->GetX(),__pList->GetY(),__pList->GetWidth(),__listHeight);
1088                 AppLog("ListWidth %d",__pList->GetWidth());
1089         }
1090
1091         Invalidate(true);
1092         //      __pList->RefreshList(0, LIST_REFRESH_TYPE_ITEM_MODIFY);
1093         CATCH : return;
1094 }
1095
1096 void
1097 AddBookmarkForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)
1098 {
1099         // Add code to handle events when the AddBookmarkForm is Deactivated.
1100         if ( __pEditFieldTitle != NULL)
1101         {
1102                 __titleOnViewDeactivated = __pEditFieldTitle->GetText();
1103         }
1104
1105         if ( __pEditFieldUrl != NULL)
1106         {
1107                 __urlOnViewDeactivated = __pEditFieldUrl->GetText();
1108         }
1109
1110         __oldFolderCount = __folderCount;
1111
1112         if (__view == CommonUtil::GetString(L"IDS_BR_SK_EDIT") )
1113         {
1114                 __selectedIndex = 0;
1115         }
1116         return;
1117 }
1118
1119 void
1120 AddBookmarkForm::OnFocusGained (const Tizen::Ui::Control &source)
1121 {
1122         __pScrollPanel->SetSize(GetClientAreaBounds().width,GetClientAreaBounds().height);
1123         __pScrollPanel->SetClientAreaWidth(__pScrollPanel->GetWidth());
1124         __pScrollPanel->SetClientAreaHeight(GetClientAreaBounds().height);
1125         Invalidate(true);
1126         return;
1127
1128 }
1129 void
1130 AddBookmarkForm::OnFocusLost (const Tizen::Ui::Control &source)
1131 {
1132
1133 }
1134
1135 void
1136 AddBookmarkForm::OnTextValueChanged(const Control& source)
1137 {
1138         String title = L"";
1139         String url = L"";
1140         Header* pHeader = GetHeader();
1141         if (pHeader == NULL)
1142         {
1143                 return;
1144         }
1145
1146         if (__pEditFieldTitle == NULL || __pEditFieldUrl == NULL)
1147         {
1148                 return;
1149         }
1150
1151         title = __pEditFieldTitle->GetText();
1152         url = __pEditFieldUrl->GetText();
1153         title.Trim();
1154         url.Trim();
1155
1156         // To disable done button if either of the Title or Url field is empty
1157         if (title.GetLength() == 0 || url.GetLength() == 0)
1158         {
1159                 pHeader->SetButtonEnabled(BUTTON_POSITION_RIGHT, false);
1160                 pHeader->Invalidate(true);
1161         }
1162         else
1163         {
1164                 pHeader->SetButtonEnabled(BUTTON_POSITION_RIGHT, true);
1165                 pHeader->Invalidate(true);
1166         }
1167
1168         return;
1169 }
1170
1171 void
1172 AddBookmarkForm::OnTextValueChangeCanceled(const Control& source)
1173 {
1174         return;
1175 }
1176
1177 void
1178 AddBookmarkForm::CreateMessage(String& str)
1179 {
1180         Tizen::Ui::Controls::MessageBox* pMsgBox = null;       // Message Box to display alert if folder with same name already exists
1181         int __modalMsgBoxResult;
1182
1183         pMsgBox = new(std::nothrow) MessageBox;
1184         if (pMsgBox != null)
1185         {
1186                 pMsgBox->Construct(L"", str, MSGBOX_STYLE_OK, 3000);
1187                 pMsgBox->ShowAndWait(__modalMsgBoxResult);
1188                 delete pMsgBox;
1189                 pMsgBox = null;
1190                 __modalMsgBoxResult = 0;
1191         }
1192
1193         return;
1194 }
1195
1196 void
1197 AddBookmarkForm::OnOrientationChanged(const Control& source, OrientationStatus orientationStatus)
1198 {
1199         //      if (__pEditFieldTitle != NULL)
1200         //      {
1201         //              __pEditFieldTitle->HideKeypad();
1202         //      }
1203         //      if (__pEditFieldUrl != NULL)
1204         //      {
1205         //              __pEditFieldUrl->HideKeypad();
1206         //      }
1207
1208         AppLog("AddBookmarkForm::OnOrientationChanged ClientAreaBound %d, %d",GetClientAreaBounds().width,GetClientAreaBounds().height);
1209         if (orientationStatus == ORIENTATION_STATUS_LANDSCAPE)
1210         {
1211                 if (__pScrollPanel != null)
1212                 {
1213                         __pScrollPanel->ScrollToTop();
1214                         __pScrollPanel->SetClientAreaHeight(__pList->GetY()+__listHeight);
1215                 }
1216         }
1217
1218         if (__pList != null)
1219         {
1220                 __pList->SetBounds(__pList->GetX(),__pList->GetY(),GetClientAreaBounds().width,__listHeight);
1221                 __pList->UpdateList();
1222         }
1223         Invalidate(true);
1224 }