diff --git a/src/main/java/workbench/gui/actions/SearchDbExplorerProcedure.java b/src/main/java/workbench/gui/actions/SearchDbExplorerProcedure.java new file mode 100644 index 0000000..c89802a --- /dev/null +++ b/src/main/java/workbench/gui/actions/SearchDbExplorerProcedure.java @@ -0,0 +1,30 @@ +package workbench.gui.actions; + +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; + +import javax.swing.KeyStroke; + +import workbench.gui.dbobjects.DbObjectSourcePanel; +import workbench.gui.dbobjects.ProcedureListPanel; +import workbench.resource.ResourceMgr; + +public class SearchDbExplorerProcedure extends WbAction{ + private ProcedureListPanel procedureList; + private DbObjectSourcePanel dbObj; + + public SearchDbExplorerProcedure(ProcedureListPanel procedureList, DbObjectSourcePanel dbObj) + { + super(); + this.procedureList = procedureList; + this.dbObj = dbObj; + + this.initMenuDefinition("MnuTxtSearchProcedure", KeyStroke.getKeyStroke(KeyEvent.VK_F8, 0)); + this.setMenuItemName(ResourceMgr.MNU_TXT_EDIT); + } + + public void executeAction(ActionEvent e) + { + this.procedureList.search(this.dbObj.getSelectedText()); + } +} diff --git a/src/main/java/workbench/gui/actions/SearchDbExplorerTable.java b/src/main/java/workbench/gui/actions/SearchDbExplorerTable.java new file mode 100644 index 0000000..8ec4cb8 --- /dev/null +++ b/src/main/java/workbench/gui/actions/SearchDbExplorerTable.java @@ -0,0 +1,31 @@ +package workbench.gui.actions; + +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; + +import javax.swing.KeyStroke; + +import workbench.gui.dbobjects.DbObjectSourcePanel; +import workbench.gui.dbobjects.TableListPanel; +import workbench.resource.ResourceMgr; + +public class SearchDbExplorerTable extends WbAction +{ + private TableListPanel tableList; + private DbObjectSourcePanel dbObj; + + public SearchDbExplorerTable(TableListPanel tableList, DbObjectSourcePanel dbObj) + { + super(); + this.tableList = tableList; + this.dbObj = dbObj; + + this.initMenuDefinition("MnuTxtSearchTable", KeyStroke.getKeyStroke(KeyEvent.VK_F9, 0)); + this.setMenuItemName(ResourceMgr.MNU_TXT_EDIT); + } + + public void executeAction(ActionEvent e) + { + this.tableList.search(this.dbObj.getSelectedText()); + } +} diff --git a/src/main/java/workbench/gui/components/QuickFilterPanel.java b/src/main/java/workbench/gui/components/QuickFilterPanel.java index ce8ffd4..eacf38a 100644 --- a/src/main/java/workbench/gui/components/QuickFilterPanel.java +++ b/src/main/java/workbench/gui/components/QuickFilterPanel.java @@ -408,7 +408,7 @@ applyFilter(null, false); } - private void applyFilter(String filterExpression, boolean storeInHistory) + public void applyFilter(String filterExpression, boolean storeInHistory) { JTextField editor = (JTextField)filterValue.getEditor().getEditorComponent(); int currentPos = editor.getCaretPosition(); diff --git a/src/main/java/workbench/gui/dbobjects/DbExplorerPanel.java b/src/main/java/workbench/gui/dbobjects/DbExplorerPanel.java index 2f9472a..e7bd7dd 100644 --- a/src/main/java/workbench/gui/dbobjects/DbExplorerPanel.java +++ b/src/main/java/workbench/gui/dbobjects/DbExplorerPanel.java @@ -153,9 +153,9 @@ setName("dbexplorer"); try { - tables = new TableListPanel(aParent); + tables = new TableListPanel(aParent, this); tables.setName("tablelistpanel"); - procs = new ProcedureListPanel(aParent); + procs = new ProcedureListPanel(aParent, this); this.searchPanel = new TableSearchPanel(tables); tabPane = new WbTabbedPane(JTabbedPane.TOP); tabPane.add(ResourceMgr.getString("TxtDbExplorerTables"), tables); @@ -257,6 +257,11 @@ LogMgr.logError(new CallerInfo(){}, "Could not initialize DbExplorerPanel", e); } } + + public JTabbedPane getTabPane() + { + return this.tabPane; + } @Override public void reload() diff --git a/src/main/java/workbench/gui/dbobjects/DbObjectSourcePanel.java b/src/main/java/workbench/gui/dbobjects/DbObjectSourcePanel.java index dd77b57..af4cf00 100644 --- a/src/main/java/workbench/gui/dbobjects/DbObjectSourcePanel.java +++ b/src/main/java/workbench/gui/dbobjects/DbObjectSourcePanel.java @@ -48,6 +48,8 @@ import workbench.gui.MainWindow; import workbench.gui.WbSwingUtilities; import workbench.gui.actions.ReloadAction; +import workbench.gui.actions.SearchDbExplorerProcedure; +import workbench.gui.actions.SearchDbExplorerTable; import workbench.gui.actions.WbAction; import workbench.gui.components.DropDownButton; import workbench.gui.components.FocusIndicator; @@ -90,6 +92,9 @@ private final String runScriptCommand = "run-script"; private String objectType; + private SearchDbExplorerTable searchTable; + private SearchDbExplorerProcedure searchProcedure; + public DbObjectSourcePanel(MainWindow window, Reloadable reloader) { super(new BorderLayout()); @@ -100,6 +105,47 @@ reloadSource.setEnabled(false); } } + + public DbObjectSourcePanel(MainWindow window, Reloadable reloader, ProcedureListPanel listPanel) + { + this(window, reloader); + this.searchProcedure = new SearchDbExplorerProcedure(listPanel, this); + } + + public DbObjectSourcePanel(MainWindow window, Reloadable reloader, TableListPanel listPanel) + { + this(window, reloader); + this.searchTable = new SearchDbExplorerTable(listPanel, this); + } + + public SearchDbExplorerProcedure getSearchProcedure() + { + return this.searchProcedure; + } + + public void setSearchProcedure(SearchDbExplorerProcedure proc) + { + this.searchProcedure = proc; + } + + public SearchDbExplorerTable getSearchTable() + { + return this.searchTable; + } + + public void setSearchTable(SearchDbExplorerTable table) + { + this.searchTable = table; + } + + public String getSelectedText() + { + if (this.sourceEditor.getSelectedText() != null) + { + return this.sourceEditor.getSelectedText(); + } + return this.sourceEditor.getWordAtCursor(); + } public Replaceable getEditor() { diff --git a/src/main/java/workbench/gui/dbobjects/ProcedureListPanel.java b/src/main/java/workbench/gui/dbobjects/ProcedureListPanel.java index c2518bd..1e6643d 100644 --- a/src/main/java/workbench/gui/dbobjects/ProcedureListPanel.java +++ b/src/main/java/workbench/gui/dbobjects/ProcedureListPanel.java @@ -76,6 +76,7 @@ import workbench.gui.actions.DropDbObjectAction; import workbench.gui.actions.ReloadAction; import workbench.gui.actions.ScriptDbObjectAction; +import workbench.gui.actions.SearchDbExplorerTable; import workbench.gui.actions.WbAction; import workbench.gui.actions.WbPluginProcedurePanelAction; import workbench.gui.components.DataStoreTableModel; @@ -160,12 +161,43 @@ private IsolationLevelChanger levelChanger = new IsolationLevelChanger(); private ProcedureChangeValidator validator = new ProcedureChangeValidator(); private AlterProcedureAction renameAction; + + private DbExplorerPanel panel; public ProcedureListPanel(MainWindow window) { super(); parentWindow = window; } + + public ProcedureListPanel(MainWindow window, DbExplorerPanel panel) + { + this(window); + this.panel = panel; + } + + public void search(String text) + { + if (text == null || text.equals("")) return; + Component comp = this.panel.getTabPane().getSelectedComponent(); + + this.panel.getTabPane().setSelectedComponent(this.panel.procs); + this.panel.panelSelected(); + this.findPanel.applyFilter(text, false); + + try + { + this.retrieveProcDefinition(this.getDefinition(0), true); + } + catch (Exception e) + { + this.panel.getTabPane().setSelectedComponent(comp); + this.panel.panelSelected(); + } + + this.findPanel.applyFilter("", false); + this.findPanel.setText(""); + } private void initGui() { @@ -198,7 +230,7 @@ } }; - source = new DbObjectSourcePanel(parentWindow, sourceReload); + source = new DbObjectSourcePanel(parentWindow, sourceReload, this); if (DbExplorerSettings.allowSourceEditing()) { source.allowEditing(true); @@ -293,6 +325,11 @@ } addDependencyPanelIfSupported(); + + source.sourceEditor.addPopupMenuItem(source.getSearchProcedure(), true); + source.setSearchTable(new SearchDbExplorerTable(panel.tables, source)); + source.sourceEditor.addPopupMenuItem(source.getSearchTable(), false); + Settings.getInstance().addPropertyChangeListener(this, DbExplorerSettings.PROP_ALLOW_SOURCE_EDITING); } diff --git a/src/main/java/workbench/gui/dbobjects/TableListPanel.java b/src/main/java/workbench/gui/dbobjects/TableListPanel.java index 5f8aff6..3fda576 100644 --- a/src/main/java/workbench/gui/dbobjects/TableListPanel.java +++ b/src/main/java/workbench/gui/dbobjects/TableListPanel.java @@ -121,6 +121,7 @@ import workbench.gui.actions.ReloadAction; import workbench.gui.actions.SchemaReportAction; import workbench.gui.actions.ScriptDbObjectAction; +import workbench.gui.actions.SearchDbExplorerProcedure; import workbench.gui.actions.SpoolDataAction; import workbench.gui.actions.ToggleTableSourceAction; import workbench.gui.actions.WbAction; @@ -248,6 +249,9 @@ private final int maxTypeItems = 25; private int currentRetrievalPanel = -1; + + private DbExplorerPanel panel; + private boolean added; // @@ -298,7 +302,7 @@ startRetrieveCurrentPanel(); }; - this.tableSource = new DbObjectSourcePanel(aParent, sourceReload); + this.tableSource = new DbObjectSourcePanel(aParent, sourceReload, this); this.tableSource.allowReformat(); if (DbExplorerSettings.allowSourceEditing()) { @@ -440,6 +444,36 @@ dependencyPanel = new ObjectDependencyPanel(); showObjectDefinitionPanels(false); } + + public TableListPanel(MainWindow aParent, DbExplorerPanel panel) throws Exception + { + this(aParent); + this.panel = panel; + } + + public void search(String text) + { + if (text == null || text.equals("")) return; + Component comp = this.panel.getTabPane().getSelectedComponent(); + + this.panel.getTabPane().setSelectedComponent(this.panel.tables); + this.panel.panelSelected(); + this.findPanel.applyFilter(text, false); + + try + { + this.tableList.changeSelection(0, 0, false, false); + this.valueChanged(new ListSelectionEvent(this.tableList.getSelectionModel(), 0, 0, false)); + } + catch (Exception e) + { + this.panel.getTabPane().setSelectedComponent(comp); + this.panel.panelSelected(); + } + + this.findPanel.applyFilter("", false); + this.findPanel.setText(""); + } private boolean getApplyFilterWhileTyping() { @@ -1171,6 +1205,14 @@ this.displayTab.addChangeListener(this); this.compileAction.setConnection(connection); initVertica(); + + if (!this.added) + { + this.tableSource.setSearchProcedure(new SearchDbExplorerProcedure(panel.procs, tableSource)); + this.tableSource.sourceEditor.addPopupMenuItem(tableSource.getSearchProcedure(), true); + this.tableSource.sourceEditor.addPopupMenuItem(tableSource.getSearchTable(), false); + this.added = true; + } } public boolean isReallyVisible() diff --git a/src/main/resources/language/wbstrings.properties b/src/main/resources/language/wbstrings.properties index cbe90c1..b4cc808 100644 --- a/src/main/resources/language/wbstrings.properties +++ b/src/main/resources/language/wbstrings.properties @@ -2193,6 +2193,8 @@ MnuTxtSaveDataAs=Sa&ve Data as MnuTxtSaveWorkspace=&Save Workspace MnuTxtSearchAll=Find in all tabs +MnuTxtSearchProcedure=Search and open procedure +MnuTxtSearchTable=Search and open table MnuTxtSchemaReport=Create Schema Report... MnuTxtScrollUp=Scroll up MnuTxtScrollDown=Scroll down diff --git a/src/main/resources/language/wbstrings_de.properties b/src/main/resources/language/wbstrings_de.properties index 535c97c..462a0c9 100644 --- a/src/main/resources/language/wbstrings_de.properties +++ b/src/main/resources/language/wbstrings_de.properties @@ -2171,6 +2171,8 @@ MnuTxtScrollUp=Aufw\u00e4rts Rollen MnuTxtScrollDown=Abw\u00e4rts Rollen MnuTxtSearchAll=Suche in allen Tabs +MnuTxtSearchProcedure=Suchen und \u00f6ffnen von Prozedur +MnuTxtSearchTable=Suchen und \u00f6ffnen von Tabelle MnuTxtSettings=Einstellungen MnuTxtSelectAll=Alles sele&ktieren MnuTextSelectInList=In Objektliste selektieren