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 246875 | Differences between
and this patch

Collapse All | Expand All

(-)Eclipse UI/org/eclipse/ui/menus/CommandContributionItem.java (+67 lines)
Lines 31-36 Link Here
31
import org.eclipse.jface.resource.LocalResourceManager;
31
import org.eclipse.jface.resource.LocalResourceManager;
32
import org.eclipse.swt.SWT;
32
import org.eclipse.swt.SWT;
33
import org.eclipse.swt.graphics.Point;
33
import org.eclipse.swt.graphics.Point;
34
import org.eclipse.swt.widgets.Button;
35
import org.eclipse.swt.widgets.Composite;
34
import org.eclipse.swt.widgets.Display;
36
import org.eclipse.swt.widgets.Display;
35
import org.eclipse.swt.widgets.Event;
37
import org.eclipse.swt.widgets.Event;
36
import org.eclipse.swt.widgets.Listener;
38
import org.eclipse.swt.widgets.Listener;
Lines 398-403 Link Here
398
		update(null);
400
		update(null);
399
		updateIcons();
401
		updateIcons();
400
	}
402
	}
403
	
404
	/* (non-Javadoc)
405
	 * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.Composite)
406
	 */
407
	public void fill(Composite parent) {
408
		if (command == null) {
409
			return;
410
		}
411
		if (widget != null || parent == null) {
412
			return;
413
		}
414
415
		// Buttons don't support the pulldown style
416
		int tmpStyle = style;
417
		if (tmpStyle == STYLE_PULLDOWN)
418
			tmpStyle = STYLE_PUSH;
419
420
		Button item = new Button(parent, tmpStyle);
421
		item.setData(this);
422
		if (workbenchHelpSystem != null) {
423
			workbenchHelpSystem.setHelp(item, helpContextId);
424
		}
425
		item.addListener(SWT.Dispose, getItemListener());
426
		item.addListener(SWT.Selection, getItemListener());
427
		widget = item;
428
429
		update(null);
430
		updateIcons();
431
	}
401
432
402
	/*
433
	/*
403
	 * (non-Javadoc)
434
	 * (non-Javadoc)
Lines 524-529 Link Here
524
					item.setEnabled(shouldBeEnabled);
555
					item.setEnabled(shouldBeEnabled);
525
				}
556
				}
526
			}
557
			}
558
			else if (widget instanceof Button) {
559
				Button item = (Button) widget;
560
561
				String text = label;
562
				if (text == null) {
563
					if (command != null) {
564
						try {
565
							text = command.getCommand().getName();
566
						} catch (NotDefinedException e) {
567
							WorkbenchPlugin.log("Update item failed " //$NON-NLS-1$
568
									+ getId(), e);
569
						}
570
					}
571
				}
572
573
				if (text != null) {
574
					item.setText(text);
575
				}
576
577
				if (tooltip != null)
578
					item.setToolTipText(tooltip);
579
				else {
580
					if (text != null) {
581
						item.setToolTipText(text);
582
					}
583
				}
584
585
				if (item.getSelection() != checkedState) {
586
					item.setSelection(checkedState);
587
				}
588
589
				boolean shouldBeEnabled = isEnabled();
590
				if (item.getEnabled() != shouldBeEnabled) {
591
					item.setEnabled(shouldBeEnabled);
592
				}
593
			}
527
		}
594
		}
528
	}
595
	}
529
596
(-)Eclipse (+20 lines)
Added Link Here
1
package org.eclipse.ui.about;
2
3
import org.eclipse.jface.dialogs.DialogPage;
4
import org.eclipse.ui.services.IServiceLocator;
5
6
/**
7
 * An installation dialog page.
8
 * 
9
 * The counterpart, {@link IInstallationPageContainer}, may be accessed by the
10
 * page (via the provided service locator) to update the status message in the
11
 * hosting dialog.
12
 * 
13
 * <em>This API is experiemental and will change before 3.5 ships</em>
14
 * 
15
 * @since 3.5
16
 */
