# ComboViewer und ViewerFilter



## dzim (25. Nov 2008)

Hallo zusammen,

ich habe gerade versucht oben genanntes (siehe Threadname) zu Verbinden, wie ich es schon bei Tabellen mache.

ich habe also eine ComboViewer, einen ViewerFilter (fragt mich nicht mehr, woher ich das hatte, es gerade so zu programmieren - war nen Tutorial)


```
private class SimpleViewerFilter extends ViewerFilter {

		private Pattern pattern;

		public SimpleViewerFilter() {
			pattern = Pattern.compile(".*", Pattern.CASE_INSENSITIVE);
		}

		@Override
		public boolean select(Viewer viewer, Object parentElement,
				Object element) {

			boolean select = true;

			// do nothing with the parentElement at the moment

			} else if (element instanceof Location) {
				select = pattern.matcher(((Location) element).getToken())
						.matches();
			}

			return select;
		}

		public void setFilter(Object element) {

			if (element instanceof String) {
				pattern = getPatternByString((String) element);
			}
		}

		private Pattern getPatternByString(String patternString) {

			String newText = patternString + "*";

			newText = newText.replace("\\", "\\\\");
			newText = newText.replace(".", "\\.");
			newText = newText.replace("*", ".*");
			newText = newText.replace("?", ".?");

			return Pattern.compile(newText, Pattern.CASE_INSENSITIVE);
		}
	}
```

in einem KeyListener (genaugenommen KeyDown) wolte ich nun folgendes machen:


```
String entry = myCombo.getText();

if (entry != null && !entry.isEmpty()) {

	search.setFilter(entry);
	myComboViewer.refresh(false);
}
```

irgendwas passiert auch, aber nicht das, was ich erwartet habe:
Meine Eingabe wird bis auf ein Zeichen gelöscht, ab und an verändert sich was am dargestellten Inhalt des Viewers, aber von einem wirklichen filtern kann man nicht sprechen.

Meine Frage: Hat jemand da einen *funktionierenden* Filter gebaut und wenn ja, wie genau? (Codebeispiel?)

Danke schon mal!


----------



## Wildcard (25. Nov 2008)

Schau dir mal org.eclipse.ui.dialogs.FilteredList an.
Im übrigen, es gibt auch Pattern#quote  :wink:


----------



## dzim (25. Nov 2008)

Ähm... das mit dem quote... *hüstel* - ok, vermerkt!

Die FilteredList ist recht cool und vereinfacht das ganz ungemein, auch wenn meine gtk-Eingabe ab und an nervt und angeht, wenn ich in der app rumtippse...
Aber: Ich wollte doch ne ComboBox :'-(
Wenn's keine schnelle Lösung dafür gibt, nehm ich diese Liste, aber eigentlich wollte ich das nicht.
Übrigens finde ich es putzig von den Eclipse-Leuten, diese recht hilfreichen Widgets so zu verstecken - in dialogs... Hallo?


----------



## dzim (25. Nov 2008)

Ok.

Ersetze 

```
String entry = myCombo.getText();

if (entry != null && !entry.isEmpty()) {

   search.setFilter(entry);
   myComboViewer.refresh(false);
}
```

durch 


```
if (event.type != SWT.KeyUp && event.keyCode != SWT.CR) {
					return;
				} // so bin ich mir sicher, das es nur 'on demand' geschieht...

				String entry = recordSignCombo.getText();

				if (entry != null && !entry.isEmpty()) {

					search.setFilter(entry);
					recordSignComboViewer.refresh(false);
				}

				recordSignCombo.setText(entry); // nötig, sonst eingabe weg...

				recordSignCombo.setListVisible(true); // gleich alles aufgeklappt, sieht besser aus
```


----------



## Wildcard (25. Nov 2008)

dzim hat gesagt.:
			
		

> Wenn's keine schnelle Lösung dafür gibt, nehm ich diese Liste, aber eigentlich wollte ich das nicht.


Ich meinte eigentlich du sollst dir die Implementierung ansehen, da genau das dort gemacht wird :wink:



> Übrigens finde ich es putzig von den Eclipse-Leuten, diese recht hilfreichen Widgets so zu verstecken - in dialogs... Hallo?


Das kommt von den ganzen Selection Dialogen. ElementListSelectionDialog usw. Ein seperates Composite wäre sehr viel schöner gewesen, kommt aber vielleicht noch und ist auch relativ schnell selbst gebaut.


----------



## dzim (26. Nov 2008)

Na wir werden sehen.
Ich finde übrigens, dass auch so eine ComboViewer funktionalität, wie ich es jetzt selbst gemacht habe (was aber fern von wirklich gut oder besser gesagt schön ist) auch in Eclipse einzug finden sollte - als Style-Bits oder so.
Das ist teilweise "erwartete" Funktionalität und sollte schon etwas einfacher zu bauen sein, als über den Listener-Aufwand, den ich hier betrieben habe...

Ich hab mir nur von der Liste, die du mir genannt hattes, die API angesehen, auf die Idee mal reinzuschaun kam ich intelligenterweise nicht *augenverdrehUndKopfschüttel*
Aber beim nächsten Mal ;-)


----------

