#include <unique_ptr.h>
#include <FBaseColAllElementsDeleter.h>
#include <FBaseSysLog.h>
+#include <FCntDownloadRequest.h>
#include <FGrpDimension.h>
#include <FGrpRectangle.h>
#include <FUiCtrlButton.h>
#include <FUiCtrlListView.h>
#include <FUiCtrlPanel.h>
#include <FUiIActionEventListener.h>
+#include <FUiKeyEventInfo.h>
#include <FUiVerticalBoxLayout.h>
+#include <FCnt_DownloadManagerImpl.h>
#include <FSys_SystemResource.h>
#include <FUi_ResourceManager.h>
#include "FWebCtrl_SelectBox.h"
using namespace Tizen::Base;
using namespace Tizen::Base::Collection;
+using namespace Tizen::Content;
using namespace Tizen::Graphics;
using namespace Tizen::System;
using namespace Tizen::Ui;
namespace Tizen { namespace Web { namespace Controls
{
-static const int SELECTBOX_BUTTON_WIDTH = 100;
+
+static const int POSITION_INVALID = -1;
+
+
template< class Type > Type
Max(Type a, Type b)
{
}
+int CompareChangedItems(const void* pData1, const void* pData2)
+{
+ SysAssertf(pData1 && pData2, "input parameters are null");
+
+ const int* pLeft = static_cast<const int*>(pData1);
+ const int* pRight = static_cast<const int*>(pData2);
+
+ return (*pLeft - *pRight);
+}
+
+
//Internal class for maintaining states of list elements
class _ListElement
: public Object
, __prevIndex(-1)
, __orientation(_CONTROL_ORIENTATION_PORTRAIT)
, __pWebView(null)
+ , __pToggledArray(null)
+ , __url(L"")
{
}
_SelectBox::~_SelectBox(void)
{
+ if (__multiSelection)
+ {
+ eina_inarray_flush(__pToggledArray);
+ delete __pToggledArray;
+ }
+
__listElementArray.RemoveAll(true);
}
result
-_SelectBox::Construct(bool isMultiSelect, const String& title, int listItemCnt, Evas_Object* pWebView)
+_SelectBox::Construct(bool isMultiSelect, const String& title, int listCount, Evas_Object* pWebView, const String& url)
{
result r = E_SUCCESS;
Rectangle rect;
- int listCount = 4;
int listItemHeight = 0;
int listMaxHeihgt = 0;
- int popupWinTopMargin = 0;
- int popupWinBottomMargin = 0;
int listViewHeight = 0;
__pWebView = pWebView;
+ __url = const_cast< String& >(url);
GET_SHAPE_CONFIG(CONTEXTMENU::LIST_ITEM_HEIGHT, __orientation, listItemHeight);
- GET_SHAPE_CONFIG(POPUP::TOP_BORDER, __orientation, popupWinTopMargin);
- GET_SHAPE_CONFIG(POPUP::BOTTOM_BORDER, __orientation, popupWinBottomMargin);
__multiSelection = isMultiSelect;
_WebPopupData* pPopupData = _WebPopup::GetPopupData();
SysTryReturn(NID_WEB_CTRL, pPopupData, r = GetLastResult(), r, "[%s] Propagating.", GetErrorMessage(r));
- listMaxHeihgt = listCount * listItemHeight + pPopupData->btnDim.height + 2 * ( pPopupData->spacePad + popupWinTopMargin + popupWinBottomMargin);
+ listMaxHeihgt = listCount * listItemHeight + pPopupData->btnDim.height + pPopupData->spacePad;
- rect.height = Max< int >(listMaxHeihgt, pPopupData->popupDim.height);
+ rect.height = listMaxHeihgt;
rect.width = pPopupData->popupDim.width;
rect.x = 0;
rect.y = 0;
Popup::SetTitleText(title);
}
- listViewHeight = GetClientAreaBounds().height - popupWinTopMargin - popupWinBottomMargin - pPopupData->btnDim.height;
+ listViewHeight = listCount * listItemHeight;
std::unique_ptr<ListView> pListView(new (std::nothrow) ListView());
SysTryReturnResult(NID_WEB_CTRL, pListView.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
- r = pListView->Construct(Rectangle(0, popupWinTopMargin, GetClientAreaBounds().width, listViewHeight), true, SCROLL_STYLE_FADE_OUT);
+ r = pListView->Construct(Rectangle(0, 0, GetClientAreaBounds().width, listViewHeight), true, SCROLL_STYLE_FADE_OUT);
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
r = __listElementArray.Construct();
ArrayList idList;
r = idList.Construct();
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ idList.Add(*(new Integer(ID_BUTTON_CANCEL)));
if (__multiSelection)
{
idList.Add(*(new Integer(ID_BUTTON_SELECTION)));
}
- idList.Add(*(new Integer(ID_BUTTON_CANCEL)));
ArrayList titleList;
r = titleList.Construct();
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ titleList.Add(*(new String(pSysResource->GetString("sys_string", "IDS_TPLATFORM_BUTTON_CANCEL_ABB"))));
if (__multiSelection)
{
- titleList.Add(*(new String(pSysResource->GetString("sys_string", "IDS_COM_BODY_DONE"))));
+ titleList.Add(*(new String(pSysResource->GetString("sys_string", "IDS_TPLATFORM_BUTTON_OK"))));
+
+ __pToggledArray = eina_inarray_new(sizeof(int), 0);
+ SysTryReturnResult(NID_WEB_CTRL, __pToggledArray, E_OUT_OF_MEMORY, "Memory Allocation failed.");
}
- titleList.Add(*(new String(pSysResource->GetString("sys_string", "IDS_COM_POP_CANCEL"))));
r = CreateAndAddButtons(idList, titleList, pButtonPanel);
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
std::unique_ptr<VerticalBoxLayout> pLayout(dynamic_cast< VerticalBoxLayout* >(GetLayoutN()));
SysTryReturn(NID_WEB_CTRL, pLayout.get(), r = GetLastResult(), r, "[%s] Propagating.", GetErrorMessage(r));
- pLayout->SetSpacing(*pButtonPanel, pPopupData->sideMargin);
+ pLayout->SetSpacing(*pButtonPanel, pPopupData->spacePad);
+ SetPropagatedKeyEventListener(this);
+
return r;
}
GET_SHAPE_CONFIG(LISTVIEW::ITEM_ELEMENT_LEFT_MARGIN, __orientation, listItemXPos);
GET_SHAPE_CONFIG(LIST::LIST_CHECK_ITEM_WIDTH, __orientation, checkBoxWidth);
GET_SHAPE_CONFIG(MESSAGEBOX::BUTTON_TOP_MARGIN, __orientation, popupBetweenListNBtnGap);
-// GET_SHAPE_CONFIG(LIST::GROUPITEM_DEFAULT_FONT_SIZE, __orientation, listItemTxtHeight);
std::unique_ptr<CustomItem> pItem(new (std::nothrow) CustomItem());
SysTryReturn(NID_WEB_CTRL, pItem.get(), null, E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.",GetErrorMessage(E_OUT_OF_MEMORY));
{
if (__multiSelection)
{
- return;
- }
+ int pos = eina_inarray_search(__pToggledArray, &index, CompareChangedItems);
- //In case of single selection ... update the index.
- __SelectedIndex = index;
- SysLog(NID_WEB_CTRL,"The current value of Update Selected index is %d",index);
- if (__pWebView)
- {
- ewk_view_popup_menu_select(__pWebView, __SelectedIndex);
+ if (pos == POSITION_INVALID)
+ {
+ eina_inarray_push(__pToggledArray, &index);
+ }
+ else
+ {
+ eina_inarray_remove(__pToggledArray, &index);
+ }
}
+ else
+ {
+ //In case of single selection ... update the index.
+ if (__url.GetLength() == 0)
+ {
+ __SelectedIndex = index;
+ SysLog(NID_WEB_CTRL,"The current value of Update Selected index is %d",index);
+ if (__pWebView)
+ {
+ ewk_view_popup_menu_select(__pWebView, __SelectedIndex);
+ }
+ }
+ else
+ {
+ result r = E_SUCCESS;
- result r = HidePopup(__SelectedIndex);
- SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
+ RequestId reqId = 0;
+ DownloadRequest request(__url);
+
+ _DownloadManagerImpl* pManagerImpl = _DownloadManagerImpl::GetInstance();
+ SysTryReturnVoidResult(NID_WEB_CTRL, pManagerImpl, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+ r = pManagerImpl->Start(request, reqId);
+ SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+
+ result r = HidePopup();
+ SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
+ }
}
void
_SelectBox::OnActionPerformed(const Control& source, int actionId)
{
- switch (actionId)
+ result r = HidePopup();
+ SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ if (__url.GetLength() == 0)
{
- case ID_BUTTON_SELECTION:
- //fall through
- case ID_BUTTON_CANCEL:
+ switch (actionId)
+ {
+ case ID_BUTTON_SELECTION:
+ {
+ ewk_view_popup_menu_multiple_select(__pWebView, __pToggledArray);
+ break;
+ }
+ case ID_BUTTON_CANCEL:
+ {
+ if (__multiSelection)
+ {
+ ewk_view_popup_menu_multiple_select(__pWebView, null);
+ }
+ else
+ {
+ ewk_view_popup_menu_select(__pWebView, __prevIndex);
+ }
+ break;
+ }
+ default:
+ SysAssertf(false, "Invalid Action ID");
+ }
+ }
+}
+
+bool
+_SelectBox::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+ return false;
+}
+
+bool
+_SelectBox::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+ if ((keyEventInfo.GetKeyCode() == KEY_ESC || keyEventInfo.GetKeyCode() == KEY_BACK) && source.GetShowState() == true)
{
- if (__pWebView)
+ result r = HidePopup();
+ if (IsFailed(r))
{
- ewk_view_popup_menu_select(__pWebView, __prevIndex);
+ SysLogException(NID_WEB_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
}
- result r = HidePopup(__SelectedIndex);
- SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
- break;
- }
+ if (__url.GetLength() == 0)
+ {
+ if (__multiSelection)
+ {
+ ewk_view_popup_menu_multiple_select(__pWebView, null);
+ }
+ else
+ {
+ ewk_view_popup_menu_select(__pWebView, __prevIndex);
+ }
+ }
}
+
+ return false;
+}
+
+bool
+_SelectBox::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+ return false;
+}
+
+bool
+_SelectBox::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+ return false;
}
+bool
+_SelectBox::TranslateKeyEventInfo(Control& source, KeyEventInfo& keyEventInfo)
+{
+ return false;
+}
result
_SelectBox::UpdateList(Eina_List* pItems, int prevIndex, bool clearPrevList, bool isGroupdList)
if (clearPrevList)
{
__listElementArray.RemoveAll(true);
+ if (__multiSelection)
+ {
+ eina_inarray_flush(__pToggledArray);
+ }
}
//Create list required for selectBox
int itemCount = eina_list_count(pItems);
SysTryReturn(NID_WEB_CTRL, itemCount > 0, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred. ItemCount is invalid.", GetErrorMessage(E_SYSTEM));
- __prevIndex = prevIndex;
+ bool isSelected = false;
+
+ if (!__multiSelection)
+ {
+ __prevIndex = prevIndex;
+ }
for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
{
Ewk_Popup_Menu_Item* pItem = static_cast<Ewk_Popup_Menu_Item*>(eina_list_nth(pItems, itemIndex));
SysTryReturn(NID_WEB_CTRL, pItem, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred. Failed to get item.", GetErrorMessage(E_SYSTEM));
- bool isSelected = (itemIndex == prevIndex) ? true : false;
if (ewk_popup_menu_item_type_get(pItem) == EWK_POPUP_MENU_ITEM)
{
String text(ewk_popup_menu_item_text_get(pItem));
+ if (__multiSelection)
+ {
+ isSelected = ( ewk_popup_menu_item_selected_get(pItem) == EINA_TRUE ) ? true : false;
+ }
+ else
+ {
+ isSelected = (itemIndex == prevIndex) ? true : false;
+ }
+
if (isGroupdList)
{
AddListItem(text, _SelectBox::LIST_ITEM_TYPE_GROUP, isSelected);