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