diff --git a/build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF b/build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF index cc5bbda30ad..067ec57a98d 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF +++ b/build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.managedbuilder.ui; singleton:=true -Bundle-Version: 5.1.0.qualifier +Bundle-Version: 5.2.0.qualifier Bundle-Activator: org.eclipse.cdt.managedbuilder.ui.properties.ManagedBuilderUIPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/preferences/PropertyPageDefsTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/preferences/PropertyPageDefsTab.java index 990fad8a0b4..008836d5539 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/preferences/PropertyPageDefsTab.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/preferences/PropertyPageDefsTab.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007 Intel Corporation and others. + * Copyright (c) 2007, 2009 Intel Corporation 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 @@ -7,6 +7,7 @@ * * Contributors: * Intel Corporation - initial API and implementation + * Miwako Tokugawa (Intel Corporation) - Fixed-location tooltip support *******************************************************************************/ package org.eclipse.cdt.managedbuilder.ui.preferences; @@ -33,16 +34,19 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab { private Button show_mng; private Button show_tool; private Button show_exp; + private Button show_tipbox; private Button b_0; private Button b_1; private Button b_2; private Button b_3; + private Button b_4; private Button s_0; private Button s_1; private Button s_2; + @Override public void createControls(Composite parent) { super.createControls(parent); usercomp.setLayout(new GridLayout(1, false)); @@ -62,6 +66,10 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab { show_exp = new Button(usercomp, SWT.CHECK); show_exp.setText(UIMessages.getString("PropertyPageDefsTab.10")); //$NON-NLS-1$ show_exp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + show_tipbox = new Button(usercomp, SWT.CHECK); + show_tipbox.setText(UIMessages.getString("PropertyPageDefsTab.16")); //$NON-NLS-1$ + show_tipbox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Group saveGrp = new Group(usercomp, SWT.NONE); saveGrp.setText(UIMessages.getString("PropertyPageDefsTab.11")); //$NON-NLS-1$ @@ -101,6 +109,7 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab { show_mng.setSelection(!CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOMNG)); show_tool.setSelection(!CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOTOOLM)); show_exp.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_EXPORT)); + show_tipbox.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_TIPBOX)); switch (CDTPrefUtil.getInt(CDTPrefUtil.KEY_DISC_NAMES)) { case CDTPrefUtil.DISC_NAMING_UNIQUE_OR_BOTH: b_0.setSelection(true); break; @@ -116,11 +125,13 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab { } } + @Override protected void performOK() { CDTPrefUtil.setBool(CDTPrefUtil.KEY_DTREE, show_tree.getSelection()); CDTPrefUtil.setBool(CDTPrefUtil.KEY_NOMNG, !show_mng.getSelection()); CDTPrefUtil.setBool(CDTPrefUtil.KEY_NOTOOLM, !show_tool.getSelection()); CDTPrefUtil.setBool(CDTPrefUtil.KEY_EXPORT, show_exp.getSelection()); + CDTPrefUtil.setBool(CDTPrefUtil.KEY_TIPBOX, show_tipbox.getSelection()); int x = 0; if (b_1.getSelection()) x = 1; else if (b_2.getSelection()) x = 2; @@ -133,21 +144,27 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab { CDTPrefUtil.setInt(CDTPrefUtil.KEY_POSSAVE, x); } + @Override protected void performDefaults() { show_tree.setSelection(false); show_mng.setSelection(true); show_tool.setSelection(true); show_exp.setSelection(false); + show_tipbox.setSelection(false); b_0.setSelection(true); b_1.setSelection(false); b_2.setSelection(false); b_3.setSelection(false); + b_4.setSelection(false); s_0.setSelection(true); s_1.setSelection(false); s_2.setSelection(false); } + @Override protected void performApply(ICResourceDescription src, ICResourceDescription dst) { performOK(); } + @Override protected void updateData(ICResourceDescription cfg) {} // Do nothing. Data is read once after creation + @Override protected void updateButtons() {} // Do nothing. No buttons to update } diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/AbstractToolSettingUI.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/AbstractToolSettingUI.java index 77b54680071..93a692e49a9 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/AbstractToolSettingUI.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/AbstractToolSettingUI.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2007 Rational Software Corporation and others. + * Copyright (c) 2004, 2009 Rational Software Corporation 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 @@ -8,6 +8,7 @@ * Contributors: * IBM Rational Software - Initial API and implementation * Intel corp. 2007 - modification for new CDT model. + * Miwako Tokugawa (Intel Corporation) - Fixed-location tooltip support *******************************************************************************/ package org.eclipse.cdt.managedbuilder.ui.properties; @@ -21,10 +22,11 @@ public abstract class AbstractToolSettingUI extends FieldEditorPreferencePage { protected AbstractCBuildPropertyTab buildPropPage; protected IResourceInfo fInfo; - private boolean dirty = false; + private boolean dirty = false; + private boolean toolTipBoxNeeded = false; /** - * @param style + * */ protected AbstractToolSettingUI(IResourceInfo info) { this(info, GRID); @@ -41,6 +43,7 @@ public abstract class AbstractToolSettingUI extends FieldEditorPreferencePage { /* (non-Javadoc) * @see org.eclipse.jface.preference.FieldEditorPreferencePage#createFieldEditors() */ + @Override protected void createFieldEditors() { // Get the preference store for the build settings IPreferenceStore settings = getToolSettingsPrefStore(); @@ -48,15 +51,32 @@ public abstract class AbstractToolSettingUI extends FieldEditorPreferencePage { } /** - * Return the tool settings preference store + * @return the tool settings preference store */ protected ToolSettingsPrefStore getToolSettingsPrefStore() { return ToolSettingsPrefStore.getDefault(); } + /** + * @param flag indicating that tooltip box need to be displayed + * @since 5.2 + */ + protected void setToolTipBoxNeeded(boolean flag) { + toolTipBoxNeeded = flag; + } + + /** + * @return true if this page needs to have a tool tip box. + * @since 5.2 + */ + protected boolean isToolTipBoxNeeded() { + return toolTipBoxNeeded; + } + /** * Method called when the value of a dialog field changes */ + @Override public void propertyChange(PropertyChangeEvent event) { super.propertyChange(event); if (event.getProperty().equals(FieldEditor.VALUE)) { diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java index e0453c80123..afdb6c00063 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2003, 2008 IBM Corporation and others. + * Copyright (c) 2003, 2009 IBM Corporation 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 @@ -8,6 +8,7 @@ * Contributors: * IBM Rational Software - Initial API and implementation * ARM Ltd. - basic tooltip support + * Miwako Tokugawa (Intel Corporation) - Fixed-location tooltip support *******************************************************************************/ package org.eclipse.cdt.managedbuilder.ui.properties; @@ -41,11 +42,17 @@ import org.eclipse.jface.preference.FileFieldEditor; import org.eclipse.jface.preference.StringFieldEditor; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.osgi.util.TextProcessor; +import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Combo; 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.Text; import org.eclipse.ui.PlatformUI; public class BuildOptionSettingsUI extends AbstractToolSettingUI { @@ -59,12 +66,44 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { private int curr = -1; private Map fieldEditorsToParentMap = new HashMap(); + /** True if the user selected "Display tool option tips at a fixed location" in Preferences */ + private boolean displayFixedTip; + /** type of mouse action the displayFixedTip responds to. + ** currently set to Enter rather than Hover since the former seems more responsive **/ + private final static int selectAction = SWT.MouseEnter; + + private class TipInfo { + private String name; + private String tip; + + public TipInfo(String name, String tip) { + this.name = name; + this.tip = tip; + } + protected String getName() { + return name; + } + protected String getTip() { + return tip; + } + } + public BuildOptionSettingsUI(AbstractCBuildPropertyTab page, IResourceInfo info, IHoldsOptions optionHolder, IOptionCategory _category) { + this(page, info, optionHolder, _category, false); + } + + /** + * @since 5.2 + */ + public BuildOptionSettingsUI(AbstractCBuildPropertyTab page, + IResourceInfo info, IHoldsOptions optionHolder, + IOptionCategory _category, boolean _displayFixedTip) { super(info); this.category = _category; + this.displayFixedTip = _displayFixedTip; this.optionHolder = optionHolder; buildPropPage = page; if (info instanceof MultiItemsHolder) { @@ -123,10 +162,14 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { } /* (non-Javadoc) - * @see org.eclipse.jface.preference.FieldEditorPreferencePage#createFieldEditors() + * @see org.eclipse.jface.preference.FieldEditorPreferencePage#Editors() */ @Override protected void createFieldEditors() { + // true if he user selected "Display tool option tips at a fixed location" in Preferences AND + // and we are displaying the tool tip box on this page because one or more option has non-empty tool tip. + boolean pageHasToolTipBox = isToolTipBoxNeeded(); + // Get the preference store for the build settings super.createFieldEditors(); // Iterate over the options in the category and create a field editor @@ -138,7 +181,6 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { IHoldsOptions holder = (IHoldsOptions)options[index][0]; if (holder == null) break; // The array may not be full IOption opt = (IOption)options[index][1]; - String optId = getToolSettingsPrefStore().getOptionId(opt); // check to see if the option has an applicability calculator IOptionApplicability applicabilityCalculator = opt.getApplicabilityCalculator(); @@ -146,6 +188,15 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { if (applicabilityCalculator == null || applicabilityCalculator.isOptionVisible(config, holder, opt)) { + String optId = getToolSettingsPrefStore().getOptionId(opt); + String nameStr = TextProcessor.process(opt.getName()); + String tipStr = TextProcessor.process(opt.getToolTip()); + String contextId = opt.getContextId(); + + if (pageHasToolTipBox && (tipStr==null || tipStr.trim().length()==0)) { + tipStr = Messages.getString("BuildOptionSettingsUI.0"); //$NON-NLS-1$ + } + try { // Figure out which type the option is and add a proper field // editor for it @@ -160,11 +211,11 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { // browse button of the appropriate type. switch (opt.getBrowseType()) { case IOption.BROWSE_DIR: { - stringField = new DirectoryFieldEditor(optId, TextProcessor.process(opt.getName()), fieldEditorParent); + stringField = new DirectoryFieldEditor(optId, nameStr, fieldEditorParent); } break; case IOption.BROWSE_FILE: { - stringField = new FileFieldEditor(optId, TextProcessor.process(opt.getName()), fieldEditorParent) { + stringField = new FileFieldEditor(optId, nameStr, fieldEditorParent) { /** * Do not perform validity check on the file name due to losing focus, * see http://bugs.eclipse.org/289448 @@ -178,7 +229,7 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { } break; case IOption.BROWSE_NONE: { - final StringFieldEditorM local = new StringFieldEditorM(optId, TextProcessor.process(opt.getName()), fieldEditorParent); + final StringFieldEditorM local = new StringFieldEditorM(optId, nameStr, fieldEditorParent); stringField = local; local.getTextControl().addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { @@ -191,22 +242,33 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { throw new BuildException(null); } } - - stringField.getTextControl(fieldEditorParent).setToolTipText(TextProcessor.process(opt.getToolTip())); - stringField.getLabelControl(fieldEditorParent).setToolTipText(TextProcessor.process(opt.getToolTip())); - PlatformUI.getWorkbench().getHelpSystem().setHelp(stringField.getTextControl(fieldEditorParent), opt.getContextId()); + Label label = stringField.getLabelControl(fieldEditorParent); + Text text = stringField.getTextControl(fieldEditorParent); + if (pageHasToolTipBox) { + label.setData(new TipInfo(nameStr,tipStr)); + label.addListener(selectAction, tipSetListener); + text.setData(new TipInfo(nameStr,tipStr)); + text.addListener(selectAction, tipSetListener); + } else { + label.setToolTipText(tipStr); + text.setToolTipText(tipStr); + } + if (!contextId.equals(AbstractPage.EMPTY_STR)) { + PlatformUI.getWorkbench().getHelpSystem().setHelp(text, contextId); + } fieldEditor = stringField; } break; case IOption.BOOLEAN: { fieldEditor = new TriStateBooleanFieldEditor( optId, - TextProcessor.process(opt.getName()), - opt.getToolTip(), + nameStr, + tipStr, fieldEditorParent, - opt.getContextId(), + contextId, ohs, curr); + // tipStr is handled in TriStateBooleanFieldEditor constructor } break; case IOption.ENUMERATED: { @@ -228,7 +290,19 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { String[] enumValidNames = new String[enumValidList.size()]; enumValidList.copyInto(enumValidNames); - fieldEditor = new BuildOptionComboFieldEditor(optId, TextProcessor.process(opt.getName()), TextProcessor.process(opt.getToolTip()), opt.getContextId(), enumValidNames, sel, fieldEditorParent); + // if (displayFixedTip==false), tooltip was already set in BuildOptionComboFieldEditor constructor. + String tooltipHoverStr = displayFixedTip ? null : tipStr; + fieldEditor = new BuildOptionComboFieldEditor(optId, nameStr, + tooltipHoverStr, contextId, enumValidNames, sel, fieldEditorParent); + + if (pageHasToolTipBox) { + Combo combo = ((BuildOptionComboFieldEditor)fieldEditor).getComboControl(); + Label label = fieldEditor.getLabelControl(fieldEditorParent); + combo.setData(new TipInfo(nameStr,tipStr)); + combo.addListener(selectAction, tipSetListener); + label.setData(new TipInfo(nameStr,tipStr)); + label.addListener(selectAction, tipSetListener); + } } break; case IOption.INCLUDE_PATH: @@ -245,8 +319,17 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { case IOption.UNDEF_INCLUDE_FILES: case IOption.UNDEF_LIBRARY_PATHS: case IOption.UNDEF_LIBRARY_FILES: - case IOption.UNDEF_MACRO_FILES: { - fieldEditor = new FileListControlFieldEditor(optId, TextProcessor.process(opt.getName()), TextProcessor.process(opt.getToolTip()), opt.getContextId(), fieldEditorParent, opt.getBrowseType()); + case IOption.UNDEF_MACRO_FILES: + { + // if (displayFixedTip==false), tooltip was already set in FileListControlFieldEditor constructor. + String tooltipHoverStr = displayFixedTip ? null : tipStr; + fieldEditor = new FileListControlFieldEditor(optId, nameStr, + tooltipHoverStr, contextId, fieldEditorParent, opt.getBrowseType()); + if (pageHasToolTipBox) { + Label label = fieldEditor.getLabelControl(fieldEditorParent); + label.setData(new TipInfo(nameStr,tipStr)); + label.addListener(selectAction, tipSetListener); + } } break; default: @@ -455,6 +538,10 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { fieldEditor.setEnabled(true, parent); } } + + private boolean hasStr(String tipStr) { + return (tipStr!=null && tipStr.trim().length()>0); + } /* (non-Javadoc) * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) @@ -583,6 +670,35 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { public void setValues() { updateFields(); } + + /** + * @return true if the page needs to have the tool tip box. + * @since 5.2 + */ + protected boolean needToolTipBox(IHoldsOptions optionHolder, IOptionCategory category) { + if (optionHolder instanceof ITool) { // option category page + Object[][] options = category.getOptions(fInfo, optionHolder); + for (int index = 0; index < options.length; ++index) { + IHoldsOptions holder = (IHoldsOptions)options[index][0]; + if (holder == null) break; // The array may not be full + IOption opt = (IOption)options[index][1]; + String tipStr = TextProcessor.process(opt.getToolTip()); + + // check to see if the option has an applicability calculator + IOptionApplicability applicabilityCalculator = opt.getApplicabilityCalculator(); + IBuildObject config = fInfo; + + if (applicabilityCalculator == null || applicabilityCalculator.isOptionVisible(config, holder, opt)) { + if (hasStr(tipStr)) { + return true; // an option with a tip string was found. + } + } + } + } + // A tool option summary page does not list individual options + // so never should have the box + return false; + } /** * The items shown in an enumerated option may depend on other option values. @@ -633,7 +749,7 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { enumValidList.copyInto(enumValidNames); if ( selectNewEnum ) { - // apparantly the currently selected enum value is not part anymore of the enum list + // apparently the currently selected enum value is not part anymore of the enum list // select a new value. String selection = null; if ( selectDefault ) { @@ -649,6 +765,16 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { fieldEditor.load(); } + private final Listener tipSetListener = new Listener() { + public void handleEvent(Event event) { + Object data = event.widget.getData(); + if (data!=null && buildPropPage!=null) { + TipInfo obj = (TipInfo)data; + ((ToolSettingsTab)buildPropPage).updateTipText(obj.getName(), obj.getTip()); + } + } + }; + /** * * @@ -664,8 +790,15 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { holders = ho; current = curr; button = getChangeControl(parent); - button.setToolTipText(tooltip); - if (!contextId.equals(AbstractPage.EMPTY_STR)) PlatformUI.getWorkbench().getHelpSystem().setHelp(button, contextId); + if (displayFixedTip && isToolTipBoxNeeded()) { + button.setData(new TipInfo(labelText,tooltip)); + button.addListener(selectAction, tipSetListener); + } else { + button.setToolTipText(tooltip); + } + if (!contextId.equals(AbstractPage.EMPTY_STR)) { + PlatformUI.getWorkbench().getHelpSystem().setHelp(button, contextId); + } } @Override diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/FileListControlFieldEditor.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/FileListControlFieldEditor.java index 97a0de8c514..a50836daa13 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/FileListControlFieldEditor.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/FileListControlFieldEditor.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2008 BitMethods Inc and others. + * Copyright (c) 2004, 2009 BitMethods 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 @@ -8,6 +8,7 @@ * Contributors: * BitMethods Inc - Initial API and implementation * ARM Ltd. - basic tooltip support + * Miwako Tokugawa (Intel Corporation) - Fixed-location tooltip support *******************************************************************************/ package org.eclipse.cdt.managedbuilder.ui.properties; @@ -147,8 +148,8 @@ public class FileListControlFieldEditor extends FieldEditor { topLayout = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = numColumns; - layout.marginWidth = 7; - layout.marginHeight = 5; + layout.marginWidth = 0; + layout.marginHeight = 0; layout.makeColumnsEqualWidth = false; topLayout.setLayout(layout); GridData gddata = new GridData(GridData.FILL_HORIZONTAL); diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java index 798e739c2fd..5112bbd9cd7 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java @@ -6,7 +6,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Intel Corporation - Initial API and implementation + * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - Fixed-location tooltip support * QNX Software Systems - [269571] Apply button failure on tool changes *******************************************************************************/ package org.eclipse.cdt.managedbuilder.ui.properties; @@ -32,6 +33,7 @@ import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.internal.core.MultiConfiguration; import org.eclipse.cdt.managedbuilder.internal.macros.BuildMacroProvider; +import org.eclipse.cdt.ui.newui.CDTPrefUtil; import org.eclipse.cdt.ui.newui.PageLayout; import org.eclipse.core.resources.IResource; import org.eclipse.jface.preference.IPreferencePageContainer; @@ -46,8 +48,12 @@ import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.ScrolledComposite; +import org.eclipse.swt.custom.StyleRange; +import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.ControlAdapter; import org.eclipse.swt.events.ControlEvent; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; @@ -61,7 +67,10 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe * Dialog widgets */ private TreeViewer optionList; + private StyledText tipText; + private StyleRange styleRange; private SashForm sashForm; + private SashForm sashForm2; private Composite settingsPageContainer; private ScrolledComposite containerSC; @@ -77,6 +86,10 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe private IResourceInfo fInfo; + private boolean displayFixedTip = CDTPrefUtil.getBool(CDTPrefUtil.KEY_TIPBOX); + private int[] defaultWeights = new int[] {4, 1}; + private int[] hideTipBoxWeights = new int[] {1, 0}; + @Override public void createControls(Composite par) { super.createControls(par); @@ -94,9 +107,17 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe layout.numColumns = 2; layout.marginHeight = 5; sashForm.setLayout(layout); - createSelectionArea(sashForm); - createEditArea(sashForm); - + if (displayFixedTip==false) { + createSelectionArea(sashForm); + createEditArea(sashForm); + } else { + createSelectionArea(sashForm); + sashForm2 = new SashForm(sashForm, SWT.NONE); + sashForm2.setOrientation(SWT.VERTICAL); + createEditArea(sashForm2); + createTipArea(sashForm2); + sashForm2.setWeights(defaultWeights); + } usercomp.addControlListener(new ControlAdapter() { @Override public void controlResized(ControlEvent e) { @@ -108,7 +129,7 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe } private void specificResize() { - Point p1 = optionList.getTree().computeSize(-1, -1); + Point p1 = optionList.getTree().computeSize(SWT.DEFAULT, SWT.DEFAULT); Point p2 = optionList.getTree().getSize(); Point p3 = usercomp.getSize(); p1.x += calcExtra(); @@ -146,6 +167,33 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe } }); } + + /** + * @param name - header of the tooltip help + * @param tip - tooltip text + * @since 5.2 + */ + protected void updateTipText(String name, String tip) { + if (tipText==null) { + return; + } + tipText.setText(name+"\n\n"+tip); //$NON-NLS-1$ + styleRange.length = name.length(); + tipText.setStyleRange(styleRange); + tipText.update(); + } + + /* (non-Javadoc) + * Method resetTipText + * @since 7.0 + */ + private void resetTipText() { + if (tipText==null) { + return; + } + tipText.setText(Messages.getString("ToolSettingsTab.0")); //$NON-NLS-1$ + tipText.update(); + } /* (non-Javadoc) * Method displayOptionsForCategory @@ -176,9 +224,15 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe this, fInfo, optionHolder, - category); + category, + displayFixedTip); + boolean needToolTipBox = false; + if (displayFixedTip==true) { + needToolTipBox = ((BuildOptionSettingsUI)currentSettingsPage).needToolTipBox(optionHolder,category); + } pages.add(currentSettingsPage); currentSettingsPage.setContainer(this); + currentSettingsPage.setToolTipBoxNeeded(needToolTipBox); if (currentSettingsPage.getControl() == null) { currentSettingsPage.createControl(settingsPageContainer); } @@ -191,11 +245,25 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe if (children[i] != currentControl) children[i].setVisible(false); } + + if (displayFixedTip==true) { + if (currentSettingsPage.isToolTipBoxNeeded()==false) { + // eliminate the option tip box + sashForm2.setWeights(hideTipBoxWeights); + sashForm2.layout(); + } else { + // display the option tip box + sashForm2.setWeights(defaultWeights); + sashForm2.layout(); + } + } currentSettingsPage.setVisible(true); currentSettingsPage.updateFields(); - if (oldPage != null && oldPage != currentSettingsPage) + if (oldPage != null && oldPage != currentSettingsPage) { oldPage.setVisible(false); + resetTipText(); + } // Set the size of the scrolled area containerSC.setMinSize(currentSettingsPage.computeSize()); @@ -241,6 +309,12 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe children[i].setVisible(false); } + if (displayFixedTip==true) { + // eliminate the tool tip area + sashForm2.setWeights(hideTipBoxWeights); + sashForm2.layout(); + } + // Make the current page visible currentSettingsPage.setVisible(true); @@ -257,12 +331,34 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe containerSC.setMinSize(currentSettingsPage.computeSize()); settingsPageContainer.layout(); } + + /* (non-Javadoc) + * Add the fixed-location tool tip box. + */ + private void createTipArea (Composite parent) { + tipText = new StyledText(parent, SWT.V_SCROLL|SWT.BORDER | SWT.READ_ONLY | SWT.MULTI | SWT.WRAP); + tipText.setLayoutData(new GridData(GridData.FILL_BOTH)); + tipText.setText(Messages.getString("ToolSettingsTab.0")); //$NON-NLS-1$ + + styleRange = new StyleRange(); + styleRange.start = 0; + FontData data = new FontData(); + data.setHeight(10); + //data.setName("sans"); + data.setStyle(SWT.BOLD); + Font font = new Font(parent.getDisplay(),data); + styleRange.font = font; + } /* (non-Javadoc) * Add the tabs relevant to the project to edit area tab folder. */ protected void createEditArea(Composite parent) { - containerSC = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL); + int style = (SWT.H_SCROLL | SWT.V_SCROLL); + if (displayFixedTip) { + style |= SWT.BORDER; + } + containerSC = new ScrolledComposite(parent, style); containerSC.setExpandHorizontal(true); containerSC.setExpandVertical(true); @@ -573,7 +669,7 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe } /** - * Returns the "dirty" state + * @return the "dirty" state */ public boolean isDirty() { // Check each settings page @@ -593,12 +689,13 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe } /** - * Returns the build macro provider to be used for macro resolution + * @return the build macro provider to be used for macro resolution * In case the "Build Macros" tab is available, returns the BuildMacroProvider * supplied by that tab. * Unlike the default provider, that provider also contains * the user-modified macros that are not applied yet * If the "Build Macros" tab is not available, returns the default BuildMacroProvider + * * @noreference This method is not intended to be referenced by clients. */ public BuildMacroProvider obtainMacroProvider(){ diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/messages.properties b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/messages.properties index caa2e950e73..da16e6879f4 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/messages.properties +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/messages.properties @@ -103,6 +103,8 @@ PreferredToolchainsTab.0=Preferred toolchain will be selected by default in Wiza PreferredToolchainsTab.1=Make toolchain(s) preferred PreferredToolchainsTab.2=Make toolchain(s) not preferred PreferredToolchainsTab.3=Preferred toolchain(s): +ToolSettingsTab.0=Hover over an option to display its tooltip +BuildOptionSettingsUI.0=No tooltip is available for this option StdProjectTypeHandler.0=-- Other Toolchain -- StdProjectTypeHandler.2=Default StdProjectTypeHandler.3=creation Make project: IBuilder is null diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CDTPrefUtil.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CDTPrefUtil.java index b93fc7b03be..c0f61d20cdd 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CDTPrefUtil.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CDTPrefUtil.java @@ -37,6 +37,8 @@ public class CDTPrefUtil { public static final String KEY_DTREE = "properties.data.hierarchy.enable"; //$NON-NLS-1$ public static final String KEY_NOTOOLM = "properties.toolchain.modification.disable"; //$NON-NLS-1$ public static final String KEY_EXPORT = "properties.export.page.enable"; //$NON-NLS-1$ + /** @since 5.2 */ + public static final String KEY_TIPBOX = "properties.option.tipbox.enable"; //$NON-NLS-1$ // string keys public static final String KEY_PREFTC = "wizard.preferred.toolchains"; //$NON-NLS-1$ public static final String KEY_CONFSET = "workingsets.selected.configs"; //$NON-NLS-1$ diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/PluginResources.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/PluginResources.properties index 84bb7d49976..60c001bc1c2 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/PluginResources.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/PluginResources.properties @@ -289,6 +289,7 @@ PropertyPageDefsTab.12=Save size and position PropertyPageDefsTab.13=Save size only PropertyPageDefsTab.14=Do not save at all PropertyPageDefsTab.15=Center dialogs on screen +PropertyPageDefsTab.16=Display tool option tips at a fixed location PropertyPageDefsTab.4=Display "Tool Chain Editor" tab PropertyPageDefsTab.5=Discovery profiles naming rule PropertyPageDefsTab.6=Show disc. page names if they are unique. Else names + profile IDs.