001: /*******************************************************************************
002: * Copyright (c) 2000, 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.jdt.internal.ui.browsing;
011:
012: import java.util.ArrayList;
013: import java.util.List;
014:
015: import org.eclipse.swt.widgets.Composite;
016: import org.eclipse.swt.widgets.Item;
017: import org.eclipse.swt.widgets.Widget;
018:
019: import org.eclipse.jdt.core.IPackageFragment;
020:
021: import org.eclipse.jdt.internal.ui.viewsupport.ColoredViewersManager;
022: import org.eclipse.jdt.internal.ui.viewsupport.ProblemTableViewer;
023:
024: /**
025: * Special problem table viewer to handle logical packages.
026: */
027: class PackagesViewTableViewer extends ProblemTableViewer implements
028: IPackagesViewViewer {
029:
030: public PackagesViewTableViewer(Composite parent, int style) {
031: super (parent, style);
032: ColoredViewersManager.install(this );
033: }
034:
035: public void mapElement(Object element, Widget item) {
036: if (element instanceof LogicalPackage && item instanceof Item) {
037: LogicalPackage cp = (LogicalPackage) element;
038: IPackageFragment[] fragments = cp.getFragments();
039: for (int i = 0; i < fragments.length; i++) {
040: IPackageFragment fragment = fragments[i];
041: fResourceToItemsMapper.addToMap(fragment, (Item) item);
042: }
043: }
044: super .mapElement(element, item);
045: }
046:
047: public void unmapElement(Object element, Widget item) {
048: if (element instanceof LogicalPackage && item instanceof Item) {
049: LogicalPackage cp = (LogicalPackage) element;
050: IPackageFragment[] fragments = cp.getFragments();
051: for (int i = 0; i < fragments.length; i++) {
052: IPackageFragment fragment = fragments[i];
053: fResourceToItemsMapper.removeFromMap(fragment,
054: (Item) item);
055: }
056: }
057: super .unmapElement(element, item);
058: }
059:
060: /*
061: * @see org.eclipse.jface.viewers.StructuredViewer#getFilteredChildren(java.
062: * lang.Object)
063: */
064: protected Object[] getFilteredChildren(Object parent) {
065:
066: Object[] result = getRawChildren(parent);
067: List list = new ArrayList();
068: if (result != null) {
069: Object[] toBeFiltered = new Object[1];
070: for (int i = 0; i < result.length; i++) {
071: Object object = result[i];
072: if (object instanceof LogicalPackage) {
073: if (selectLogicalPackage((LogicalPackage) object))
074: list.add(object);
075: } else {
076: toBeFiltered[0] = object;
077: if (filter(toBeFiltered).length == 1)
078: list.add(object);
079: }
080: }
081: }
082: return list.toArray();
083: }
084:
085: private boolean selectLogicalPackage(LogicalPackage logicalPackage) {
086: return filter(logicalPackage.getFragments()).length > 0;
087: }
088:
089: // --------- see: IPackagesViewViewer ----------
090:
091: public Widget doFindItem(Object element) {
092: return super .doFindItem(element);
093: }
094:
095: public Widget doFindInputItem(Object element) {
096: return super .doFindInputItem(element);
097: }
098:
099: public List getSelectionFromWidget() {
100: return super .getSelectionFromWidget();
101: }
102:
103: public void doUpdateItem(Widget item, Object element,
104: boolean fullMap) {
105: super .doUpdateItem(item, element, fullMap);
106: }
107:
108: public void internalRefresh(Object element) {
109: super .internalRefresh(element);
110: }
111:
112: public void setSelectionToWidget(List l, boolean reveal) {
113: super.setSelectionToWidget(l, reveal);
114: }
115: }
|