diff --git a/apitools/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF index 184c5d0bd9d..e1ea8773c59 100644 --- a/apitools/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF +++ b/apitools/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.pde.api.tools.ui; singleton:=true -Bundle-Version: 1.4.200.qualifier +Bundle-Version: 1.4.300.qualifier Bundle-Localization: plugin Bundle-ActivationPolicy: lazy Bundle-Vendor: %providerName diff --git a/apitools/org.eclipse.pde.api.tools.ui/icons/full/elcl16/collapseall.svg b/apitools/org.eclipse.pde.api.tools.ui/icons/full/elcl16/collapseall.svg new file mode 100644 index 00000000000..16b4be366bd --- /dev/null +++ b/apitools/org.eclipse.pde.api.tools.ui/icons/full/elcl16/collapseall.svg @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsPreferencePage.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsPreferencePage.java index 522f615e4e9..c5b91591322 100644 --- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsPreferencePage.java +++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsPreferencePage.java @@ -31,15 +31,21 @@ import org.eclipse.pde.api.tools.ui.internal.IApiToolsHelpContextIds; import org.eclipse.pde.api.tools.ui.internal.SWTFactory; import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Link; +import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.swt.widgets.ToolItem; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.PreferencesUtil; +import org.eclipse.ui.forms.widgets.ExpandableComposite; +import org.eclipse.ui.plugin.AbstractUIPlugin; import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; /** @@ -85,6 +91,9 @@ public class ApiErrorsWarningsPreferencePage extends PreferencePage implements I ApiErrorsWarningsConfigurationBlock block = null; private Link link = null; + private Image expandImage; + private Image collapseImage; + /** * Since {@link #applyData(Object)} can be called before createContents, * store the data @@ -98,6 +107,33 @@ public ApiErrorsWarningsPreferencePage() { super(PreferenceMessages.ApiErrorsWarningsPreferencePage_0); } + private void expandCollapseItems(Composite parent, boolean expandPage) { + for (Control control : parent.getChildren()) { + if (control instanceof ExpandableComposite page) { + page.setExpanded(expandPage); + Control child = page.getClient(); + if (child != null && !child.isDisposed()) { + child.setVisible(expandPage); + } + } else if (control instanceof Composite) { + expandCollapseItems((Composite) control, expandPage); + } + } + parent.layout(true, true); + ScrolledComposite composite = getScrolledComposite(parent); + if (composite != null) { + composite.setMinSize(parent.computeSize(SWT.DEFAULT, SWT.DEFAULT)); + } + } + + private ScrolledComposite getScrolledComposite(Composite comp) { + Composite currentComposite = comp; + while (currentComposite != null && !(currentComposite instanceof ScrolledComposite)) { + currentComposite = currentComposite.getParent(); + } + return (ScrolledComposite) currentComposite; + } + @Override protected Control createContents(Composite parent) { Composite comp = SWTFactory.createComposite(parent, 1, 1, GridData.FILL_BOTH, 0, 0); @@ -127,9 +163,38 @@ protected Control createContents(Composite parent) { new String[] { IApiToolsConstants.ID_ERRORS_WARNINGS_PROP_PAGE }, data).open(); } })); + + ToolBar buttonbar = new ToolBar(comp, SWT.FLAT | SWT.RIGHT); + buttonbar.setLayoutData(new GridData(SWT.END, SWT.CENTER, true, + false)); + ToolItem expandItems = new ToolItem(buttonbar, SWT.PUSH); + expandImage = AbstractUIPlugin + .imageDescriptorFromPlugin("org.eclipse.pde.api.tools.ui", "icons/full/elcl16/expandall.svg") //$NON-NLS-1$ //$NON-NLS-2$ + .createImage(); + expandItems.setImage(expandImage); + expandItems.setToolTipText(PreferenceMessages.PREFERENCE_EXPAND_ALL); + + ToolItem collapseItems = new ToolItem(buttonbar, SWT.PUSH); + collapseImage = AbstractUIPlugin + .imageDescriptorFromPlugin("org.eclipse.pde.api.tools.ui", "icons/full/elcl16/collapseall.svg") //$NON-NLS-1$ //$NON-NLS-2$ + .createImage(); + collapseItems.setImage(collapseImage); + collapseItems.setToolTipText(PreferenceMessages.PREFERENCE_COLLAPSE_ALL); + block = new ApiErrorsWarningsConfigurationBlock(null, (IWorkbenchPreferenceContainer) getContainer()); block.createControl(comp); + expandItems.addListener(SWT.Selection, e -> expandCollapseItems(comp, true)); + collapseItems.addListener(SWT.Selection, e -> expandCollapseItems(comp, false)); + comp.addDisposeListener(e -> { + if (!expandImage.isDisposed() && expandImage != null) { + expandImage.dispose(); + } + if (!collapseImage.isDisposed() && collapseImage != null) { + collapseImage.dispose(); + } + }); + // Initialize with data map in case applyData was called before // createContents applyData(fPageData); diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/PreferenceMessages.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/PreferenceMessages.java index 06c3097d6cd..320bba0949a 100644 --- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/PreferenceMessages.java +++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/PreferenceMessages.java @@ -165,6 +165,9 @@ public class PreferenceMessages extends NLS { public static String CONSTRUCTOR_CHANGED_DECREASE_ACCESS; public static String CONSTRUCTOR_REMOVED_TYPE_PARAMETER; + public static String PREFERENCE_COLLAPSE_ALL; + public static String PREFERENCE_EXPAND_ALL; + public static String TYPE_PARAMETER_ADDED_CLASS_BOUND; public static String TYPE_PARAMETER_ADDED_INTERFACE_BOUND; public static String TYPE_PARAMETER_CHANGED_CLASS_BOUND; diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/preferencemessages.properties b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/preferencemessages.properties index bb7e1ab133c..3912a5f9cd8 100644 --- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/preferencemessages.properties +++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/preferencemessages.properties @@ -139,6 +139,9 @@ CONSTRUCTOR_CHANGED_VARARGS_TO_ARRAY=Converted variable argument type to array t CONSTRUCTOR_CHANGED_DECREASE_ACCESS=The visibility has been reduced: CONSTRUCTOR_REMOVED_TYPE_PARAMETER=A type parameter has been removed: +PREFERENCE_COLLAPSE_ALL= Collapse all preferences +PREFERENCE_EXPAND_ALL= Expand all preferences + TYPE_PARAMETER_ADDED_CLASS_BOUND=A class bound has been added: TYPE_PARAMETER_ADDED_INTERFACE_BOUND=An interface bound has been added: TYPE_PARAMETER_CHANGED_CLASS_BOUND=A class bound has been modified: