From 1b5b9915d0f214cd7e892e8144dedfe88419da5b Mon Sep 17 00:00:00 2001 From: Oleg Krasilnikov Date: Tue, 27 Mar 2007 13:38:34 +0000 Subject: [PATCH] Toolchain modification page: - "no toolchain" handling added - conditional page display (if permitted in prefs) --- .../plugin.xml | 5 +- .../ui/properties/ToolChainEditTab.java | 52 +++++++++++++------ core/org.eclipse.cdt.ui/plugin.xml | 16 +++++- .../eclipse/cdt/ui/newui/AbstractPage.java | 3 +- .../org/eclipse/cdt/ui/newui/CDTPrefUtil.java | 1 + .../cdt/ui/newui/PluginResources.properties | 1 + .../cdt/ui/newui/PropertyPageDefsTab.java | 10 +++- .../eclipse/cdt/ui/newui/PropertyTester.java | 23 ++++---- 8 files changed, 80 insertions(+), 31 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml b/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml index 8bd454bf709..f04748608a7 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml +++ b/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml @@ -596,6 +596,8 @@ value="org.eclipse.cdt.managedbuilder.core.managedBuildNature"> + + @@ -611,7 +613,8 @@ - + + diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolChainEditTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolChainEditTab.java index c7946207d57..a9eb753d17c 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolChainEditTab.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolChainEditTab.java @@ -31,6 +31,8 @@ import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Text; public class ToolChainEditTab extends AbstractCBuildPropertyTab { + + private static final String NO_TC = Messages.getString("StdProjectTypeHandler.0"); //$NON-NLS-1$ private static final IToolChain[] r_tcs = ManagedBuildManager.getRealToolChains(); private static final IBuilder[] r_bs = ManagedBuildManager.getRealBuilders(); private static final ITool[] r_tools = ManagedBuildManager.getRealTools(); @@ -39,6 +41,7 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { private Button b_dispCompatible; private Combo c_toolchain; private Combo c_builder; + private Button button_edit; private IBuilder[] v_bs; private IToolChain[] v_tcs; @@ -51,10 +54,8 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { public void createControls(Composite parent) { super.createControls(parent); usercomp.setLayout(new GridLayout(2, false)); - b_dispCompatible = setupCheck(usercomp, Messages.getString("ToolChainEditTab.0"), 2, GridData.BEGINNING); //$NON-NLS-1$ - - + setupLabel(usercomp, Messages.getString("ToolChainEditTab.1"), 2, GridData.BEGINNING); //$NON-NLS-1$ c_toolchain = new Combo(usercomp, SWT.BORDER); GridData gd = new GridData(GridData.FILL_HORIZONTAL); @@ -64,10 +65,14 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { public void widgetSelected(SelectionEvent e) { if (fi != null) { int x = c_toolchain.getSelectionIndex(); - IToolChain tc = v_tcs[x]; - if (tc == null) return; try { - fi.changeToolChain(tc, ManagedBuildManager.calculateChildId(tc.getId(), null), tc.getUniqueRealName()); + if (NO_TC.equals(c_toolchain.getItem(x))) { + fi.changeToolChain(null, null, null); + } else { + IToolChain tc = v_tcs[x]; + if (tc == null) return; + fi.changeToolChain(tc, ManagedBuildManager.calculateChildId(tc.getId(), null), tc.getUniqueRealName()); + } } catch (BuildException be) {} updateData(); } @@ -97,13 +102,13 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { gd.grabExcessHorizontalSpace = true; text.setLayoutData(gd); - Button b = new Button(g, SWT.PUSH); + button_edit = new Button(g, SWT.PUSH); GridData gdb = new GridData(GridData.VERTICAL_ALIGN_CENTER); gdb.grabExcessHorizontalSpace = false; gdb.horizontalAlignment = SWT.FILL; gdb.widthHint = 80; - b.setLayoutData(gdb); - b.addSelectionListener(new SelectionAdapter() { + button_edit.setLayoutData(gdb); + button_edit.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { ToolSelectionDialog d = new ToolSelectionDialog(usercomp.getShell()); d.all = v_tools; @@ -119,8 +124,8 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { } }}); - b.setLayoutData(new GridData(GridData.END)); - b.setText(Messages.getString("ToolChainEditTab.4")); //$NON-NLS-1$ + button_edit.setLayoutData(new GridData(GridData.END)); + button_edit.setText(Messages.getString("ToolChainEditTab.4")); //$NON-NLS-1$ } public void updateData(ICResourceDescription rcfg) { cfg = getCfg(rcfg.getConfiguration()); @@ -137,9 +142,8 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { v_tools = new ITool[r_tools.length]; IToolChain tc = null; - if (fi != null) { + if (fi != null) tc = ManagedBuildManager.getRealToolChain(fi.getToolChain()); - } int cnt = 0; int pos = -1; @@ -154,10 +158,26 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { if (r_tcs[i].equals(tc)) pos = cnt; cnt++; } - if (pos != -1) + // "No toolchain" is enabled for Make projects only. + if (!cfg.getBuilder().isManagedBuildOn()) + c_toolchain.add(NO_TC); + if (pos != -1) { c_toolchain.select(pos); - else - c_toolchain.setText(EMPTY_STR); + c_builder.setEnabled(true); + button_edit.setEnabled(true); + } + else { + if (cfg.getBuilder().isManagedBuildOn()) { + c_toolchain.setText(EMPTY_STR); // unprobable case + } else { + try { + fi.changeToolChain(null, null, null); + } catch (BuildException e) {} + c_toolchain.select(c_toolchain.getItemCount() - 1); + } + c_builder.setEnabled(false); + button_edit.setEnabled(false); + } IBuilder b = ManagedBuildManager.getRealBuilder(cfg.getBuilder()); cnt = 0; diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml index 92c63b8ff61..cd7e983bf67 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -1914,14 +1914,26 @@ id="org.eclipse.cdt.Tester1" class="org.eclipse.cdt.ui.newui.PropertyTester" namespace="org.eclipse.cdt.ui" - properties="isSource" + properties="isSource,toolEditEnabled" type="org.eclipse.cdt.core.model.ITranslationUnit"/> + + diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractPage.java index 9b945eb4fac..d76f21b6438 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractPage.java @@ -199,7 +199,8 @@ implements if (!checkElement()) { s = UIMessages.getString("AbstractPage.0"); //$NON-NLS-1$ } else if (!isApplicable()) { - s = UIMessages.getString("AbstractPage.1"); //$NON-NLS-1$ + return null; +// s = UIMessages.getString("AbstractPage.1"); //$NON-NLS-1$ } else if (!isCDTProject(getProject())) { s = UIMessages.getString("AbstractPage.2"); //$NON-NLS-1$ } 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 7d142010673..da32bc1b6a3 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 @@ -26,6 +26,7 @@ public class CDTPrefUtil { public static final String KEY_MULTI = "properties.multi.config.enable"; //$NON-NLS-1$ public static final String KEY_DTREE = "properties.data.hierarchy.enable"; //$NON-NLS-1$ public static final String KEY_NOSAVE = "properties.save.position.disable"; //$NON-NLS-1$ + public static final String KEY_TOOLM = "properties.toolchain.modification.enable"; //$NON-NLS-1$ // string keys public static final String KEY_PREFTC = "wizard.preferred.toolchains"; //$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 42f64d41693..2bd381c7908 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 @@ -340,6 +340,7 @@ PropertyPageDefsTab.0=Show button PropertyPageDefsTab.1=Display tab PropertyPageDefsTab.2=Enable multiple configurations setting PropertyPageDefsTab.3=Save property dialog size and position +PropertyPageDefsTab.4=Display tab ProjectConvert.convertersList=Converters List ScannerConfigOptionsDialog.title=Discovery Options diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/PropertyPageDefsTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/PropertyPageDefsTab.java index 4943dcaeddc..3df7b9603ac 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/PropertyPageDefsTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/PropertyPageDefsTab.java @@ -24,6 +24,7 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab { private Button show_mul; private Button show_mng; private Button show_sav; + private Button show_tool; public void createControls(Composite parent) { super.createControls(parent); @@ -45,12 +46,17 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab { show_sav.setText(UIMessages.getString("PropertyPageDefsTab.3")); //$NON-NLS-1$ show_sav.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + show_tool = new Button(usercomp, SWT.CHECK); + show_tool.setText(UIMessages.getString("PropertyPageDefsTab.4")); //$NON-NLS-1$ + show_tool.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + show_tree.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_DTREE)); show_mul.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_MULTI)); show_mng.setSelection(!CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOMNG)); show_sav.setSelection(!CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOSAVE)); + show_tool.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_TOOLM)); - show_mul.setEnabled(false); + show_mul.setVisible(false); // temporary } protected void performOK() { @@ -58,12 +64,14 @@ public class PropertyPageDefsTab extends AbstractCPropertyTab { CDTPrefUtil.setBool(CDTPrefUtil.KEY_MULTI, show_mul.getSelection()); CDTPrefUtil.setBool(CDTPrefUtil.KEY_NOMNG, !show_mng.getSelection()); CDTPrefUtil.setBool(CDTPrefUtil.KEY_NOSAVE, !show_sav.getSelection()); + CDTPrefUtil.setBool(CDTPrefUtil.KEY_TOOLM, show_tool.getSelection()); } protected void performDefaults() { show_tree.setSelection(false); show_mul.setSelection(false); show_mng.setSelection(true); show_mng.setSelection(true); + show_tool.setSelection(false); } protected void performApply(ICResourceDescription src, ICResourceDescription dst) { performOK(); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/PropertyTester.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/PropertyTester.java index d0af9dda528..707a95ec252 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/PropertyTester.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/PropertyTester.java @@ -19,20 +19,23 @@ import org.eclipse.cdt.core.model.ITranslationUnit; * Checks whether given object is a source file. */ public class PropertyTester extends org.eclipse.core.expressions.PropertyTester { - private static final String KEY = "isSource"; //$NON-NLS-1$ + private static final String KEY_SRC = "isSource"; //$NON-NLS-1$ + private static final String KEY_TOOL = "toolEditEnabled"; //$NON-NLS-1$ public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { - if (!KEY.equals(property)) return false; - - if (receiver instanceof ITranslationUnit) { - return ((ITranslationUnit)receiver).isSourceUnit(); + if (KEY_SRC.equals(property)) { + if (receiver instanceof ITranslationUnit) { + return ((ITranslationUnit)receiver).isSourceUnit(); + } + else if (receiver instanceof IFile) { + IFile file = (IFile)receiver; + return CoreModel.isValidSourceUnitName(file.getProject(), file.getName()); + } + } else if (KEY_TOOL.equals(property)) { + return CDTPrefUtil.getBool(CDTPrefUtil.KEY_TOOLM); } - else if (receiver instanceof IFile) { - IFile file = (IFile)receiver; - return CoreModel.isValidSourceUnitName(file.getProject(), file.getName()); - } - else return false; + return false; } }