3636import org .eclipse .jface .viewers .IDoubleClickListener ;
3737import org .eclipse .jface .viewers .TableViewer ;
3838import org .eclipse .jface .viewers .TableViewerColumn ;
39+ import org .eclipse .jface .viewers .Viewer ;
40+ import org .eclipse .jface .viewers .ViewerFilter ;
3941import org .eclipse .swt .SWT ;
42+ import org .eclipse .swt .events .KeyAdapter ;
43+ import org .eclipse .swt .events .KeyEvent ;
4044import org .eclipse .swt .layout .GridData ;
4145import org .eclipse .swt .layout .GridLayout ;
4246import org .eclipse .swt .widgets .Composite ;
4347import org .eclipse .swt .widgets .Control ;
48+ import org .eclipse .swt .widgets .Label ;
4449import org .eclipse .swt .widgets .Shell ;
50+ import org .eclipse .swt .widgets .Text ;
4551import org .sofproject .gst .topo .plugins .GstElement ;
4652import org .sofproject .gst .topo .plugins .GstPluginDb ;
4753
4854public class GstNewElementDialog extends TrayDialog {
4955
5056 private GstPluginDb plgDb ;
5157 private TableViewer viewer ;
58+ private Text grepText ;
59+ private GstElementFilter filter ;
5260 private GstElement selectedElement ;
5361
62+ private class GstElementFilter extends ViewerFilter {
63+ private String filter ;
64+
65+ public void setFilterText (String filter ) {
66+ this .filter = ".*" + filter + ".*" ;
67+ }
68+
69+ @ Override
70+ public boolean select (Viewer viewer , Object parentElement , Object element ) {
71+ if (filter == null || filter .isEmpty ()) {
72+ return true ;
73+ }
74+ GstElement entry = (GstElement ) element ;
75+ if (entry .getName ().matches (filter )) {
76+ return true ;
77+ }
78+ return false ;
79+ }
80+ }
81+
5482 public GstNewElementDialog (Shell parentShell , GstPluginDb plgDb ) {
5583 super (parentShell );
5684 this .plgDb = plgDb ;
@@ -70,14 +98,18 @@ protected void configureShell(Shell shell) {
7098 protected Control createDialogArea (Composite parent ) {
7199 Composite container = (Composite ) super .createDialogArea (parent );
72100 Composite mainGroup = new Composite (container , SWT .NONE );
73- GridLayout layout = new GridLayout ();
74- layout .numColumns = 1 ;
101+ GridLayout layout = new GridLayout (2 , false );
75102 mainGroup .setLayout (layout );
76- mainGroup .setLayoutData (new GridData (GridData .FILL_HORIZONTAL ));
103+ Label grepLabel = new Label (mainGroup , SWT .NONE );
104+ grepLabel .setText ("Search Element: " );
105+ grepText = new Text (mainGroup , SWT .BORDER | SWT .SEARCH );
106+ GridData gridData = new GridData (SWT .FILL , SWT .CENTER , true , false );
107+ grepText .setLayoutData (gridData );
77108
78109 viewer = new TableViewer (mainGroup , SWT .H_SCROLL | SWT .V_SCROLL | SWT .FULL_SELECTION | SWT .BORDER );
79110
80- GridData gridData = new GridData (SWT .FILL , SWT .FILL , true , true );
111+ gridData = new GridData (SWT .FILL , SWT .FILL , true , true );
112+ gridData .horizontalSpan = 2 ;
81113 gridData .heightHint = 15 * viewer .getTable ().getItemHeight ();
82114 viewer .getTable ().setLayoutData (gridData );
83115
@@ -109,12 +141,23 @@ public String getText(Object element) {
109141
110142 @ Override
111143 public void doubleClick (DoubleClickEvent event ) {
112- buttonPressed (OK );
144+ buttonPressed (OK );
145+ }
146+ });
147+
148+ grepText .addKeyListener (new KeyAdapter () {
149+ @ Override
150+ public void keyReleased (KeyEvent ke ) {
151+ filter .setFilterText (grepText .getText ().trim ());
152+ viewer .refresh ();
113153 }
114154 });
155+ filter = new GstElementFilter ();
156+ viewer .addFilter (filter );
115157
116158 viewer .setInput (plgDb .getAllElements ());
117- viewer .getControl ().setFocus ();
159+
160+ grepText .setFocus ();
118161
119162 return container ;
120163 }
0 commit comments