1 package sourceforge.org.qmc2.options.editor.ui; 2 3 import java.util.Iterator; 4 import java.util.Set; 5 6 import org.eclipse.jface.viewers.Viewer; 7 import org.eclipse.jface.viewers.ViewerFilter; 8 9 import sourceforge.org.qmc2.options.editor.model.DescriptableItem; 10 import sourceforge.org.qmc2.options.editor.model.Option; 11 import sourceforge.org.qmc2.options.editor.model.Section; 12 13 public class QMC2ViewFilter extends ViewerFilter { 14 15 private final QMC2Editor editor; 16 QMC2ViewFilter(QMC2Editor editor)17 public QMC2ViewFilter(QMC2Editor editor) { 18 this.editor = editor; 19 } 20 21 @Override select(Viewer viewer, Object parentElement, Object element)22 public boolean select(Viewer viewer, Object parentElement, Object element) { 23 boolean canShow = false; 24 if (editor.getFilter() != null) { 25 if (element instanceof DescriptableItem) { 26 DescriptableItem item = (DescriptableItem) element; 27 canShow = canShow(item, editor.getFilter()); 28 /* 29 * Only hide sections if all children can be hidden 30 */ 31 if (item instanceof Section) { 32 Iterator<Option> iterator = ((Section) item).getOptions() 33 .iterator(); 34 while (iterator.hasNext() && !canShow) { 35 canShow = canShow 36 || canShow(iterator.next(), editor.getFilter()); 37 } 38 } 39 } 40 } else { 41 canShow = true; 42 } 43 return canShow; 44 } 45 canShow(DescriptableItem item, String filterString)46 public boolean canShow(DescriptableItem item, String filterString) { 47 boolean canShow = false; 48 49 Set<String> languages = item.getLanguages(); 50 Iterator<String> iterator = languages.iterator(); 51 while (!canShow && iterator.hasNext()) { 52 String lang = iterator.next(); 53 String description = item.getDescription(lang).toLowerCase(); 54 ; 55 if (description == null 56 || !description.contains(editor.getFilter())) { 57 canShow = canShow || false; 58 } else { 59 canShow = canShow || true; 60 } 61 } 62 if (item.getName().contains(editor.getFilter())) { 63 canShow = canShow || true; 64 } else { 65 canShow = canShow || false; 66 } 67 68 return canShow; 69 } 70 71 } 72