/******************************************************************************* * Copyright (C) 2003-2005, 2013 Guillaume Brocker * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Guillaume Brocker - Initial API and implementation * ******************************************************************************/ package eclox.ui.editor.advanced.filters; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.IManagedForm; import eclox.core.doxyfiles.Doxyfile; import eclox.core.doxyfiles.Group; import eclox.core.doxyfiles.Setting; /** * Implements a filter that shows settings by groups. * * @author gbrocker */ public class ByGroup implements IFilter { /** * the doxyfile being filtered */ private Doxyfile doxyfile; /** * the combo control displaying all group that are selectable by the user */ private Combo combo; /** * the saved combo selection index */ private int savedComboSelection = 0; /** * the current viewer beging filtered. */ private StructuredViewer viewer; /** * the current viewer filter that filters objects displayed in the setting viewer */ private MyViewerFilter viewerFilter; /** * Implements a selection listener for the managed combo control. */ private class MySelectionListener implements SelectionListener { /** * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetDefaultSelected(SelectionEvent e) { // Pre-condition assert viewer != null; viewer.refresh(); } /** * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { // Pre-condition assert viewer != null; viewer.refresh(); } } /** * Implements a structure viewer filter that will filter setting according to the * selected group */ private class MyViewerFilter extends ViewerFilter { /** * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ public boolean select(Viewer viewer, Object parentElement, Object element) { // Pre-condition assert combo != null; assert element instanceof Setting; // Retrieves the selected group name. int groupIndex = combo.getSelectionIndex(); String groupName = groupIndex >= 0 ? combo.getItem( groupIndex ) : null; // Tests if the given element is in the right group. if( groupName != null ) { Setting setting = (Setting) element; String settingGroup = setting.getProperty( Setting.GROUP ); return (settingGroup != null) ? settingGroup.equals( groupName ) : false; } else { return false; } } } /** * @see eclox.ui.editor.advanced.filters.IFilter#setDoxyfile(eclox.doxyfiles.Doxyfile) */ public void setDoxyfile(Doxyfile doxyfile) { this.doxyfile = doxyfile; } /** * @see eclox.ui.editor.advanced.filters.IFilter#createControls(org.eclipse.ui.forms.IManagedForm, org.eclipse.swt.widgets.Composite) */ public void createControls( IManagedForm managedForm, Composite parent ) { // Pre-condition assert combo == null; assert doxyfile != null; // Creates the managed combo control. combo = new Combo( parent, SWT.FLAT|SWT.BORDER|SWT.READ_ONLY ); combo.addSelectionListener( new MySelectionListener() ); parent.setLayout( new FillLayout() ); // Fills the combo with group names. Object[] objects = doxyfile.getGroups(); int i; for( i = 0; i < objects.length; ++i ) { Group group = (Group) objects[i]; combo.add( group.getName() ); } // Restores the combo selection. combo.select( savedComboSelection ); // Post-condition assert combo != null; } /** * @see eclox.ui.editor.advanced.filters.IFilter#createViewerFilters(org.eclipse.jface.viewers.StructuredViewer) */ public void createViewerFilters(StructuredViewer viewer) { // Pre-condition assert this.viewerFilter == null; assert this.viewer == null; // Creates the viewer filter. this.viewerFilter = new MyViewerFilter(); this.viewer = viewer; this.viewer.addFilter( viewerFilter ); // Post-condition assert this.viewerFilter != null; assert this.viewer == viewer; } /** * @see eclox.ui.editor.advanced.filters.IFilter#disposeControls() */ public void disposeControls() { // Pre-condition assert combo != null; // Saves the combo selection. savedComboSelection = combo.getSelectionIndex(); // Diposes the managed combo control. combo.getParent().setLayout( null ); combo.dispose(); combo = null; // Post-condition assert combo == null; } /** * @see eclox.ui.editor.advanced.filters.IFilter#disposeViewerFilers(org.eclipse.jface.viewers.StructuredViewer) */ public void disposeViewerFilers(StructuredViewer viewer) { // Pre-condition assert this.viewerFilter != null; assert this.viewer == viewer; // Disposes the viewer filter. this.viewer.removeFilter( viewerFilter ); this.viewer = null; this.viewerFilter = null; // Post-condition assert this.viewerFilter == null; assert this.viewer == null; } /** * @see eclox.ui.editor.advanced.filters.IFilter#getName() */ public String getName() { return "By Group"; } }