[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be | ||||
3 | // found in the LICENSE file. | ||||
4 | |||||
5 | #include "content/renderer/renderer_date_time_picker.h" | ||||
6 | |||||
[email protected] | 21aa9968 | 2013-06-11 07:17:01 | [diff] [blame] | 7 | #include "base/strings/string_util.h" |
[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 8 | #include "content/common/view_messages.h" |
[email protected] | 6e08bfb | 2013-12-07 02:56:17 | [diff] [blame] | 9 | #include "content/renderer/date_time_suggestion_builder.h" |
[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 10 | #include "content/renderer/render_view_impl.h" |
[email protected] | 2255a933 | 2013-06-17 05:12:31 | [diff] [blame] | 11 | #include "third_party/WebKit/public/web/WebDateTimeChooserCompletion.h" |
12 | #include "third_party/WebKit/public/web/WebDateTimeChooserParams.h" | ||||
13 | #include "third_party/WebKit/public/web/WebDateTimeInputType.h" | ||||
[email protected] | e807256 | 2013-12-04 06:04:13 | [diff] [blame] | 14 | #include "ui/base/ime/text_input_type.h" |
[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 15 | |
[email protected] | 180ef24 | 2013-11-07 06:50:46 | [diff] [blame] | 16 | using blink::WebString; |
[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 17 | |
[email protected] | 1ff42797 | 2013-02-07 21:14:07 | [diff] [blame] | 18 | namespace content { |
19 | |||||
[email protected] | 94be485 | 2013-12-06 07:54:41 | [diff] [blame] | 20 | static ui::TextInputType ToTextInputType(int type) { |
21 | switch (type) { | ||||
22 | case blink::WebDateTimeInputTypeDate: | ||||
23 | return ui::TEXT_INPUT_TYPE_DATE; | ||||
24 | break; | ||||
25 | case blink::WebDateTimeInputTypeDateTime: | ||||
26 | return ui::TEXT_INPUT_TYPE_DATE_TIME; | ||||
27 | break; | ||||
28 | case blink::WebDateTimeInputTypeDateTimeLocal: | ||||
29 | return ui::TEXT_INPUT_TYPE_DATE_TIME_LOCAL; | ||||
30 | break; | ||||
31 | case blink::WebDateTimeInputTypeMonth: | ||||
32 | return ui::TEXT_INPUT_TYPE_MONTH; | ||||
33 | break; | ||||
34 | case blink::WebDateTimeInputTypeTime: | ||||
35 | return ui::TEXT_INPUT_TYPE_TIME; | ||||
36 | break; | ||||
37 | case blink::WebDateTimeInputTypeWeek: | ||||
38 | return ui::TEXT_INPUT_TYPE_WEEK; | ||||
39 | break; | ||||
40 | case blink::WebDateTimeInputTypeNone: | ||||
41 | default: | ||||
42 | return ui::TEXT_INPUT_TYPE_NONE; | ||||
43 | } | ||||
44 | } | ||||
[email protected] | e807256 | 2013-12-04 06:04:13 | [diff] [blame] | 45 | |
[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 46 | RendererDateTimePicker::RendererDateTimePicker( |
47 | RenderViewImpl* sender, | ||||
[email protected] | 180ef24 | 2013-11-07 06:50:46 | [diff] [blame] | 48 | const blink::WebDateTimeChooserParams& params, |
49 | blink::WebDateTimeChooserCompletion* completion) | ||||
[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 50 | : RenderViewObserver(sender), |
51 | chooser_params_(params), | ||||
[email protected] | e807256 | 2013-12-04 06:04:13 | [diff] [blame] | 52 | chooser_completion_(completion) { |
[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 53 | } |
54 | |||||
55 | RendererDateTimePicker::~RendererDateTimePicker() { | ||||
56 | } | ||||
57 | |||||
[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 58 | bool RendererDateTimePicker::Open() { |
[email protected] | 1ff42797 | 2013-02-07 21:14:07 | [diff] [blame] | 59 | ViewHostMsg_DateTimeDialogValue_Params message; |
[email protected] | 94be485 | 2013-12-06 07:54:41 | [diff] [blame] | 60 | message.dialog_type = ToTextInputType(chooser_params_.type); |
[email protected] | e807256 | 2013-12-04 06:04:13 | [diff] [blame] | 61 | message.dialog_value = chooser_params_.doubleValue; |
[email protected] | 2deae8c4 | 2013-06-04 16:38:08 | [diff] [blame] | 62 | message.minimum = chooser_params_.minimum; |
63 | message.maximum = chooser_params_.maximum; | ||||
[email protected] | ee59cbec | 2013-08-16 14:59:09 | [diff] [blame] | 64 | message.step = chooser_params_.step; |
[email protected] | 6e08bfb | 2013-12-07 02:56:17 | [diff] [blame] | 65 | for (size_t i = 0; i < chooser_params_.suggestions.size(); i++) { |
66 | message.suggestions.push_back( | ||||
67 | DateTimeSuggestionBuilder::Build(chooser_params_.suggestions[i])); | ||||
68 | } | ||||
[email protected] | 1ff42797 | 2013-02-07 21:14:07 | [diff] [blame] | 69 | Send(new ViewHostMsg_OpenDateTimeDialog(routing_id(), message)); |
[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 70 | return true; |
71 | } | ||||
72 | |||||
73 | bool RendererDateTimePicker::OnMessageReceived( | ||||
74 | const IPC::Message& message) { | ||||
75 | bool handled = true; | ||||
76 | IPC_BEGIN_MESSAGE_MAP(RendererDateTimePicker, message) | ||||
77 | IPC_MESSAGE_HANDLER(ViewMsg_ReplaceDateTime, OnReplaceDateTime) | ||||
78 | IPC_MESSAGE_HANDLER(ViewMsg_CancelDateTimeDialog, OnCancel) | ||||
79 | IPC_MESSAGE_UNHANDLED(handled = false) | ||||
80 | IPC_END_MESSAGE_MAP() | ||||
81 | return handled; | ||||
82 | } | ||||
83 | |||||
[email protected] | e807256 | 2013-12-04 06:04:13 | [diff] [blame] | 84 | void RendererDateTimePicker::OnReplaceDateTime(double value) { |
[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 85 | if (chooser_completion_) |
[email protected] | e807256 | 2013-12-04 06:04:13 | [diff] [blame] | 86 | chooser_completion_->didChooseValue(value); |
87 | #if defined(OS_ANDROID) | ||||
88 | static_cast<RenderViewImpl*>(render_view())->DismissDateTimeDialog(); | ||||
89 | #endif | ||||
[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 90 | } |
91 | |||||
92 | void RendererDateTimePicker::OnCancel() { | ||||
93 | if (chooser_completion_) | ||||
94 | chooser_completion_->didCancelChooser(); | ||||
[email protected] | e807256 | 2013-12-04 06:04:13 | [diff] [blame] | 95 | #if defined(OS_ANDROID) |
96 | static_cast<RenderViewImpl*>(render_view())->DismissDateTimeDialog(); | ||||
97 | #endif | ||||
[email protected] | b18583c | 2012-12-18 06:55:27 | [diff] [blame] | 98 | } |
99 | |||||
100 | } // namespace content |