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