Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 341219
Collapse All | Expand All

(-)Eclipse (+111 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2011 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
package org.eclipse.ui.tests.multipageeditor;
12
13
import java.io.ByteArrayInputStream;
14
15
import org.eclipse.core.resources.IFile;
16
import org.eclipse.core.resources.IProject;
17
import org.eclipse.core.resources.IWorkspace;
18
import org.eclipse.core.resources.ResourcesPlugin;
19
import org.eclipse.core.runtime.CoreException;
20
import org.eclipse.jface.viewers.IPostSelectionProvider;
21
import org.eclipse.jface.viewers.ISelectionChangedListener;
22
import org.eclipse.jface.viewers.ISelectionProvider;
23
import org.eclipse.jface.viewers.SelectionChangedEvent;
24
import org.eclipse.swt.widgets.Tree;
25
import org.eclipse.ui.IEditorPart;
26
import org.eclipse.ui.IPageLayout;
27
import org.eclipse.ui.IWorkbenchPage;
28
import org.eclipse.ui.IWorkbenchWindow;
29
import org.eclipse.ui.PartInitException;
30
import org.eclipse.ui.ide.IDE;
31
import org.eclipse.ui.tests.harness.util.UITestCase;
32
import org.eclipse.ui.views.properties.PropertySheet;
33
34
public class MultiPageEditorSelectionTest extends UITestCase {
35
36
	private static final String MTEST01_FILE = "mtest01.multivar";
37
38
	private static final String PROJECT_NAME = "MultiPageEditorSelction";
39
40
	public MultiPageEditorSelectionTest(String testName) {
41
		super(testName);
42
	}
43
44
	protected void doTearDown() throws Exception {
45
		IWorkspace workspace = ResourcesPlugin.getWorkspace();
46
		IProject testProject = workspace.getRoot().getProject(PROJECT_NAME);
47
		if (testProject.exists()) {
48
			testProject.delete(true, true, null);
49
		}
50
		super.doTearDown();
51
	}
52
53
	public void testPostSelection() throws Exception {
54
		IWorkbenchWindow window = openTestWindow();
55
		IEditorPart part = openEditor(window, MTEST01_FILE);
56
		ISelectionProvider provider = part.getSite().getSelectionProvider();
57
		assertTrue(provider instanceof IPostSelectionProvider);
58
59
		final boolean[] called = { false };
60
		IPostSelectionProvider postSelectionProvider = (IPostSelectionProvider) provider;
61
		postSelectionProvider
62
				.addPostSelectionChangedListener(new ISelectionChangedListener() {
63
					public void selectionChanged(SelectionChangedEvent event) {
64
						called[0] = true;
65
					}
66
				});
67
68
		((MultiPageResourceEditor) part).updateSelection();
69
		assertTrue(called[0]);
70
	}
71
72
	public void testPropertiesView() throws Exception {
73
		IWorkbenchWindow window = openTestWindow();
74
		IEditorPart part = openEditor(window, MTEST01_FILE);
75
76
		PropertySheet propertiewView = (PropertySheet) window.getActivePage()
77
				.showView(IPageLayout.ID_PROP_SHEET);
78
79
		window.getActivePage().activate(part);
80
81
		Tree tree = (Tree) propertiewView.getCurrentPage().getControl();
82
		assertEquals(0, tree.getItemCount());
83
84
		MultiPageResourceEditor editor = (MultiPageResourceEditor) part;
85
		editor.updateSelection();
86
		assertFalse(tree.getItemCount() == 0);
87
	}
88
89
	private IEditorPart openEditor(IWorkbenchWindow window, String filename)
90
			throws CoreException, PartInitException {
91
		IWorkspace workspace = ResourcesPlugin.getWorkspace();
92
93
		IProject testProject = workspace.getRoot().getProject(PROJECT_NAME);
94
		if (!testProject.exists()) {
95
			testProject.create(null);
96
		}
97
		testProject.open(null);
98
99
		IFile multiFile = testProject.getFile(filename);
100
		if (!multiFile.exists()) {
101
			multiFile.create(new ByteArrayInputStream("".getBytes()), true,
102
					null);
103
		}
104
105
		IWorkbenchPage page = window.getActivePage();
106
		IEditorPart part = IDE.openEditor(page, multiFile,
107
				MultiPageResourceEditor.EDITOR_ID);
108
		assertTrue(part instanceof MultiPageResourceEditor);
109
		return part;
110
	}
111
}
(-)Eclipse (+142 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2011 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
package org.eclipse.ui.tests.multipageeditor;
12
13
import org.eclipse.core.resources.IFile;
14
import org.eclipse.core.resources.ResourcesPlugin;
15
import org.eclipse.core.runtime.IProgressMonitor;
16
import org.eclipse.jface.viewers.AbstractTreeViewer;
17
import org.eclipse.jface.viewers.ISelection;
18
import org.eclipse.jface.viewers.ISelectionChangedListener;
19
import org.eclipse.jface.viewers.ISelectionProvider;
20
import org.eclipse.jface.viewers.StructuredSelection;
21
import org.eclipse.jface.viewers.TreeViewer;
22
import org.eclipse.swt.widgets.Composite;
23
import org.eclipse.ui.IEditorInput;
24
import org.eclipse.ui.IEditorSite;
25
import org.eclipse.ui.PartInitException;
26
import org.eclipse.ui.model.WorkbenchContentProvider;
27
import org.eclipse.ui.model.WorkbenchLabelProvider;
28
import org.eclipse.ui.part.EditorPart;
29
import org.eclipse.ui.part.MultiPageEditorPart;
30
import org.eclipse.ui.views.properties.IPropertySheetPage;
31
import org.eclipse.ui.views.properties.PropertySheetPage;
32
33
public class MultiPageResourceEditor extends MultiPageEditorPart {
34
35
	static final String EDITOR_ID = "org.eclipse.ui.tests.multipageeditor.MultiPageResourceEditor"; //$NON-NLS-1$
36
37
	private SubEditor editor;
38
39
	private IPropertySheetPage page;
40
41
	public void updateSelection() {
42
		IFile file = (IFile) getEditorInput().getAdapter(IFile.class);
43
		editor.setSelection(new StructuredSelection(file));
44
	}
45
46
	protected void createPages() {
47
		try {
48
			editor = new SubEditor();
49
			addPage(editor, getEditorInput());
50
		} catch (PartInitException e) {
51
			throw new RuntimeException(e);
52
		}
53
	}
54
55
	/*
56
	 * (non-Javadoc)
57
	 * 
58
	 * @see org.eclipse.ui.part.MultiPageEditorPart#getAdapter(java.lang.Class)
59
	 */
60
	public Object getAdapter(Class adapter) {
61
		if (adapter == IPropertySheetPage.class) {
62
			if (page == null) {
63
				page = new PropertySheetPage();
64
			}
65
			return page;
66
		}
67
		return super.getAdapter(adapter);
68
	}
69
70
	public void doSave(IProgressMonitor monitor) {
71
		// nothing to do
72
	}
73
74
	public void doSaveAs() {
75
		// nothing to do
76
	}
77
78
	public boolean isSaveAsAllowed() {
79
		return false;
80
	}
81
82
	static class SubEditor extends EditorPart implements ISelectionProvider {
83
84
		private TreeViewer viewer;
85
86
		public void createPartControl(Composite parent) {
87
			viewer = new TreeViewer(parent);
88
			viewer.setContentProvider(new WorkbenchContentProvider());
89
			viewer.setLabelProvider(WorkbenchLabelProvider
90
					.getDecoratingWorkbenchLabelProvider());
91
			viewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
92
			viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
93
94
			getSite().setSelectionProvider(this);
95
		}
96
97
		public void setFocus() {
98
			viewer.getControl().setFocus();
99
		}
100
101
		public void doSave(IProgressMonitor monitor) {
102
			// nothing to do
103
		}
104
105
		public void doSaveAs() {
106
			// nothing to do
107
		}
108
109
		public void init(IEditorSite site, IEditorInput input)
110
				throws PartInitException {
111
			setSite(site);
112
			setInput(input);
113
		}
114
115
		public boolean isDirty() {
116
			return false;
117
		}
118
119
		public boolean isSaveAsAllowed() {
120
			return false;
121
		}
122
123
		public void addSelectionChangedListener(
124
				ISelectionChangedListener listener) {
125
			viewer.addSelectionChangedListener(listener);
126
		}
127
128
		public ISelection getSelection() {
129
			return viewer.getSelection();
130
		}
131
132
		public void removeSelectionChangedListener(
133
				ISelectionChangedListener listener) {
134
			viewer.removeSelectionChangedListener(listener);
135
		}
136
137
		public void setSelection(ISelection selection) {
138
			viewer.setSelection(selection);
139
		}
140
141
	}
142
}
(-)plugin.xml (+5 lines)
Lines 741-746 Link Here
741
            id="org.eclipse.ui.tests.multipageeditor.MultiVariablePageEditor"
741
            id="org.eclipse.ui.tests.multipageeditor.MultiVariablePageEditor"
742
            name="Multi Variable Page Editor"/>
742
            name="Multi Variable Page Editor"/>
743
      <editor
743
      <editor
744
            class="org.eclipse.ui.tests.multipageeditor.MultiPageResourceEditor"
745
            icon="icons/mockeditorpart1.gif"
746
            id="org.eclipse.ui.tests.multipageeditor.MultiPageResourceEditor"
747
            name="Multi Page Resource Editor"/>
748
      <editor
744
            class="org.eclipse.ui.tests.manual.TestBackgroundSaveEditor"
749
            class="org.eclipse.ui.tests.manual.TestBackgroundSaveEditor"
745
            default="false"
750
            default="false"
746
            extensions="background"
751
            extensions="background"
(-)Eclipse UI/org/eclipse/ui/part/MultiPageEditorSite.java (-2 / +6 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2009 IBM Corporation and others.
2
 * Copyright (c) 2000, 2011 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 11-17 Link Here
11
package org.eclipse.ui.part;
11
package org.eclipse.ui.part;
12
12
13
import java.util.ArrayList;
13
import java.util.ArrayList;
14
15
import org.eclipse.core.runtime.Assert;
14
import org.eclipse.core.runtime.Assert;
16
import org.eclipse.jface.action.MenuManager;
15
import org.eclipse.jface.action.MenuManager;
17
import org.eclipse.jface.viewers.ILabelDecorator;
16
import org.eclipse.jface.viewers.ILabelDecorator;
Lines 532-537 Link Here
532
			if (oldSelectionProvider instanceof IPostSelectionProvider) {
531
			if (oldSelectionProvider instanceof IPostSelectionProvider) {
533
				((IPostSelectionProvider) oldSelectionProvider)
532
				((IPostSelectionProvider) oldSelectionProvider)
534
						.removePostSelectionChangedListener(getPostSelectionChangedListener());
533
						.removePostSelectionChangedListener(getPostSelectionChangedListener());
534
			} else {
535
				oldSelectionProvider
536
						.removeSelectionChangedListener(getPostSelectionChangedListener());
535
			}
537
			}
536
		}
538
		}
537
		if (selectionProvider != null) {
539
		if (selectionProvider != null) {
Lines 540-545 Link Here
540
			if (selectionProvider instanceof IPostSelectionProvider) {
542
			if (selectionProvider instanceof IPostSelectionProvider) {
541
				((IPostSelectionProvider) selectionProvider)
543
				((IPostSelectionProvider) selectionProvider)
542
						.addPostSelectionChangedListener(getPostSelectionChangedListener());
544
						.addPostSelectionChangedListener(getPostSelectionChangedListener());
545
			} else {
546
				selectionProvider.addSelectionChangedListener(getPostSelectionChangedListener());
543
			}
547
			}
544
		}
548
		}
545
	}
549
	}

Return to bug 341219