View | Details | Raw Unified | Return to bug 142957 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/gmf/runtime/diagram/ui/parts/DiagramEditor.java (-6 / +52 lines)
Lines 91-96 Link Here
91
import org.eclipse.gmf.runtime.diagram.ui.internal.editparts.DiagramRootTreeEditPart;
91
import org.eclipse.gmf.runtime.diagram.ui.internal.editparts.DiagramRootTreeEditPart;
92
import org.eclipse.gmf.runtime.diagram.ui.internal.editparts.TreeDiagramEditPart;
92
import org.eclipse.gmf.runtime.diagram.ui.internal.editparts.TreeDiagramEditPart;
93
import org.eclipse.gmf.runtime.diagram.ui.internal.editparts.TreeEditPart;
93
import org.eclipse.gmf.runtime.diagram.ui.internal.editparts.TreeEditPart;
94
import org.eclipse.gmf.runtime.diagram.ui.internal.editparts.TreeNodeEditPart;
94
import org.eclipse.gmf.runtime.diagram.ui.internal.l10n.DiagramUIPluginImages;
95
import org.eclipse.gmf.runtime.diagram.ui.internal.l10n.DiagramUIPluginImages;
95
import org.eclipse.gmf.runtime.diagram.ui.internal.pagesetup.DefaultValues;
96
import org.eclipse.gmf.runtime.diagram.ui.internal.pagesetup.DefaultValues;
96
import org.eclipse.gmf.runtime.diagram.ui.internal.pagesetup.PageInfoHelper;
97
import org.eclipse.gmf.runtime.diagram.ui.internal.pagesetup.PageInfoHelper;
Lines 106-111 Link Here
106
import org.eclipse.gmf.runtime.emf.commands.core.command.EditingDomainUndoContext;
107
import org.eclipse.gmf.runtime.emf.commands.core.command.EditingDomainUndoContext;
107
import org.eclipse.gmf.runtime.notation.Diagram;
108
import org.eclipse.gmf.runtime.notation.Diagram;
108
import org.eclipse.gmf.runtime.notation.GuideStyle;
109
import org.eclipse.gmf.runtime.notation.GuideStyle;
110
import org.eclipse.gmf.runtime.notation.Node;
109
import org.eclipse.gmf.runtime.notation.NotationPackage;
111
import org.eclipse.gmf.runtime.notation.NotationPackage;
110
import org.eclipse.gmf.runtime.notation.View;
112
import org.eclipse.gmf.runtime.notation.View;
111
import org.eclipse.jface.action.Action;
113
import org.eclipse.jface.action.Action;
Lines 116-121 Link Here
116
import org.eclipse.jface.util.Assert;
118
import org.eclipse.jface.util.Assert;
117
import org.eclipse.jface.viewers.ISelection;
119
import org.eclipse.jface.viewers.ISelection;
118
import org.eclipse.jface.viewers.IStructuredSelection;
120
import org.eclipse.jface.viewers.IStructuredSelection;
121
import org.eclipse.jface.viewers.StructuredSelection;
119
import org.eclipse.swt.SWT;
122
import org.eclipse.swt.SWT;
120
import org.eclipse.swt.SWTException;
123
import org.eclipse.swt.SWTException;
121
import org.eclipse.swt.events.DisposeEvent;
124
import org.eclipse.swt.events.DisposeEvent;
Lines 164-172 Link Here
164
     */
167
     */
165
    protected PreferenceStore workspaceViewerPreferenceStore = null;
168
    protected PreferenceStore workspaceViewerPreferenceStore = null;
166
169
170
    class GMFTreeViewer extends TreeViewer
171
    {
172
173
		/** 
174
		 * A work-around to convert selected tree edit parts into graphical edit
175
		 * parts right before firing selection changed event to the listeners. This
176
		 * is done to ensure that Properties View stays in sync with the selection
177
		 * made from the tree viewer
178
		 *  
179
		 * @see org.eclipse.gef.ui.parts.AbstractEditPartViewer#getSelection()
180
		 */
181
		public ISelection getSelection() {
182
			ISelection selected = super.getSelection();
183
			if (getDiagramGraphicalViewer() == null || !(selected instanceof IStructuredSelection))
184
				return selected;
185
186
			ArrayList selectedItems = new ArrayList();
187
			Iterator iter = ((IStructuredSelection) selected).iterator();
188
			while (iter.hasNext()) {
189
				Object o = iter.next();
190
				EditPart ep = null;
191
				if (o instanceof EditPart) {
192
					try {
193
						ep = (EditPart) getDiagramGraphicalViewer()
194
								.getEditPartRegistry().get(
195
										((EditPart) o).getModel());
196
					} catch (Exception e) {
197
					}
198
				}
199
200
				if (ep != null)
201
					selectedItems.add(ep);
202
				else
203
					selectedItems.add(o);
204
			}
205
			return new StructuredSelection(selectedItems);
206
		}	
207
    }
