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

Last change on this file since 10465 was 9410, checked in by simon04, 8 years ago

see #12224 - Search menu items: do not overwrite toolbar action dialogs/search

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