001: /*******************************************************************************
002: * Copyright (c) 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: ******************************************************************************/package org.eclipse.ui.internal.provisional.views.markers;
011:
012: import java.util.Collection;
013: import java.util.Iterator;
014:
015: import org.eclipse.jface.action.ContributionItem;
016: import org.eclipse.jface.action.IContributionItem;
017: import org.eclipse.jface.action.Separator;
018: import org.eclipse.swt.SWT;
019: import org.eclipse.swt.widgets.Event;
020: import org.eclipse.swt.widgets.Listener;
021: import org.eclipse.swt.widgets.Menu;
022: import org.eclipse.swt.widgets.MenuItem;
023: import org.eclipse.ui.views.markers.internal.MarkerMessages;
024:
025: /**
026: * FiltersContribution is the contribution for the filters menu.
027: *
028: * @since 3.4
029: *
030: */
031: public class FiltersContribution extends MarkersContribution {
032:
033: /*
034: * (non-Javadoc)
035: *
036: * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
037: */
038: protected IContributionItem[] getContributionItems() {
039:
040: Collection groups = getView().getAllFilters();
041: Iterator groupsIterator = groups.iterator();
042: IContributionItem[] items = new IContributionItem[groups.size() + 2];
043: for (int i = 0; i < items.length - 2; i++) {
044: final MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) groupsIterator
045: .next();
046: items[i] = new ContributionItem() {
047:
048: /*
049: * (non-Javadoc)
050: *
051: * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.Menu,
052: * int)
053: */
054: public void fill(Menu menu, int index) {
055: MenuItem item = new MenuItem(menu, SWT.CHECK);
056: item.setText(group.getName());
057: ExtendedMarkersView view = getView();
058: item.addListener(SWT.Selection,
059: getMenuItemListener(group, view));
060:
061: if (view != null && view.isEnabled(group))
062: item.setSelection(true);
063: }
064:
065: /**
066: * Return the menu item listener for selection of a filter.
067: *
068: * @param group
069: * @param view
070: * @return Listener
071: */
072: private Listener getMenuItemListener(
073: final MarkerFieldFilterGroup group,
074: final ExtendedMarkersView view) {
075: return new Listener() {
076: /*
077: * (non-Javadoc)
078: *
079: * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
080: */
081: public void handleEvent(Event event) {
082: if (view != null)
083: view.toggleFilter(group);
084: }
085: };
086: }
087: };
088: }
089:
090: items[items.length - 2] = new Separator();
091: items[items.length - 1] = new ContributionItem() {
092: /*
093: * (non-Javadoc)
094: *
095: * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.Menu,
096: * int)
097: */
098: public void fill(Menu menu, int index) {
099: MenuItem item = new MenuItem(menu, SWT.PUSH);
100: item.setText(MarkerMessages.filtersAction_title);
101: item.addListener(SWT.Selection, new Listener() {
102: /*
103: * (non-Javadoc)
104: *
105: * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
106: */
107: public void handleEvent(Event event) {
108: getView().openFiltersDialog();
109: }
110: });
111: }
112:
113: };
114: return items;
115:
116: }
117: }
|