diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/ObjectEditorPageControl.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/ObjectEditorPageControl.java index 1d7de25f4675bf1f51513c3dc5404f8c0a74bda4..b37d13459744ae366f95b2f946a647830576c892 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/ObjectEditorPageControl.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/ObjectEditorPageControl.java @@ -27,6 +27,7 @@ import org.jkiss.dbeaver.model.edit.DBEObjectManager; import org.jkiss.dbeaver.model.exec.DBCExecutionContext; import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.registry.editor.EntityEditorsRegistry; +import org.jkiss.dbeaver.ui.ISearchExecutor; import org.jkiss.dbeaver.ui.editors.IDatabaseEditor; public class ObjectEditorPageControl extends ProgressPageControl { @@ -101,6 +102,24 @@ public class ObjectEditorPageControl extends ProgressPageControl { } } + @Override + protected ISearchExecutor getSearchRunner() { + ISearchExecutor searchRunner = super.getSearchRunner(); + if (searchRunner != null) { + return searchRunner; + } + return new ISearchExecutor() { + @Override + public boolean performSearch(String searchString, int options) { + return false; + } + + @Override + public void cancelSearch() { + + } + }; + } /* @Override diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/properties/TabbedFolderPageProperties.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/properties/TabbedFolderPageProperties.java index 9734b6e3e788e27bd06794d939a35065c614f9a1..a4297076ff37980bbc2d2efdf4795c177fa7cb9c 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/properties/TabbedFolderPageProperties.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/properties/TabbedFolderPageProperties.java @@ -22,10 +22,7 @@ import org.eclipse.core.runtime.Status; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.viewers.ColumnLabelProvider; -import org.eclipse.jface.viewers.IFontProvider; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.*; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; @@ -42,6 +39,7 @@ import org.jkiss.dbeaver.model.DBPEvent; import org.jkiss.dbeaver.model.DBPEventListener; import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode; +import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore; import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor; import org.jkiss.dbeaver.model.preferences.DBPPropertySource; @@ -163,7 +161,7 @@ public class TabbedFolderPageProperties extends TabbedFolderPage implements IRef } } - private class PropertiesPageControl extends ProgressPageControl implements ILazyPropertyLoadListener { + private class PropertiesPageControl extends ProgressPageControl implements ILazyPropertyLoadListener, ISearchExecutor { PropertiesPageControl(Composite parent) { super(parent, SWT.SHEET); @@ -215,6 +213,11 @@ public class TabbedFolderPageProperties extends TabbedFolderPage implements IRef }); } + @Override + protected ISearchExecutor getSearchRunner() { + return this; + } + @Override protected void fillCustomActions(IContributionManager contributionManager) { super.fillCustomActions(contributionManager); @@ -239,6 +242,17 @@ public class TabbedFolderPageProperties extends TabbedFolderPage implements IRef } } + @Override + public boolean performSearch(String searchString, int options) { + propertyTree.setFilters(new PropertyTreeViewer.NodeFilter(searchString)); + propertyTree.expandAll(); + return propertyTree.getTree().getItemCount() > 0; + } + + @Override + public void cancelSearch() { + propertyTree.resetFilters(); + } } private boolean isAttached() { diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/properties/PropertyTreeViewer.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/properties/PropertyTreeViewer.java index a341a2f21fd1c89383ca691546020ba6da4b3971..9db0fe728b58fcc05ba3f0171fb67ae74be87d87 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/properties/PropertyTreeViewer.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/properties/PropertyTreeViewer.java @@ -701,6 +701,26 @@ public class PropertyTreeViewer extends TreeViewer { } } + public static class NodeFilter extends ViewerFilter { + private final String searchString; + public NodeFilter(String searchString) { + this.searchString = searchString.toUpperCase(Locale.ENGLISH); + } + + @Override + public boolean select(Viewer viewer, Object parentElement, Object element) { + if (element instanceof TreeNode) { + DBPPropertyDescriptor property = ((TreeNode) element).property; + if (property != null) { + return property.getDisplayName().toUpperCase(Locale.ENGLISH).contains(searchString); + } else if (((TreeNode) element).category != null) { + return true; + } + } + return false; + } + } + class PropsContentProvider implements IStructuredContentProvider, ITreeContentProvider { @Override public void inputChanged(Viewer v, Object oldInput, Object newInput)