Tizen 2.0 Release
[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.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://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 = 128;
47 static const wchar_t* IDB_LIST_LEFT_SIDE = L"ListLeftSide.png";
48
49 const int AddBookmarkForm::IDA_CREATE_BOOKMARK_FOLDER = 101;
50 const int AddBookmarkForm::IDA_BUTTON_DONE = 102;
51 const int AddBookmarkForm::IDA_BUTTON_CANCEL = 103;
52 const int AddBookmarkForm::IDA_LIST_LEFT_SIDE_MARGIN = 104;
53 const int AddBookmarkForm::IDA_LIST_LEFT_SIDE_MARGIN_DROPDOWN = 105;
54
55 AddBookmarkForm::AddBookmarkForm(void)
56 :__folderCount(0)
57 ,__folderName(CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS"))
58 ,__listHeight(H_ITEM_HEIGHT)
59 , __oldFolderCount(0)
60 , __pBookmark(null)
61 , __pEditFieldTitle(null)
62 , __pEditFieldUrl(null)
63 ,__pList(null)
64 , __pListPanel(null)
65 , __previousScene(null)
66 , __pScrollPanel(null)
67 , __pWindowInfo(null)
68 , __selectedIndex(0)
69 , __showFolderList(false)
70 ,__titleOnViewDeactivated(L"")
71 , __view(L"")
72 ,__urlOnViewDeactivated(L"")
73
74 {
75
76 }
77
78 AddBookmarkForm::~AddBookmarkForm(void)
79 {
80         //      RemoveAllControls();
81 }
82
83 bool
84 AddBookmarkForm::Initialize(void)
85 {
86         Construct(L"IDL_ADD_BOOKMARK");
87
88         return true;
89 }
90
91 result
92 AddBookmarkForm::OnInitializing(void)
93 {
94         result r = E_SUCCESS;
95         Header* pHeader = null;
96
97         SceneManager* pSceneManager = SceneManager::GetInstance();
98         if (pSceneManager == null)
99         {
100                 return E_FAILURE;
101         }
102         pSceneManager->AddSceneEventListener(IDSCN_ADD_BOOKMARK, *this);
103
104         pHeader = GetHeader();
105
106         if (pHeader != null)
107         {
108                 pHeader->AddActionEventListener(*this);
109         }
110
111         // Main Panel which is a Scroll Panel
112         __pScrollPanel = static_cast< ScrollPanel* >(GetControl(L"IDC_SCROLLPANEL2"));
113
114         if (__pScrollPanel == null)
115         {
116                 return E_FAILURE;
117         }
118
119         __pLabel1 = static_cast< Label* >(__pScrollPanel->GetControl(L"IDC_LABEL1"));
120
121         if (__pLabel1 == null)
122         {
123                 return E_FAILURE;
124         }
125
126         // Title EditField added on the Scroll Panel
127         __pEditFieldTitle = static_cast< EditField* >(__pScrollPanel->GetControl(L"IDC_EDITFIELD1"));
128
129         if (__pEditFieldTitle == null)
130         {
131                 return E_FAILURE;
132         }
133
134         __pEditFieldTitle->SetGuideText(CommonUtil::GetString(L"IDS_BR_POP_ENTER_BOOKMARK_NAME"));
135         __pEditFieldTitle->AddTextEventListener(*this);
136         __pEditFieldTitle->AddKeypadEventListener(*this);
137         __pEditFieldTitle->SetOverlayKeypadCommandButtonVisible(false);
138
139         // Url Editfield added on the Scroll Panel
140         __pEditFieldUrl = static_cast< EditField* >(__pScrollPanel->GetControl(L"IDC_EDITFIELD2"));
141
142         if (__pEditFieldUrl == null)
143         {
144                 return E_FAILURE;
145         }
146
147         __pEditFieldUrl->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL"));
148         __pEditFieldUrl->AddTextEventListener(*this);
149         __pEditFieldUrl->AddKeypadEventListener(*this);
150         __pEditFieldUrl->SetOverlayKeypadCommandButtonVisible(false);
151
152         __pList = static_cast< ListView* >(__pScrollPanel->GetControl(L"IDC_LISTVIEW1"));
153
154         if (__pList == null)
155         {
156                 return E_FAILURE;
157         }
158         __pList->SetItemProvider(*this);
159         __pList->AddListViewItemEventListener(*this);
160         AddOrientationEventListener(*this);
161
162         __pScrollPanel->SetSize(GetClientAreaBounds().width, GetClientAreaBounds().height);
163         r = __pScrollPanel->SetClientAreaHeight(__pList->GetY() + __listHeight);
164         ScrollPanelScrollDirection direction = __pScrollPanel->GetScrollDirection();
165         AppLogDebug("ScrollDirection = %d SetClientAreaHeight ret = %s value = %d autoresize = %d",direction,GetErrorMessage(r),__pScrollPanel->GetClientAreaBounds().height,__pScrollPanel->IsScrollAreaAutoResizingEnabled());
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"((https?|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 = L"http://";
237                         tempUrl.Append(Url);
238
239                         if (flag == true)
240                         {
241                                 valid = true;
242                                 Url= tempUrl ;
243                         }
244                 }
245
246                 if (valid == false)
247                 {
248                         String msg = CommonUtil::GetString(L"IDS_BR_POP_INVALIDADDRESS");
249                         CreateMessage(msg);
250                 }
251                 else
252                 {
253                         if (__view == CommonUtil::GetString(L"IDS_BR_SK_EDIT"))
254                         {
255                                 String tempUrl ;
256                                 String tempTitle;
257                                 String tempParentId;
258
259                                 tempUrl = __pBookmark->GetUrl();
260                                 tempTitle = __pBookmark->GetBookmarkTitle();
261                                 tempParentId = __pBookmark->GetParentId();
262
263
264
265                                 r = BookmarkPresentationModel::GetInstance()->GetFolder("-1", 0, __folderCount, folderList);
266                                 TryCatch(r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r));
267
268                                 for (count = 0; count < __folderCount; count++)
269                                 {
270                                         BookmarkData* pBookmark = null;
271                                         pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count));
272                                         if (pBookmark == NULL)
273                                         {
274                                                 return;
275                                         }
276                                         folderTitle = pBookmark->GetBookmarkTitle();
277
278                                         if (folderTitle == __folderName)
279                                         {
280                                                 bookMarkID = pBookmark->GetBookmarkId();
281                                                 break;
282                                         }
283                                 }
284
285
286
287
288                                 if(bookMarkID.GetLength() == 0)
289                                 {
290                                         bookMarkID = L"-1";
291                                 }
292
293                                 AppLog("IDA_BUTTON_DONE tempParentId ID is %S",tempParentId.GetPointer());
294                                 AppLog("IDA_BUTTON_DONE bookMarkID ID is %S",bookMarkID.GetPointer());
295
296                                 if (bookMarkID.CompareTo(tempParentId) == 0 && __pEditFieldUrl->GetText().CompareTo(tempUrl) == 0 && __pEditFieldTitle->GetText().CompareTo(tempTitle) == 0)
297                                 {
298                                         pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
299                                         return;
300                                 }
301
302                                 if(tempUrl != __pEditFieldUrl->GetText() || tempParentId != bookMarkID)
303                                 {
304                                         r = BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(Url,exist, bookMarkID, true);
305                                         TryCatch( r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r));
306                                 }
307
308
309                                 if ( exist == true)
310                                 {
311                                         String msg = CommonUtil::GetString(L"IDS_BR_POP_BOOKMARK_ALREADY_EXISTS");
312                                         CreateMessage(msg);
313
314                                         AppLogDebug("Bookmark already exists");
315                                 }
316                                 else
317                                 {
318                                         __pBookmark->SetUrl(Url);
319                                         __pBookmark->SetBookmarkTitle(title);
320
321                                         if (bookMarkID == L"")
322                                         {
323                                                 __pBookmark->SetParentId(L"-1");
324                                         }
325                                         else
326                                         {
327                                                 __pBookmark->SetParentId(bookMarkID);
328                                         }
329
330                                         r = BookmarkPresentationModel::GetInstance()->SaveBookmark(*__pBookmark);
331                                         AppLogDebug("ID_BUTTON_DONE SaveBookmark = %s", GetErrorMessage(r));
332                                         AppLogDebug("parent id = %ls",__pBookmark->GetParentId().GetPointer());
333                                         pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
334                                 }
335                         }
336                         else
337                         {
338                                 AppLog("AddBookmarkForm::OnActionPerformed does url exist 1");
339
340                                 r = BookmarkPresentationModel::GetInstance()->GetFolder(L"-1", 0, __folderCount, folderList);
341                                 TryCatch(r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r));
342
343                                 for (count = 0; count < __folderCount; count++)
344                                 {
345                                         BookmarkData* pBookmark = null;
346                                         pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count));
347                                         if (pBookmark == NULL)
348                                         {
349                                                 return;
350                                         }
351                                         folderTitle = pBookmark->GetBookmarkTitle();
352
353                                         if (folderTitle == __folderName)
354                                         {
355                                                 bookMarkID = pBookmark->GetBookmarkId();
356                                                 break;
357                                         }
358                                 }
359                                 if(bookMarkID.GetLength() == 0)
360                                 {
361                                         bookMarkID = L"-1";
362                                 }
363                                 r = BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(Url,exist, bookMarkID, true);
364
365                                 TryCatch( r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r));
366                                 AppLog("AddBookmarkForm::OnActionPerformed does url exist 2");
367                                 if ( exist  == true)
368                                 {
369                                         String msg = CommonUtil::GetString(L"IDS_BR_POP_BOOKMARK_ALREADY_EXISTS");
370                                         CreateMessage(msg);
371
372                                         AppLogDebug("Bookmark already exists");
373                                 }
374                                 else
375                                 {
376
377                                         r = BookmarkPresentationModel::GetInstance()->GetFolder("-1", 0, __folderCount, folderList);
378                                         TryCatch( r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r));
379
380                                         for (count = 0; count < __folderCount; count++)
381                                         {
382                                                 BookmarkData* pBookmark = null;
383                                                 pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count));
384                                                 if( pBookmark == NULL )
385                                                 {
386                                                         return;
387                                                 }
388                                                 folderTitle = pBookmark->GetBookmarkTitle();
389
390                                                 if (folderTitle == __folderName)
391                                                 {
392                                                         bookMarkID = pBookmark->GetBookmarkId();
393                                                         break;
394                                                 }
395                                         }
396                                         BookmarkData bookmark;
397
398                                         if (__folderName != CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS"))
399                                         {
400                                                 bookmark.SetParentId(bookMarkID);
401                                         }
402
403                                         bookmark.SetBookmarkTitle(title);
404                                         bookmark.SetUrl(Url);
405                                         if (__pBookmark != null)
406                                         {
407                                                 bookmark.SetFaviconId(__pBookmark->GetFaviconId());
408                                         }
409                                         BookmarkPresentationModel::GetInstance()->SaveBookmark(bookmark);
410                                         pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
411                                 }
412                         }
413                 }
414
415                 folderList.RemoveAll(true);
416         }
417         break;
418
419         case IDA_BUTTON_CANCEL:
420         {
421                 if (__pEditFieldTitle != NULL)
422                 {
423                         __pEditFieldTitle->Clear();
424                 }
425
426                 if (__pEditFieldUrl != NULL)
427                 {
428                         __pEditFieldUrl->Clear();
429                 }
430
431                 pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
432
433         }
434         break;
435
436         default:
437                 break;
438         }
439
440         CATCH: return;
441 }
442
443 void
444 AddBookmarkForm::OnListViewItemLongPressed(ListView& listView, int index, int elementId, bool& invokeListViewItemCallback)
445 {
446         return;
447 }
448
449 void
450 AddBookmarkForm::OnListViewItemStateChanged(ListView& listView, int index, int elementId, ListItemStatus status)
451 {
452         if (__pEditFieldTitle != NULL)
453         {
454                 __pEditFieldTitle->HideKeypad();
455         }
456
457         if (__pEditFieldUrl != NULL)
458         {
459                 __pEditFieldUrl->HideKeypad();
460         }
461         if (index == 0)
462         {
463                 if (__showFolderList == false)
464                 {
465                         AppLog("AddBookmarkForm::OnListViewItemStateChanged false");
466                         __showFolderList = true;
467                         __pList->UpdateList();
468                         __listHeight = __pList->GetItemCount() * H_ITEM_HEIGHT;
469                         __pLabel1->SetShowState(false);
470
471                 }
472                 else
473                 {
474                         AppLog("AddBookmarkForm::OnListViewItemStateChanged true");
475                         __showFolderList = false;
476                         __pList->UpdateList();
477                         __listHeight = __pList->GetItemCount() * H_ITEM_HEIGHT;
478                         __pLabel1->SetShowState(true);
479
480                 }
481
482         }
483         else
484         {
485                 __selectedIndex = index;
486                 if (index > 1 && __pList->GetItemCount() != index +1)
487                 {
488                         String parentID = "-1";
489                         ArrayList folderList;
490                         BookmarkData* pBookmark = null;
491                         BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList);
492
493                         pBookmark = static_cast<BookmarkData*>(folderList.GetAt(index-2));
494                         __folderName = pBookmark->GetBookmarkTitle();
495                 }
496                 else if(index == 1)
497                 {
498                         __folderName = CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS") ;
499                 }
500                 __listHeight = __pList->GetItemCount() * H_ITEM_HEIGHT;
501                 if (__pList->GetItemCount() == index +1)
502                 {
503                         SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_CREATE_BOOKMARK_FOLDER, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
504                         return;
505                 }
506
507                 __pList->UpdateList();
508                 //              __pList->RefreshList(0, LIST_REFRESH_TYPE_ITEM_MODIFY);
509
510         }
511
512         __pLabel1->SetBounds(__pLabel1->GetX(),__pList->GetY()+ __listHeight + 2,__pLabel1->GetWidth(),__pLabel1->GetHeight());
513         __pLabel1->Invalidate(true);
514         result r = __pList->SetBounds(Rectangle(__pList->GetX(), __pList->GetY(), __pList->GetWidth(), __listHeight));
515         //__pList->Invalidate(true);
516         Invalidate(true);
517         AppLog("the result is %s", GetErrorMessage(r));
518         AppLog("the list height is %d", __pList->GetHeight());
519         return;
520 }
521
522 void
523 AddBookmarkForm::OnListViewItemSwept(ListView& listView, int index, SweepDirection direction)
524 {
525         __pList->RefreshList(0, LIST_REFRESH_TYPE_ITEM_MODIFY);
526         return;
527 }
528
529 void
530 AddBookmarkForm::OnListViewContextItemStateChanged(ListView& listView, int index, int elementId, ListContextItemStatus state)
531 {
532         return;
533 }
534
535 int
536 AddBookmarkForm::GetItemCount(void)
537 {
538         AppLogDebug("AddBookmarkForm::GetItemCount");
539         int count = 0;
540         ArrayList folderList;
541         String parentID = "-1";
542         BookmarkData* pBookmark = null;
543         BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList);
544
545         if (__selectedIndex == 0 && __view == CommonUtil::GetString(L"IDS_BR_SK_EDIT"))
546         {
547                 for(int count = 0; count < __folderCount; count++)
548                 {
549                         pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count));
550
551                         if (__pBookmark != null && pBookmark != NULL && __pBookmark->GetParentId() == pBookmark->GetBookmarkId())
552                         {
553                                 __selectedIndex = count + 2;
554                                 __folderName = pBookmark->GetBookmarkTitle();
555                                 break;
556                         }
557                         else
558                         {
559                                 __selectedIndex = 1;
560                         }
561                 }
562         }
563
564         folderList.RemoveAll(true);
565
566         if (__showFolderList == false)
567         {
568                 return 1;
569         }
570         else
571         {
572                 result r = BookmarkPresentationModel::GetInstance()->GetFolderCount(L"-1",count);
573                 TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetBookmarkCount query failed  %s",GetErrorMessage(r));
574                 AppLog("count = %d", count);
575                 return count + 3;
576                 CATCH:
577                 return E_FAILURE;
578         }
579
580 }
581
582 ListItemBase*
583 AddBookmarkForm::CreateItem(int index, int itemWidth)
584 {
585         AppLog("AddBookmarkForm::CreateItem index = %d itemWidth %d list width = %d",index,itemWidth,__pList->GetWidth());
586         result r = E_FAILURE;
587         String folderTitle = L"";
588         RadioCustomItem* radioItem = null;
589         DropDownCustomItem* pItem = null;
590         Bitmap* pBitmap = null;
591         pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_LIST_LEFT_SIDE);
592         if(itemWidth == 0)
593         {
594                 itemWidth = __pList->GetWidth();
595         }
596         if (index == 0)
597         {
598                 pItem = new(std::nothrow) DropDownCustomItem();
599                 r = pItem->Construct(itemWidth);
600
601                 if (IsFailed(r))
602                 {
603                         AppLog("Create Item Failed with error %s", GetErrorMessage(r));
604                         delete pItem;
605                         delete pBitmap;
606                         return null;
607                 }
608
609                 if ( __showFolderList == true )
610                 {
611                         pItem->SetCurState(DROP_DOWN_ITEM_STATE_OPENED);
612                 }
613                 else
614                 {
615                         pItem->SetCurState(DROP_DOWN__ITEM_STATE_CLOSED);
616                 }
617
618                 pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
619                 pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
620                 pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
621                 pItem->SetMainText(CommonUtil::GetString(L"IDS_BR_BODY_FOLDER"));
622                 pItem->SetSubText(__folderName);
623                 pItem->Make();
624                 if (pBitmap != null)
625                 {
626                         //pItem->AddElement(Rectangle(0, 0, 10, H_ITEM_HEIGHT), IDA_LIST_LEFT_SIDE_MARGIN_DROPDOWN, *pBitmap, null);
627                         delete pBitmap;
628                 }
629                 return pItem;
630         }
631         else
632         {
633                 String parentID = "-1";
634                 ArrayList folderList;
635
636                 BookmarkData* pBookmark = null;
637                 r = BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList);
638
639                 if (index == 1)
640                 {
641                         radioItem = new(std::nothrow) RadioCustomItem();
642                         //                      r = radioItem->Construct(GetClientAreaBounds().width, LIST_ITEM_HEIGHT);
643                         r = radioItem->Construct(itemWidth, LIST_ITEM_HEIGHT);
644                         if (IsFailed(r))
645                         {
646                                 AppLog("Create Item Failed with error %s", GetErrorMessage(r));
647                                 delete radioItem;
648                                 delete pBitmap;
649                                 return null;
650                         }
651                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
652                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
653                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
654                         folderTitle = CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS") ;
655                         radioItem->SetText(folderTitle);
656                 }
657                 else if (index <= __folderCount + 1)
658                 {
659                         pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(index - 2));
660                         if (pBookmark != null)
661                         {
662                                 folderTitle = pBookmark->GetBookmarkTitle();
663                         }
664                         radioItem = new(std::nothrow) RadioCustomItem();
665                         //                      r = radioItem->Construct(GetClientAreaBounds().width, LIST_ITEM_HEIGHT);
666                         r = radioItem->Construct(itemWidth, LIST_ITEM_HEIGHT);
667                         if (IsFailed(r))
668                         {
669                                 AppLog("Create Item Failed with error %s", GetErrorMessage(r));
670                                 delete radioItem;
671                                 delete pBitmap;
672                                 return null;
673                         }
674
675                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
676                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
677                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
678                         radioItem->SetText(folderTitle);
679                 }
680                 else
681                 {
682                         radioItem = new(std::nothrow) RadioCustomItem();
683                         //                      r = radioItem->Construct(GetClientAreaBounds().width, LIST_ITEM_HEIGHT);
684                         r = radioItem->Construct(itemWidth, LIST_ITEM_HEIGHT);
685                         if (IsFailed(r))
686                         {
687                                 AppLog("Create Item Failed with error %s", GetErrorMessage(r));
688                                 delete radioItem;
689                                 delete pBitmap;
690                                 return null;
691                         }
692                         //radioItem->AddElement(Rectangle(MARGIN_X, 0, __pList->GetBounds().width, LIST_ITEM_HEIGHT), 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);
693                         folderTitle = CommonUtil::GetString(L"IDS_BR_OPT_NEW_FOLDER");
694                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
695                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
696                         radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND);
697                         radioItem->SetText(folderTitle);
698
699                 }
700
701                 if (__selectedIndex == index)
702                 {
703                         radioItem->SetSelected(true);
704                 }
705                 else
706                 {
707                         radioItem->SetSelected(false);
708                 }
709
710                 if(__selectedIndex == 0 && index == 1)
711                         radioItem->SetSelected(true);
712                 if (radioItem->GetSelected() == true)
713                 {
714                         __folderName = radioItem->GetText();
715                 }
716
717                 if (pBitmap != null)
718                 {
719                         //radioItem->AddElement(Rectangle(0, 0, 10, LIST_ITEM_HEIGHT), IDA_LIST_LEFT_SIDE_MARGIN, *pBitmap, null);
720                         delete pBitmap;
721                 }
722
723                 folderList.RemoveAll(true);
724                 radioItem->Make();
725                 return radioItem;
726         }
727 }
728
729 bool
730 AddBookmarkForm::DeleteItem(int index, ListItemBase* pItem, int itemWidth)
731 {
732         if (pItem != null)
733         {
734                 delete pItem;
735                 pItem = null;
736         }
737
738         return true;
739 }
740
741 void
742 AddBookmarkForm::OnKeypadActionPerformed(Control& source, KeypadAction keypadAction)
743 {
744         return;
745 }
746
747 void
748 AddBookmarkForm::OnKeypadClosed(Control& source)
749 {
750
751         AppLog("the client area height is %d",GetClientAreaBounds().height);
752
753         __pScrollPanel->SetBounds(Rectangle(0, 0, GetClientAreaBounds().width, GetClientAreaBounds().height));
754         __pScrollPanel->Invalidate(true);
755
756         Invalidate(true);
757         return;
758 }
759
760 void
761 AddBookmarkForm::OnKeypadOpened(Control& source)
762 {
763         AppLog("the client area height is %d",GetClientAreaBounds().height);
764
765         //      __pScrollPanel->SetBounds(Rectangle(0, 0, GetClientAreaBounds().width, GetClientAreaBounds().height));
766
767         //      __pScrollPanel->Invalidate(true);
768         //      __pScrollPanel->SetScrollPosition(source.GetY()-48,false);
769         __pScrollPanel->SetSize(GetClientAreaBounds().width,GetClientAreaBounds().height);
770         __pScrollPanel->SetClientAreaWidth(__pScrollPanel->GetWidth());
771         __pScrollPanel->SetClientAreaHeight(__pList->GetY()+__listHeight);
772         Invalidate(true);
773         AppLog("the scroll panel height is Rect(%d,%d,%d,%d) ClientHeight =  %d",__pScrollPanel->GetX(),__pScrollPanel->GetY(),__pScrollPanel->GetWidth(),__pScrollPanel->GetHeight(),__pScrollPanel->GetClientAreaBounds().height);
774         return;
775 }
776
777 void
778 AddBookmarkForm::OnKeypadWillOpen(Control& source)
779 {
780         return;
781 }
782
783 void
784 AddBookmarkForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs)
785 {
786
787         // Code to handle events when the AddBookmarkForm is activated.
788         String str = "-1";
789         String pageTitle = L"";
790         String pageUrl = L"http://";
791         String title = L"";
792         String url = L"";
793         result r = E_FAILURE;
794         Header* pHeader = GetHeader();
795
796         r = BookmarkPresentationModel::GetInstance()->GetFolderCount(str, __folderCount);
797         TryCatch( r == E_SUCCESS, ,"Failed to intitialize GETFOLDERCOUNT  %s",GetErrorMessage(r));
798
799         if ( pHeader == NULL )
800         {
801                 return ;
802         }
803         if ( previousSceneId != IDSCN_CREATE_BOOKMARK_FOLDER )
804         {
805                 // check first argument of pargs 0 for Add, 1 - for Edit
806                 String* firstValue = NULL;
807                 if(pArgs)
808                 {
809                         firstValue = dynamic_cast<String*>(pArgs->GetAt(0));
810                 }
811
812                 if( firstValue == NULL || pArgs == NULL)
813                 {
814                         return ;
815                 }
816                 if (firstValue->CompareTo(L"1") == 0)
817                 {
818                         __view = CommonUtil::GetString(L"IDS_BR_SK_EDIT");
819
820                         pHeader->SetTitleText(CommonUtil::GetString(L"IDS_BR_HEADER_EDIT_BOOKMARK"));
821
822                         if (__pBookmark != NULL && pArgs != NULL)
823                         {
824                                 delete __pBookmark;
825                                 __pBookmark = null;
826                         }
827
828                         if (__pBookmark == NULL && pArgs != NULL)
829                         {
830                                 __pBookmark = dynamic_cast<BookmarkData*>(pArgs->GetAt(1));
831                         }
832
833                         if (__pBookmark)
834                         {
835                                 pageTitle = __pBookmark->GetBookmarkTitle();
836                                 pageUrl = __pBookmark->GetUrl();
837                         }
838                 }
839                 else if (firstValue->CompareTo(L"0") == 0)
840                 {
841                         __view = CommonUtil::GetString(L"IDS_COM_SK_ADD");
842                         pHeader->SetTitleText(CommonUtil::GetString(L"IDS_BR_HEADER_EDIT_BOOKMARK"));
843
844                         WindowInfo* pWindowInfo = MultipleWindowPresentationModel::GetInstance()->GetActiveWindowInfo();
845
846                         if( pWindowInfo == NULL )
847                         {
848                                 return;
849                         }
850
851                         pageTitle = pWindowInfo->pageTitle;
852                         if(pWindowInfo->pageUrl.IsEmpty() == false)
853                         {
854                                 pageUrl = pWindowInfo->pageUrl;
855                         }
856                         String* parentID = dynamic_cast<String*>(pArgs->GetAt(1));
857
858                         ArrayList folderList;
859
860                         BookmarkData* pBookmark = null;
861                         BookmarkPresentationModel::GetInstance()->GetFolder(L"-1", 0, __folderCount, folderList);
862                         for(int count = 0; count < folderList.GetCount(); count++)
863                         {
864                                 pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count));
865
866                                 if ( pBookmark == null )
867                                 {
868                                         return ;
869                                 }
870
871                                 if (parentID != NULL && pBookmark->GetBookmarkId().CompareTo(parentID->GetPointer()) == 0)
872                                 {
873                                         __selectedIndex = count + 2;
874                                         __folderName = pBookmark->GetBookmarkTitle();
875                                         break;
876                                 }
877                                 else
878                                 {
879                                         __selectedIndex = 1 ;
880                                         __folderName = CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS") ;
881                                 }
882
883                         }
884
885                         if (__folderCount == 0)
886                         {
887                                 __selectedIndex = 1 ;
888                                 __folderName = CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS") ;
889                         }
890
891                         folderList.RemoveAll(true);
892                 }
893         }
894
895         if ( previousSceneId == IDSCN_CREATE_BOOKMARK_FOLDER )
896         {
897                 pageTitle = __titleOnViewDeactivated;
898                 pageUrl = __urlOnViewDeactivated;
899         }
900
901         if (__pEditFieldTitle != NULL)
902         {
903                 __pEditFieldTitle->SetText(pageTitle);
904                 __pEditFieldTitle->ShowKeypad();
905         }
906         if (__pEditFieldUrl != NULL)
907         {
908                 __pEditFieldUrl->SetText(pageUrl);
909                 __pEditFieldUrl->HideKeypad();
910         }
911
912         if (__view == CommonUtil::GetString(L"IDS_BR_SK_EDIT") && previousSceneId == IDSCN_CREATE_BOOKMARK_FOLDER )
913         {
914                 if (__oldFolderCount == 0)
915                 {
916                         if (__folderCount == 1)
917                         {
918                                 __selectedIndex = 2;
919                         }
920                 }
921                 else if (__oldFolderCount != __folderCount)
922                 {
923                         __selectedIndex = __folderCount + 1;
924                 }
925
926         }
927
928
929         if (__view == CommonUtil::GetString(L"IDS_COM_SK_ADD")  && previousSceneId == IDSCN_CREATE_BOOKMARK_FOLDER)
930         {
931
932                 if (__oldFolderCount == 0)
933                 {
934                         if (__folderCount == 1)
935                         {
936                                 __selectedIndex = 2;
937                         }
938                 }
939                 else if (__oldFolderCount != __folderCount)
940                 {
941                         __selectedIndex = __folderCount + 1;
942                         if(__selectedIndex > 1)
943                         {
944                                 String parentID = L"-1";
945                                 ArrayList folderList;
946                                 BookmarkData* pBookmark = null;
947                                 BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList);
948                                 pBookmark = static_cast<BookmarkData*>(folderList.GetAt(__selectedIndex-2));
949                                 __folderName = pBookmark->GetBookmarkTitle();
950                         }
951                 }
952                 else if (__oldFolderCount == __folderCount )
953                 {
954                         __selectedIndex = __folderCount + 1;
955                 }
956         }
957         if (__pEditFieldTitle != NULL)
958         {
959                 title = __pEditFieldTitle->GetText();
960                 title.Trim();
961         }
962
963         if (__pEditFieldUrl != NULL)
964         {
965                 url = __pEditFieldUrl->GetText();
966                 url.Trim();
967         }
968
969         // To disable done button if either of the Title or Url field is empty
970         if (title.GetLength() == 0 || url.GetLength() == 0)
971         {
972                 pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, false);
973                 pHeader->Invalidate(true);
974         }
975         else
976         {
977                 pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, true);
978                 pHeader->Invalidate(true);
979         }
980
981         if(__pList != null)
982         {
983
984                 __pList->UpdateList();
985                 __listHeight = __pList->GetItemCount() * H_ITEM_HEIGHT;
986                 __pList->SetBounds(__pList->GetX(),__pList->GetY(),__pList->GetWidth(),__listHeight);
987         }
988         //      __pList->RefreshList(0, LIST_REFRESH_TYPE_ITEM_MODIFY);
989         CATCH : return;
990 }
991
992 void
993 AddBookmarkForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)
994 {
995         // Add code to handle events when the AddBookmarkForm is Deactivated.
996         if ( __pEditFieldTitle != NULL)
997         {
998                 __titleOnViewDeactivated = __pEditFieldTitle->GetText();
999         }
1000
1001         if ( __pEditFieldUrl != NULL)
1002         {
1003                 __urlOnViewDeactivated = __pEditFieldUrl->GetText();
1004         }
1005
1006         __oldFolderCount = __folderCount;
1007
1008         if (__view == CommonUtil::GetString(L"IDS_BR_SK_EDIT") )
1009         {
1010                 __selectedIndex = 0;
1011         }
1012         return;
1013 }
1014
1015 void
1016 AddBookmarkForm::OnTextValueChanged(const Control& source)
1017 {
1018         String title = L"";
1019         String url = L"";
1020         Header* pHeader = GetHeader();
1021         if (pHeader == NULL)
1022         {
1023                 return;
1024         }
1025
1026         if (__pEditFieldTitle == NULL || __pEditFieldUrl == NULL)
1027         {
1028                 return;
1029         }
1030
1031         title = __pEditFieldTitle->GetText();
1032         url = __pEditFieldUrl->GetText();
1033         title.Trim();
1034         url.Trim();
1035
1036         // To disable done button if either of the Title or Url field is empty
1037         if (title.GetLength() == 0 || url.GetLength() == 0)
1038         {
1039                 pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, false);
1040                 pHeader->Invalidate(true);
1041         }
1042         else
1043         {
1044                 pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, true);
1045                 pHeader->Invalidate(true);
1046         }
1047
1048         return;
1049 }
1050
1051 void
1052 AddBookmarkForm::OnTextValueChangeCanceled(const Control& source)
1053 {
1054         return;
1055 }
1056
1057 void
1058 AddBookmarkForm::CreateMessage(String& str)
1059 {
1060         Tizen::Ui::Controls::MessageBox* pMsgBox = null;       // Message Box to display alert if folder with same name already exists
1061         int __modalMsgBoxResult;
1062
1063         pMsgBox = new(std::nothrow) MessageBox;
1064         if (pMsgBox != null)
1065         {
1066                 pMsgBox->Construct(str, L"", MSGBOX_STYLE_OK, 3000);
1067                 pMsgBox->ShowAndWait(__modalMsgBoxResult);
1068                 delete pMsgBox;
1069                 pMsgBox = null;
1070                 __modalMsgBoxResult = 0;
1071         }
1072
1073         return;
1074 }
1075
1076 void
1077 AddBookmarkForm::OnOrientationChanged(const Control& source, OrientationStatus orientationStatus)
1078 {
1079         //      if (__pEditFieldTitle != NULL)
1080         //      {
1081         //              __pEditFieldTitle->HideKeypad();
1082         //      }
1083         //      if (__pEditFieldUrl != NULL)
1084         //      {
1085         //              __pEditFieldUrl->HideKeypad();
1086         //      }
1087
1088         if (orientationStatus == ORIENTATION_STATUS_LANDSCAPE)
1089         {
1090                 if (__pScrollPanel != null)
1091                 {
1092                         __pScrollPanel->ScrollToTop();
1093                         __pScrollPanel->SetClientAreaHeight(__pList->GetY()+__listHeight);
1094                 }
1095         }
1096
1097         //__pScrollPanel->Invalidate(true);
1098
1099         if(__showFolderList == false)
1100         {
1101                 if(__pLabel1 != null)
1102                 {
1103                         __pLabel1->SetShowState(true);
1104                 }
1105         }
1106         else
1107         {
1108                 if(__pLabel1 != null)
1109                 {
1110                         __pLabel1->SetShowState(false);
1111                 }
1112         }
1113
1114         if (__pLabel1 != null)
1115         {
1116                 __pLabel1->SetBounds(__pLabel1->GetX(),__pList->GetY()+ __listHeight + 2,__pLabel1->GetWidth(),__pLabel1->GetHeight());
1117                 __pLabel1->Invalidate(true);
1118         }
1119
1120         if (__pList != null)
1121         {
1122                 __pList->SetBounds(__pList->GetX(),__pList->GetY(),__pList->GetWidth(),__listHeight);
1123                 __pList->UpdateList();
1124         }
1125         Invalidate(true);
1126 }