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 5653606a036..2c0c90c93b4 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 @@ -13,11 +13,9 @@ package org.eclipse.cdt.managedbuilder.ui.properties; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.List; import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.internal.ui.CPluginImages; -import org.eclipse.cdt.managedbuilder.core.BuildException; import org.eclipse.cdt.managedbuilder.core.IBuildObject; import org.eclipse.cdt.managedbuilder.core.IBuilder; import org.eclipse.cdt.managedbuilder.core.IConfiguration; @@ -36,7 +34,11 @@ import org.eclipse.cdt.managedbuilder.tcmodification.IFileInfoModification; import org.eclipse.cdt.managedbuilder.tcmodification.IFolderInfoModification; import org.eclipse.cdt.managedbuilder.tcmodification.IModificationOperation; import org.eclipse.cdt.managedbuilder.tcmodification.IToolChainModificationManager; +import org.eclipse.cdt.managedbuilder.tcmodification.IToolListModification; import org.eclipse.cdt.managedbuilder.tcmodification.IToolModification; +import org.eclipse.cdt.ui.CUIPlugin; +import org.eclipse.core.resources.IFileModificationValidator; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; @@ -55,7 +57,7 @@ import org.eclipse.swt.widgets.Text; public class ToolChainEditTab extends AbstractCBuildPropertyTab { - public static final IToolChainModificationManager tcmm = ManagedBuildManager.getToolChainModificationManager(); + private static final IToolChainModificationManager tcmmgr = ManagedBuildManager.getToolChainModificationManager(); 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(); @@ -63,10 +65,9 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { private static final Color red = Display.getDefault().getSystemColor(SWT.COLOR_RED); private static final String SPACE = " "; //$NON-NLS-1$ - static final Image IMG_WARNING = CPluginImages.get(CPluginImages.IMG_OBJS_REFACTORING_WARNING); - static final Image IMG_ERROR = CPluginImages.get(CPluginImages.IMG_OBJS_REFACTORING_ERROR); - static final Image IMG_INFO = CPluginImages.get(CPluginImages.IMG_OBJS_REFACTORING_INFO); - static final Image IMG_ARROW = CPluginImages.get(CPluginImages.IMG_PREFERRED); + static private final Image IMG_WARNING = CPluginImages.get(CPluginImages.IMG_OBJS_REFACTORING_WARNING); + static private final Image IMG_ERROR = CPluginImages.get(CPluginImages.IMG_OBJS_REFACTORING_ERROR); + static private final Image IMG_INFO = CPluginImages.get(CPluginImages.IMG_OBJS_REFACTORING_INFO); private Text text; private Button b_dispCompatible; @@ -86,6 +87,7 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { private IConfiguration cfg; private IResourceInfo ri; + private IToolListModification mod; public void createControls(Composite parent) { super.createControls(parent); @@ -159,15 +161,31 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { button_edit.setText(Messages.getString("ToolChainEditTab.4")); //$NON-NLS-1$ } } - public void updateData(ICResourceDescription rcfg) { + + private IToolListModification getModification() { + if (ri instanceof IFolderInfo) + return tcmmgr.createModification((IFolderInfo)ri); + else + return tcmmgr.createModification((IFileInfo)ri); + } + + protected void updateData(ICResourceDescription rcfg) { cfg = getCfg(rcfg.getConfiguration()); ri = cfg.getResourceInfo(rcfg.getPath(), false); + mod = getModification(); updateData(); } + private void updateData() { + showErrorMessage(); + fillToolChainCombo(); + fillBuilderCombo(); + fillToolsList(); + } + private void showErrorMessage() { if (ri instanceof IFolderInfo) { - IFolderInfoModification foim = tcmm.createModification((IFolderInfo)ri); + IFolderInfoModification foim = (IFolderInfoModification)mod; if (foim.isToolChainCompatible()) { st_toolchain.setText(EMPTY_STR); } else { @@ -185,24 +203,24 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { } } } - } else { // FileInfo - IFileInfoModification fim = tcmm.createModification((IFileInfo)ri); - fim.getProjectToolModifications(); +// } else { // FileInfo +// IFileInfoModification fim = (IFileInfoModification)mod; +// fim.getProjectToolModifications(); } } private void fillToolChainCombo() { IToolChain tc = null; if (ri instanceof IFolderInfo) - tc = ManagedBuildManager.getRealToolChain(((IFolderInfo)ri).getToolChain()); - + tc = ManagedBuildManager.getRealToolChain(((IFolderInfoModification)mod).getToolChain()); + c_toolchain.removeAll(); boolean isMng = cfg.getBuilder().isManagedBuildOn(); ArrayList list = new ArrayList(); IToolChain[] tcs = r_tcs; if (b_dispCompatible.getSelection() && (ri instanceof IFolderInfo)) { - IFolderInfoModification fim = tcmm.createModification((IFolderInfo)ri); + IFolderInfoModification fim = (IFolderInfoModification)mod; tcs = fim.getCompatibleToolChains(); IToolChain[] tcs1 = new IToolChain[tcs.length + 1]; System.arraycopy(tcs, 0, tcs1, 0, tcs.length); @@ -245,7 +263,7 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { IBuilder[] bs = r_bs; if (b_dispCompatible.getSelection() && (ri instanceof IFolderInfo)) { - IFolderInfoModification fim = tcmm.createModification((IFolderInfo)ri); + IFolderInfoModification fim = (IFolderInfoModification)mod; if (fim instanceof IConfigurationModification) { IBuilder[] bs1 = ((IConfigurationModification)fim).getCompatibleBuilders(); bs = new IBuilder[bs1.length + 1]; @@ -273,7 +291,7 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { } private ITool getToolForFile() { - ITool[] tools = ri.getTools(); + ITool[] tools = ((IFileInfoModification)mod).getProjectTools(); if (tools != null && tools.length > 0) { for (int i=0; i tool - ITool[] ts2 = new ITool[tools.length + 1]; - System.arraycopy(tools, 0, ts2, 0, tools.length); - ts2[tools.length] = newTool; - tools = ts2; - } else // 2: tool -> tool - tools[pos] = newTool; - } else if (pos != -1){ // 3: tool -> NO TOOL; - ITool[] ts2 = new ITool[tools.length - 1]; - if (pos > 0) - System.arraycopy(tools, 0, ts2, 0, pos-1); - if (pos < ts2.length) - System.arraycopy(tools, pos+1, ts2, pos, ts2.length - pos); - tools = ts2; - } - ((IFileInfo)ri).setTools(tools); - } + mod.restoreDefaults(); + apply(); updateData(); } - private void copyFI(IResourceInfo src, IResourceInfo dst) { - if (src == null || dst == null) - return; - if (src instanceof IFolderInfo && dst instanceof IFolderInfo) { - IFolderInfo fi1 = (IFolderInfo)src; - IFolderInfo fi = (IFolderInfo)dst; - IToolChain tc = fi1.getToolChain(); - ITool[] tools1 = fi1.getTools(); - ITool[] tools2 = fi.getTools(); - try { - fi.changeToolChain(tc, ManagedBuildManager.calculateChildId(tc.getId(), null), tc.getUniqueRealName()); - fi.modifyToolChain(tools2, tools1); - } catch (BuildException e) {} - } - } - protected void updateButtons() {} // Do nothing. No buttons to update. - + private void saveToolSelected() { - int pos = c_tool.getSelectionIndex(); - ITool[] oldTools = ri.getTools(); - if (oldTools != null && oldTools.length > 0) { - if (pos == (c_tool.getItemCount() - 1)) {// NO TOOL selected - List newTools = new ArrayList(oldTools.length); - for (int i=0; i 0 || d.added.size() > 0)) { - try { - ((IFolderInfo)ri).modifyToolChain( - (ITool[])d.removed.toArray(new ITool[d.removed.size()]), - (ITool[])d.added.toArray(new ITool[d.added.size()])); - } catch (BuildException b) {} - updateData(); + if (d.removed.size() > 0 || d.added.size() > 0) { + if (result == 0) { + apply(); + updateData(); + } else { + mod = getModification(); // re-read data + } + } + } + + /** + * Applies changes to Modification + */ + private void apply() { + try { + mod.apply(); + } catch (CoreException e) { + CUIPlugin.getDefault().log(e); } } private void modifyToolchain() { - if (ri instanceof IFolderInfo) { - int x = c_toolchain.getSelectionIndex(); - try { - if (NO_TC.equals(c_toolchain.getItem(x))) { - ((IFolderInfo)ri).changeToolChain(null, null, null); - } else { - IToolChain tc = v_tcs[x]; - if (tc == null) return; - ((IFolderInfo)ri).changeToolChain(tc, ManagedBuildManager.calculateChildId(tc.getId(), null), tc.getUniqueRealName()); - } - } catch (BuildException be) {} - updateData(); + IFolderInfoModification foim = (IFolderInfoModification)mod; + int x = c_toolchain.getSelectionIndex(); + if (NO_TC.equals(c_toolchain.getItem(x))) { + foim.setToolChain(null); + } else { + IToolChain tc = v_tcs[x]; + if (tc == null) return; + foim.setToolChain(tc); } + apply(); + updateData(); } public static Image getErrorIcon(IStatus st) { @@ -609,9 +531,9 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab { } private void modifyBuilder() { - int x = c_builder.getSelectionIndex(); - IBuilder b = v_bs[x]; - cfg.changeBuilder(b, ManagedBuildManager.calculateChildId(b.getId(), null), b.getUniqueRealName()); + IConfigurationModification cm = (IConfigurationModification)mod; + cm.setBuilder(v_bs[c_builder.getSelectionIndex()]); + apply(); updateData(); } diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSelectionDialog.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSelectionDialog.java index 8e5353b8248..d22d94bd5b0 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSelectionDialog.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSelectionDialog.java @@ -16,7 +16,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import org.eclipse.cdt.managedbuilder.core.IFileInfo; +import org.eclipse.cdt.internal.ui.CPluginImages; import org.eclipse.cdt.managedbuilder.core.IFolderInfo; import org.eclipse.cdt.managedbuilder.core.IModificationStatus; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; @@ -52,29 +52,27 @@ import org.eclipse.swt.widgets.Text; public class ToolSelectionDialog extends Dialog { - private static final String EMPTY_STR = ""; //$NON-NLS-1$ - private static final int COL_WIDTH = 300; + static private final Image IMG_ARROW = CPluginImages.get(CPluginImages.IMG_PREFERRED); + static private final String EMPTY_STR = ""; //$NON-NLS-1$ + static private final int COL_WIDTH = 300; + static private Font boldFont = JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT); + static private Color red = Display.getDefault().getSystemColor(SWT.COLOR_RED); + static private Color gray = Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY); + private Table t1, t2; private Button b_add, b_del, b_rep, b_all; private CLabel errorLabel, l1; private Text txt2; + private ArrayList left, right; + + public ArrayList added, removed; public ITool[] all, used; public IFolderInfo fi; - ArrayList added, removed; - private ArrayList left, right; - private Font boldFont = JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT); - private Color red = Display.getDefault().getSystemColor(SWT.COLOR_RED); - private Color gray = Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY); - private IToolListModification tmod = null; + public IToolListModification mod = null; public ToolSelectionDialog(Shell shell, IResourceInfo ri) { super (shell); setShellStyle(getShellStyle() | SWT.RESIZE); - - if (ri instanceof IFolderInfo) - tmod = ManagedBuildManager.getToolChainModificationManager().createModification((IFolderInfo)ri); - else - tmod = ManagedBuildManager.getToolChainModificationManager().createModification((IFileInfo)ri); } /* (non-Javadoc) @@ -89,7 +87,7 @@ public class ToolSelectionDialog extends Dialog { Composite composite = new Composite(parent, SWT.NULL); composite.setFont(parent.getFont()); composite.setLayout(new GridLayout(3, false)); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); + GridData gd = new GridData(GridData.FILL_BOTH); gd.heightHint = 300; composite.setLayoutData(gd); @@ -163,7 +161,7 @@ public class ToolSelectionDialog extends Dialog { ITool tool = (ITool)t1.getItem(x).getData(); left.remove(tool); right.add(tool); - tmod.changeProjectTools(null, tool); + mod.changeProjectTools(null, tool); updateData(); }}); b_add.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false)); @@ -188,7 +186,7 @@ public class ToolSelectionDialog extends Dialog { right.remove(tool); left.add(ManagedBuildManager.getRealTool(tool)); - tmod.changeProjectTools(tool, null); + mod.changeProjectTools(tool, null); updateData(); }}); @@ -245,7 +243,7 @@ public class ToolSelectionDialog extends Dialog { right.remove(tool2); left.add(ManagedBuildManager.getRealTool(tool2)); - tmod.changeProjectTools(tool2, tool1); + mod.changeProjectTools(tool2, tool1); updateData(); } @@ -257,7 +255,7 @@ public class ToolSelectionDialog extends Dialog { private void removeArrows(Table t) { for (int j=0; j 0) { message = Messages.getString("ToolSelectionDialog.16") + //$NON-NLS-1$ @@ -397,7 +395,7 @@ public class ToolSelectionDialog extends Dialog { * @param bold - whether the tool should be marked by bold font. */ private void add(ITool tool, Table table, boolean bold) { - IToolModification tm = tmod.getToolModification(tool); + IToolModification tm = mod.getToolModification(tool); TableItem ti = new TableItem(table, 0); ti.setText(tool.getUniqueRealName()); if (bold) @@ -468,7 +466,7 @@ public class ToolSelectionDialog extends Dialog { for (int j=0;j -1 && t1_pos < t1.getItemCount()) t1.select(t1_pos);