source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/MenuItemSearchDialog.java@ 9372

Last change on this file since 9372 was 9372, checked in by simon04, 9 years ago

Checkstyle

File size: 4.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Component;
7import java.awt.Dimension;
8import java.awt.event.ActionEvent;
9import java.awt.event.ActionListener;
10import java.awt.event.KeyEvent;
11
12import javax.swing.DefaultListCellRenderer;
13import javax.swing.DefaultListSelectionModel;
14import javax.swing.JLabel;
15import javax.swing.JList;
16import javax.swing.JMenuItem;
17import javax.swing.ListCellRenderer;
18
19import org.openstreetmap.josm.Main;
20import org.openstreetmap.josm.actions.JosmAction;
21import org.openstreetmap.josm.gui.ExtendedDialog;
22import org.openstreetmap.josm.gui.MainMenu;
23import org.openstreetmap.josm.gui.widgets.SearchTextResultListPanel;
24import org.openstreetmap.josm.tools.Shortcut;
25
26public final class MenuItemSearchDialog extends ExtendedDialog {
27
28 private final Selector selector;
29 private static final MenuItemSearchDialog INSTANCE = new MenuItemSearchDialog(Main.main.menu);
30
31 private MenuItemSearchDialog(MainMenu menu) {
32 super(Main.parent, tr("Search menu items"), new String[]{tr("Select"), tr("Cancel")});
33 this.selector = new Selector(menu);
34 this.selector.setDblClickListener(new ActionListener() {
35 @Override
36 public void actionPerformed(ActionEvent e) {
37 buttonAction(0, null);
38 }
39 });
40 setContent(selector);
41 setPreferredSize(new Dimension(600, 300));
42 }
43
44 /**
45 * Returns the unique instance of {@code MenuItemSearchDialog}.
46 *
47 * @return the unique instance of {@code MenuItemSearchDialog}.
48 */
49 public static synchronized MenuItemSearchDialog getInstance() {
50 return INSTANCE;
51 }
52
53 @Override
54 public ExtendedDialog showDialog() {
55 selector.init();
56 super.showDialog();
57 selector.clearSelection();
58 return this;
59 }
60
61 @Override
62 protected void buttonAction(int buttonIndex, ActionEvent evt) {
63 super.buttonAction(buttonIndex, evt);
64 if (buttonIndex == 0 && selector.getSelectedItem() != null && selector.getSelectedItem().isEnabled()) {
65 selector.getSelectedItem().getAction().actionPerformed(evt);
66 }
67 }
68
69 private static class Selector extends SearchTextResultListPanel<JMenuItem> {
70
71 private final MainMenu menu;
72
73 Selector(MainMenu menu) {
74 super();
75 this.menu = menu;
76 lsResult.setCellRenderer(new CellRenderer());
77 lsResult.setSelectionModel(new DefaultListSelectionModel() {
78
79 });
80 }
81
82 public JMenuItem getSelectedItem() {
83 final JMenuItem selected = lsResult.getSelectedValue();
84 if (selected != null) {
85 return selected;
86 } else if (!lsResultModel.isEmpty()) {
87 return lsResultModel.getElementAt(0);
88 } else {
89 return null;
90 }
91 }
92
93 @Override
94 protected void filterItems() {
95 lsResultModel.setItems(menu.findMenuItems(edSearchText.getText(), true));
96 }
97 }
98
99 private static class CellRenderer implements ListCellRenderer<JMenuItem> {
100
101 private final DefaultListCellRenderer def = new DefaultListCellRenderer();
102
103 @Override
104 public Component getListCellRendererComponent(JList<? extends JMenuItem> list, JMenuItem value, int index,
105 boolean isSelected, boolean cellHasFocus) {
106 final JLabel label = (JLabel) def.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
107 label.setText(value.getText());
108 label.setIcon(value.getIcon());
109 label.setEnabled(value.isEnabled());
110 final JMenuItem item = new JMenuItem(value.getText());
111 item.setAction(value.getAction());
112 if (isSelected) {
113 item.setBackground(list.getSelectionBackground());
114 item.setForeground(list.getSelectionForeground());
115 } else {
116 item.setBackground(list.getBackground());
117 item.setForeground(list.getForeground());
118 }
119 return item;
120 }
121 }
122
123 public static class Action extends JosmAction {
124
125 public Action() {
126 super(tr("Search menu items"), "dialogs/search", null,
127 Shortcut.registerShortcut("help:search-items", "Search menu items", KeyEvent.VK_SPACE, Shortcut.CTRL), false);
128 }
129
130 @Override
131 public void actionPerformed(ActionEvent e) {
132 MenuItemSearchDialog.getInstance().showDialog();
133 }
134 }
135}
Note: See TracBrowser for help on using the repository browser.