208
167
    /**
209
    /**
168
     * A diagram outline page
210
	 * A diagram outline page
169
     */
211
	 */
170
    class DiagramOutlinePage
212
    class DiagramOutlinePage
171
        extends ContentOutlinePage
213
        extends ContentOutlinePage
172
        implements IAdaptable {
214
        implements IAdaptable {
Lines 184-190 Link Here
184
        private Thumbnail thumbnail;
226
        private Thumbnail thumbnail;
185
227
186
        private DisposeListener disposeListener;
228
        private DisposeListener disposeListener;
187
229
        
188
        /**
230
        /**
189
         * @param viewer
231
         * @param viewer
190
         */
232
         */
Lines 223-229 Link Here
223
                public EditPart createEditPart(EditPart context, Object model) {
265
                public EditPart createEditPart(EditPart context, Object model) {
224
                    if (model instanceof Diagram) {
266
                    if (model instanceof Diagram) {
225
                        return new TreeDiagramEditPart(model);
267
                        return new TreeDiagramEditPart(model);
226
                    } else {
268
                    }
269
                    else  if (model instanceof Node) {
270
                    	return new TreeNodeEditPart(model);
271
                    }
272
                    else {
227
                        return new TreeEditPart(model);
273
                        return new TreeEditPart(model);
228
                    }
274
                    }
229
                }
275
                }
Lines 612-618 Link Here
612
     */
658
     */
613
    public Object getAdapter(Class type) {
659
    public Object getAdapter(Class type) {
614
        if (type == IContentOutlinePage.class) {
660
        if (type == IContentOutlinePage.class) {
615
            TreeViewer viewer = new TreeViewer();
661
            GMFTreeViewer viewer = new GMFTreeViewer();
616
            viewer.setRootEditPart(new DiagramRootTreeEditPart());
662
            viewer.setRootEditPart(new DiagramRootTreeEditPart());
617
            return new DiagramOutlinePage(viewer);
663
            return new DiagramOutlinePage(viewer);
618
        }
664
        }
Lines 1493-1496 Link Here
1493
    protected PreferencesHint getPreferencesHint() {
1539
    protected PreferencesHint getPreferencesHint() {
1494
        return new PreferencesHint(getEditorSite().getId());
1540
        return new PreferencesHint(getEditorSite().getId());
1495
    };
1541
    };
1496
}
1542
}
(-)src/org/eclipse/gmf/runtime/diagram/ui/internal/editparts/TreeEditPart.java (-2 / +2 lines)
Lines 168-174 Link Here
168
     * @param event
168
     * @param event
169
     */
169
     */
170
    protected void handleNotificationEvent( Notification notification ) {
170
    protected void handleNotificationEvent( Notification notification ) {
171
        if (NotationPackage.Literals.VIEW__ELEMENT==notification.getFeature()) {
171
        if (notification.getNotifier() == getModel() && NotationPackage.Literals.VIEW__ELEMENT==notification.getFeature()) {
172
            reactivateSemanticElement();
172
            reactivateSemanticElement();
173
        } else{
173
        } else{
174
            refreshVisuals();
174
            refreshVisuals();
Lines 225-231 Link Here
225
     * 
225
     * 
226
     * @return the diagram event broker
226
     * @return the diagram event broker
227
     */
227
     */
228
    private DiagramEventBroker getDiagramEventBroker() {
228
    protected DiagramEventBroker getDiagramEventBroker() {
229
        EditingDomain theEditingDomain = getEditingDomain();
229
        EditingDomain theEditingDomain = getEditingDomain();
230
        if (theEditingDomain instanceof TransactionalEditingDomain) {
230
        if (theEditingDomain instanceof TransactionalEditingDomain) {
231
            return DiagramEventBroker
231
            return DiagramEventBroker
(-)src/org/eclipse/gmf/runtime/diagram/ui/internal/editparts/TreeNodeEditPart.java (+145 lines)
Added Link Here
1
/******************************************************************************
2
 * Copyright (c) 2002, 2006 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    IBM Corporation - initial API and implementation 
10
 ****************************************************************************/
11
12
package org.eclipse.gmf.runtime.diagram.ui.internal.editparts;
13
14
import java.util.ArrayList;
15
import java.util.List;
16
import java.util.ListIterator;
17
18
import org.eclipse.emf.common.notify.Notification;
19
import org.eclipse.gmf.runtime.notation.DrawerStyle;
20
import org.eclipse.gmf.runtime.notation.Node;
21
import org.eclipse.gmf.runtime.notation.NotationPackage;
22
import org.eclipse.gmf.runtime.notation.View;
23
24
/**
25
 * Implementation of a tree edit part for node views
26
 * @author aboyko
27
 * @canBeSeenBy org.eclipse.gmf.runtime.diagram.ui.*
28
 */
29
public class TreeNodeEditPart extends TreeContainerEditPart {
30
31
	public TreeNodeEditPart(Object model) {
32
		super(model);
33
	}
34
35
	/* (non-Javadoc)
36
	 * @see org.eclipse.gmf.runtime.diagram.ui.internal.editparts.TreeContainerEditPart#getModelChildren()
37
	 */
38
	protected List getModelChildren() {
39
		if (!(getModel() instanceof Node))
40
			return super.getModelChildren();
41
		
42
		return getNodeChildren((Node)getModel());
43
	}
44
	
45
    /**
46
     * Checks whether the node passed in as an argument is compartment
47
     * @param node - The node to check 
48
     * @return <Code>true</Code> if node is a compartment, <Code>false</Code> otherwise
49
     */
50
    private boolean isCompartment(Node node)
51
    {
52
    	return node.getStyle(NotationPackage.eINSTANCE.getDrawerStyle())!=null;
53
    }
54
55
	/* (non-Javadoc)
56
	 * @see org.eclipse.gmf.runtime.diagram.ui.internal.editparts.TreeContainerEditPart#handleNotificationEvent(org.eclipse.emf.common.notify.Notification)
57
	 */
58
	protected void handleNotificationEvent(Notification event) {
59
		Object feature = event.getFeature();
60
		if (NotationPackage.eINSTANCE.getView_Visible()==feature 
61
				|| NotationPackage.eINSTANCE.getDrawerStyle_Collapsed()==feature)
62
			refreshChildren();
63
		else
64
			super.handleNotificationEvent(event);
65
	}
66
    
67
	/**
68
	 * Collect non-compartment children of the node. If one of the children is a compartment then children of
69
	 * this non-compartment children of this compartment child are appended to the list. 
70
	 * @param node - the node from which children are collected
71
	 * @return <Code>List</Code> of non-compartment children of the node passed in as an argument 
72
	 */
73
	private List getNodeChildren(Node node)
74
	{
75
		List children = new ArrayList(node.getVisibleChildren().size());
76
		ListIterator iter = node.getVisibleChildren().listIterator();
77
		while (iter.hasNext())
78
		{
79
			Object element = iter.next();
80
			if (element instanceof Node)
81
			{
82
				Node child = (Node) element;
83
				if (isCompartment(child))
84
				{
85
					children.addAll(getNodeChildren(child));
86
				}
87
				else if (isCompartment(node) && 
88
							!((DrawerStyle) node.getStyle(NotationPackage.eINSTANCE.getDrawerStyle())).isCollapsed()
89
						)
90
				{
91
					children.add(child);
92
				}
93
			}
94
		}
95
		return children;
96
	}
97
98
	/* (non-Javadoc)
99
	 * @see org.eclipse.gmf.runtime.diagram.ui.internal.editparts.TreeEditPart#activate()
100
	 */
101
	public void activate() {
102
		super.activate();
103
		
104
		// add listeners to catch compartments notification events		
105
		ListIterator iter = getCompartmentChildren().listIterator();
106
		while(iter.hasNext())
107
		{
108
			View view = (View)iter.next();
109
	        getDiagramEventBroker().addNotificationListener(view, this);
110
		}
111
	}
112
113
	/* (non-Javadoc)
114
	 * @see org.eclipse.gmf.runtime.diagram.ui.internal.editparts.TreeEditPart#deactivate()
115
	 */
116
	public void deactivate() {
117
		super.deactivate();
118
119
		// remove listeners catching compartments notification events
120
		ListIterator iter = getCompartmentChildren().listIterator();
121
		while(iter.hasNext())
122
		{
123
			View view = (View)iter.next();
124
	        getDiagramEventBroker().removeNotificationListener(view, this);
125
		}		
126
	}
127
	
128
	/**
129
	 * Collects all compartment children of the node including comaprtments within compartments
130
	 * @return <Code>List</Code> of all compartments contained within this node
131
	 */
132
	private List getCompartmentChildren()
133
	{
134
		ArrayList compartments = new ArrayList();
135
		ListIterator iter = ((Node)getModel()).getChildren().listIterator();
136
		while(iter.hasNext())
137
		{
138
			Object obj = iter.next();
139
			if (obj instanceof Node && isCompartment((Node)obj))
140
				compartments.add(obj);
141
		}
142
		return compartments;
143
	}
144
	
145
}

Return to bug 142957