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.swt.SWT;
018: import org.eclipse.swt.widgets.Event;
019: import org.eclipse.swt.widgets.Listener;
020: import org.eclipse.swt.widgets.Menu;
021: import org.eclipse.swt.widgets.MenuItem;
022: import org.eclipse.ui.views.markers.internal.MarkerGroup;
023: import org.eclipse.ui.views.markers.internal.MarkerMessages;
024: import org.eclipse.ui.views.markers.internal.MarkerSupportRegistry;
025:
026: /**
027: * GroupsContribution is the contribution for the marker groupings.
028: *
029: * @since 3.4
030: *
031: */
032: public class GroupsContribution extends MarkersContribution {
033:
034: /**
035: * Create a new instance of the receiver.
036: */
037: public GroupsContribution() {
038: super ();
039: }
040:
041: /*
042: * (non-Javadoc)
043: *
044: * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
045: */
046: protected IContributionItem[] getContributionItems() {
047:
048: Collection groups = MarkerSupportRegistry.getInstance()
049: .getMarkerGroups();
050:
051: Iterator groupsIterator = groups.iterator();
052: IContributionItem[] items = new IContributionItem[groups.size() + 1];
053:
054: for (int i = 0; i < items.length - 1; i++) {
055: final MarkerGroup group = (MarkerGroup) groupsIterator
056: .next();
057: items[i] = getContributionItem(group);
058: }
059:
060: items[items.length - 1] = getContributionItem(null);
061: return items;
062:
063: }
064:
065: /**
066: * Return the IContributionItem for group.
067: *
068: * @param group
069: * @return IContributionItem
070: */
071: private IContributionItem getContributionItem(
072: final MarkerGroup group) {
073: return new ContributionItem() {
074:
075: /*
076: * (non-Javadoc)
077: *
078: * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.Menu,
079: * int)
080: */
081: public void fill(Menu menu, int index) {
082: MenuItem item = new MenuItem(menu, SWT.CHECK);
083: item
084: .setText(group == null ? MarkerMessages.ProblemView_None
085: : group.getMarkerField()
086: .getColumnHeaderText());
087: ExtendedMarkersView view = getView();
088: item.addListener(SWT.Selection, getMenuItemListener(
089: group, view));
090:
091: if (view != null) {
092: if (group == null)
093: item
094: .setSelection(view.getCategoryGroup() == null);
095: else
096: item.setSelection(group.equals(view
097: .getCategoryGroup()));
098: }
099:
100: }
101:
102: /**
103: * Return the menu item listener for selection of a filter.
104: *
105: * @param group
106: * @param view
107: * @return Listener
108: */
109: private Listener getMenuItemListener(
110: final MarkerGroup group,
111: final ExtendedMarkersView view) {
112: return new Listener() {
113: /*
114: * (non-Javadoc)
115: *
116: * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
117: */
118: public void handleEvent(Event event) {
119: if (view != null)
120: view.setCategoryGroup(group);
121: }
122: };
123: }
124: };
125: }
126: }
|