From 0dd9e8541b36cccf35b9571948e8943fcc9b6bd3 Mon Sep 17 00:00:00 2001 From: Dong-Jun Kim Date: Tue, 29 Apr 2014 17:14:02 +0900 Subject: [PATCH] Implement InputPicker 1. porting inputpicker to blink. 2. implement for colorpicker without callback. 3. add resource files. * The only Tizen specific thing in the whole implementation is the usage of vconf which can be easily avoided. Because of this the code can be enabled in desktop builds. Change-Id: Iad920a23af2a5d3bcd1a2ae492485b93f2b68dac --- tizen_src/impl/browser/inputpicker/InputPicker.cc | 1031 ++++++++++++++++++++ tizen_src/impl/browser/inputpicker/InputPicker.h | 91 ++ tizen_src/impl/chromium-efl.gyp | 3 + tizen_src/impl/eweb_view.cc | 14 + tizen_src/impl/eweb_view.h | 8 +- tizen_src/impl/resource/control.edc | 737 ++++++++++++++ .../impl/resource/images/I01_picker_arrow_left.png | Bin 0 -> 3265 bytes .../resource/images/I01_picker_arrow_right.png | Bin 0 -> 3270 bytes .../resource/images/I01_picker_btn_02_normal.png | Bin 0 -> 3041 bytes .../resource/images/I01_picker_btn_02_press.png | Bin 0 -> 3034 bytes .../impl/resource/images/I01_picker_btn_normal.png | Bin 0 -> 3005 bytes .../impl/resource/images/I01_picker_panel_bg.png | Bin 0 -> 2798 bytes tizen_src/impl/web_contents_delegate_efl.cc | 9 + tizen_src/impl/web_contents_delegate_efl.h | 1 + 14 files changed, 1892 insertions(+), 2 deletions(-) create mode 100755 tizen_src/impl/browser/inputpicker/InputPicker.cc create mode 100755 tizen_src/impl/browser/inputpicker/InputPicker.h create mode 100755 tizen_src/impl/resource/control.edc create mode 100755 tizen_src/impl/resource/images/I01_picker_arrow_left.png create mode 100755 tizen_src/impl/resource/images/I01_picker_arrow_right.png create mode 100755 tizen_src/impl/resource/images/I01_picker_btn_02_normal.png create mode 100755 tizen_src/impl/resource/images/I01_picker_btn_02_press.png create mode 100755 tizen_src/impl/resource/images/I01_picker_btn_normal.png create mode 100755 tizen_src/impl/resource/images/I01_picker_panel_bg.png mode change 100644 => 100755 tizen_src/impl/web_contents_delegate_efl.cc mode change 100644 => 100755 tizen_src/impl/web_contents_delegate_efl.h diff --git a/tizen_src/impl/browser/inputpicker/InputPicker.cc b/tizen_src/impl/browser/inputpicker/InputPicker.cc new file mode 100755 index 0000000..e413ab1 --- /dev/null +++ b/tizen_src/impl/browser/inputpicker/InputPicker.cc @@ -0,0 +1,1031 @@ +/* + Copyright (C) 2014 Samsung Electronics + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "InputPicker.h" + +#include "ewk_view.h" +#include "base/path_service.h" +#include "base/files/file_path.h" +#include "paths_efl.h" +#include "base/logging.h" +#include "web_contents_delegate_efl.h" +#include "content/public/browser/web_contents.h" + +#include +#include +#include +#ifdef OS_TIZEN +#include +#endif + +// FIXME : DJKim : not implemented yet +#if 0 //ENABLE(TIZEN_HW_MORE_BACK_KEY) +#include +#include +extern void* EflAssistHandle; +#endif + +namespace content { + +static const unsigned maxDatetimeLength = 32; +static const unsigned maxDateStringLength = 10; +static const char defaultDatetimeFormat[] = "%Y/%m/%d %H:%M"; + +struct InputPicker::Layout { + Layout(Evas_Object *ewkView) + : m_ewkView(ewkView) + , popup(0) + , layout(0) + , datePicker(0) + , colorRect(0) + , dataListEditField(0) + // FIXME : DJKim : not implemented yet +#if 0 //ENABLE(TIZEN_HW_MORE_BACK_KEY) + , initial_r(0) + , initial_g(0) + , initial_b(0) +#endif + , datetimeLocal(false) { + evas_object_focus_set(m_ewkView, false); + + /* FIXME : Workaround. OSP requirement. + OSP want to block own touch event while webkit internal picker is running. */ + evas_object_smart_callback_call(m_ewkView, "input,picker,show", 0); + } + + ~Layout() { + /* FIXME : Workaround. OSP requirement. + OSP want to block own touch event while webkit internal picker is running. */ + evas_object_smart_callback_call(m_ewkView, "input,picker,hide", 0); + } + + Evas_Object* m_ewkView; + Evas_Object* popup; + Evas_Object* layout; + Evas_Object* datePicker; + Evas_Object* colorRect; + Evas_Object* okButton; + Evas_Object* dataListEditField; +// FIXME : DJKim : not implemented yet +#if 0 //ENABLE(TIZEN_HW_MORE_BACK_KEY) + int initial_r; + int initial_g; + int initial_b; +#endif + bool datetimeLocal; +}; + +struct ColorPopupUserData { + InputPicker* inputPicker; + Evas_Object* colorRect; + Evas_Object* color; + Evas_Object* colorAccessObject; +}; + +struct Input_Date { + int year; + int mon; + int day; + int hour; + int min; + int sec; +}; + +struct Input_Date_Str { + char year[maxDateStringLength]; + char mon[maxDateStringLength]; + char day[maxDateStringLength]; + char hour[maxDateStringLength]; + char min[maxDateStringLength]; + char sec[maxDateStringLength]; +}; + +// FIXME : DJKim : not implemented yet +#if 0 // ENABLE(TIZEN_HW_MORE_BACK_KEY) +static void _edit_end_cb(void* data, Evas_Object* obj, void* event_info) { + WebKit::InputPicker* inputPicker = static_cast(data); + if (inputPicker) + inputPicker->removeDatetimePickerDelayed(); +} +#endif // ENABLE(TIZEN_HW_MORE_BACK_KEY) + +static char* datetimeFormat() { +#ifdef OS_TIZEN + char* datetimeFormat = NULL; + char* regionFormat = NULL; + char* language = NULL; + char buf[256] = { 0, }; + int timeValue = 0; + int isHour24 = 0; + int returnValue = 0; + + language = getenv("LANGUAGE"); + setenv("LANGUAGE", "en_US", 1); + + regionFormat = vconf_get_str(VCONFKEY_REGIONFORMAT); + if (!regionFormat) + return 0; + + returnValue = vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &timeValue); + if (returnValue < 0) + isHour24 = 0; + else if (timeValue == VCONFKEY_TIME_FORMAT_12 || timeValue == VCONFKEY_TIME_FORMAT_24) + isHour24 = timeValue - 1; + + if (isHour24) + snprintf(buf, sizeof(buf), "%s_DTFMT_24HR", regionFormat); + else + snprintf(buf, sizeof(buf), "%s_DTFMT_12HR", regionFormat); + + free(regionFormat); + + // FIXME: Workaround fix for region format. + int bufLength = strlen(buf); + for (int i = 0; i < bufLength - 4; i++) { + if (buf[i] == 'u' && buf[i + 1] == 't' && buf[i + 2] == 'f') { + if (buf[i + 3] == '8') { + // utf8 -> UTF-8 + for (int j = bufLength; j > i + 3; j--) + buf[j] = buf[j - 1]; + buf[i + 3] = '-'; + buf[bufLength + 1] = '\0'; + } else if (buf[i + 3] == '-' && buf[i + 4] == '8') { + // utf-8 -> UTF-8 + } else { + break; + } + + buf[i] = 'U'; + buf[i + 1] = 'T'; + buf[i + 2] = 'F'; + break; + } + } + + datetimeFormat = dgettext("dt_fmt", buf); + + if(!language || !strcmp(language, "")) + unsetenv("LANGUAGE"); + else + setenv("LANGUAGE", language, 1); + + // FIXME: Workaround fix for not supported dt_fmt. Use default format if dt_fmt string is not exist. + if (strlen(datetimeFormat) == strlen(buf) && !strncmp(datetimeFormat, buf, strlen(buf))) { + return 0; + } + + return strdup(datetimeFormat); +#else + return NULL; +#endif +} + +InputPicker::InputPicker(WebContents* web_contents) + : m_ewkView(0) + , m_pickerLayout(0) + , m_dataList(0) { + web_contents_delegate_ = static_cast(web_contents->GetDelegate()); + m_ewkView = web_contents_delegate_->web_view()->evas_object(); +} + +InputPicker::~InputPicker() { + if (m_pickerLayout) { + if (m_pickerLayout->popup) + evas_object_del(m_pickerLayout->popup); + delete m_pickerLayout; + } +} + +void InputPicker::show(Ewk_Input_Type inputType, const char* inputValue) { + // FIXME : DJKim : not implemented yet + // ewk_view_command_execute(m_ewkView, "Unselect", 0); + + if (inputType == EWK_INPUT_TYPE_DATE) + ewk_date_popup(inputValue); + else if (inputType == EWK_INPUT_TYPE_TIME) + ewk_time_popup(inputValue); + else if (inputType == EWK_INPUT_TYPE_DATETIME) + ewk_datetime_popup(inputValue, false); + else if (inputType == EWK_INPUT_TYPE_DATETIMELOCAL) + ewk_datetime_popup(inputValue, true); + else if (inputType == EWK_INPUT_TYPE_MONTH) + ewk_month_popup(inputValue); + else if (inputType == EWK_INPUT_TYPE_WEEK) + ewk_week_popup(inputValue); +} + +void InputPicker::showColorPicker(int r, int g, int b, int) { + ewk_color_popup(r, g, b); +} + +void InputPicker::hideColorPicker() { + if (!m_pickerLayout) + return; + + if (m_pickerLayout->popup) { + evas_object_del(m_pickerLayout->popup); + m_pickerLayout->popup = 0; + } + + delete m_pickerLayout; + m_pickerLayout = 0; +} + +// FIXME : DJKim : not implemented yet +#if 0 //ENABLE(ELM_COLORPALLETE) +static void _color_palette_changed_cb(void* data, Evas_Object* obj, void* eventInfo) { + int r = 0; + int g = 0; + int b = 0; + int a = 0; + Elm_Object_Item *color_it = static_cast(eventInfo); + elm_colorselector_palette_item_color_get(color_it, &r, &g, &b, &a); + evas_object_color_set(static_cast(data), r, g, b , a); +} +#endif + +void InputPicker::colorKeyDownCallback(void* data, Evas* evas, Evas_Object* obj, void* eventInfo) { + Evas_Event_Key_Down *event = (Evas_Event_Key_Down *)eventInfo; + if (!strncmp("Return", event->keyname, 6) || !strncmp("space", event->keyname, 5)) { + ColorPopupUserData* colorData = static_cast(data); + colorData->inputPicker->_color_selected_cb(data, 0, 0, 0); + } +} + +void InputPicker::_color_selected_cb(void* data, Evas* evas, Evas_Object* obj, void* eventInfo) { + int r = 0; + int g = 0; + int b = 0; + int a = 0; + + ColorPopupUserData* colorData = static_cast(data); + evas_object_color_get(colorData->color, &r, &g, &b, &a); + evas_object_color_set(colorData->colorRect, r, g, b, a); + elm_object_focus_set(colorData->colorAccessObject, true); +} + +void InputPicker::addColorRect(const char* part, int r, int g, int b, ColorPopupUserData* colorData) { +#ifdef OS_TIZEN + Evas_Object* color = evas_object_rectangle_add(evas_object_evas_get(m_pickerLayout->layout)); + evas_object_size_hint_weight_set(color, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_color_set(color, r, g, b, 255); + elm_object_part_content_set(m_pickerLayout->layout, part, color); + evas_object_show(color); + + Evas_Object* accessObject = elm_access_object_register(color, m_pickerLayout->layout); + elm_object_focus_custom_chain_append(m_pickerLayout->layout, accessObject, NULL); + + colorData->inputPicker = this; + colorData->colorRect = m_pickerLayout->colorRect; + colorData->color = color; + colorData->colorAccessObject = accessObject; + + evas_object_event_callback_add(accessObject, EVAS_CALLBACK_KEY_DOWN, colorKeyDownCallback, colorData); + evas_object_event_callback_add(color, EVAS_CALLBACK_MOUSE_DOWN, _color_selected_cb, colorData); +#endif +} + +void InputPicker::ewk_color_popup(int r, int g, int b) { + if (m_pickerLayout) + return; + + m_pickerLayout = new InputPicker::Layout(m_ewkView); + + m_pickerLayout->popup = elm_popup_add(m_ewkView); + elm_object_part_text_set(m_pickerLayout->popup, "title,text", "Select color"); + + // FIXME : DJKim : not implemented yet +#if 0 //ENABLE(TIZEN_HW_MORE_BACK_KEY) + m_pickerLayout->initial_r = r; + m_pickerLayout->initial_g = g; + m_pickerLayout->initial_b = b; + if (EflAssistHandle) + { + void (*webkit_ea_object_event_callback_add)(Evas_Object *, Ea_Callback_Type , Ea_Event_Cb func, void *); + webkit_ea_object_event_callback_add = (void (*)(Evas_Object *, Ea_Callback_Type , Ea_Event_Cb func, void *))dlsym(EflAssistHandle, "ea_object_event_callback_add"); + (*webkit_ea_object_event_callback_add)(m_pickerLayout->popup, EA_CALLBACK_BACK, _color_back_cb, this); + } +#endif + + m_pickerLayout->layout = elm_layout_add(m_pickerLayout->popup); + + base::FilePath edj_dir; + base::FilePath control_edj; + PathService::Get(PathsEfl::EDJE_RESOURCE_DIR, &edj_dir); + control_edj = edj_dir.Append(FILE_PATH_LITERAL("control.edj")); + + elm_layout_file_set(m_pickerLayout->layout, control_edj.AsUTF8Unsafe().c_str(),"color_picker"); + evas_object_size_hint_weight_set(m_pickerLayout->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(m_pickerLayout->layout); + elm_object_content_set(m_pickerLayout->popup, m_pickerLayout->layout); + + m_pickerLayout->colorRect = evas_object_rectangle_add(evas_object_evas_get(m_pickerLayout->layout)); + evas_object_size_hint_weight_set(m_pickerLayout->colorRect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(m_pickerLayout->colorRect); + + evas_object_color_set(m_pickerLayout->colorRect, r, g, b, 255); + elm_object_part_content_set(m_pickerLayout->layout, "elm.swallow.color_rect", m_pickerLayout->colorRect); + + // FIXME : DJKim : not implemented yet +#if 0 //ENABLE(ELM_COLORPALLETE) + Evas_Object* colorPalette = elm_colorselector_add(m_pickerLayout->popup); + elm_colorselector_mode_set(colorPalette, ELM_COLORSELECTOR_PALETTE); + + elm_colorselector_palette_color_add(colorPalette, 128, 0, 0, 255); + elm_colorselector_palette_color_add(colorPalette, 255, 0, 128, 255); + elm_colorselector_palette_color_add(colorPalette, 255, 0, 0, 255); + elm_colorselector_palette_color_add(colorPalette, 255, 127, 39, 255); + elm_colorselector_palette_color_add(colorPalette, 255, 255, 0, 255); + elm_colorselector_palette_color_add(colorPalette, 0, 255, 0, 255); + elm_colorselector_palette_color_add(colorPalette, 0, 255, 255, 255); + elm_colorselector_palette_color_add(colorPalette, 0, 0, 255, 255); + elm_colorselector_palette_color_add(colorPalette, 0, 0, 128, 255); + elm_colorselector_palette_color_add(colorPalette, 64, 0, 64, 255); + elm_colorselector_palette_color_add(colorPalette, 0, 0, 0, 255); + elm_colorselector_palette_color_add(colorPalette, 255, 255, 255, 255); + + evas_object_size_hint_fill_set(colorPalette, EVAS_HINT_FILL, 0); + evas_object_size_hint_weight_set(colorPalette, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_smart_callback_add(colorPalette, "color,item,selected", _color_palette_changed_cb, m_pickerLayout->colorRect); + evas_object_show(colorPalette); + + elm_object_part_content_set(m_pickerLayout->layout, "elm.swallow.color_palette", colorPalette); +#else + static ColorPopupUserData color1Data; + addColorRect("elm.swallow.color1", 128, 0, 0, &color1Data); + + static ColorPopupUserData color2Data; + addColorRect("elm.swallow.color2", 255, 0, 128, &color2Data); + + static ColorPopupUserData color3Data; + addColorRect("elm.swallow.color3", 255, 0, 0, &color3Data); + + static ColorPopupUserData color4Data; + addColorRect("elm.swallow.color4", 255, 127, 39, &color4Data); + + static ColorPopupUserData color5Data; + addColorRect("elm.swallow.color5", 255, 255, 0, &color5Data); + + static ColorPopupUserData color6Data; + addColorRect("elm.swallow.color6", 0, 255, 0, &color6Data); + + static ColorPopupUserData color7Data; + addColorRect("elm.swallow.color7", 0, 255, 255, &color7Data); + + static ColorPopupUserData color8Data; + addColorRect("elm.swallow.color8", 0, 0, 255, &color8Data); + + static ColorPopupUserData color9Data; + addColorRect("elm.swallow.color9", 0, 0, 128, &color9Data); + + static ColorPopupUserData color10Data; + addColorRect("elm.swallow.color10", 64, 0, 64, &color10Data); + + static ColorPopupUserData color11Data; + addColorRect("elm.swallow.color11", 153, 217, 234, &color11Data); + + static ColorPopupUserData color12Data; + addColorRect("elm.swallow.color12", 128, 128, 128, &color12Data); + + static ColorPopupUserData color13Data; + addColorRect("elm.swallow.color13", 0, 0, 0, &color13Data); + + static ColorPopupUserData color14Data; + addColorRect("elm.swallow.color14", 255, 255, 255, &color14Data); + + // Set focus on first color rect. + if (color1Data.colorAccessObject) + elm_object_focus_set(color1Data.colorAccessObject, true); +#endif + m_pickerLayout->okButton = elm_button_add(m_pickerLayout->popup); + elm_object_style_set(m_pickerLayout->okButton, "popup"); + elm_object_text_set(m_pickerLayout->okButton, "OK"); + elm_object_part_content_set(m_pickerLayout->popup, "button1", m_pickerLayout->okButton); + evas_object_smart_callback_add(m_pickerLayout->okButton, "clicked", _color_popup_response_cb, this); + + evas_object_show(m_pickerLayout->popup); + +} + +void InputPicker::_color_popup_response_cb(void* data, Evas_Object* obj, void* event_info) { + InputPicker* inputPicker = static_cast(data); + + int r = 0; + int g = 0; + int b = 0; + int a = 0; + evas_object_color_get(inputPicker->m_pickerLayout->colorRect, &r, &g, &b, &a); + + // FIXME : DJKim : not implemented yet + //ewk_view_color_picker_color_set(inputPicker->m_ewkView, r, g, b, a); + + inputPicker->hideColorPicker(); +} + +// FIXME : DJKim : not implemented yet +#if 0 //ENABLE(TIZEN_HW_MORE_BACK_KEY) +void InputPicker::_color_back_cb(void* data, Evas_Object* obj, void* event_info) { + InputPicker* inputPicker = static_cast(data); + + int r = inputPicker->m_pickerLayout->initial_r; + int g = inputPicker->m_pickerLayout->initial_g; + int b = inputPicker->m_pickerLayout->initial_b; + int a = 255; + ewk_view_color_picker_color_set(inputPicker->m_ewkView, r, g, b, a); + + inputPicker->hideColorPicker(); +} +#endif + +void InputPicker::ewk_date_popup(const char* inputValue) { + struct tm* currentTime; + time_t cur_time; + time(&cur_time); + currentTime = localtime(&cur_time); + + Input_Date_Str dateStr; + memset(&dateStr, 0, sizeof(Input_Date_Str)); + + if (inputValue && strlen(inputValue)) { + char tmpinputValue[maxDatetimeLength] = { 0, }; + + snprintf(tmpinputValue, maxDatetimeLength, "%s", inputValue); + char* token = strtok(tmpinputValue,"-"); + if (token) + strncpy(dateStr.year, token, maxDateStringLength); + token = strtok(0, "-"); + if (token) + strncpy(dateStr.mon, token, maxDateStringLength); + token = strtok(0, "-"); + if (token) + strncpy(dateStr.day, token, maxDateStringLength); + + if (dateStr.year) + currentTime->tm_year = atoi(dateStr.year); + if (dateStr.mon) + currentTime->tm_mon = atoi(dateStr.mon); + if (dateStr.day) + currentTime->tm_mday = atoi(dateStr.day); + + currentTime->tm_year = currentTime->tm_year - 1900; + currentTime->tm_mon = currentTime->tm_mon - 1; + } + + if (m_pickerLayout) { + // Just update the value. + elm_datetime_value_set(m_pickerLayout->popup, currentTime); + elm_object_focus_set(m_pickerLayout->popup, true); + return; + } + + m_pickerLayout = new InputPicker::Layout(m_ewkView); + + createDatetimePicker(currentTime); + elm_datetime_field_visible_set(m_pickerLayout->popup, ELM_DATETIME_HOUR, EINA_FALSE); + elm_datetime_field_visible_set(m_pickerLayout->popup, ELM_DATETIME_MINUTE, EINA_FALSE); + elm_datetime_field_visible_set(m_pickerLayout->popup, ELM_DATETIME_AMPM, EINA_FALSE); + + evas_object_smart_callback_add(m_pickerLayout->popup, "picker,value,set", _date_popup_response_cb, this); + + evas_object_show(m_pickerLayout->popup); + elm_object_signal_emit(m_pickerLayout->popup, "datepicker,show", ""); +} + +#define isLeapYear(year) ((!(year % 4) && (year % 100)) || (!(year % 400) && (year % 1000))) +static int _calculateMonthAndDay(int year, int totalDays, int* remains) { + // Jan. + if (totalDays - 31 < 0) { + *remains = totalDays; + return 0; + } + + totalDays = totalDays - 31; + + // Feb. + if (isLeapYear(year)) { + if (totalDays - 29 < 0) { + *remains = totalDays; + return 1; + } + totalDays = totalDays - 29; + } else { + if (totalDays - 28 < 0) { + *remains = totalDays; + return 1; + } + totalDays = totalDays - 28; + } + + // Mar. + if (totalDays - 31 < 0) { + *remains = totalDays; + return 2; + } + totalDays = totalDays - 31; + + // Apr. + if (totalDays - 30 < 0) { + *remains = totalDays; + return 3; + } + totalDays = totalDays - 30; + + // May + if (totalDays - 31 < 0) { + *remains = totalDays; + return 4; + } + totalDays = totalDays - 31; + + // Jun. + if (totalDays - 30 < 0) { + *remains = totalDays; + return 5; + } + totalDays = totalDays - 30; + + // Jul. + if (totalDays - 31 < 0) { + *remains = totalDays; + return 6; + } + totalDays = totalDays - 31; + + // Aug. + if (totalDays - 31 < 0) { + *remains = totalDays; + return 7; + } + totalDays = totalDays - 31; + + // Sept. + if (totalDays - 30 < 0) { + *remains = totalDays; + return 8; + } + totalDays = totalDays - 30; + + // Oct. + if (totalDays - 31 < 0) { + *remains = totalDays; + return 9; + } + totalDays = totalDays - 31; + + // Nov. + if (totalDays - 30 < 0) { + *remains = totalDays; + return 10; + } + totalDays = totalDays - 30; + + *remains = totalDays; + return 11; +} + +void InputPicker::ewk_week_popup(const char* inputValue) { + struct tm* currentTime; + time_t cur_time; + time(&cur_time); + currentTime = localtime(&cur_time); + + Input_Date_Str dateStr; + memset(&dateStr, 0, sizeof(Input_Date_Str)); + + if (inputValue && strlen(inputValue)) { + char tmpinputValue[maxDatetimeLength] = { 0, }; + + snprintf(tmpinputValue, maxDatetimeLength, "%s", inputValue); + char* token = strtok(tmpinputValue,"-"); + if (token) + strncpy(dateStr.year, token, maxDateStringLength); + const char* week = strstr(inputValue, "W"); + int weekNum = 1; + if (week) + weekNum = atoi(week + 1); + + if (dateStr.year) + currentTime->tm_year = atoi(dateStr.year); + currentTime->tm_year = currentTime->tm_year - 1900; + + struct tm firtTimeOfyear; + memset(&firtTimeOfyear, 0, sizeof(struct tm)); + firtTimeOfyear.tm_year = currentTime->tm_year; + firtTimeOfyear.tm_mon = 0; + firtTimeOfyear.tm_mday = 1; + mktime(&firtTimeOfyear); + + char firstWeek[10] = {0, }; + strftime(firstWeek, 10, "%w", &firtTimeOfyear); + int firstWeekCount = atoi(firstWeek); + + int totalDays = 1; + + totalDays = weekNum * 7 - firstWeekCount; + + int days = 0; + int month = _calculateMonthAndDay(currentTime->tm_year, totalDays, &days); + + currentTime->tm_mon = month; + currentTime->tm_mday = days; + } + + if (m_pickerLayout) { + // Just update the value. + elm_datetime_value_set(m_pickerLayout->popup, currentTime); + elm_object_focus_set(m_pickerLayout->popup, true); + return; + } + + m_pickerLayout = new InputPicker::Layout(m_ewkView); + + createDatetimePicker(currentTime); + elm_datetime_field_visible_set(m_pickerLayout->datePicker, ELM_DATETIME_HOUR, EINA_FALSE); + elm_datetime_field_visible_set(m_pickerLayout->datePicker, ELM_DATETIME_MINUTE, EINA_FALSE); + elm_datetime_field_visible_set(m_pickerLayout->datePicker, ELM_DATETIME_AMPM, EINA_FALSE); + + evas_object_smart_callback_add(m_pickerLayout->popup, "picker,value,set", _week_popup_response_cb, this); + + evas_object_show(m_pickerLayout->popup); + elm_object_signal_emit(m_pickerLayout->popup, "datepicker,show", ""); +} + +void InputPicker::ewk_time_popup(const char* inputValue) { + struct tm* currentTime; + time_t cur_time; + time(&cur_time); + currentTime = localtime(&cur_time); + + Input_Date_Str dateStr; + memset(&dateStr, 0, sizeof(Input_Date_Str)); + + if (inputValue && strlen(inputValue)) { + char tmpinputValue[maxDatetimeLength] = { 0, }; + + snprintf(tmpinputValue, maxDatetimeLength, "%s", inputValue); + char* token = strtok(tmpinputValue,":"); + if (token) + strncpy(dateStr.hour, token, maxDateStringLength); + token = strtok(0, ":"); + if (token) + strncpy(dateStr.min, token, maxDateStringLength); + + if (dateStr.hour) + currentTime->tm_hour = atoi(dateStr.hour); + if (dateStr.min) + currentTime->tm_min = atoi(dateStr.min); + } + + if (m_pickerLayout) { + // Just update the value. + elm_datetime_value_set(m_pickerLayout->popup, currentTime); + elm_object_focus_set(m_pickerLayout->popup, true); + return; + } + + m_pickerLayout = new InputPicker::Layout(m_ewkView); + + createDatetimePicker(currentTime); + elm_datetime_field_visible_set(m_pickerLayout->popup, ELM_DATETIME_YEAR, EINA_FALSE); + elm_datetime_field_visible_set(m_pickerLayout->popup, ELM_DATETIME_MONTH, EINA_FALSE); + elm_datetime_field_visible_set(m_pickerLayout->popup, ELM_DATETIME_DATE, EINA_FALSE); + + evas_object_smart_callback_add(m_pickerLayout->popup, "picker,value,set", _time_popup_response_cb, this); + + evas_object_show(m_pickerLayout->popup); + elm_object_signal_emit(m_pickerLayout->popup, "timepicker,show", ""); +} + +void InputPicker::ewk_month_popup(const char* inputValue) { + struct tm* currentTime; + time_t cur_time; + time(&cur_time); + currentTime = localtime(&cur_time); + + Input_Date_Str dateStr; + memset(&dateStr, 0, sizeof(Input_Date_Str)); + + if (inputValue && strlen(inputValue)) { + char tmpInputValue[maxDatetimeLength] = { 0, }; + + snprintf(tmpInputValue, maxDatetimeLength, "%s", inputValue); + char* token = strtok(tmpInputValue,"-"); + if (token) + strncpy(dateStr.year, token, maxDateStringLength); + token = strtok(0, "-"); + if (token) + strncpy(dateStr.mon, token, maxDateStringLength); + + if (dateStr.year) + currentTime->tm_year = atoi(dateStr.year); + if (dateStr.mon) + currentTime->tm_mon = atoi(dateStr.mon); + + currentTime->tm_year = currentTime->tm_year - 1900; + currentTime->tm_mon = currentTime->tm_mon - 1; + } + + if (m_pickerLayout) { + // Just update the value. + elm_datetime_value_set(m_pickerLayout->popup, currentTime); + elm_object_focus_set(m_pickerLayout->popup, true); + return; + } + + m_pickerLayout = new InputPicker::Layout(m_ewkView); + + createDatetimePicker(currentTime); + elm_datetime_field_visible_set(m_pickerLayout->datePicker, ELM_DATETIME_DATE, EINA_FALSE); + elm_datetime_field_visible_set(m_pickerLayout->datePicker, ELM_DATETIME_HOUR, EINA_FALSE); + elm_datetime_field_visible_set(m_pickerLayout->datePicker, ELM_DATETIME_MINUTE, EINA_FALSE); + elm_datetime_field_visible_set(m_pickerLayout->datePicker, ELM_DATETIME_AMPM, EINA_FALSE); + elm_datetime_format_set(m_pickerLayout->datePicker, "%Y/%m"); + + evas_object_smart_callback_add(m_pickerLayout->popup, "picker,value,set", _month_popup_response_cb, this); + + evas_object_show(m_pickerLayout->popup); + elm_object_signal_emit(m_pickerLayout->popup, "datepicker,show", ""); +} + +void InputPicker::ewk_datetime_popup(const char* inputValue, bool local) { + struct tm* currentTime; + time_t cur_time; + time(&cur_time); + currentTime = localtime(&cur_time); + + Input_Date_Str dateStr; + memset(&dateStr, 0, sizeof(Input_Date_Str)); + + if (inputValue && strlen(inputValue)) { + char tmpInputValue[maxDatetimeLength] = { 0, }; + + snprintf(tmpInputValue, maxDatetimeLength, "%s", inputValue); + char* token = strtok(tmpInputValue,"-"); + if (token) + strncpy(dateStr.year, token, maxDateStringLength); + token = strtok(0, "-"); + if (token) + strncpy(dateStr.mon, token, maxDateStringLength); + token = strtok(0, "T"); + if (token) + strncpy(dateStr.day, token, maxDateStringLength); + token = strtok(0, ":"); + if (token) + strncpy(dateStr.hour, token, maxDateStringLength); + + if (local) { + token = strtok(0, "Z"); + if (token) + strncpy(dateStr.min, token, maxDateStringLength); + } else { + token = strtok(0, ":"); + if (token) + strncpy(dateStr.min, token, maxDateStringLength); + } + + if (dateStr.year) + currentTime->tm_year = atoi(dateStr.year); + if (dateStr.mon) + currentTime->tm_mon = atoi(dateStr.mon); + if (dateStr.day) + currentTime->tm_mday = atoi(dateStr.day); + if (dateStr.hour) + currentTime->tm_hour = atoi(dateStr.hour); + if (dateStr.min) + currentTime->tm_min = atoi(dateStr.min); + + currentTime->tm_year = currentTime->tm_year - 1900; + currentTime->tm_mon = currentTime->tm_mon - 1; + } + + if (m_pickerLayout) { + // Just update the value. + m_pickerLayout->datetimeLocal = local; + + elm_datetime_value_set(m_pickerLayout->datePicker, currentTime); + evas_object_focus_set(m_pickerLayout->okButton, true); + return; + } + + m_pickerLayout = new InputPicker::Layout(m_ewkView); + + m_pickerLayout->datetimeLocal = local; + + // FIXME : DJKim : not implemented yet + //String popupTitle = popupTitleSetDateAndTime(); + createDatetimePopup("Set date and time", currentTime); + + m_pickerLayout->okButton = elm_button_add(m_pickerLayout->popup); + elm_object_style_set(m_pickerLayout->okButton, "popup"); + elm_object_text_set(m_pickerLayout->okButton, "OK"); + elm_object_part_content_set(m_pickerLayout->popup, "button1", m_pickerLayout->okButton); + evas_object_focus_set(m_pickerLayout->okButton, true); + + evas_object_smart_callback_add(m_pickerLayout->okButton, "clicked", _datetime_popup_response_cb, this); + elm_object_content_set(m_pickerLayout->popup, m_pickerLayout->layout); + evas_object_show(m_pickerLayout->popup); + +} + +Eina_Bool InputPicker::removeDatetimePicker(void* data) { + InputPicker* inputPicker = static_cast(data); + + if (!inputPicker->m_pickerLayout) + return ECORE_CALLBACK_CANCEL; + + // FIXME : DJKim : not implemented yet + // ewk_view_command_execute(inputPicker->m_ewkView, "Unselect", 0); + + inputPicker->deletePopupLayout(); + delete inputPicker->m_pickerLayout; + inputPicker->m_pickerLayout = 0; + + return ECORE_CALLBACK_CANCEL; +} + +void InputPicker::removeDatetimePickerDelayed() { + ecore_timer_add(0.1, removeDatetimePicker, this); +} + +void InputPicker::createDatetimePicker(struct tm* currentTime) { + m_pickerLayout->popup = elm_datetime_add(elm_object_parent_widget_get(m_ewkView)); + elm_object_style_set(m_pickerLayout->popup, "pickerstyle"); + + char* format = datetimeFormat(); + if (format) { + elm_datetime_format_set(m_pickerLayout->popup, format); + free(format); + } else + elm_datetime_format_set(m_pickerLayout->popup, defaultDatetimeFormat); + + elm_datetime_value_set(m_pickerLayout->popup, currentTime); + + // FIXME : DJKim : not implemented yet +#if 0 //ENABLE(TIZEN_HW_MORE_BACK_KEY) + evas_object_smart_callback_add(m_pickerLayout->popup, "edit,end", _edit_end_cb, this); +#endif +} + +void InputPicker::createDatetimePopup(const char* title, struct tm* currentTime) { + m_pickerLayout->popup = elm_popup_add(elm_object_parent_widget_get(m_ewkView)); + evas_object_size_hint_weight_set(m_pickerLayout->popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_part_text_set(m_pickerLayout->popup, "title,text", title); + + // FIXME : DJKim : not implemented yet +#if 0 //ENABLE(TIZEN_HW_MORE_BACK_KEY) + if (EflAssistHandle) { + void (*webkit_ea_object_event_callback_add)(Evas_Object *, Ea_Callback_Type , Ea_Event_Cb func, void *); + webkit_ea_object_event_callback_add = (void (*)(Evas_Object *, Ea_Callback_Type , Ea_Event_Cb func, void *))dlsym(EflAssistHandle, "ea_object_event_callback_add"); + (*webkit_ea_object_event_callback_add)(m_pickerLayout->popup, EA_CALLBACK_BACK, _popup_back_cb, this); + } +#endif + + base::FilePath edj_dir; + base::FilePath control_edj; + PathService::Get(PathsEfl::EDJE_RESOURCE_DIR, &edj_dir); + control_edj = edj_dir.Append(FILE_PATH_LITERAL("control.edj")); + + + m_pickerLayout->layout = elm_layout_add(m_pickerLayout->popup); + elm_layout_file_set(m_pickerLayout->layout, control_edj.AsUTF8Unsafe().c_str(),"datetime_popup"); + evas_object_size_hint_weight_set(m_pickerLayout->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + m_pickerLayout->datePicker = elm_datetime_add(m_pickerLayout->layout); + elm_object_part_content_set(m_pickerLayout->layout , "elm.swallow.datetime", m_pickerLayout->datePicker); + + char* format = datetimeFormat(); + if (format) { + elm_datetime_format_set(m_pickerLayout->datePicker, format); + free(format); + } else + elm_datetime_format_set(m_pickerLayout->datePicker, defaultDatetimeFormat); + + elm_datetime_value_set(m_pickerLayout->datePicker, currentTime); + + // FIXME : DJKim : not implemented yet +#if 0 //ENABLE(TIZEN_HW_MORE_BACK_KEY) + evas_object_smart_callback_add(m_pickerLayout->datePicker, "edit,end", _edit_end_cb, 0); +#endif +} + +void InputPicker::deletePopupLayout() { + if(m_pickerLayout->popup){ + evas_object_del(m_pickerLayout->popup); + m_pickerLayout->popup = 0; + } +} + +void InputPicker::_date_popup_response_cb(void* data, Evas_Object* obj, void* event_info) { + struct tm currentTime; + memset(¤tTime, 0, sizeof(struct tm)); + + InputPicker* inputPicker = static_cast(data); + + elm_datetime_value_get(inputPicker->m_pickerLayout->popup, ¤tTime); + mktime(¤tTime); + + char dateStr[20] = { 0, }; + strftime(dateStr, 20, "%F" , ¤tTime); + + // FIXME : DJKim : not implemented yet + //ewk_view_focused_input_element_value_set(inputPicker->m_ewkView, dateStr); +} + +void InputPicker::_week_popup_response_cb(void* data, Evas_Object* obj, void* event_info) { + struct tm currentTime; + memset(¤tTime, 0, sizeof(struct tm)); + + InputPicker* inputPicker = static_cast(data); + + elm_datetime_value_get(inputPicker->m_pickerLayout->popup, ¤tTime); + mktime(¤tTime); + + char dateStr[20] = { 0, }; + strftime(dateStr, 20, "%G-W%V", ¤tTime); + + // FIXME : DJKim : not implemented yet + //ewk_view_focused_input_element_value_set(inputPicker->m_ewkView, dateStr); +} + +void InputPicker::_time_popup_response_cb(void* data, Evas_Object* obj, void* event_info) { + struct tm currentTime; + memset(¤tTime, 0, sizeof(struct tm)); + + InputPicker* inputPicker = static_cast(data); + + elm_datetime_value_get(inputPicker->m_pickerLayout->popup, ¤tTime); + mktime(¤tTime); + + char dateStr[20] = { 0, }; + strftime(dateStr, 20, "%R", ¤tTime); + + // FIXME : DJKim : not implemented yet + //ewk_view_focused_input_element_value_set(inputPicker->m_ewkView, dateStr); +} + +void InputPicker::_month_popup_response_cb(void* data, Evas_Object* obj, void* event_info) { + struct tm currentTime; + memset(¤tTime, 0, sizeof(struct tm)); + + InputPicker* inputPicker = static_cast(data); + mktime(¤tTime); + + elm_datetime_value_get(inputPicker->m_pickerLayout->popup, ¤tTime); + + char dateStr[20] = { 0, }; + strftime(dateStr, 20, "%Y-%m", ¤tTime); + + // FIXME : DJKim : not implemented yet + //ewk_view_focused_input_element_value_set(inputPicker->m_ewkView, dateStr); +} + +void InputPicker::_datetime_popup_response_cb(void* data, Evas_Object* obj, void* event_info) { + struct tm currentTime; + memset(¤tTime, 0, sizeof(struct tm)); + + InputPicker* inputPicker = static_cast(data); + + elm_datetime_value_get(inputPicker->m_pickerLayout->datePicker, ¤tTime); + mktime(¤tTime); + + char dateStr[50] = { 0, }; + if (inputPicker->m_pickerLayout->datetimeLocal) + strftime(dateStr, 50, "%FT%R", ¤tTime); + else + strftime(dateStr, 50, "%FT%RZ", ¤tTime); + + // FIXME : DJKim : not implemented yet + // ewk_view_focused_input_element_value_set(inputPicker->m_ewkView, dateStr); + + // FIXME : DJKim : not implemented yet + // ewk_view_command_execute(inputPicker->m_ewkView, "Unselect", 0); + + inputPicker->deletePopupLayout(); + delete inputPicker->m_pickerLayout; + inputPicker->m_pickerLayout = 0; +} + +// FIXME : DJKim : not implemented yet +#if 0//ENABLE(TIZEN_HW_MORE_BACK_KEY) +void InputPicker::_popup_back_cb(void* data, Evas_Object* obj, void* event_info) { + removeDatetimePicker(data); +} +#endif + +} // namespace content diff --git a/tizen_src/impl/browser/inputpicker/InputPicker.h b/tizen_src/impl/browser/inputpicker/InputPicker.h new file mode 100755 index 0000000..3aca3cd --- /dev/null +++ b/tizen_src/impl/browser/inputpicker/InputPicker.h @@ -0,0 +1,91 @@ +/* + Copyright (C) 2014 Samsung Electronics + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef InputPicker_h +#define InputPicker_h + +#include "ewk_view.h" + +#include +#include + +// FIXME : DJKim : not implemented yet +#if 0 //ENABLE(TIZEN_DATALIST_ELEMENT) +#include "ewk_view_private.h" +#endif + +namespace content { + +class WebContents; +struct ColorPopupUserData; +class WebContentsDelegateEfl; + +class InputPicker { + public: + InputPicker(WebContents* web_contents); + ~InputPicker(); + + void show(Ewk_Input_Type, const char*); + void showColorPicker(int, int, int, int); + void hideColorPicker(); + + void ewk_date_popup(const char*); + void ewk_time_popup(const char*); + void ewk_month_popup(const char*); + void ewk_week_popup(const char*); + void ewk_datetime_popup(const char*, bool); + void ewk_color_popup(int, int, int); + void removeDatetimePickerDelayed(); + + private: + struct Layout; + + void createDatetimePopup(const char*, struct tm*); + void createDatetimePicker(struct tm*); + void deletePopupLayout(); + void addColorRect(const char*, int, int, int, ColorPopupUserData*); + + static void _date_popup_response_cb(void*, Evas_Object*, void*); + static void _time_popup_response_cb(void*, Evas_Object*, void*); + static void _month_popup_response_cb(void*, Evas_Object*, void*); + static void _week_popup_response_cb(void*, Evas_Object*, void*); + static void _datetime_popup_response_cb(void*, Evas_Object*, void*); + static void _color_popup_response_cb(void*, Evas_Object*, void*); + static void _data_list_popup_response_cb(void*, Evas_Object*, void*); + static void _data_list_popup_response_cancel_cb(void*, Evas_Object*, void*); + static void _data_list_selected_cb(void*, Evas_Object*, void*); + static void _color_selected_cb(void*, Evas*, Evas_Object*, void*); + static void colorKeyDownCallback(void*, Evas*, Evas_Object*, void*); + +// FIXME : DJKim : not implemented yet +#if 0 //ENABLE(TIZEN_HW_MORE_BACK_KEY) + static void _color_back_cb(void*, Evas_Object*, void*); + static void _popup_back_cb(void*, Evas_Object*, void*); +#endif + static Eina_Bool removeDatetimePicker(void*); + + WebContentsDelegateEfl* web_contents_delegate_; + Evas_Object* m_ewkView; + Layout* m_pickerLayout; + Eina_List* m_dataList; +}; + +} // namespace content + +#endif // InputPicker_h diff --git a/tizen_src/impl/chromium-efl.gyp b/tizen_src/impl/chromium-efl.gyp index a996bee..ff6e968 100755 --- a/tizen_src/impl/chromium-efl.gyp +++ b/tizen_src/impl/chromium-efl.gyp @@ -73,6 +73,8 @@ #'browser/geolocation/geolocation_permission_context_efl.h', 'browser/geolocation/location_provider_efl.cc', 'browser/geolocation/location_provider_efl.h', + 'browser/inputpicker/InputPicker.cc', + 'browser/inputpicker/InputPicker.h', 'browser/javascript_dialog_manager_efl.cc', 'browser/javascript_dialog_manager_efl.h', 'browser/javascript_modal_dialog_efl.cc', @@ -180,6 +182,7 @@ 'renderer/render_view_observer_efl.h', 'resource/JavaScriptPopup.edc', 'resource/Magnifier.edc', + 'resource/control.edc', 'resource_dispatcher_host_delegate_efl.cc', 'resource_dispatcher_host_delegate_efl.h', 'screen_efl.cc', diff --git a/tizen_src/impl/eweb_view.cc b/tizen_src/impl/eweb_view.cc index 6e98268..d349ba5 100644 --- a/tizen_src/impl/eweb_view.cc +++ b/tizen_src/impl/eweb_view.cc @@ -1577,3 +1577,17 @@ void EWebView::ShowFileChooser(const content::FileChooserParams& params) { file_chooser_.reset(new content::FileChooserControllerEfl(render_view_host, ¶ms)); file_chooser_->open(); } + +void EWebView::RequestColorPicker(int r, int g, int b, int a) { + inputPicker_.reset(new InputPicker(web_contents_delegate()->web_contents())); + inputPicker_->showColorPicker(r, g, b, a); +} + +void EWebView::DismissColorPicker() { + inputPicker_->hideColorPicker(); +} + +bool EWebView::SetColorPickerColor(int r, int g, int b, int a) { + // FIXME : DJKim : not implemented yet + return true; +} diff --git a/tizen_src/impl/eweb_view.h b/tizen_src/impl/eweb_view.h index 3afe681..487641f 100644 --- a/tizen_src/impl/eweb_view.h +++ b/tizen_src/impl/eweb_view.h @@ -22,6 +22,7 @@ #include #include +#include #include "base/memory/scoped_ptr.h" #include "base/synchronization/waitable_event.h" @@ -48,8 +49,7 @@ #include "file_chooser_controller_efl.h" #include "ui/gfx/point.h" #include "ui/gfx/size.h" - -#include +#include "browser/inputpicker/InputPicker.h" namespace content { class RenderViewHost; @@ -244,6 +244,9 @@ class EWebView content::InputEventAckState ack_result); void ShowFileChooser(const content::FileChooserParams&); void DidChangeContentsArea(int width, int height); + void RequestColorPicker(int r, int g, int b, int a); + void DismissColorPicker(); + bool SetColorPickerColor(int r, int g, int b, int a); private: EWebView(EWebContext*, Evas_Object* smart_object); @@ -348,6 +351,7 @@ class EWebView double min_page_scale_factor_; double max_page_scale_factor_; scoped_ptr orientation_lock_callback_; + scoped_ptr inputPicker_; #ifndef NDEBUG bool renderer_crashed_; diff --git a/tizen_src/impl/resource/control.edc b/tizen_src/impl/resource/control.edc new file mode 100755 index 0000000..e88d71c --- /dev/null +++ b/tizen_src/impl/resource/control.edc @@ -0,0 +1,737 @@ + +collections { + group { name: "datetime_popup"; + parts { + part { name: "bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + align: 0.0 0.0; + min: 0 100; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part { name: "pad_left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + align: 0.0 0.5; + min: 20 0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 0.0 1.0; to: "bg"; } + } + } + part { name: "elm.swallow.datetime"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + align: 0.0 0.5; + rel1 { relative: 1.0 0.0; to: "pad_left"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + } + } + } + } + group { name: "color_picker"; + parts { + part { name: "bg"; + scale: 1; + type: RECT; + description { state: "default" 0.0; + visible: 0; + min : 0 320; + fixed: 0 0; + align: 0.0 0.0; + rel1 {relative: 0.0 0.0;} + rel2 {relative: 1.0 1.0;} + } + } + part { name: "color_rect_bg"; + scale: 1; + type: RECT; + description { state: "default" 0.0; + visible: 0; + min : 0 140; + fixed: 0 0; + align: 0.0 0.0; + rel1 {relative: 0.0 0.0; to: "bg"; } + rel2 {relative: 1.0 0.0; to: "bg"; } + } + } + part { name: "elm.swallow.color_rect"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 200 80; + max: 200 80; + fixed: 1 1; + align: 0.5 0.4; + rel1 {relative: 0.0 0.0; to: "color_rect_bg"; } + rel2 {relative: 1.0 1.0; to: "color_rect_bg"; } + } + } + + part { name: "color_palette_bg"; + scale: 1; + type: RECT; + description { state: "default" 0.0; + visible: 0; + align: 0.0 0.0; + min: 710 200; + rel1 {relative: 0.0 1.0; to: "color_rect_bg"; } + rel2 {relative: 1.0 1.0; to: "bg"; } + } + } + part { name: "elm.swallow.color1"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.125 0.0; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color2"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.25 0.0; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color3"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.375 0.0; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color4"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.5 0.0; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color5"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.625 0.0; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color6"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.75 0.0; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color7"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.875 0.0; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color8"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.125 0.66; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color9"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.25 0.66; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color10"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.375 0.66; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color11"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.5 0.66; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color12"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.625 0.66; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color13"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.75 0.66; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + part { name: "elm.swallow.color14"; + scale: 1; + type: SWALLOW; + description { state: "default" 0.0; + visible: 1; + min: 70 70; + max: 70 70; + fixed: 1 1; + align: 0.875 0.66; + rel1 {relative: 0.0 0.0; to: "color_palette_bg"; } + rel2 {relative: 1.0 1.0; to: "color_palette_bg"; } + } + } + } + } + group { name: "data_list_picker"; + parts { + part { name: "bg"; + type: RECT; + mouse_events: 1; + repeat_events: 0; + scale: 1; + description { state: "default" 0.0; + min : 0 400; + fixed: 0 0; + align: 0.0 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color: 0 0 0 0; + } + } + part { name: "selected_item"; + type: SWALLOW; + mouse_events: 1; + repeat_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.0 1.0; + min: 0 80; + fixed: 0 1; + rel1 { relative: 0.0 1.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + } + } + part { name: "data_list"; + type: SWALLOW; + mouse_events: 1; + repeat_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.0; to_x: "bg"; to_y: "selected_item"; } + } + } + } + } + group { name: "elm/picker"; + images { + image: "I01_picker_panel_bg.png" COMP; + image: "I01_picker_btn_02_normal.png" COMP; + image: "I01_picker_btn_02_press.png" COMP; + image: "I01_picker_btn_normal.png" COMP; + image: "I01_picker_arrow_left.png" COMP; + image: "I01_picker_arrow_right.png" COMP; + } + parts { + part { name: "dimm"; + type: RECT; + mouse_events: 1; + repeat_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color: 0 0 0 0; + } + } + part { name: "bg"; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1 { relative: 0.0 1.0; } + rel2 { relative: 1.0 1.5; } + } + description { state: "show" 0.0; + inherit: "default" 0.0; + rel1 { relative: 0.0 0.48;} + rel2 { relative: 1.0 1.0; offset: 0 2; } + } + description { state: "imf_panel" 0.0; + inherit: "show" 0.0; + visible: 0; + } + } + part { name: "elm.image.panel"; + type: IMAGE; + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + min: 0 86; + fixed: 0 1; + align: 0.0 0.0; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 0.0; to: "bg"; } + image.normal: "I01_picker_panel_bg.png"; + } + description { state: "show" 0.0; + inherit: "default" 0.0; + } + description { state: "imf_panel" 0.0; + inherit: "default" 0.0; + align: 0.0 1.0; + rel1 { relative: 0.0 1.0; to: "bg"; offset: 0 2; } + rel2 { relative: 1.0 1.0; to: "bg"; offset: 0 2; } + } + } + part { name: "padding.prev_bg.left"; + type: RECT; + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 10 0; + fixed: 1 0; + align: 0.0 0.0; + rel1 { relative: 0.0 0.0; to: "elm.image.panel"; } + rel2 { relative: 0.0 1.0; to: "elm.image.panel"; } + } + } + part { name: "elm.image.prev_bg"; + type: IMAGE; + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 72 64; + max: 72 64; + fixed: 1 1; + align: 0.0 0.5; + rel1 { relative: 1.0 0.0; to_x: "padding.prev_bg.left"; to_y: "elm.image.panel"; } + rel2 { relative: 1.0 1.0; to_x: "padding.prev_bg.left"; to_y: "elm.image.panel"; } + image.normal: "I01_picker_btn_02_normal.png"; + image.border: 5 5 5 5; + } + description { state: "press" 0.0; + inherit: "default" 0.0; + visible: 1; + image.normal: "I01_picker_btn_02_press.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "disable" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 150; + } + } + part { name: "elm.image.prev_arrow"; + type: IMAGE; + mouse_events: 1; + repeat_events: 1; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 32 32; + max: 32 32; + fixed: 1 1; + align: 0.5 0.5; + rel1 { relative: 0.0 0.0; to: "elm.image.prev_bg"; } + rel2 { relative: 1.0 1.0; to: "elm.image.prev_bg"; } + image.normal: "I01_picker_arrow_left.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "disable" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 150; + } + } + part { name: "padding.prev_bg.right"; + type: RECT; + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 16 0; + fixed: 1 0; + align: 0.0 0.0; + rel1 { relative: 1.0 0.0; to: "elm.image.prev_bg"; } + rel2 { relative: 1.0 1.0; to: "elm.image.prev_bg"; } + } + } + part { name: "elm.image.next_bg"; + type: IMAGE; + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 72 64; + max: 72 64; + fixed: 1 1; + align: 0.0 0.5; + rel1 { relative: 1.0 0.0; to_x: "padding.prev_bg.right"; to_y: "elm.image.panel"; } + rel2 { relative: 1.0 1.0; to_x: "padding.prev_bg.right"; to_y: "elm.image.panel"; } + image.normal: "I01_picker_btn_02_normal.png"; + image.border: 5 5 5 5; + } + description { state: "press" 0.0; + inherit: "default" 0.0; + visible: 1; + image.normal: "I01_picker_btn_02_press.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "disable" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 150; + } + } + part { name: "elm.image.next_arrow"; + type: IMAGE; + mouse_events: 1; + repeat_events: 1; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 32 32; + max: 32 32; + fixed: 1 1; + align: 0.5 0.5; + rel1 { relative: 0.0 0.0; to: "elm.image.next_bg"; } + rel2 { relative: 1.0 1.0; to: "elm.image.next_bg"; } + image.normal: "I01_picker_arrow_right.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "disable" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 150; + } + } + part { name: "padding.done_bg.right"; + type: RECT; + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 10 0; + fixed: 1 0; + align: 1.0 0.0; + rel1 { relative: 1.0 0.0; to: "elm.image.panel"; } + rel2 { relative: 1.0 1.0; to: "elm.image.panel"; } + } + } + part { name: "elm.image.done_bg"; + type: IMAGE; + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + min: 132 64; + max: 132 64; + fixed: 1 1; + align: 1.0 0.5; + rel1 { relative: 0.0 0.0; to_x: "padding.done_bg.right"; to_y: "elm.image.panel"; } + rel2 { relative: 0.0 1.0; to_x: "padding.done_bg.right"; to_y: "elm.image.panel"; } + image.normal: "I01_picker_btn_02_normal.png"; + image.border: 5 5 5 5; + } + description { state: "press" 0.0; + inherit: "default" 0.0; + image.normal: "I01_picker_btn_02_press.png"; + } + } + part { name: "elm.text.done"; + type: TEXT; + repeat_events: 1; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1.to: "elm.image.done_bg"; + rel2.to: "elm.image.done_bg"; + color: 255 255 255 255; + text { + font: "Tizen:style=Medium"; + size: 32; + min: 1 1; + align: 0.5 0.5; + } + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1 { relative: 0.0 1.0; to: "elm.image.panel"; } + rel2 { relative: 1.0 1.0;} + } + description { state: "show" 0.0; + inherit: "default" 0.0; + } + description { state: "imf_panel" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + } + + programs { + program { + name: "prev_button_press"; + signal: "mouse,down,1"; + source: "elm.image.prev_bg"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.image.prev_bg", st, 30, vl); + if (!strcmp(st, "visible")) + set_state(PART:"elm.image.prev_bg", "press", 0.0); + } + } + program { + name: "prev_button_release"; + signal: "mouse,up,1"; + source: "elm.image.prev_bg"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.image.prev_bg", st, 30, vl); + if (!strcmp(st, "press")) + set_state(PART:"elm.image.prev_bg", "visible", 0.0); + } + } + program { + name: "next_button_press"; + signal: "mouse,down,1"; + source: "elm.image.next_bg"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.image.next_bg", st, 30, vl); + if (!strcmp(st, "visible")) + set_state(PART:"elm.image.next_bg", "press", 0.0); + } + } + program { + name: "next_button_release"; + signal: "mouse,up,1"; + source: "elm.image.next_bg"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.image.next_bg", st, 30, vl); + if (!strcmp(st, "press")) + set_state(PART:"elm.image.next_bg", "visible", 0.0); + } + } + program { + name: "done_button_press"; + signal: "mouse,down,1"; + source: "elm.image.done_bg"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.image.done_bg", st, 30, vl); + if (!strcmp(st, "default")) + set_state(PART:"elm.image.done_bg", "press", 0.0); + } + } + program { + name: "done_button_release"; + signal: "mouse,up,1"; + source: "elm.image.done_bg"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.image.done_bg", st, 30, vl); + if (!strcmp(st, "press")) + set_state(PART:"elm.image.done_bg", "default", 0.0); + } + } + program { name: "show,picker"; + signal: "show,picker,signal"; + transition: LINEAR 0.4; + action: STATE_SET "show" 0.0; + target: "bg"; + target: "elm.image.panel"; + target: "elm.swallow.content"; + } + program { name: "show,picker_delay"; + signal: "show,picker_delay,signal"; + action: STATE_SET "show" 0.0; + in: 0.5 0.0; + target: "bg"; + target: "elm.image.panel"; + target: "elm.swallow.content"; + } + program { name: "hide,picker"; + signal: "hide,picker,signal"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "elm.image.panel"; + target: "elm.swallow.content"; + } + program { name: "show,prev_button"; + signal: "show,prev_button,signal"; + action: STATE_SET "visible" 0.0; + target: "elm.image.prev_bg"; + target: "elm.image.prev_arrow"; + } + program { name: "hide,prev_button"; + signal: "hide,prev_button,signal"; + action: STATE_SET "default" 0.0; + target: "elm.image.prev_bg"; + target: "elm.image.prev_arrow"; + } + program { name: "enable,prev_button"; + signal: "enable,prev_button,signal"; + action: STATE_SET "visible" 0.0; + target: "elm.image.prev_bg"; + target: "elm.image.prev_arrow"; + } + program { name: "disable,prev_button"; + signal: "disable,prev_button,signal"; + action: STATE_SET "disable" 0.0; + target: "elm.image.prev_bg"; + target: "elm.image.prev_arrow"; + } + program { name: "show,next_button"; + signal: "show,next_button,signal"; + action: STATE_SET "visible" 0.0; + target: "elm.image.next_bg"; + target: "elm.image.next_arrow"; + } + program { name: "hide,next_button"; + signal: "hide,next_button,signal"; + action: STATE_SET "default" 0.0; + target: "elm.image.next_bg"; + target: "elm.image.next_arrow"; + } + program { name: "enable,next_button"; + signal: "enable,next_button,signal"; + action: STATE_SET "visible" 0.0; + target: "elm.image.next_bg"; + target: "elm.image.next_arrow"; + } + program { name: "disable,next_button"; + signal: "disable,next_button,signal"; + action: STATE_SET "disable" 0.0; + target: "elm.image.next_bg"; + target: "elm.image.next_arrow"; + } + program { name: "show,imf_panel"; + signal: "show,imf_panel,signal"; + action: STATE_SET "imf_panel" 0.0; + target: "bg"; + target: "elm.image.panel"; + target: "elm.swallow.content"; + } + } + } +} + diff --git a/tizen_src/impl/resource/images/I01_picker_arrow_left.png b/tizen_src/impl/resource/images/I01_picker_arrow_left.png new file mode 100755 index 0000000000000000000000000000000000000000..205ecacf10aa4ceb2d5e3dc0fd3f41afb115cf25 GIT binary patch literal 3265 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 literal 0 HcmV?d00001 diff --git a/tizen_src/impl/resource/images/I01_picker_arrow_right.png b/tizen_src/impl/resource/images/I01_picker_arrow_right.png new file mode 100755 index 0000000000000000000000000000000000000000..9a89ec59c776913de72d8f27fd4b5f9a24e96b1e GIT binary patch literal 3270 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 literal 0 HcmV?d00001 diff --git a/tizen_src/impl/resource/images/I01_picker_btn_02_press.png b/tizen_src/impl/resource/images/I01_picker_btn_02_press.png new file mode 100755 index 0000000000000000000000000000000000000000..a8168e14e186b5007b22f80f48d3ea69d028dab3 GIT binary patch literal 3034 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 literal 0 HcmV?d00001 diff --git a/tizen_src/impl/resource/images/I01_picker_btn_normal.png b/tizen_src/impl/resource/images/I01_picker_btn_normal.png new file mode 100755 index 0000000000000000000000000000000000000000..b94dffabae3a7158398eae42932f14f9219237e8 GIT binary patch literal 3005 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 literal 0 HcmV?d00001 diff --git a/tizen_src/impl/resource/images/I01_picker_panel_bg.png b/tizen_src/impl/resource/images/I01_picker_panel_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..e274bca01b9eb8bb9726ee049c163643b8694e56 GIT binary patch literal 2798 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 AegFUf literal 0 HcmV?d00001 diff --git a/tizen_src/impl/web_contents_delegate_efl.cc b/tizen_src/impl/web_contents_delegate_efl.cc old mode 100644 new mode 100755 index 682a06a..2846ddf --- a/tizen_src/impl/web_contents_delegate_efl.cc +++ b/tizen_src/impl/web_contents_delegate_efl.cc @@ -438,4 +438,13 @@ void WebContentsDelegateEfl::RunFileChooser(WebContents* web_contents, const Fil web_view_->ShowFileChooser(params); } +content::ColorChooser* WebContentsDelegateEfl::OpenColorChooser( + WebContents* web_contents, + SkColor color, + const std::vector& suggestions) { + web_view_->RequestColorPicker(SkColorGetR(color), SkColorGetG(color), SkColorGetB(color), SkColorGetA(color)); + + // FIXME : DJKim : not implemented yet + return NULL; +} } //namespace content diff --git a/tizen_src/impl/web_contents_delegate_efl.h b/tizen_src/impl/web_contents_delegate_efl.h old mode 100644 new mode 100755 index 7d9834b..86d047d --- a/tizen_src/impl/web_contents_delegate_efl.h +++ b/tizen_src/impl/web_contents_delegate_efl.h @@ -144,6 +144,7 @@ class WebContentsDelegateEfl int32 line_no, const base::string16& source_id) OVERRIDE; void RunFileChooser(WebContents* web_contents, const FileChooserParams& params); + ColorChooser* OpenColorChooser(WebContents* web_contents, SkColor color, const std::vector& suggestions); private: void OnGetContentSecurityPolicy(IPC::Message* reply_msg); -- 2.7.4