diff --git a/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/options/JavaDebuggerOptionsPanelController.java b/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/options/JavaDebuggerOptionsPanelController.java --- a/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/options/JavaDebuggerOptionsPanelController.java +++ b/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/options/JavaDebuggerOptionsPanelController.java @@ -101,6 +101,11 @@ pcs.removePropertyChangeListener(l); } + @Override + public void handleSuccessfulSearch(String searchText) { + getPanel().handleSearch(searchText); + } + private JavaDebuggerPanel getPanel() { if (panel == null) { panel = new JavaDebuggerPanel(this); diff --git a/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/options/JavaDebuggerPanel.java b/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/options/JavaDebuggerPanel.java --- a/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/options/JavaDebuggerPanel.java +++ b/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/options/JavaDebuggerPanel.java @@ -175,6 +175,10 @@ categoryPanel.repaint(); } + public void handleSearch(String searchText) { + categoriesList.setSelectedIndex(1); + } + public void load() { for (StorablePanel p : categoryPanels) { p.load(); diff --git a/options.api/apichanges.xml b/options.api/apichanges.xml --- a/options.api/apichanges.xml +++ b/options.api/apichanges.xml @@ -75,6 +75,21 @@ + + + API to handle successfull search in some panel in options window + + + + + + Added API to handle successful search in some panel in options window. + By default no action is performed. Each implementor should make special actions, + for example to choose a specific sub-panel, if this is required. + + + + Annotation to register keywords for some panel in the Options dialog diff --git a/options.api/src/org/netbeans/modules/options/CategoryModel.java b/options.api/src/org/netbeans/modules/options/CategoryModel.java --- a/options.api/src/org/netbeans/modules/options/CategoryModel.java +++ b/options.api/src/org/netbeans/modules/options/CategoryModel.java @@ -369,6 +369,10 @@ return category.getCategoryName(); } + public void handleSuccessfulSearchInController(String searchText) { + create().handleSuccessfulSearch(searchText); + } + private synchronized OptionsPanelController create() { if (controller == null) { controller = category.create(); diff --git a/options.api/src/org/netbeans/modules/options/OptionsPanel.java b/options.api/src/org/netbeans/modules/options/OptionsPanel.java --- a/options.api/src/org/netbeans/modules/options/OptionsPanel.java +++ b/options.api/src/org/netbeans/modules/options/OptionsPanel.java @@ -136,7 +136,6 @@ private HashMap> categoryid2words = new HashMap>(); private HashMap> categoryid2tabs = new HashMap>(); private ArrayList disabledCategories = new ArrayList(); - private JTextField keymapsSearch = null; private ArrayList advancedFOs = new ArrayList(); private HashMap dublicateKeywordsFOs = new HashMap(); @@ -466,13 +465,6 @@ component = components[i]; String text; - if (component instanceof JLabel) { - text = ((JLabel) component).getText(); - // hack to search into Keymaps category - if(categoryID.equals("Keymaps") && text.equals("Search:")) { // NOI18N - keymapsSearch = (JTextField)((JLabel) component).getLabelFor(); - } - } if(component instanceof JTabbedPane) { if(categoryid2tabbedpane.get(categoryID) == null) { categoryid2tabbedpane.put(categoryID, (JTabbedPane)component); @@ -629,15 +621,13 @@ } else { setCurrentCategory(CategoryModel.getInstance().getCategory(id), null); } + CategoryModel.getInstance().getCurrent().handleSuccessfulSearchInController(searchText); } else { handleNotFound(id, exactCategory); } } else { handleNotFound(id, exactCategory); } - if (keymapsSearch != null) { - keymapsSearch.setText(searchText); - } } } @@ -721,9 +711,6 @@ } setCurrentCategory(CategoryModel.getInstance().getCurrent(), null); disabledCategories.clear(); - if(keymapsSearch != null) { - keymapsSearch.setText(""); //NOI18N - } } } diff --git a/options.api/src/org/netbeans/modules/options/TabbedController.java b/options.api/src/org/netbeans/modules/options/TabbedController.java --- a/options.api/src/org/netbeans/modules/options/TabbedController.java +++ b/options.api/src/org/netbeans/modules/options/TabbedController.java @@ -103,7 +103,7 @@ private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); private final ChangeListener tabbedPaneChangeListener = new ChangeListener() { public void stateChanged(ChangeEvent e) { - handleTabSwitched(); + handleTabSwitched(null); } }; @@ -170,6 +170,11 @@ return pane; } + @Override + public void handleSuccessfulSearch(String searchText) { + handleTabSwitched(searchText); + } + private void initTabbedPane() { if (pane != null) { pane.removeChangeListener(tabbedPaneChangeListener); @@ -178,13 +183,13 @@ pane.addTab(tabTitle, new JLabel(tabTitle)); } pane.addChangeListener(tabbedPaneChangeListener); - handleTabSwitched(); + handleTabSwitched(null); } } /** Replace placeholder with real panel and change help context. */ - private void handleTabSwitched() { + private void handleTabSwitched(String searchText) { final int selectedIndex = pane.getSelectedIndex(); if (selectedIndex != -1) { String tabTitle = pane.getTitleAt(selectedIndex); @@ -213,6 +218,9 @@ pane.setComponentAt(selectedIndex, scroll); controller.update(); } + if (searchText != null) { + controller.handleSuccessfulSearch(searchText); + } pcs.firePropertyChange(OptionsPanelController.PROP_HELP_CTX, null, null); } } diff --git a/options.api/src/org/netbeans/modules/options/advanced/AdvancedPanel.java b/options.api/src/org/netbeans/modules/options/advanced/AdvancedPanel.java --- a/options.api/src/org/netbeans/modules/options/advanced/AdvancedPanel.java +++ b/options.api/src/org/netbeans/modules/options/advanced/AdvancedPanel.java @@ -80,7 +80,7 @@ private String subpath; private ChangeListener changeListener = new ChangeListener () { public void stateChanged(ChangeEvent e) { - handleTabSwitched(); + handleTabSwitched(null); } }; @@ -155,7 +155,7 @@ tabbedPanel.addTab(category, new JLabel(category)); } tabbedPanel.addChangeListener(changeListener); - handleTabSwitched(); + handleTabSwitched(null); } public void setCurrentSubcategory(String path) { @@ -190,7 +190,7 @@ return categoryDisplayName; } - private void handleTabSwitched() { + private void handleTabSwitched(String searchText) { final int selectedIndex = tabbedPanel.getSelectedIndex() >= 0 ? tabbedPanel.getSelectedIndex() : -1; if (selectedIndex != -1) { String category = tabbedPanel.getTitleAt(selectedIndex); @@ -206,9 +206,16 @@ tabbedPanel.setComponentAt(tabbedPanel.getSelectedIndex(), scroll); } model.update(category); + if (searchText != null) { + model.getController(category).handleSuccessfulSearch(searchText); + } firePropertyChange (OptionsPanelController.PROP_HELP_CTX, null, null); } } + + void handleSearch(String searchText) { + handleTabSwitched(searchText); + } private class LookupListenerImpl implements LookupListener { public void resultChanged(LookupEvent ev) { diff --git a/options.api/src/org/netbeans/modules/options/advanced/AdvancedPanelController.java b/options.api/src/org/netbeans/modules/options/advanced/AdvancedPanelController.java --- a/options.api/src/org/netbeans/modules/options/advanced/AdvancedPanelController.java +++ b/options.api/src/org/netbeans/modules/options/advanced/AdvancedPanelController.java @@ -119,6 +119,11 @@ getAdvancedPanel().removeModelPropertyChangeListener(l); } + @Override + public void handleSuccessfulSearch(String searchText) { + getAdvancedPanel().handleSearch(searchText); + } + private AdvancedPanel advancedPanel; private synchronized AdvancedPanel getAdvancedPanel () { diff --git a/options.api/src/org/netbeans/modules/options/advanced/Model.java b/options.api/src/org/netbeans/modules/options/advanced/Model.java --- a/options.api/src/org/netbeans/modules/options/advanced/Model.java +++ b/options.api/src/org/netbeans/modules/options/advanced/Model.java @@ -346,6 +346,11 @@ public void removePropertyChangeListener(PropertyChangeListener l) { delegate.removePropertyChangeListener(l); } + + @Override + public void handleSuccessfulSearch(String searchText) { + delegate.handleSuccessfulSearch(searchText); + } } } diff --git a/options.api/src/org/netbeans/spi/options/OptionsPanelController.java b/options.api/src/org/netbeans/spi/options/OptionsPanelController.java --- a/options.api/src/org/netbeans/spi/options/OptionsPanelController.java +++ b/options.api/src/org/netbeans/spi/options/OptionsPanelController.java @@ -174,6 +174,16 @@ } /** + * Handle successful search in some panel in options window. + * By default no action is performed. Each implementor should make special + * actions, for example to choose a specific sub-panel, if this is required. + * @param searchText the text the user has entered in the search box in the options window. + * @since 1.30 + */ + public void handleSuccessfulSearch(String searchText) { + } + + /** * Returns visual component representing this options category. * This method is called before {@link #update} method. * diff --git a/options.keymap/src/org/netbeans/modules/options/keymap/KeymapPanel.java b/options.keymap/src/org/netbeans/modules/options/keymap/KeymapPanel.java --- a/options.keymap/src/org/netbeans/modules/options/keymap/KeymapPanel.java +++ b/options.keymap/src/org/netbeans/modules/options/keymap/KeymapPanel.java @@ -372,6 +372,10 @@ refreshProfileCombo (); } + public void handleSearch(String searchText) { + searchField.setText(searchText); + } + //controller method end diff --git a/options.keymap/src/org/netbeans/modules/options/keymap/KeymapPanelController.java b/options.keymap/src/org/netbeans/modules/options/keymap/KeymapPanelController.java --- a/options.keymap/src/org/netbeans/modules/options/keymap/KeymapPanelController.java +++ b/options.keymap/src/org/netbeans/modules/options/keymap/KeymapPanelController.java @@ -110,6 +110,11 @@ public void removePropertyChangeListener (PropertyChangeListener l) { getKeymapPanel ().removePropertyChangeListener (l); } + + @Override + public void handleSuccessfulSearch(String searchText) { + getKeymapPanel().handleSearch(searchText); + } private KeymapPanel keymapPanel; diff --git a/versioning.ui/src/org/netbeans/modules/versioning/ui/options/GeneralOptionsPanel.java b/versioning.ui/src/org/netbeans/modules/versioning/ui/options/GeneralOptionsPanel.java --- a/versioning.ui/src/org/netbeans/modules/versioning/ui/options/GeneralOptionsPanel.java +++ b/versioning.ui/src/org/netbeans/modules/versioning/ui/options/GeneralOptionsPanel.java @@ -88,6 +88,10 @@ super.removeNotify(); } + public void handleSearch(String searchText) { + cmbVersioningSystems.setSelectedIndex(1); + } + private void fillDisconnectedFolders () { if (cmbVersioningSystems.getSelectedItem() instanceof VersioningSystem) { String[] disconnected = Utils.getDisconnectedRoots(((VersioningSystem) cmbVersioningSystems.getSelectedItem())); diff --git a/versioning.ui/src/org/netbeans/modules/versioning/ui/options/GeneralOptionsPanelController.java b/versioning.ui/src/org/netbeans/modules/versioning/ui/options/GeneralOptionsPanelController.java --- a/versioning.ui/src/org/netbeans/modules/versioning/ui/options/GeneralOptionsPanelController.java +++ b/versioning.ui/src/org/netbeans/modules/versioning/ui/options/GeneralOptionsPanelController.java @@ -107,6 +107,11 @@ pcs.removePropertyChangeListener(l); } + @Override + public void handleSuccessfulSearch(String searchText) { + getPanel().handleSearch(searchText); + } + private Boolean validateFields() { return true; diff --git a/versioning.util/src/org/netbeans/modules/versioning/util/VcsAdvancedOptions.java b/versioning.util/src/org/netbeans/modules/versioning/util/VcsAdvancedOptions.java --- a/versioning.util/src/org/netbeans/modules/versioning/util/VcsAdvancedOptions.java +++ b/versioning.util/src/org/netbeans/modules/versioning/util/VcsAdvancedOptions.java @@ -102,6 +102,14 @@ panel.addPanel(category, controller.getComponent(masterLookup)); } } + + @Override + public void handleSuccessfulSearch(String searchText) { + if(initialized) { + panel.handleSearch(searchText); + categoryToController.get("General").handleSuccessfulSearch(searchText); + } + } public JComponent getComponent(Lookup masterLookup) { init(masterLookup); diff --git a/versioning.util/src/org/netbeans/modules/versioning/util/VcsAdvancedOptionsPanel.java b/versioning.util/src/org/netbeans/modules/versioning/util/VcsAdvancedOptionsPanel.java --- a/versioning.util/src/org/netbeans/modules/versioning/util/VcsAdvancedOptionsPanel.java +++ b/versioning.util/src/org/netbeans/modules/versioning/util/VcsAdvancedOptionsPanel.java @@ -72,6 +72,10 @@ } } + void handleSearch(String searchText) { + versioningSystemsList.setSelectedValue("General", true); + } + /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is