From 813491f8c37d7b395fd4a5121434ce5dff9e6e01 Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Fri, 20 Aug 2004 20:31:33 +0000 Subject: [PATCH] 2004-08-19 Alain Magloire Match the changing API of the Resolver Model. * src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferenceBlock.java * src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferencePage.java * src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPropertyPage.java --- core/org.eclipse.cdt.ui/ChangeLog | 8 +++ .../CFileTypesPreferenceBlock.java | 14 ++-- .../preferences/CFileTypesPreferencePage.java | 51 +++++++++++--- .../preferences/CFileTypesPropertyPage.java | 69 +++++++++++++++---- 4 files changed, 111 insertions(+), 31 deletions(-) diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 6cce2074de2..0c5207985ba 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,11 @@ +2004-08-19 Alain Magloire + + Match the changing API of the Resolver Model. + + * src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferenceBlock.java + * src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferencePage.java + * src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPropertyPage.java + 2004-08-19 Alain Magloire Show the right icons for non-C-Resources. diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferenceBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferenceBlock.java index a985a542b43..bba536d7c4f 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferenceBlock.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferenceBlock.java @@ -55,7 +55,7 @@ public class CFileTypesPreferenceBlock { private static final int COL_DESCRIPTION = 1; private static final int COL_LANGUAGE = 2; - private ICFileTypeResolver fResolver; + private ICFileTypeResolver fResolverWorkingCopy; private ArrayList fAddAssoc; private ArrayList fRemoveAssoc; private boolean fDirty = false; @@ -260,7 +260,7 @@ public class CFileTypesPreferenceBlock { fAssocViewer.setSorter(new AssocSorter()); fAssocViewer.setContentProvider(new AssocContentProvider()); fAssocViewer.setLabelProvider(new AssocLabelProvider()); - fAssocViewer.setInput(getResolver().getFileTypeAssociations()); + fAssocViewer.setInput(getResolverWorkingCopy().getFileTypeAssociations()); fAssocViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { @@ -283,15 +283,15 @@ public class CFileTypesPreferenceBlock { public void setResolver(ICFileTypeResolver resolver) { fAddAssoc.clear(); fRemoveAssoc.clear(); - fResolver = resolver.createWorkingCopy(); + fResolverWorkingCopy = resolver.createWorkingCopy(); if (null != fAssocViewer) { - fAssocViewer.setInput(fResolver.getFileTypeAssociations()); + fAssocViewer.setInput(fResolverWorkingCopy.getFileTypeAssociations()); } setDirty(true); } - public ICFileTypeResolver getResolver() { - return fResolver; + public ICFileTypeResolver getResolverWorkingCopy() { + return fResolverWorkingCopy; } public void setDirty(boolean dirty) { @@ -309,7 +309,7 @@ public class CFileTypesPreferenceBlock { ICFileTypeAssociation[] add = (ICFileTypeAssociation[]) fAddAssoc.toArray(new ICFileTypeAssociation[fAddAssoc.size()]); ICFileTypeAssociation[] rem = (ICFileTypeAssociation[]) fRemoveAssoc.toArray(new ICFileTypeAssociation[fRemoveAssoc.size()]); - fResolver.adjustAssociations(add, rem); + changed = fResolverWorkingCopy.adjustAssociations(add, rem); fAddAssoc.clear(); fRemoveAssoc.clear(); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferencePage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferencePage.java index d0e0108c7c5..ce2797bb370 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferencePage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferencePage.java @@ -10,11 +10,19 @@ ***********************************************************************/ package org.eclipse.cdt.internal.ui.preferences; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.filetype.ICFileTypeAssociation; import org.eclipse.cdt.core.filetype.ICFileTypeResolver; import org.eclipse.cdt.core.filetype.IResolverModel; +import org.eclipse.cdt.core.internal.filetype.WorkspaceResolver; import org.eclipse.cdt.internal.ui.ICHelpContextIds; import org.eclipse.cdt.ui.CUIPlugin; +import org.eclipse.core.runtime.Preferences; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; @@ -32,6 +40,7 @@ import org.eclipse.ui.help.WorkbenchHelp; public class CFileTypesPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private CFileTypesPreferenceBlock fPrefsBlock; + private ICFileTypeResolver fResolver; public CFileTypesPreferencePage() { setDescription(PreferencesMessages.getString("CFileTypesPreferencePage.description")); //$NON-NLS-1$ @@ -46,9 +55,9 @@ public class CFileTypesPreferencePage extends PreferencePage implements IWorkben topPane.setLayout(new GridLayout()); topPane.setLayoutData(new GridData(GridData.FILL_BOTH)); - - ICFileTypeResolver resolver = CCorePlugin.getDefault().getFileTypeResolver(null); - fPrefsBlock = new CFileTypesPreferenceBlock(resolver); + + fResolver = getResolverModel().getResolver(); + fPrefsBlock = new CFileTypesPreferenceBlock(fResolver); WorkbenchHelp.setHelp( topPane, ICHelpContextIds.FILE_TYPES_PREF_PAGE ); return fPrefsBlock.createControl(topPane); @@ -64,11 +73,11 @@ public class CFileTypesPreferencePage extends PreferencePage implements IWorkben * @see org.eclipse.jface.preference.PreferencePage#performDefaults() */ protected void performDefaults() { - IResolverModel model = getResolverModel(); - - model.setResolver(null); - fPrefsBlock.setResolver(model.getResolver()); - + Preferences prefs = CCorePlugin.getDefault().getPluginPreferences(); + prefs.setToDefault(WorkspaceResolver.PREFS_ASSOCIATIONS_EXCLUSION); + prefs.setToDefault(WorkspaceResolver.PREFS_ASSOCIATIONS_INCLUSION); + fPrefsBlock.setResolver(getResolverModel().getResolver()); + super.performDefaults(); } @@ -76,10 +85,32 @@ public class CFileTypesPreferencePage extends PreferencePage implements IWorkben * @see org.eclipse.jface.preference.IPreferencePage#performOk() */ public boolean performOk() { - IResolverModel model = getResolverModel(); if (fPrefsBlock.performOk()) { - model.setResolver(fPrefsBlock.getResolver()); + ICFileTypeAssociation[] oldAssocs = fResolver.getFileTypeAssociations(); + + ICFileTypeResolver workingCopy = fPrefsBlock.getResolverWorkingCopy(); + ICFileTypeAssociation[] newAssocs = workingCopy.getFileTypeAssociations(); + + // compare + List delList = new ArrayList(); + List addList = new ArrayList(); + + for (int i = 0; i < oldAssocs.length; i++) { + if (Arrays.binarySearch(newAssocs, oldAssocs[i], ICFileTypeAssociation.Comparator) < 0) { + delList.add(oldAssocs[i]); + } + } + + for (int i = 0; i < newAssocs.length; i++) { + if (Arrays.binarySearch(oldAssocs, newAssocs[i], ICFileTypeAssociation.Comparator) < 0) { + addList.add(newAssocs[i]); + } + } + + ICFileTypeAssociation[] addAssocs = (ICFileTypeAssociation[]) addList.toArray(new ICFileTypeAssociation[addList.size()]); + ICFileTypeAssociation[] delAssocs = (ICFileTypeAssociation[]) delList.toArray(new ICFileTypeAssociation[delList.size()]); + fResolver.adjustAssociations(addAssocs, delAssocs); } return super.performOk(); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPropertyPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPropertyPage.java index 5d667327c6a..91af95f2e87 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPropertyPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPropertyPage.java @@ -10,7 +10,12 @@ ***********************************************************************/ package org.eclipse.cdt.internal.ui.preferences; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.filetype.ICFileTypeAssociation; import org.eclipse.cdt.core.filetype.ICFileTypeResolver; import org.eclipse.cdt.core.filetype.IResolverModel; import org.eclipse.cdt.internal.ui.ICHelpContextIds; @@ -34,7 +39,8 @@ public class CFileTypesPropertyPage extends PropertyPage { private Button fUseWorkspace; private Button fUseProject; - private CFileTypesPreferenceBlock fPrefsBlock; + protected ICFileTypeResolver fResolver; + protected CFileTypesPreferenceBlock fPrefsBlock; public CFileTypesPropertyPage(){ super(); @@ -60,6 +66,7 @@ public class CFileTypesPropertyPage extends PropertyPage { fUseWorkspace.setText(PreferencesMessages.getString("CFileTypesPropertyPage.useWorkspaceSettings")); //$NON-NLS-1$ fUseWorkspace.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { + fPrefsBlock.setResolver(getResolverModel().getResolver()); fPrefsBlock.setEnabled(false); } }); @@ -68,6 +75,7 @@ public class CFileTypesPropertyPage extends PropertyPage { fUseProject.setText(PreferencesMessages.getString("CFileTypesPropertyPage.useProjectSettings")); //$NON-NLS-1$ fUseProject.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { + fPrefsBlock.setResolver(fResolver); fPrefsBlock.setEnabled(true); } }); @@ -75,23 +83,23 @@ public class CFileTypesPropertyPage extends PropertyPage { // Resolver block IProject project = getProject(); - ICFileTypeResolver resolver = CCorePlugin.getDefault().getFileTypeResolver(project); - IResolverModel model = CCorePlugin.getDefault().getResolverModel(); - boolean custom = model.getResolver() != model.getResolver(project); + IResolverModel model = getResolverModel(); + fResolver = model.getResolver(project); + boolean custom = model.hasCustomResolver(project); Composite blockPane = new Composite(topPane, SWT.NONE); blockPane.setLayout(new GridLayout()); blockPane.setLayoutData(new GridData(GridData.FILL_BOTH)); - fPrefsBlock = new CFileTypesPreferenceBlock(resolver); - + fPrefsBlock = new CFileTypesPreferenceBlock(fResolver); + fPrefsBlock.createControl(blockPane); fUseWorkspace.setSelection(!custom); fUseProject.setSelection(custom); fPrefsBlock.setEnabled(custom); - + WorkbenchHelp.setHelp( topPane, ICHelpContextIds.FILE_TYPES_STD_PAGE ); return topPane; } @@ -102,6 +110,7 @@ public class CFileTypesPropertyPage extends PropertyPage { protected void performDefaults() { fUseWorkspace.setSelection(true); fUseProject.setSelection(false); + fPrefsBlock.setResolver(getResolverModel().getResolver()); fPrefsBlock.setEnabled(false); super.performDefaults(); } @@ -110,16 +119,48 @@ public class CFileTypesPropertyPage extends PropertyPage { * @see org.eclipse.jface.preference.IPreferencePage#performOk() */ public boolean performOk() { - IResolverModel model = getResolverModel(); if (fUseProject.getSelection()) { - if (fPrefsBlock.performOk()) { - model.setResolver(getProject(), fPrefsBlock.getResolver()); + IProject project = getProject(); + IResolverModel model = getResolverModel(); + ICFileTypeResolver workingCopy = fPrefsBlock.getResolverWorkingCopy(); + if (!model.hasCustomResolver(project)) { + model.createCustomResolver(project, workingCopy); + } else { + if (fPrefsBlock.performOk()) { + ICFileTypeAssociation[] oldAssocs = fResolver.getFileTypeAssociations(); + + ICFileTypeAssociation[] newAssocs = workingCopy.getFileTypeAssociations(); + + // compare + List delList = new ArrayList(); + List addList = new ArrayList(); + + for (int i = 0; i < oldAssocs.length; i++) { + if (Arrays.binarySearch(newAssocs, oldAssocs[i], ICFileTypeAssociation.Comparator) < 0) { + delList.add(oldAssocs[i]); + } + } + + for (int i = 0; i < newAssocs.length; i++) { + if (Arrays.binarySearch(oldAssocs, newAssocs[i], ICFileTypeAssociation.Comparator) < 0) { + addList.add(newAssocs[i]); + } + } + + ICFileTypeAssociation[] addAssocs = (ICFileTypeAssociation[]) addList.toArray(new ICFileTypeAssociation[addList.size()]); + ICFileTypeAssociation[] delAssocs = (ICFileTypeAssociation[]) delList.toArray(new ICFileTypeAssociation[delList.size()]); + + fResolver.adjustAssociations(addAssocs, delAssocs); + } + } + } else if (fUseWorkspace.getSelection()) { + IProject project = getProject(); + IResolverModel model = getResolverModel(); + if (model.hasCustomResolver(project)) { + model.removeCustomResolver(project); } - } else { - model.setResolver(getProject(), null); } - return super.performOk(); } @@ -134,7 +175,7 @@ public class CFileTypesPropertyPage extends PropertyPage { return project; } - private IResolverModel getResolverModel() { + protected IResolverModel getResolverModel() { return CCorePlugin.getDefault().getResolverModel(); }