17
public abstract class InstallationPage extends DialogPage {
18
19
	public abstract void init(IServiceLocator locator);
20
}
(-)Eclipse (+318 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 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.ui.internal.about;
13
14
import org.eclipse.core.runtime.CoreException;
15
import org.eclipse.core.runtime.IConfigurationElement;
16
import org.eclipse.core.runtime.IExtensionPoint;
17
import org.eclipse.core.runtime.Platform;
18
import org.eclipse.jface.action.ContributionManager;
19
import org.eclipse.jface.action.IContributionItem;
20
import org.eclipse.jface.action.ToolBarManager;
21
import org.eclipse.jface.dialogs.Dialog;
22
import org.eclipse.jface.dialogs.IDialogConstants;
23
import org.eclipse.jface.resource.ColorRegistry;
24
import org.eclipse.jface.resource.JFaceResources;
25
import org.eclipse.swt.SWT;
26
import org.eclipse.swt.custom.CTabFolder;
27
import org.eclipse.swt.custom.CTabItem;
28
import org.eclipse.swt.events.DisposeEvent;
29
import org.eclipse.swt.events.DisposeListener;
30
import org.eclipse.swt.events.SelectionAdapter;
31
import org.eclipse.swt.events.SelectionEvent;
32
import org.eclipse.swt.graphics.Color;
33
import org.eclipse.swt.layout.FillLayout;
34
import org.eclipse.swt.layout.GridData;
35
import org.eclipse.swt.layout.GridLayout;
36
import org.eclipse.swt.widgets.Composite;
37
import org.eclipse.swt.widgets.Control;
38
import org.eclipse.swt.widgets.Label;
39
import org.eclipse.swt.widgets.Shell;
40
import org.eclipse.swt.widgets.ToolBar;
41
import org.eclipse.ui.IWorkbenchPreferenceConstants;
42
import org.eclipse.ui.PlatformUI;
43
import org.eclipse.ui.about.IInstallationPageContainer;
44
import org.eclipse.ui.about.InstallationPage;
45
import org.eclipse.ui.internal.IWorkbenchThemeConstants;
46
import org.eclipse.ui.internal.menus.InternalMenuService;
47
import org.eclipse.ui.internal.menus.SlaveMenuService;
48
import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
49
import org.eclipse.ui.menus.IMenuService;
50
import org.eclipse.ui.services.IServiceLocator;
51
52
/**
53
 * @since 3.5
54
 * 
55
 */
56
public class InstallationDialog extends Dialog {
57
	private static final String ID = "ID"; //$NON-NLS-1$
58
59
	private CTabFolder folder;
60
	private IServiceLocator serviceLocator;
61
	private ToolBarManager toolbarManager;
62
	private ButtonManager buttonManager;
63
	private IMenuService menuService = null;
64
65
	/**
66
	 * @param parentShell
67
	 */
68
	protected InstallationDialog(Shell parentShell, IServiceLocator locator) {
69
		super(parentShell);
70
		this.serviceLocator = locator;
71
		menuService = new SlaveMenuService((InternalMenuService) serviceLocator
72
				.getService(IMenuService.class), serviceLocator, null);
73
74
	}
75
76
	/*
77
	 * (non-Javadoc)
78
	 * 
79
	 * @see
80
	 * org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets
81
	 * .Shell)
82
	 */
83
	protected void configureShell(Shell newShell) {
84
		super.configureShell(newShell);
85
		newShell.setSize(600, 768);
86
87
	}
88
89
	/*
90
	 * (non-Javadoc)
91
	 * 
92
	 * @see
93
	 * org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets
94
	 * .Composite)
95
	 */
96
	protected Control createDialogArea(Composite parent) {
97
		Composite composite = (Composite) super.createDialogArea(parent);
98
99
		createToolbar(composite);
100
101
		folder = new CTabFolder(composite, SWT.MULTI | SWT.BORDER);
102
		configureFolder();
103
		GridData folderData = new GridData(SWT.FILL, SWT.FILL, true, true);
104
		folderData.widthHint = SWT.DEFAULT;
105
		folderData.heightHint = SWT.DEFAULT;
106
		folder.setLayoutData(folderData);
107
108
		IConfigurationElement[] elements = loadElements();
109
		for (int i = 0; i < elements.length; i++) {
110
			IConfigurationElement element = elements[i];
111
			CTabItem item = new CTabItem(folder, SWT.NONE);
112
			item.setText(element
113
					.getAttribute(IWorkbenchRegistryConstants.ATT_NAME));
114
			item.setData(element);
115
			Composite control = new Composite(folder, SWT.BORDER);
116
			control.setLayout(new FillLayout());
117
			item.setControl(control);
118
119
		}
120
		folder.addSelectionListener(createFolderSelectionListener());
121
		return composite;
122
	}
123
124
	private SelectionAdapter createFolderSelectionListener() {
125
		return new SelectionAdapter() {
126
127
			public void widgetSelected(SelectionEvent e) {
128
				final CTabItem item = (CTabItem) e.item;
129
				String id = null;
130
				if (item.getData() instanceof IConfigurationElement) {
131
					final IConfigurationElement element = (IConfigurationElement) item
132
							.getData();
133
134
					id = element
135
							.getAttribute(IWorkbenchRegistryConstants.ATT_ID);
136
					item.setData(ID, id);
137
138
					Composite pageComposite = (Composite) item.getControl();
139
					try {
140
						final InstallationPage page = (InstallationPage) element
141
								.createExecutableExtension(IWorkbenchRegistryConstants.ATT_CLASS);
142
						page.createControl(pageComposite);
143
						page.init(createDialogServiceLocator(item));
144
						item.setData(page);
145
						item.addDisposeListener(new DisposeListener() {
146
147
							public void widgetDisposed(DisposeEvent e) {
148
								page.dispose();
149
							}
150
						});
151
						pageComposite.layout(true, true);
152
153
					} catch (CoreException e1) {
154
						Label label = new Label(pageComposite, SWT.NONE);
155
						label.setText(e1.getMessage());
156
						item.setData(null);
157
					}
158
159
					
160
				} else {
161
					id = (String) item.getData(ID);
162
				}
163
				
164
				menuService.releaseContributions(toolbarManager);
165
				menuService.populateContributionManager(toolbarManager,
166
						InstallationDialog.this.getToolbarURI(id));
167
				toolbarManager.update(true);
168
169
				menuService.releaseContributions(buttonManager);
170
				menuService.populateContributionManager(buttonManager,
171
						InstallationDialog.this.getButtonBarURI(id));
172
				buttonManager.update(true);
173
				createButton(buttonManager.getParent(), IDialogConstants.OK_ID,
174
						IDialogConstants.OK_LABEL, true);
175
				buttonManager.getParent().layout();
176
177
			}
178
		};
179
	}
180
181
	private void createToolbar(Composite composite) {
182
		toolbarManager = new ToolBarManager(SWT.BORDER);
183
		toolbarManager.createControl(composite);
184
		ToolBar toolbar = toolbarManager.getControl();
185
		{
186
			GridData toolbarData = new GridData(SWT.FILL, SWT.FILL, true, false);
187
			toolbarData.widthHint = SWT.DEFAULT;
188
			toolbarData.heightHint = SWT.DEFAULT;
189
			toolbar.setLayoutData(toolbarData);
190
		}
191
	}
192
193
	/*
194
	 * (non-Javadoc)
195
	 * 
196
	 * @see
197
	 * org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse
198
	 * .swt.widgets.Composite)
199
	 */
200
	protected void createButtonsForButtonBar(Composite parent) {
201
		buttonManager = new ButtonManager(parent);
202
	}
203
204
	/**
205
	 * @param folder2
206
	 */
207
	private void configureFolder() {
208
		ColorRegistry reg = JFaceResources.getColorRegistry();
209
		Color c1 = reg.get(IWorkbenchThemeConstants.ACTIVE_TAB_BG_START), c2 = reg
210
				.get(IWorkbenchThemeConstants.ACTIVE_TAB_BG_END);
211
		folder.setSelectionBackground(new Color[] { c1, c2 }, new int[] { 50 },
212
				true);
213
		folder.setSelectionForeground(reg
214
				.get(IWorkbenchThemeConstants.ACTIVE_TAB_TEXT_COLOR));
215
		folder.setSimple(PlatformUI.getPreferenceStore().getBoolean(
216
				IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS));
217
218
	}
219
220
	/**
221
	 * @return
222
	 */
223
	private IConfigurationElement[] loadElements() {
224
		IExtensionPoint point = Platform.getExtensionRegistry()
225
				.getExtensionPoint("org.eclipse.ui", "installationPages"); //$NON-NLS-1$ //$NON-NLS-2$
226
		return point.getConfigurationElements();
227
	}
228
229
	private String getButtonBarURI(String id) {
230
		return "toolbar:org.eclipse.ui.installationDialog.buttonbar/" + id; //$NON-NLS-1$
231
	}
232
233
	protected String getToolbarURI(String id) {
234
		return "toolbar:org.eclipse.ui.installationDialog/" + id; //$NON-NLS-1$
235
	}
236
237
	private IServiceLocator createDialogServiceLocator(final CTabItem item) {
238
		return new IServiceLocator() {
239
240
			public Object getService(Class api) {
241
				if (api == IInstallationPageContainer.class)
242
					return new IInstallationPageContainer() {
243
244
						public String getButtonBarURI() {
245
							return InstallationDialog.this
246
									.getButtonBarURI((String) item.getData(ID));
247
						}
248
249
						public String getToolbarURI() {
250
							return InstallationDialog.this
251
									.getToolbarURI((String) item.getData(ID));
252
						}
253
254
						public void updateMessage() {
255
							// TBD
256
257
						}
258
					};
259
				else if (api == IMenuService.class) {
260
					return menuService;
261
				}
262
				return serviceLocator.getService(api);
263
			}
264
265
			public boolean hasService(Class api) {
266
				if (api == IInstallationPageContainer.class)
267
					return true;
268
				return serviceLocator.hasService(api);
269
			}
270
		};
271
	}
272
}
273
274
class ButtonManager extends ContributionManager {
275
276
	private Composite composite;
277
278
	/**
279
	 * 
280
	 */
281
	public ButtonManager(Composite composite) {
282
		this.composite = composite;
283
	}
284
285
	/**
286
	 * @return
287
	 */
288
	public Composite getParent() {
289
		return composite;
290
	}
291
292
	/*
293
	 * (non-Javadoc)
294
	 * 
295
	 * @see org.eclipse.jface.action.IContributionManager#update(boolean)
296
	 */
297
	public void update(boolean force) {
298
		IContributionItem[] items = getItems();
299
		Control[] children = composite.getChildren();
300
301
		int visibleChildren = 0;
302
		for (int i = 0; i < children.length; i++) {
303
			Control control = children[i];
304
			control.dispose();
305
		}
306
307
		for (int i = 0; i < items.length; i++) {
308
			IContributionItem item = items[i];
309
			if (item.isVisible()) {
310
				item.fill(composite);
311
				visibleChildren++;
312
			}
313
		}
314
		GridLayout compositeLayout = (GridLayout) composite.getLayout();
315
		compositeLayout.numColumns = visibleChildren;
316
		composite.layout(true);
317
	}
318
}
(-)Eclipse (+15 lines)
Added Link Here
1
package org.eclipse.ui.internal.about;
2
3
import org.eclipse.core.commands.AbstractHandler;
4
import org.eclipse.core.commands.ExecutionEvent;
5
import org.eclipse.ui.handlers.HandlerUtil;
6
7
public class InstallationHandler extends AbstractHandler{
8
9
	public Object execute(ExecutionEvent event) {		
10
		InstallationDialog dialog = new InstallationDialog(HandlerUtil.getActiveShell(event), HandlerUtil.getActiveWorkbenchWindow(event));
11
		dialog.open();
12
		return null;
13
	}
14
15
}
(-)Eclipse (+48 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 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.ui.about;
13
14
/**
15
 * <em>This API is experiemental and will change before 3.5 ships</em>
16
 * 
17
 * @since 3.5
18
 */
19
public interface IInstallationPageContainer {
20
21
	/**
22
	 * Updates the message (or error message) shown in the message line to
23
	 * reflect the state of the currently active page in this container.
24
	 * <p>
25
	 * This method is called by the container itself when its preference page
26
	 * changes and may be called by the page at other times to force a message
27
	 * update.
28
	 * </p>
29
	 */
30
	public void updateMessage();
31
32
	/**
33
	 * URI to be provided to the IMenuService for additions to the toolbar.
34
	 * 
35
	 * @return
36
	 */
37
	public String getToolbarURI();
38
39
	/**
40
	 * URI to be provided to the IMenuService for additions to the button bar.
41
	 * 
42
	 * This may not be desirable. We've never had a "button manager" before now,
43
	 * and this may be a can of worms we dont want to open.
44
	 * 
45
	 * @return
46
	 */
47
	public String getButtonBarURI();
48
}
(-)plugin.properties (-1 / +4 lines)
Lines 55-60 Link Here
55
ExtPoint.workingSets = Working set dialogs
55
ExtPoint.workingSets = Working set dialogs
56
ExtPoint.browserSupport = Browser Support
56
ExtPoint.browserSupport = Browser Support
57
ExtPoint.statusHandlers = Status Handlers
57
ExtPoint.statusHandlers = Status Handlers
58
ExtPoint.installationPages = Installation Pages
58
ExtPoint.tweaklets = Tweaklets (internal/experimental)
59
ExtPoint.tweaklets = Tweaklets (internal/experimental)
59
60
60
Views.Category.Basic = General
61
Views.Category.Basic = General
Lines 98-103 Link Here
98
99
99
command.aboutAction.description = Open the about dialog
100
command.aboutAction.description = Open the about dialog
100
command.aboutAction.name = About
101
command.aboutAction.name = About
102
command.installationDialog.description = Open the installation dialog
103
command.installationDialog.name = Installation Information
101
command.activateEditor.description = Activate the editor
104
command.activateEditor.description = Activate the editor
102
command.activateEditor.name = Activate Editor
105
command.activateEditor.name = Activate Editor
103
command.addBookmark.description = Add a bookmark
106
command.addBookmark.description = Add a bookmark
Lines 327-330 Link Here
327
command.quickMenu.name = Open Quick Menu
330
command.quickMenu.name = Open Quick Menu
328
command.quickMenu.uri.name = Location URI
331
command.quickMenu.uri.name = Location URI
329
command.showIn.name = Show In
332
command.showIn.name = Show In
330
command.showIn.targetId.name = Show In Target Id
333
command.showIn.targetId.name = Show In Target Id
(-)plugin.xml (+8 lines)
Lines 49-54 Link Here
49
   <extension-point id="workingSets" name="%ExtPoint.workingSets" schema="schema/workingSets.exsd"/>
49
   <extension-point id="workingSets" name="%ExtPoint.workingSets" schema="schema/workingSets.exsd"/>
50
   <extension-point id="browserSupport" name="%ExtPoint.browserSupport" schema="schema/browserSupport.exsd"/>
50
   <extension-point id="browserSupport" name="%ExtPoint.browserSupport" schema="schema/browserSupport.exsd"/>
51
   <extension-point id="internalTweaklets" name="%ExtPoint.tweaklets" schema="schema/internalTweaklets.exsd"/>
51
   <extension-point id="internalTweaklets" name="%ExtPoint.tweaklets" schema="schema/internalTweaklets.exsd"/>
52
   <extension-point id="installationPages" name="%ExtPoint.installationPages" schema="schema/installationPages.exsd"/>
52
   
53
   
53
   <extension
54
   <extension
54
         point="org.eclipse.ui.contexts">
55
         point="org.eclipse.ui.contexts">
Lines 694-699 Link Here
694
            id="org.eclipse.ui.help.aboutAction"
695
            id="org.eclipse.ui.help.aboutAction"
695
            name="%command.aboutAction.name"/>
696
            name="%command.aboutAction.name"/>
696
      <command
697
      <command
698
            categoryId="org.eclipse.ui.category.help"
699
            defaultHandler="org.eclipse.ui.internal.about.InstallationHandler"
700
            description="%command.installationDialog.description"
701
            helpContextId="org.eclipse.ui.about_action_context"
702
            id="org.eclipse.ui.help.installationDialog"
703
            name="%command.installationDialog.name"/>            
704
      <command
697
            categoryId="org.eclipse.ui.category.file"
705
            categoryId="org.eclipse.ui.category.file"
698
            defaultHandler="org.eclipse.ui.internal.handlers.WizardHandler$New"
706
            defaultHandler="org.eclipse.ui.internal.handlers.WizardHandler$New"
699
            description="%command.newWizard.description"
707
            description="%command.newWizard.description"
(-)schema/installationPages.exsd (+119 lines)
Added Link Here
1
<?xml version='1.0' encoding='UTF-8'?>
2
<!-- Schema file written by PDE -->
3
<schema targetNamespace="org.eclipse.ui" xmlns="http://www.w3.org/2001/XMLSchema">
4
<annotation>
5
      <appinfo>
6
         <meta.schema plugin="org.eclipse.ui" id="installationPages" name="Installation Dialog Pages"/>
7
      </appinfo>
8
      <documentation>
9
         [Enter description of this extension point.]
10
      </documentation>
11
   </annotation>
12
13
   <element name="extension">
14
      <annotation>
15
         <appinfo>
16
            <meta.element />
17
         </appinfo>
18
      </annotation>
19
      <complexType>
20
         <sequence>
21
            <element ref="page" minOccurs="0" maxOccurs="unbounded"/>
22
         </sequence>
23
         <attribute name="point" type="string" use="required">
24
            <annotation>
25
               <documentation>
26
                  
27
               </documentation>
28
            </annotation>
29
         </attribute>
30
         <attribute name="id" type="string">
31
            <annotation>
32
               <documentation>
33
                  
34
               </documentation>
35
            </annotation>
36
         </attribute>
37
         <attribute name="name" type="string">
38
            <annotation>
39
               <documentation>
40
                  
41
               </documentation>
42
               <appinfo>
43
                  <meta.attribute translatable="true"/>
44
               </appinfo>
45
            </annotation>
46
         </attribute>
47
      </complexType>
48
   </element>
49
50
   <element name="page">
51
      <complexType>
52
         <attribute name="id" type="string" use="required">
53
            <annotation>
54
               <documentation>
55
                  
56
               </documentation>
57
            </annotation>
58
         </attribute>
59
         <attribute name="class" type="string" use="required">
60
            <annotation>
61
               <documentation>
62
                  
63
               </documentation>
64
               <appinfo>
65
                  <meta.attribute kind="java" basedOn="org.eclipse.ui.branding.InstallationPage:"/>
66
               </appinfo>
67
            </annotation>
68
         </attribute>
69
         <attribute name="name" type="string" use="required">
70
            <annotation>
71
               <documentation>
72
                  
73
               </documentation>
74
               <appinfo>
75
                  <meta.attribute translatable="true"/>
76
               </appinfo>
77
            </annotation>
78
         </attribute>
79
      </complexType>
80
   </element>
81
82
   <annotation>
83
      <appinfo>
84
         <meta.section type="since"/>
85
      </appinfo>
86
      <documentation>
87
         [Enter the first release in which this extension point appears.]
88
      </documentation>
89
   </annotation>
90
91
   <annotation>
92
      <appinfo>
93
         <meta.section type="examples"/>
94
      </appinfo>
95
      <documentation>
96
         [Enter extension point usage example here.]
97
      </documentation>
98
   </annotation>
99
100
   <annotation>
101
      <appinfo>
102
         <meta.section type="apiinfo"/>
103
      </appinfo>
104
      <documentation>
105
         [Enter API information here.]
106
      </documentation>
107
   </annotation>
108
109
   <annotation>
110
      <appinfo>
111
         <meta.section type="implementation"/>
112
      </appinfo>
113
      <documentation>
114
         [Enter information about supplied implementation of this extension point.]
115
      </documentation>
116
   </annotation>
117
118
119
</schema>

Return to bug 246875