diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/CPropertyVarsTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/CPropertyVarsTab.java index bc3273d9a6e..0747e45b18c 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/CPropertyVarsTab.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/CPropertyVarsTab.java @@ -28,11 +28,12 @@ import org.eclipse.cdt.core.model.util.CDTListComparator; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder; import org.eclipse.cdt.core.settings.model.ICResourceDescription; +import org.eclipse.cdt.managedbuilder.internal.ui.Messages; import org.eclipse.cdt.ui.newui.AbstractCPropertyTab; import org.eclipse.cdt.ui.newui.AbstractPage; import org.eclipse.cdt.ui.newui.CDTPrefUtil; import org.eclipse.cdt.ui.newui.PrefPage_Abstract; -import org.eclipse.cdt.managedbuilder.internal.ui.Messages; +import org.eclipse.cdt.ui.newui.StringListModeControl; import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver; import org.eclipse.cdt.utils.envvar.EnvVarOperationProcessor; import org.eclipse.core.runtime.CoreException; @@ -60,8 +61,6 @@ import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.events.MouseAdapter; -import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; @@ -71,7 +70,9 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; @@ -102,8 +103,8 @@ public class CPropertyVarsTab extends AbstractCPropertyTab { private TableViewer tv; private Label fStatusLabel; - private Label lb1, lb2; - + private StringListModeControl stringListModeControl; + private static final String[] fEditableTableColumnProps = new String[] { "editable name", //$NON-NLS-1$ "editable type", //$NON-NLS-1$ @@ -370,32 +371,18 @@ public class CPropertyVarsTab extends AbstractCPropertyTab { } }); - lb1 = new Label(usercomp, SWT.BORDER | SWT.CENTER); - lb1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - lb1.setToolTipText(Messages.EnvironmentTab_15); - lb1.addMouseListener(new MouseAdapter() { - @Override - public void mouseDoubleClick(MouseEvent e) { - CDTPrefUtil.spinDMode(); + stringListModeControl = new StringListModeControl(page, usercomp, 1); + stringListModeControl.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event event) { updateData(); - }}); - + } + }); fStatusLabel = new Label(usercomp, SWT.LEFT); fStatusLabel.setFont(usercomp.getFont()); fStatusLabel.setText(EMPTY_STR); fStatusLabel.setLayoutData(new GridData(GridData.BEGINNING)); fStatusLabel.setForeground(JFaceResources.getColorRegistry().get(JFacePreferences.ERROR_COLOR)); - - lb2 = new Label(usercomp, SWT.BORDER | SWT.CENTER); - lb2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - lb2.setToolTipText(Messages.EnvironmentTab_23); - lb2.addMouseListener(new MouseAdapter() { - @Override - public void mouseDoubleClick(MouseEvent e) { - CDTPrefUtil.spinWMode(); - updateLbs(null, lb2); - }}); } private void createTableControl(){ @@ -518,7 +505,7 @@ public class CPropertyVarsTab extends AbstractCPropertyTab { ICdtVariable[] _vars = getVariables(); if (_vars == null) return; - updateLbs(lb1, lb2); + stringListModeControl.updateStringListModeControl(); if (cfgd == null) { chkVars(); @@ -572,9 +559,9 @@ public class CPropertyVarsTab extends AbstractCPropertyTab { } /** - * Checks whether variable is user's - * @param v - variable to check - * @return + * Checks whether variable is user's. + * @param v - variable to check. + * @return {@code true} if the variable is user's or {@code false} otherwise. */ private boolean isUserVar(ICdtVariable v) { if (cfgd == null) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractLangsListTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractLangsListTab.java index 5db2f3c0980..b7a3f7878f0 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractLangsListTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractLangsListTab.java @@ -25,7 +25,6 @@ import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.ControlEvent; @@ -43,14 +42,12 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.ui.dialogs.PreferencesUtil; import org.eclipse.cdt.core.model.ILanguageDescriptor; import org.eclipse.cdt.core.model.LanguageManager; @@ -74,8 +71,6 @@ import org.eclipse.cdt.ui.CDTSharedImages; import org.eclipse.cdt.internal.ui.newui.Messages; public abstract class AbstractLangsListTab extends AbstractCPropertyTab { - private static final String STRING_LIST_MODE_PREFERENCE_PAGE = "org.eclipse.cdt.managedbuilder.ui.preferences.PrefPage_MultiConfig"; //$NON-NLS-1$ - protected Table table; protected TableViewer tv; protected Tree langTree; @@ -87,7 +82,6 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab { @Deprecated protected Label lb1, lb2; - private Link linkStringListMode; protected TableColumn columnToFit = null; protected ICLanguageSetting lang; @@ -98,6 +92,8 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab { protected ICLanguageSetting [] ls; // all languages known private boolean fHadSomeModification; + private StringListModeControl stringListModeControl; + private static final int BUTTON_ADD = 0; private static final int BUTTON_EDIT = 1; private static final int BUTTON_DELETE = 2; @@ -225,34 +221,18 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab { } }); - createLinkToPreferences(usercomp, 1); + stringListModeControl = new StringListModeControl(page, usercomp, 1); + stringListModeControl.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event event) { + update(); + } + }); additionalTableSet(); initButtons((getKind() == ICSettingEntry.MACRO) ? BUTTSYM : BUTTONS); updateData(getResDesc()); } - private void createLinkToPreferences(final Composite parent, int span) { - linkStringListMode = new Link(parent, SWT.NONE); - updateStringListModeLink(linkStringListMode); - linkStringListMode.setToolTipText(Messages.AbstractLangsListTab_MultiConfigStringListModeLinkHint); - - linkStringListMode.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - // Use event.text to tell which link was used - int result = PreferencesUtil.createPreferenceDialogOn(parent.getShell(), STRING_LIST_MODE_PREFERENCE_PAGE, null, null).open(); - if (result!=Window.CANCEL) { - updateStringListModeControl(); - update(); - } - } - }); - - GridData gridData = new GridData(SWT.RIGHT, SWT.NONE, true, false); - gridData.horizontalSpan = span; - linkStringListMode.setLayoutData(gridData); - } - /** * Used to display UI control for multiple configurations string list mode * (see Multiple Configurations Edit Preference page). @@ -260,38 +240,7 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab { * @since 5.3 */ protected void updateStringListModeControl() { - updateStringListModeLink(linkStringListMode); - } - - private void updateStringListModeLink(Link link) { - boolean isMultiCfg = page.isMultiCfg(); - linkStringListMode.setVisible(isMultiCfg); - if (isMultiCfg) { - String modeUnknown = Messages.AbstractLangsListTab_UnknownMode; - String modeDisplay = modeUnknown; - switch (CDTPrefUtil.getInt(CDTPrefUtil.KEY_DMODE)) { - case CDTPrefUtil.DMODE_CONJUNCTION: - modeDisplay = Messages.AbstractLangsListTab_Conjunction; - break; - case CDTPrefUtil.DMODE_DISJUNCTION: - modeDisplay = Messages.AbstractLangsListTab_Disjunction; - break; - } - - String modeWrite = modeUnknown; - switch (CDTPrefUtil.getInt(CDTPrefUtil.KEY_WMODE)) { - case CDTPrefUtil.WMODE_MODIFY: - modeWrite = Messages.AbstractLangsListTab_Modify; - break; - case CDTPrefUtil.WMODE_REPLACE: - modeWrite = Messages.AbstractLangsListTab_Replace; - break; - } - - linkStringListMode.setText(Messages.AbstractLangsListTab_StringListMode + - " "+modeDisplay+" + "+modeWrite+""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - linkStringListMode.getParent().layout(); + stringListModeControl.updateStringListModeControl(); } /** diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/EnvironmentTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/EnvironmentTab.java index 54f5edf13a2..3e75199524f 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/EnvironmentTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/EnvironmentTab.java @@ -29,8 +29,6 @@ import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.window.Window; import org.eclipse.osgi.util.TextProcessor; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.MouseAdapter; -import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; @@ -42,7 +40,9 @@ import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; @@ -76,8 +76,8 @@ public class EnvironmentTab extends AbstractCPropertyTab { private TableViewer tv; private ArrayList data = new ArrayList(); private Button b1, b2; - private Label lb1, lb2; - + private StringListModeControl stringListModeControl; + private ICConfigurationDescription cfgd = null; private StorableEnvironment vars = null; @@ -157,7 +157,7 @@ public class EnvironmentTab extends AbstractCPropertyTab { super.createControls(parent); usercomp.setLayout(new GridLayout(3, true)); Label l1 = new Label(usercomp, SWT.LEFT); - l1.setText(Messages.EnvironmentTab_0); + l1.setText(Messages.EnvironmentTab_0); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 3; l1.setLayoutData(gd); @@ -168,50 +168,59 @@ public class EnvironmentTab extends AbstractCPropertyTab { public void widgetSelected(SelectionEvent e) { updateButtons(); } + public void widgetDefaultSelected(SelectionEvent e) { - if (buttonIsEnabled(2) && table.getSelectionIndex() != -1) - buttonPressed(2); - }}); - + if (buttonIsEnabled(2) && table.getSelectionIndex() != -1) + buttonPressed(2); + } + }); + tv = new TableViewer(table); tv.setContentProvider(new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { if (inputElement != null && inputElement instanceof ArrayList) { @SuppressWarnings("unchecked") - ArrayList ar = (ArrayList)inputElement; + ArrayList ar = (ArrayList) inputElement; return ar.toArray(new TabData[0]); } return null; } - public void dispose() {} - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {} - }); + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + }); tv.setLabelProvider(new EnvironmentLabelProvider(true)); // add headers TableColumn tc = new TableColumn(table, SWT.LEFT); - tc.setText(Messages.EnvironmentTab_1); + tc.setText(Messages.EnvironmentTab_1); tc.setWidth(150); tc = new TableColumn(table, SWT.LEFT); - tc.setText(Messages.EnvironmentTab_2); + tc.setText(Messages.EnvironmentTab_2); tc.setWidth(150); if (this.getResDesc() != null) { tc = new TableColumn(table, SWT.LEFT); - tc.setText(Messages.EnvironmentTab_16); + tc.setText(Messages.EnvironmentTab_16); tc.setWidth(100); } - + gd = new GridData(GridData.FILL_BOTH); gd.horizontalSpan = 3; - table.setLayoutData(gd); - - b1 = new Button(usercomp, SWT.RADIO); - b1.setText(Messages.EnvironmentTab_3); - b1.setToolTipText(Messages.EnvironmentTab_3); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 3; - b1.setLayoutData(gd); - b1.addSelectionListener(new SelectionAdapter() { + table.setLayoutData(gd); + + b1 = new Button(usercomp, SWT.RADIO); + b1.setText(Messages.EnvironmentTab_3); + b1.setToolTipText(Messages.EnvironmentTab_3); + gd = new GridData(GridData.FILL_HORIZONTAL); + if (page.isForProject()) + gd.horizontalSpan = 2; + else + gd.horizontalSpan = 3; + b1.setLayoutData(gd); + b1.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (cfgd != null) @@ -219,15 +228,25 @@ public class EnvironmentTab extends AbstractCPropertyTab { else vars.setAppendContributedEnvironment(true); updateData(); - }}); + } + }); - b2 = new Button(usercomp, SWT.RADIO); - b2.setText(Messages.EnvironmentTab_4); - b2.setToolTipText(Messages.EnvironmentTab_4); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 3; - b2.setLayoutData(gd); - b2.addSelectionListener(new SelectionAdapter() { + if (page.isForProject()) { + stringListModeControl = new StringListModeControl(page, usercomp, 1); + stringListModeControl.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event event) { + updateData(); + } + }); + } + + b2 = new Button(usercomp, SWT.RADIO); + b2.setText(Messages.EnvironmentTab_4); + b2.setToolTipText(Messages.EnvironmentTab_4); + gd = new GridData(GridData.FILL_HORIZONTAL); + gd.horizontalSpan = 3; + b2.setLayoutData(gd); + b2.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (cfgd != null) @@ -235,33 +254,16 @@ public class EnvironmentTab extends AbstractCPropertyTab { else vars.setAppendContributedEnvironment(false); updateData(); - }}); + } + }); - if (!page.isForPrefs()) { - // dummy placeholder - new Label(usercomp, SWT.NONE).setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - lb1 = new Label(usercomp, SWT.BORDER | SWT.CENTER); - lb1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - lb1.setToolTipText(Messages.EnvironmentTab_15); - lb1.addMouseListener(new MouseAdapter() { - @Override - public void mouseDoubleClick(MouseEvent e) { - CDTPrefUtil.spinDMode(); - updateData(); - }}); - - lb2 = new Label(usercomp, SWT.BORDER | SWT.CENTER); - lb2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - lb2.setToolTipText(Messages.EnvironmentTab_23); - lb2.addMouseListener(new MouseAdapter() { - @Override - public void mouseDoubleClick(MouseEvent e) { - CDTPrefUtil.spinWMode(); - updateLbs(null, lb2); - }}); - } - initButtons(new String[] {Messages.EnvironmentTab_5,Messages.EnvironmentTab_6,Messages.EnvironmentTab_7,Messages.EnvironmentTab_8,Messages.EnvironmentTab_9}); + initButtons(new String[] { + Messages.EnvironmentTab_5, + Messages.EnvironmentTab_6, + Messages.EnvironmentTab_7, + Messages.EnvironmentTab_8, + Messages.EnvironmentTab_9 + }); } @Override @@ -342,7 +344,7 @@ public class EnvironmentTab extends AbstractCPropertyTab { Collections.sort(data); tv.setInput(data); - updateLbs(lb1, lb2); + stringListModeControl.updateStringListModeControl(); updateButtons(); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/StringListModeControl.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/StringListModeControl.java new file mode 100644 index 00000000000..819efd1d47c --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/StringListModeControl.java @@ -0,0 +1,134 @@ +/******************************************************************************* + * Copyright (c) 2010, 2010 Andrew Gvozdev (Quoin Inc.) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Andrew Gvozdev (Quoin Inc.) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.ui.newui; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.jface.window.Window; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Link; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.ui.dialogs.PreferencesUtil; + +import org.eclipse.cdt.internal.ui.newui.Messages; + +/** + * Local UI control for multiple configurations string list mode redirecting to + * Preference page "Multiple Configurations Edit". + * + * @since 5.3 + */ +public class StringListModeControl { + private static final String STRING_LIST_MODE_PREFERENCE_PAGE = "org.eclipse.cdt.managedbuilder.ui.preferences.PrefPage_MultiConfig"; //$NON-NLS-1$ + private ICPropertyProvider page; + private Link linkStringListMode; + private List listeners = new ArrayList(); + + /** + * Constructor. + * + * @param page - preference page. + * @param parent - parent {@code Composite} control. + * @param span - horizontal span for the control + */ + public StringListModeControl(ICPropertyProvider page, final Composite parent, int span) { + this.page = page; + linkStringListMode = new Link(parent, SWT.NONE); + updateStringListModeLink(linkStringListMode); + linkStringListMode.setToolTipText(Messages.AbstractLangsListTab_MultiConfigStringListModeLinkHint); + + linkStringListMode.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event event) { + // Use event.text to tell which link was used + int result = PreferencesUtil.createPreferenceDialogOn(parent.getShell(), STRING_LIST_MODE_PREFERENCE_PAGE, null, null).open(); + if (result!=Window.CANCEL) { + updateStringListModeControl(); + for (Listener listener : listeners) { + listener.handleEvent(event); + } + } + } + }); + + GridData gridData = new GridData(SWT.RIGHT, SWT.NONE, true, false); + gridData.horizontalSpan = span; + linkStringListMode.setLayoutData(gridData); + } + + /** + * Add a listener suitable for {@link org.eclipse.swt.widgets.Widget#addListener(int, Listener)}. + * + * @param eventType - the type of event to listen for, currently not used. + * @param listener - the listener which should be notified when the event occurs. + */ + public void addListener(int eventType, final Listener listener) { + listeners.add(listener); + } + + /** + * Removes the listener from the collection of listeners. + * + * @param eventType the type of event to listen for, currently not used. + * @param listener the listener which should no longer be notified. + */ + protected void removeListener (int eventType, Listener listener) { + listeners.remove(listener); + } + + /** + * Use to update the control when one of the string list modes gets modified . + */ + public void updateStringListModeControl() { + updateStringListModeLink(linkStringListMode); + } + + /** + * Updates the message of the link presented to the user. + * + * @param link - {@code Link} object to update. + */ + private void updateStringListModeLink(Link link) { + boolean isMultiCfg = page.isMultiCfg(); + linkStringListMode.setVisible(isMultiCfg); + if (isMultiCfg) { + String modeUnknown = Messages.AbstractLangsListTab_UnknownMode; + String modeDisplay = modeUnknown; + switch (CDTPrefUtil.getInt(CDTPrefUtil.KEY_DMODE)) { + case CDTPrefUtil.DMODE_CONJUNCTION: + modeDisplay = Messages.AbstractLangsListTab_Conjunction; + break; + case CDTPrefUtil.DMODE_DISJUNCTION: + modeDisplay = Messages.AbstractLangsListTab_Disjunction; + break; + } + + String modeWrite = modeUnknown; + switch (CDTPrefUtil.getInt(CDTPrefUtil.KEY_WMODE)) { + case CDTPrefUtil.WMODE_MODIFY: + modeWrite = Messages.AbstractLangsListTab_Modify; + break; + case CDTPrefUtil.WMODE_REPLACE: + modeWrite = Messages.AbstractLangsListTab_Replace; + break; + } + + linkStringListMode.setText(Messages.AbstractLangsListTab_StringListMode + + " "+modeDisplay+" + "+modeWrite+""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + linkStringListMode.getParent().layout(); + } + +}