static const unsigned maxDateStringLength = 10;
static const char defaultDatetimeFormat[] = "%Y/%m/%d %H:%M";
+struct dateTimeValue {
+ char year[maxDatetimeLength];
+ char mon[maxDatetimeLength];
+ char day[maxDatetimeLength];
+ char hour[maxDatetimeLength];
+ char min[maxDatetimeLength];
+ char sec[maxDatetimeLength];
+};
+
struct InputPicker::Layout {
Layout(Evas_Object *ewkView)
: ewk_view_(ewkView)
}
#endif
+#if defined(OS_TIZEN)
void InputPicker::showDatePicker(
- ui::TextInputType input_type, double input_date) {
-
+ ui::TextInputType input_type, std::string input_date)
+#else
+void InputPicker::showDatePicker(
+ ui::TextInputType input_type, double input_date)
+#endif
+{
web_view_.ExecuteEditCommand("Unselect", 0);
+ time_t curTime;
+ time(&curTime);
+ struct tm* currentTime = localtime(&curTime);
+
+#if defined(OS_TIZEN)
+ dateTimeValue dateString;
+ memset(&dateString, 0, sizeof(dateTimeValue));
+
+ if (input_date.c_str() && strlen(input_date.c_str())) {
+ if(input_type == ui::TEXT_INPUT_TYPE_WEEK) {
+
+ char tempDateValue[maxDatetimeLength] = {0};
+ snprintf(tempDateValue, maxDatetimeLength, "%s", input_date.c_str());
+
+ char* token = strtok(tempDateValue, "-");
+ int year = atoi(token);
+ token = strtok(0, "W");
+ int weekOfYear = atoi(token);
+
+ snprintf(tempDateValue, maxDatetimeLength, "01/01/%d 0:00", year);
+
+ base::Time reference_time;
+ base::Time::FromString(tempDateValue, &reference_time);
+ reference_time += base::TimeDelta::FromDays((weekOfYear-1)*7);
+
+ time_t cur_time = reference_time.ToTimeT();
+ struct tm *convertTime = localtime(&cur_time);
+
+ if(convertTime->tm_wday)
+ {
+ int dayDelta = 7-convertTime->tm_wday;
+ reference_time += base::TimeDelta::FromDays(dayDelta);
+ cur_time = reference_time.ToTimeT();
+ convertTime = localtime(&cur_time);
+ }
+
+ currentTime->tm_year = convertTime->tm_year;
+ currentTime->tm_mon = convertTime->tm_mon;
+ currentTime->tm_mday = convertTime->tm_mday;
+ }
+ else {
+ char tempValue[maxDatetimeLength] = {0};
+ snprintf(tempValue, maxDatetimeLength, "%s", input_date.c_str());
+ char* token = strtok(tempValue,"-");
+
+ if (token)
+ strncpy(dateString.year, token, maxDatetimeLength);
+ token = strtok(0, "-");
+ if (token)
+ strncpy(dateString.mon, token, maxDatetimeLength);
+ token = strtok(0, "-");
+ if (token)
+ strncpy(dateString.day, token, maxDatetimeLength);
+
+ if (dateString.year)
+ currentTime->tm_year = atoi(dateString.year);
+ if (dateString.mon)
+ currentTime->tm_mon = atoi(dateString.mon);
+ if (dateString.day)
+ currentTime->tm_mday = atoi(dateString.day);
+
+ currentTime->tm_year = currentTime->tm_year - 1900;
+ currentTime->tm_mon = currentTime->tm_mon - 1;
+
+ if (input_type == ui::TEXT_INPUT_TYPE_DATE_TIME_LOCAL ||
+ input_type == ui::TEXT_INPUT_TYPE_DATE_TIME_FIELD ||
+ input_type == ui::TEXT_INPUT_TYPE_DATE_TIME) {
+ char tempDateValue[maxDatetimeLength] = {0};
+ snprintf(tempDateValue, maxDatetimeLength, "%s", input_date.c_str());
+
+ token = strtok(tempDateValue, "T");
+ token = strtok(0, ":");
+ if (token)
+ strncpy(dateString.hour, token, maxDatetimeLength);
+ token = strtok(0, ":");
+ if (token)
+ strncpy(dateString.min, token, maxDatetimeLength);
+ if (dateString.hour)
+ currentTime->tm_hour = atoi(dateString.hour);
+ if (dateString.min)
+ currentTime->tm_min = atoi(dateString.min);
+ }
+
+ if (input_type == ui::TEXT_INPUT_TYPE_TIME) {
+ currentTime = localtime(&curTime);
+ char tempDateValue[maxDatetimeLength] = {0};
+ snprintf(tempDateValue, maxDatetimeLength, "%s", input_date.c_str());
+
+ token = strtok(tempDateValue, ":");
+ if (token)
+ strncpy(dateString.hour, token, maxDatetimeLength);
+ token = strtok(0, ":");
+ if (token)
+ strncpy(dateString.min, token, maxDatetimeLength);
+ if (dateString.hour)
+ currentTime->tm_hour = atoi(dateString.hour);
+ if (dateString.min)
+ currentTime->tm_min = atoi(dateString.min);
+ }
+ }
+ }
+#else
+ if (isnan(input_date)) {
+ time(&curTime);
+ currentTime = localtime(&curTime);
+ }
+ else {
+ base::Time doubleT = base::Time::FromDoubleT(input_date/1000);
+ curTime = doubleT.ToTimeT();
+ currentTime = localtime(&curTime);
+ currentTime->tm_hour = currentTime->tm_hour - 1;
+ }
+#endif
+
switch (input_type) {
case ui::TEXT_INPUT_TYPE_DATE:
- showDatePopup(input_date);
+ showDatePopup(currentTime);
break;
case ui::TEXT_INPUT_TYPE_DATE_TIME_FIELD:
case ui::TEXT_INPUT_TYPE_DATE_TIME:
- showDatetimePopup(input_date, false);
+ showDatetimePopup(currentTime, false /*datetime*/);
break;
case ui::TEXT_INPUT_TYPE_DATE_TIME_LOCAL:
- showDatetimePopup(input_date, true);
+ showDatetimePopup(currentTime, true /* datetime_local */);
break;
case ui::TEXT_INPUT_TYPE_TIME:
- showTimePopup(input_date);
+ showTimePopup(currentTime);
break;
case ui::TEXT_INPUT_TYPE_WEEK:
- showWeekPopup(input_date);
+ showWeekPopup(currentTime);
break;
case ui::TEXT_INPUT_TYPE_MONTH:
- showMonthPopup(input_date);
+ showMonthPopup(currentTime);
break;
default:
break;
}
-
}
void InputPicker::ShowColorPicker(int r, int g, int b, int alpha) {
}
#endif
-void InputPicker::showDatePopup(double input_date) {
- time_t cur_time;
- struct tm* currentTime;
-
- if (isnan(input_date)) {
- time(&cur_time);
- currentTime = localtime(&cur_time);
- } else {
- base::Time doubleT = base::Time::FromDoubleT(input_date/1000);
- cur_time = doubleT.ToTimeT();
- currentTime = localtime(&cur_time);
- }
-
+void InputPicker::showDatePopup(struct tm* currentTime) {
if (picker_layout_) {
// Just update the value.
elm_datetime_value_set(picker_layout_->datePicker, currentTime);
evas_object_show(picker_layout_->popup);
}
-void InputPicker::showWeekPopup(double input_date) {
- time_t cur_time;
- struct tm* currentTime;
-
- if (isnan(input_date)) {
- time(&cur_time);
- currentTime = localtime(&cur_time);
- } else {
- base::Time doubleT = base::Time::FromDoubleT(input_date/1000);
- cur_time = doubleT.ToTimeT();
- currentTime = localtime(&cur_time);
- }
-
+void InputPicker::showWeekPopup(struct tm* currentTime) {
if (picker_layout_) {
// Just update the value.
elm_datetime_value_set(picker_layout_->datePicker, currentTime);
evas_object_show(picker_layout_->popup);
}
-void InputPicker::showTimePopup(double input_date) {
- time_t cur_time;
- struct tm* currentTime;
-
- if (isnan(input_date)) {
- time(&cur_time);
- currentTime = localtime(&cur_time);
- } else {
- base::Time doubleT = base::Time::FromDoubleT(input_date/1000);
- cur_time = doubleT.ToTimeT();
- currentTime = localtime(&cur_time);
- currentTime->tm_hour = currentTime->tm_hour - 1;
- }
-
+void InputPicker::showTimePopup(struct tm* currentTime) {
if (picker_layout_) {
// Just update the value.
- elm_datetime_value_set(picker_layout_->datePicker, currentTime);
+ elm_datetime_value_set(picker_layout_->time_picker, currentTime);
evas_object_focus_set(picker_layout_->okButton, true);
return;
}
picker_layout_ = new InputPicker::Layout(ewk_view_);
- CreatePopupLayout(dgettext("WebKit","IDS_WEBVIEW_HEADER_SET_TIME"),
+ CreateTimePopupLayout(dgettext("WebKit","IDS_WEBVIEW_HEADER_SET_TIME"),
currentTime);
- elm_object_style_set(picker_layout_->datePicker, "time_layout");
picker_layout_->okButton = elm_button_add(picker_layout_->popup);
elm_object_style_set(picker_layout_->okButton, "popup");
evas_object_show(picker_layout_->popup);
}
-void InputPicker::showMonthPopup(double input_date) {
- time_t cur_time;
- struct tm* currentTime;
-
- if (isnan(input_date)) {
- time(&cur_time);
- currentTime = localtime(&cur_time);
- } else {
- base::Time doubleT = base::Time::FromDoubleT(input_date/1000);
- cur_time = doubleT.ToTimeT();
- currentTime = localtime(&cur_time);
- }
-
+void InputPicker::showMonthPopup(struct tm* currentTime) {
if (picker_layout_) {
// Just update the value.
elm_datetime_value_set(picker_layout_->datePicker, currentTime);
evas_object_show(picker_layout_->popup);
}
-void InputPicker::showDatetimePopup(double input_date, bool datetime_local) {
- time_t cur_time;
- struct tm* currentTime;
-
- if (isnan(input_date)) {
- time(&cur_time);
- currentTime = localtime(&cur_time);
- } else {
- base::Time doubleT = base::Time::FromDoubleT(input_date/1000);
- cur_time = doubleT.ToTimeT();
- currentTime = localtime(&cur_time);
- currentTime->tm_hour = currentTime->tm_hour - 2;
- }
-
+void InputPicker::showDatetimePopup(struct tm* currentTime, bool datetime_local) {
if (picker_layout_) {
// Just update the value.
picker_layout_->datetime_local = datetime_local;
}
elm_datetime_value_set(picker_layout_->datePicker, currentTime);
+
#if defined(OS_TIZEN_MOBILE)
evas_object_smart_callback_add(
picker_layout_->datePicker, "edit,end", endEditingCallback, 0);
#endif
}
+void InputPicker::CreateTimePopupLayout(const char* title, struct tm* currentTime) {
+ picker_layout_->popup = elm_popup_add(ewk_view_);
+ evas_object_size_hint_weight_set(
+ picker_layout_->popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_part_text_set(picker_layout_->popup, "title,text", title);
+
+#if defined(OS_TIZEN_MOBILE)
+ 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)(
+ picker_layout_->popup, EA_CALLBACK_BACK, handleBackKeyDatePicker, 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"));
+
+
+ picker_layout_->layout = elm_layout_add(picker_layout_->popup);
+ elm_layout_file_set(
+ picker_layout_->layout,
+ control_edj.AsUTF8Unsafe().c_str(),
+ "date_popup");
+ evas_object_size_hint_weight_set(
+ picker_layout_->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ picker_layout_->time_picker = elm_datetime_add(picker_layout_->layout);
+ elm_object_part_content_set(
+ picker_layout_->layout,
+ "elm.swallow.datetime",
+ picker_layout_->time_picker);
+
+ elm_object_style_set(picker_layout_->time_picker, "time_layout");
+
+ char* format = datetimeFormat();
+ if (format) {
+ elm_datetime_format_set(picker_layout_->time_picker, format);
+ free(format);
+ } else {
+ elm_datetime_format_set(picker_layout_->time_picker, defaultDatetimeFormat);
+ }
+
+ elm_datetime_value_set(picker_layout_->time_picker, currentTime);
+
+#if defined(OS_TIZEN_MOBILE)
+ evas_object_smart_callback_add(
+ picker_layout_->time_picker, "edit,end", endEditingCallback, 0);
+#endif
+}
+
void InputPicker::deletePopupLayout() {
if(picker_layout_->popup){
evas_object_del(picker_layout_->popup);
InputPicker* inputPicker = static_cast<InputPicker*>(data);
- elm_datetime_value_get(inputPicker->picker_layout_->datePicker, ¤tTime);
+ elm_datetime_value_get(inputPicker->picker_layout_->time_picker, ¤tTime);
mktime(¤tTime);
char dateStr[20] = { 0, };