1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-09-07 18:43:32 +02:00

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
This commit is contained in:
Alain Magloire 2004-08-20 20:31:33 +00:00
parent c931ca6163
commit 813491f8c3
4 changed files with 111 additions and 31 deletions

View file

@ -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 2004-08-19 Alain Magloire
Show the right icons for non-C-Resources. Show the right icons for non-C-Resources.

View file

@ -55,7 +55,7 @@ public class CFileTypesPreferenceBlock {
private static final int COL_DESCRIPTION = 1; private static final int COL_DESCRIPTION = 1;
private static final int COL_LANGUAGE = 2; private static final int COL_LANGUAGE = 2;
private ICFileTypeResolver fResolver; private ICFileTypeResolver fResolverWorkingCopy;
private ArrayList fAddAssoc; private ArrayList fAddAssoc;
private ArrayList fRemoveAssoc; private ArrayList fRemoveAssoc;
private boolean fDirty = false; private boolean fDirty = false;
@ -260,7 +260,7 @@ public class CFileTypesPreferenceBlock {
fAssocViewer.setSorter(new AssocSorter()); fAssocViewer.setSorter(new AssocSorter());
fAssocViewer.setContentProvider(new AssocContentProvider()); fAssocViewer.setContentProvider(new AssocContentProvider());
fAssocViewer.setLabelProvider(new AssocLabelProvider()); fAssocViewer.setLabelProvider(new AssocLabelProvider());
fAssocViewer.setInput(getResolver().getFileTypeAssociations()); fAssocViewer.setInput(getResolverWorkingCopy().getFileTypeAssociations());
fAssocViewer.addSelectionChangedListener(new ISelectionChangedListener() { fAssocViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) { public void selectionChanged(SelectionChangedEvent event) {
@ -283,15 +283,15 @@ public class CFileTypesPreferenceBlock {
public void setResolver(ICFileTypeResolver resolver) { public void setResolver(ICFileTypeResolver resolver) {
fAddAssoc.clear(); fAddAssoc.clear();
fRemoveAssoc.clear(); fRemoveAssoc.clear();
fResolver = resolver.createWorkingCopy(); fResolverWorkingCopy = resolver.createWorkingCopy();
if (null != fAssocViewer) { if (null != fAssocViewer) {
fAssocViewer.setInput(fResolver.getFileTypeAssociations()); fAssocViewer.setInput(fResolverWorkingCopy.getFileTypeAssociations());
} }
setDirty(true); setDirty(true);
} }
public ICFileTypeResolver getResolver() { public ICFileTypeResolver getResolverWorkingCopy() {
return fResolver; return fResolverWorkingCopy;
} }
public void setDirty(boolean dirty) { public void setDirty(boolean dirty) {
@ -309,7 +309,7 @@ public class CFileTypesPreferenceBlock {
ICFileTypeAssociation[] add = (ICFileTypeAssociation[]) fAddAssoc.toArray(new ICFileTypeAssociation[fAddAssoc.size()]); ICFileTypeAssociation[] add = (ICFileTypeAssociation[]) fAddAssoc.toArray(new ICFileTypeAssociation[fAddAssoc.size()]);
ICFileTypeAssociation[] rem = (ICFileTypeAssociation[]) fRemoveAssoc.toArray(new ICFileTypeAssociation[fRemoveAssoc.size()]); ICFileTypeAssociation[] rem = (ICFileTypeAssociation[]) fRemoveAssoc.toArray(new ICFileTypeAssociation[fRemoveAssoc.size()]);
fResolver.adjustAssociations(add, rem); changed = fResolverWorkingCopy.adjustAssociations(add, rem);
fAddAssoc.clear(); fAddAssoc.clear();
fRemoveAssoc.clear(); fRemoveAssoc.clear();

View file

@ -10,11 +10,19 @@
***********************************************************************/ ***********************************************************************/
package org.eclipse.cdt.internal.ui.preferences; 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.CCorePlugin;
import org.eclipse.cdt.core.filetype.ICFileTypeAssociation;
import org.eclipse.cdt.core.filetype.ICFileTypeResolver; import org.eclipse.cdt.core.filetype.ICFileTypeResolver;
import org.eclipse.cdt.core.filetype.IResolverModel; 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.internal.ui.ICHelpContextIds;
import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridData;
@ -32,6 +40,7 @@ import org.eclipse.ui.help.WorkbenchHelp;
public class CFileTypesPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { public class CFileTypesPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
private CFileTypesPreferenceBlock fPrefsBlock; private CFileTypesPreferenceBlock fPrefsBlock;
private ICFileTypeResolver fResolver;
public CFileTypesPreferencePage() { public CFileTypesPreferencePage() {
setDescription(PreferencesMessages.getString("CFileTypesPreferencePage.description")); //$NON-NLS-1$ setDescription(PreferencesMessages.getString("CFileTypesPreferencePage.description")); //$NON-NLS-1$
@ -46,9 +55,9 @@ public class CFileTypesPreferencePage extends PreferencePage implements IWorkben
topPane.setLayout(new GridLayout()); topPane.setLayout(new GridLayout());
topPane.setLayoutData(new GridData(GridData.FILL_BOTH)); topPane.setLayoutData(new GridData(GridData.FILL_BOTH));
ICFileTypeResolver resolver = CCorePlugin.getDefault().getFileTypeResolver(null); fResolver = getResolverModel().getResolver();
fPrefsBlock = new CFileTypesPreferenceBlock(resolver); fPrefsBlock = new CFileTypesPreferenceBlock(fResolver);
WorkbenchHelp.setHelp( topPane, ICHelpContextIds.FILE_TYPES_PREF_PAGE ); WorkbenchHelp.setHelp( topPane, ICHelpContextIds.FILE_TYPES_PREF_PAGE );
return fPrefsBlock.createControl(topPane); return fPrefsBlock.createControl(topPane);
@ -64,11 +73,11 @@ public class CFileTypesPreferencePage extends PreferencePage implements IWorkben
* @see org.eclipse.jface.preference.PreferencePage#performDefaults() * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
*/ */
protected void performDefaults() { protected void performDefaults() {
IResolverModel model = getResolverModel(); Preferences prefs = CCorePlugin.getDefault().getPluginPreferences();
prefs.setToDefault(WorkspaceResolver.PREFS_ASSOCIATIONS_EXCLUSION);
model.setResolver(null); prefs.setToDefault(WorkspaceResolver.PREFS_ASSOCIATIONS_INCLUSION);
fPrefsBlock.setResolver(model.getResolver()); fPrefsBlock.setResolver(getResolverModel().getResolver());
super.performDefaults(); super.performDefaults();
} }
@ -76,10 +85,32 @@ public class CFileTypesPreferencePage extends PreferencePage implements IWorkben
* @see org.eclipse.jface.preference.IPreferencePage#performOk() * @see org.eclipse.jface.preference.IPreferencePage#performOk()
*/ */
public boolean performOk() { public boolean performOk() {
IResolverModel model = getResolverModel();
if (fPrefsBlock.performOk()) { 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(); return super.performOk();

View file

@ -10,7 +10,12 @@
***********************************************************************/ ***********************************************************************/
package org.eclipse.cdt.internal.ui.preferences; 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.CCorePlugin;
import org.eclipse.cdt.core.filetype.ICFileTypeAssociation;
import org.eclipse.cdt.core.filetype.ICFileTypeResolver; import org.eclipse.cdt.core.filetype.ICFileTypeResolver;
import org.eclipse.cdt.core.filetype.IResolverModel; import org.eclipse.cdt.core.filetype.IResolverModel;
import org.eclipse.cdt.internal.ui.ICHelpContextIds; import org.eclipse.cdt.internal.ui.ICHelpContextIds;
@ -34,7 +39,8 @@ public class CFileTypesPropertyPage extends PropertyPage {
private Button fUseWorkspace; private Button fUseWorkspace;
private Button fUseProject; private Button fUseProject;
private CFileTypesPreferenceBlock fPrefsBlock; protected ICFileTypeResolver fResolver;
protected CFileTypesPreferenceBlock fPrefsBlock;
public CFileTypesPropertyPage(){ public CFileTypesPropertyPage(){
super(); super();
@ -60,6 +66,7 @@ public class CFileTypesPropertyPage extends PropertyPage {
fUseWorkspace.setText(PreferencesMessages.getString("CFileTypesPropertyPage.useWorkspaceSettings")); //$NON-NLS-1$ fUseWorkspace.setText(PreferencesMessages.getString("CFileTypesPropertyPage.useWorkspaceSettings")); //$NON-NLS-1$
fUseWorkspace.addListener(SWT.Selection, new Listener() { fUseWorkspace.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) { public void handleEvent(Event e) {
fPrefsBlock.setResolver(getResolverModel().getResolver());
fPrefsBlock.setEnabled(false); fPrefsBlock.setEnabled(false);
} }
}); });
@ -68,6 +75,7 @@ public class CFileTypesPropertyPage extends PropertyPage {
fUseProject.setText(PreferencesMessages.getString("CFileTypesPropertyPage.useProjectSettings")); //$NON-NLS-1$ fUseProject.setText(PreferencesMessages.getString("CFileTypesPropertyPage.useProjectSettings")); //$NON-NLS-1$
fUseProject.addListener(SWT.Selection, new Listener() { fUseProject.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) { public void handleEvent(Event e) {
fPrefsBlock.setResolver(fResolver);
fPrefsBlock.setEnabled(true); fPrefsBlock.setEnabled(true);
} }
}); });
@ -75,23 +83,23 @@ public class CFileTypesPropertyPage extends PropertyPage {
// Resolver block // Resolver block
IProject project = getProject(); IProject project = getProject();
ICFileTypeResolver resolver = CCorePlugin.getDefault().getFileTypeResolver(project); IResolverModel model = getResolverModel();
IResolverModel model = CCorePlugin.getDefault().getResolverModel(); fResolver = model.getResolver(project);
boolean custom = model.getResolver() != model.getResolver(project); boolean custom = model.hasCustomResolver(project);
Composite blockPane = new Composite(topPane, SWT.NONE); Composite blockPane = new Composite(topPane, SWT.NONE);
blockPane.setLayout(new GridLayout()); blockPane.setLayout(new GridLayout());
blockPane.setLayoutData(new GridData(GridData.FILL_BOTH)); blockPane.setLayoutData(new GridData(GridData.FILL_BOTH));
fPrefsBlock = new CFileTypesPreferenceBlock(resolver); fPrefsBlock = new CFileTypesPreferenceBlock(fResolver);
fPrefsBlock.createControl(blockPane); fPrefsBlock.createControl(blockPane);
fUseWorkspace.setSelection(!custom); fUseWorkspace.setSelection(!custom);
fUseProject.setSelection(custom); fUseProject.setSelection(custom);
fPrefsBlock.setEnabled(custom); fPrefsBlock.setEnabled(custom);
WorkbenchHelp.setHelp( topPane, ICHelpContextIds.FILE_TYPES_STD_PAGE ); WorkbenchHelp.setHelp( topPane, ICHelpContextIds.FILE_TYPES_STD_PAGE );
return topPane; return topPane;
} }
@ -102,6 +110,7 @@ public class CFileTypesPropertyPage extends PropertyPage {
protected void performDefaults() { protected void performDefaults() {
fUseWorkspace.setSelection(true); fUseWorkspace.setSelection(true);
fUseProject.setSelection(false); fUseProject.setSelection(false);
fPrefsBlock.setResolver(getResolverModel().getResolver());
fPrefsBlock.setEnabled(false); fPrefsBlock.setEnabled(false);
super.performDefaults(); super.performDefaults();
} }
@ -110,16 +119,48 @@ public class CFileTypesPropertyPage extends PropertyPage {
* @see org.eclipse.jface.preference.IPreferencePage#performOk() * @see org.eclipse.jface.preference.IPreferencePage#performOk()
*/ */
public boolean performOk() { public boolean performOk() {
IResolverModel model = getResolverModel();
if (fUseProject.getSelection()) { if (fUseProject.getSelection()) {
if (fPrefsBlock.performOk()) { IProject project = getProject();
model.setResolver(getProject(), fPrefsBlock.getResolver()); 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(); return super.performOk();
} }
@ -134,7 +175,7 @@ public class CFileTypesPropertyPage extends PropertyPage {
return project; return project;
} }
private IResolverModel getResolverModel() { protected IResolverModel getResolverModel() {
return CCorePlugin.getDefault().getResolverModel(); return CCorePlugin.getDefault().getResolverModel();
} }