diff --git a/ui/org.eclipse.pde.ui/icons/elcl16/expandall.svg b/ui/org.eclipse.pde.ui/icons/elcl16/expandall.svg new file mode 100644 index 00000000000..e46d2b628a7 --- /dev/null +++ b/ui/org.eclipse.pde.ui/icons/elcl16/expandall.svg @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java index 2cd9973b826..9a38d6d832f 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java @@ -3162,7 +3162,9 @@ public class PDEUIMessages extends NLS { public static String PreferencesSection_generate_merge2; public static String PreferencesSection_generate_merge3; public static String PreferencesSection_generate_merge4; - + public static String Preference_expand_all; + public static String Preference_collapse_all; + public static String ConvertPreferencesWizardPage_title; public static String ConvertPreferencesWizardPage_description; public static String ConvertPreferencesWizardPage_source_file; diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties index e4b64b907eb..cb38538a112 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties @@ -695,6 +695,9 @@ Preferences_MainPage_showObjects = Plug-in presentation: Preferences_MainPage_useIds = Show &identifiers Preferences_MainPage_useFullNames = Show &presentation names +Preference_expand_all= Expand all preferences +Preference_collapse_all= Collapse all preferences + ExternalizeStringsWizard_title=Externalize Strings ExternalizeResolution_attrib=Externalize the {0} attribute ExternalizeResolution_text=Externalize {0}''s text diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/CompilersPreferencePage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/CompilersPreferencePage.java index 807c60d0b99..030795ca42f 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/CompilersPreferencePage.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/CompilersPreferencePage.java @@ -31,14 +31,20 @@ import org.eclipse.pde.internal.ui.PDEUIMessages; import org.eclipse.pde.internal.ui.SWTFactory; import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; +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; /** @@ -61,6 +67,9 @@ public class CompilersPreferencePage extends PreferencePage implements IWorkbenc private PDECompilersConfigurationBlock fBlock = null; private Link link = null; + private Image expandImage; + private Image collapseImage; + /** * Since {@link #applyData(Object)} can be called before createContents, store the data */ @@ -78,6 +87,33 @@ public void createControl(Composite composite) { PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.COMPILERS_PREFERENCE_PAGE); } + 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); @@ -106,9 +142,38 @@ protected Control createContents(Composite parent) { new String[] {"org.eclipse.pde.internal.ui.properties.compilersPropertyPage"}, data).open(); //$NON-NLS-1$ } })); + + 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.ui", "icons/elcl16/expandall.svg") //$NON-NLS-1$ //$NON-NLS-2$ + .createImage(); + expandItems.setImage(expandImage); + expandItems.setToolTipText(PDEUIMessages.Preference_expand_all); + + ToolItem collapseItems = new ToolItem(buttonbar, SWT.PUSH); + collapseImage = AbstractUIPlugin + .imageDescriptorFromPlugin("org.eclipse.pde.ui", //$NON-NLS-1$ + "icons/elcl16/collapseall.svg") //$NON-NLS-1$ + .createImage(); + collapseItems.setImage(collapseImage); + collapseItems.setToolTipText(PDEUIMessages.Preference_collapse_all); + fBlock = new PDECompilersConfigurationBlock(null, (IWorkbenchPreferenceContainer) getContainer()); fBlock.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);