OLD | NEW |
| (Empty) |
1 // Copyright 2014 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 "chrome/browser/renderer_context_menu/spellchecker_submenu_observer.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "base/prefs/pref_service.h" | |
9 #include "chrome/app/chrome_command_ids.h" | |
10 #include "chrome/browser/renderer_context_menu/render_view_context_menu.h" | |
11 #include "chrome/browser/renderer_context_menu/spelling_bubble_model.h" | |
12 #include "chrome/browser/spellchecker/spellcheck_platform.h" | |
13 #include "chrome/common/chrome_switches.h" | |
14 #include "chrome/common/pref_names.h" | |
15 #include "chrome/common/spellcheck_messages.h" | |
16 #include "chrome/grit/generated_resources.h" | |
17 #include "components/user_prefs/user_prefs.h" | |
18 #include "content/public/browser/render_view_host.h" | |
19 #include "content/public/browser/render_widget_host_view.h" | |
20 #include "ui/base/l10n/l10n_util.h" | |
21 #include "ui/base/models/simple_menu_model.h" | |
22 | |
23 using content::BrowserThread; | |
24 | |
25 namespace { | |
26 | |
27 PrefService* GetPrefs(content::BrowserContext* context) { | |
28 return user_prefs::UserPrefs::Get(context); | |
29 } | |
30 | |
31 } | |
32 | |
33 SpellCheckerSubMenuObserver::SpellCheckerSubMenuObserver( | |
34 RenderViewContextMenuProxy* proxy, | |
35 ui::SimpleMenuModel::Delegate* delegate, | |
36 int group) | |
37 : proxy_(proxy), | |
38 submenu_model_(delegate) { | |
39 DCHECK(proxy_); | |
40 } | |
41 | |
42 SpellCheckerSubMenuObserver::~SpellCheckerSubMenuObserver() { | |
43 } | |
44 | |
45 void SpellCheckerSubMenuObserver::InitMenu( | |
46 const content::ContextMenuParams& params) { | |
47 DCHECK_CURRENTLY_ON(BrowserThread::UI); | |
48 | |
49 // Add an item that toggles the spelling panel. | |
50 submenu_model_.AddCheckItem( | |
51 IDC_SPELLPANEL_TOGGLE, | |
52 l10n_util::GetStringUTF16( | |
53 spellcheck_platform::SpellingPanelVisible() ? | |
54 IDS_CONTENT_CONTEXT_HIDE_SPELLING_PANEL : | |
55 IDS_CONTENT_CONTEXT_SHOW_SPELLING_PANEL)); | |
56 submenu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | |
57 | |
58 // Add a 'Check Spelling While Typing' item in the sub menu. | |
59 submenu_model_.AddCheckItem( | |
60 IDC_CHECK_SPELLING_WHILE_TYPING, | |
61 l10n_util::GetStringUTF16( | |
62 IDS_CONTENT_CONTEXT_CHECK_SPELLING_WHILE_TYPING)); | |
63 | |
64 proxy_->AddSubMenu( | |
65 IDC_SPELLCHECK_MENU, | |
66 l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_SPELLCHECK_MENU), | |
67 &submenu_model_); | |
68 } | |
69 | |
70 bool SpellCheckerSubMenuObserver::IsCommandIdSupported(int command_id) { | |
71 switch (command_id) { | |
72 case IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS: | |
73 // Return false so RenderViewContextMenu can handle this item because it | |
74 // is hard for this class to handle it. | |
75 return false; | |
76 | |
77 case IDC_CHECK_SPELLING_WHILE_TYPING: | |
78 case IDC_SPELLPANEL_TOGGLE: | |
79 case IDC_SPELLCHECK_MENU: | |
80 case IDC_CONTENT_CONTEXT_SPELLING_TOGGLE: | |
81 return true; | |
82 } | |
83 | |
84 return false; | |
85 } | |
86 | |
87 bool SpellCheckerSubMenuObserver::IsCommandIdChecked(int command_id) { | |
88 DCHECK(IsCommandIdSupported(command_id)); | |
89 | |
90 // Check box for 'Check Spelling while typing'. | |
91 if (command_id == IDC_CHECK_SPELLING_WHILE_TYPING) { | |
92 content::BrowserContext* context = proxy_->GetBrowserContext(); | |
93 DCHECK(context); | |
94 return GetPrefs(context)->GetBoolean(prefs::kEnableContinuousSpellcheck); | |
95 } | |
96 | |
97 return false; | |
98 } | |
99 | |
100 bool SpellCheckerSubMenuObserver::IsCommandIdEnabled(int command_id) { | |
101 DCHECK(IsCommandIdSupported(command_id)); | |
102 | |
103 switch (command_id) { | |
104 case IDC_CHECK_SPELLING_WHILE_TYPING: | |
105 case IDC_SPELLPANEL_TOGGLE: | |
106 case IDC_SPELLCHECK_MENU: | |
107 case IDC_CONTENT_CONTEXT_SPELLING_TOGGLE: | |
108 return true; | |
109 } | |
110 | |
111 return false; | |
112 } | |
113 | |
114 void SpellCheckerSubMenuObserver::ExecuteCommand(int command_id) { | |
115 DCHECK(IsCommandIdSupported(command_id)); | |
116 | |
117 content::RenderViewHost* rvh = proxy_->GetRenderViewHost(); | |
118 content::BrowserContext* context = proxy_->GetBrowserContext(); | |
119 DCHECK(context); | |
120 switch (command_id) { | |
121 case IDC_CHECK_SPELLING_WHILE_TYPING: | |
122 GetPrefs(context)->SetBoolean( | |
123 prefs::kEnableContinuousSpellcheck, | |
124 !GetPrefs(context)->GetBoolean(prefs::kEnableContinuousSpellcheck)); | |
125 break; | |
126 | |
127 case IDC_SPELLPANEL_TOGGLE: | |
128 rvh->Send(new SpellCheckMsg_ToggleSpellPanel( | |
129 rvh->GetRoutingID(), spellcheck_platform::SpellingPanelVisible())); | |
130 break; | |
131 } | |
132 } | |
OLD | NEW |