forked from chromiumembedded/java-cef
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathContextMenuHandler.java
More file actions
101 lines (86 loc) · 3.7 KB
/
ContextMenuHandler.java
File metadata and controls
101 lines (86 loc) · 3.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights
// reserved. Use of this source code is governed by a BSD-style license that
// can be found in the LICENSE file.
package tests.detailed.handler;
import org.cef.browser.CefBrowser;
import org.cef.browser.CefFrame;
import org.cef.callback.CefContextMenuParams;
import org.cef.callback.CefMenuModel;
import org.cef.callback.CefMenuModel.MenuId;
import org.cef.handler.CefContextMenuHandler;
import java.awt.Frame;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import tests.detailed.dialog.SearchDialog;
import tests.detailed.dialog.ShowTextDialog;
public class ContextMenuHandler implements CefContextMenuHandler {
private final Frame owner_;
private Map<Integer, String> suggestions_ = new HashMap<Integer, String>();
public ContextMenuHandler(Frame owner) {
owner_ = owner;
}
@Override
public void onBeforeContextMenu(
CefBrowser browser, CefFrame frame, CefContextMenuParams params, CefMenuModel model) {
model.clear();
// Navigation menu
model.addItem(MenuId.MENU_ID_BACK, "Back");
model.setEnabled(MenuId.MENU_ID_BACK, browser.canGoBack());
model.addItem(MenuId.MENU_ID_FORWARD, "Forward");
model.setEnabled(MenuId.MENU_ID_FORWARD, browser.canGoForward());
model.addSeparator();
model.addItem(MenuId.MENU_ID_FIND, "Find...");
if (params.hasImageContents() && params.getSourceUrl() != null)
model.addItem(MenuId.MENU_ID_USER_FIRST, "Download Image...");
model.addItem(MenuId.MENU_ID_VIEW_SOURCE, "View Source...");
Vector<String> suggestions = new Vector<String>();
params.getDictionarySuggestions(suggestions);
// Spell checking menu
model.addSeparator();
if (suggestions.size() == 0) {
model.addItem(MenuId.MENU_ID_NO_SPELLING_SUGGESTIONS, "No suggestions");
model.setEnabled(MenuId.MENU_ID_NO_SPELLING_SUGGESTIONS, false);
return;
}
int id = MenuId.MENU_ID_SPELLCHECK_SUGGESTION_0;
for (String suggestedWord : suggestions) {
model.addItem(id, suggestedWord);
suggestions_.put(id, suggestedWord);
if (++id > MenuId.MENU_ID_SPELLCHECK_SUGGESTION_LAST) break;
}
}
@Override
public boolean onContextMenuCommand(CefBrowser browser, CefFrame frame,
CefContextMenuParams params, int commandId, int eventFlags) {
switch (commandId) {
case MenuId.MENU_ID_VIEW_SOURCE:
ShowTextDialog visitor =
new ShowTextDialog(owner_, "Source of \"" + browser.getURL() + "\"");
browser.getSource(visitor);
return true;
case MenuId.MENU_ID_FIND:
SearchDialog search = new SearchDialog(owner_, browser);
search.setVisible(true);
return true;
case MenuId.MENU_ID_USER_FIRST:
browser.startDownload(params.getSourceUrl());
return true;
default:
if (commandId >= MenuId.MENU_ID_SPELLCHECK_SUGGESTION_0) {
String newWord = suggestions_.get(commandId);
if (newWord != null) {
System.err.println(
"replacing " + params.getMisspelledWord() + " with " + newWord);
browser.replaceMisspelling(newWord);
return true;
}
}
return false;
}
}
@Override
public void onContextMenuDismissed(CefBrowser browser, CefFrame frame) {
suggestions_.clear();
}
}