Index: src/org/eclipse/pde/internal/ui/editor/XMLSourcePage.java =================================================================== RCS file: /home/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/XMLSourcePage.java,v retrieving revision 1.4 diff -u -r1.4 XMLSourcePage.java --- src/org/eclipse/pde/internal/ui/editor/XMLSourcePage.java 23 Jun 2004 15:46:04 -0000 1.4 +++ src/org/eclipse/pde/internal/ui/editor/XMLSourcePage.java 9 Jul 2004 14:42:21 -0000 @@ -8,15 +8,11 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -/* - * Created on Jan 27, 2004 - * - * To change the template for this generated file go to - * Window - Preferences - Java - Code Generation - Code and Comments - */ + package org.eclipse.pde.internal.ui.editor; import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.util.*; import org.eclipse.pde.internal.ui.PDEPlugin; import org.eclipse.pde.internal.ui.editor.text.*; import org.eclipse.swt.widgets.Display; @@ -24,9 +20,6 @@ /** * @author dejan - * - * To change the template for this generated type comment go to - * Window - Preferences - Java - Code Generation - Code and Comments */ public abstract class XMLSourcePage extends PDESourcePage { public static final String ERROR_MESSAGE = "SourcePage.errorMessage"; //$NON-NLS-1$ @@ -45,7 +38,7 @@ protected XMLSourceViewerConfiguration createXMLConfiguration() { if (colorManager != null) colorManager.dispose(); - colorManager = new ColorManager(); + colorManager = ColorManager.getDefault(); return new XMLSourceViewerConfiguration(this, colorManager); } @@ -64,6 +57,28 @@ PDEPlugin.getResourceString(ERROR_MESSAGE)); } return cleanModel; + } + + protected boolean affectsTextPresentation(PropertyChangeEvent event){ + String property = event.getProperty(); + return property.equals(IPDEColorConstants.P_DEFAULT) + || property.equals(IPDEColorConstants.P_PROC_INSTR) + || property.equals(IPDEColorConstants.P_STRING) + || property.equals(IPDEColorConstants.P_TAG) + || property.equals(IPDEColorConstants.P_XML_COMMENT); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#handlePreferenceStoreChanged(org.eclipse.jface.util.PropertyChangeEvent) + */ + protected void handlePreferenceStoreChanged(PropertyChangeEvent event) { + XMLSourceViewerConfiguration sourceViewerConfiguration= (XMLSourceViewerConfiguration)getSourceViewerConfiguration(); + if (affectsTextPresentation(event)) { + sourceViewerConfiguration.adaptToPreferenceChange(event); + setSourceViewerConfiguration(sourceViewerConfiguration); + } + + super.handlePreferenceStoreChanged(event); } } Index: src/org/eclipse/pde/internal/ui/editor/feature/FeatureSourcePage.java =================================================================== RCS file: /home/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureSourcePage.java,v retrieving revision 1.6 diff -u -r1.6 FeatureSourcePage.java --- src/org/eclipse/pde/internal/ui/editor/feature/FeatureSourcePage.java 23 Jun 2004 15:46:04 -0000 1.6 +++ src/org/eclipse/pde/internal/ui/editor/feature/FeatureSourcePage.java 9 Jul 2004 14:42:21 -0000 @@ -12,7 +12,7 @@ import org.eclipse.jface.viewers.*; import org.eclipse.pde.internal.ui.editor.*; -import org.eclipse.ui.views.contentoutline.IContentOutlinePage; +import org.eclipse.ui.views.contentoutline.*; public class FeatureSourcePage extends XMLSourcePage { Index: src/org/eclipse/pde/internal/ui/editor/feature/InfoFormPage.java =================================================================== RCS file: /home/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/InfoFormPage.java,v retrieving revision 1.8 diff -u -r1.8 InfoFormPage.java --- src/org/eclipse/pde/internal/ui/editor/feature/InfoFormPage.java 23 Jun 2004 15:46:04 -0000 1.8 +++ src/org/eclipse/pde/internal/ui/editor/feature/InfoFormPage.java 9 Jul 2004 14:42:21 -0000 @@ -28,7 +28,7 @@ public class InfoFormPage extends PDEFormPage { public static final String PAGE_ID = "info"; //$NON-NLS-1$ private static final String KEY_TITLE = "FeatureEditor.InfoPage.heading"; //$NON-NLS-1$ - private IColorManager colorManager = new ColorManager(); + private IColorManager colorManager = ColorManager.getDefault(); private InfoSection infoSection; /** * Index: src/org/eclipse/pde/internal/ui/editor/schema/SchemaDocPage.java =================================================================== RCS file: /home/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/schema/SchemaDocPage.java,v retrieving revision 1.12 diff -u -r1.12 SchemaDocPage.java --- src/org/eclipse/pde/internal/ui/editor/schema/SchemaDocPage.java 23 Jun 2004 15:46:04 -0000 1.12 +++ src/org/eclipse/pde/internal/ui/editor/schema/SchemaDocPage.java 9 Jul 2004 14:42:21 -0000 @@ -23,7 +23,7 @@ public static final String PAGE_ID = "doc"; //$NON-NLS-1$ public static final String PAGE_TITLE = "SchemaEditor.DocPage.title"; //$NON-NLS-1$ - private IColorManager colorManager = new ColorManager(); + private IColorManager colorManager = ColorManager.getDefault(); private DocSection docSection; public static final String FORM_TITLE = "SchemaEditor.DocForm.title"; //$NON-NLS-1$ public static final String KEY_PENDING_TITLE = Index: src/org/eclipse/pde/internal/ui/editor/schema/SchemaFormPage.java =================================================================== RCS file: /home/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/schema/SchemaFormPage.java,v retrieving revision 1.7 diff -u -r1.7 SchemaFormPage.java --- src/org/eclipse/pde/internal/ui/editor/schema/SchemaFormPage.java 23 Jun 2004 15:46:04 -0000 1.7 +++ src/org/eclipse/pde/internal/ui/editor/schema/SchemaFormPage.java 9 Jul 2004 14:42:21 -0000 @@ -30,7 +30,7 @@ private DescriptionSection descriptionSection; private GrammarSection grammarSection; private SchemaPropertySheet propertySheetPage; - private IColorManager colorManager=new ColorManager(); + private IColorManager colorManager= ColorManager.getDefault(); public SchemaFormPage(PDEFormEditor editor) { super(editor, PAGE_ID, PDEPlugin.getResourceString(PAGE_TITLE)); Index: src/org/eclipse/pde/internal/ui/editor/schema/SchemaSourcePage.java =================================================================== RCS file: /home/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/schema/SchemaSourcePage.java,v retrieving revision 1.7 diff -u -r1.7 SchemaSourcePage.java --- src/org/eclipse/pde/internal/ui/editor/schema/SchemaSourcePage.java 23 Jun 2004 15:46:04 -0000 1.7 +++ src/org/eclipse/pde/internal/ui/editor/schema/SchemaSourcePage.java 9 Jul 2004 14:42:21 -0000 @@ -12,7 +12,7 @@ import org.eclipse.jface.action.*; import org.eclipse.jface.viewers.*; import org.eclipse.pde.internal.ui.editor.*; -import org.eclipse.ui.views.contentoutline.IContentOutlinePage; +import org.eclipse.ui.views.contentoutline.*; public class SchemaSourcePage extends XMLSourcePage { public SchemaSourcePage(PDEFormEditor editor, String id, String title) { Index: src/org/eclipse/pde/internal/ui/editor/site/SiteSourcePage.java =================================================================== RCS file: /home/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/site/SiteSourcePage.java,v retrieving revision 1.7 diff -u -r1.7 SiteSourcePage.java --- src/org/eclipse/pde/internal/ui/editor/site/SiteSourcePage.java 23 Jun 2004 15:46:04 -0000 1.7 +++ src/org/eclipse/pde/internal/ui/editor/site/SiteSourcePage.java 9 Jul 2004 14:42:21 -0000 @@ -12,7 +12,7 @@ import org.eclipse.jface.viewers.*; import org.eclipse.pde.internal.ui.editor.*; -import org.eclipse.ui.views.contentoutline.IContentOutlinePage; +import org.eclipse.ui.views.contentoutline.*; public class SiteSourcePage extends XMLSourcePage { Index: src/org/eclipse/pde/internal/ui/editor/text/ColorManager.java =================================================================== RCS file: /home/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ColorManager.java,v retrieving revision 1.3 diff -u -r1.3 ColorManager.java --- src/org/eclipse/pde/internal/ui/editor/text/ColorManager.java 10 Mar 2003 21:54:36 -0000 1.3 +++ src/org/eclipse/pde/internal/ui/editor/text/ColorManager.java 9 Jul 2004 14:42:21 -0000 @@ -20,12 +20,20 @@ public class ColorManager implements IColorManager, IPDEColorConstants { - private static Map fColorTable = new HashMap(10); + private static ColorManager fColorManager; + private Map fColorTable = new HashMap(10); private static int counter = 0; public ColorManager() { initialize(); + } + + public static ColorManager getDefault(){ + if (fColorManager == null){ + fColorManager = new ColorManager(); + } counter++; + return fColorManager; } public static void initializeDefaults(IPreferenceStore store) { @@ -51,13 +59,30 @@ Iterator e = fColorTable.values().iterator(); while (e.hasNext()) ((Color) e.next()).dispose(); + fColorManager = null; } } - + private void putColor(IPreferenceStore pstore, String property) { RGB setting = PreferenceConverter.getColor(pstore, property); Color color = new Color(Display.getCurrent(), setting); + Color oldColor= (Color) fColorTable.get(property); + if (oldColor!= null){ + if (oldColor.equals(color)){ + color.dispose(); + return; + } else { + fColorTable.remove(property); + if (!oldColor.isDisposed()) + oldColor.dispose(); + } + } fColorTable.put(property, color); + } + + public void updateProperty(String property){ + IPreferenceStore pstore = PDEPlugin.getDefault().getPreferenceStore(); + putColor(pstore, property); } public Color getColor(String key) { Index: src/org/eclipse/pde/internal/ui/editor/text/NonRuleBasedDamagerRepairer.java =================================================================== RCS file: /home/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/NonRuleBasedDamagerRepairer.java,v retrieving revision 1.2 diff -u -r1.2 NonRuleBasedDamagerRepairer.java --- src/org/eclipse/pde/internal/ui/editor/text/NonRuleBasedDamagerRepairer.java 10 Mar 2003 21:54:36 -0000 1.2 +++ src/org/eclipse/pde/internal/ui/editor/text/NonRuleBasedDamagerRepairer.java 9 Jul 2004 14:42:21 -0000 @@ -138,4 +138,12 @@ attr.getBackground(), attr.getStyle())); } + + /** + * Configures the scanner's default return token. This is the text attribute + * which is returned when none is returned by the current token. + */ + public void setDefaultTextAttribute(TextAttribute defaultTextAttribute) { + fDefaultTextAttribute= defaultTextAttribute; + } } Index: src/org/eclipse/pde/internal/ui/editor/text/XMLScanner.java =================================================================== RCS file: /home/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/XMLScanner.java,v retrieving revision 1.4 diff -u -r1.4 XMLScanner.java --- src/org/eclipse/pde/internal/ui/editor/text/XMLScanner.java 23 Jun 2004 15:46:05 -0000 1.4 +++ src/org/eclipse/pde/internal/ui/editor/text/XMLScanner.java 9 Jul 2004 14:42:21 -0000 @@ -10,20 +10,41 @@ *******************************************************************************/ package org.eclipse.pde.internal.ui.editor.text; -import org.eclipse.jface.text.rules.*; import org.eclipse.jface.text.*; +import org.eclipse.jface.text.rules.*; +import org.eclipse.jface.util.*; public class XMLScanner extends RuleBasedScanner { + private Token fProcInstr; public XMLScanner(IColorManager manager) { - IToken procInstr = new Token(new TextAttribute(manager + fProcInstr = new Token(new TextAttribute(manager .getColor(IPDEColorConstants.P_PROC_INSTR))); IRule[] rules = new IRule[2]; //Add rule for processing instructions - rules[0] = new SingleLineRule("", procInstr); //$NON-NLS-1$ //$NON-NLS-2$ + rules[0] = new SingleLineRule("", fProcInstr); //$NON-NLS-1$ //$NON-NLS-2$ // Add generic whitespace rule. rules[1] = new WhitespaceRule(new XMLWhitespaceDetector()); setRules(rules); } + protected void adaptToColorChange(ColorManager colorManager,PropertyChangeEvent event, Token token) { + colorManager.updateProperty(event.getProperty()); + TextAttribute attr= (TextAttribute) token.getData(); + token.setData(new TextAttribute(colorManager.getColor(event.getProperty()), attr.getBackground(), attr.getStyle())); + + } + + private Token getTokenAffected(PropertyChangeEvent event) { + if (event.getProperty().startsWith(IPDEColorConstants.P_PROC_INSTR)) { + return fProcInstr; + } + return (Token)fDefaultReturnToken; + } + + public void adaptToPreferenceChange(ColorManager colorManager, PropertyChangeEvent event) { + String property= event.getProperty(); + if (property.startsWith(IPDEColorConstants.P_DEFAULT) || property.startsWith(IPDEColorConstants.P_PROC_INSTR)) + adaptToColorChange(colorManager, event, getTokenAffected(event)); + } } Index: src/org/eclipse/pde/internal/ui/editor/text/XMLSourceViewerConfiguration.java =================================================================== RCS file: /home/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/XMLSourceViewerConfiguration.java,v retrieving revision 1.3 diff -u -r1.3 XMLSourceViewerConfiguration.java --- src/org/eclipse/pde/internal/ui/editor/text/XMLSourceViewerConfiguration.java 23 Jun 2004 15:46:05 -0000 1.3 +++ src/org/eclipse/pde/internal/ui/editor/text/XMLSourceViewerConfiguration.java 9 Jul 2004 14:42:21 -0000 @@ -15,6 +15,7 @@ import org.eclipse.jface.text.reconciler.*; import org.eclipse.jface.text.rules.*; import org.eclipse.jface.text.source.*; +import org.eclipse.jface.util.*; import org.eclipse.pde.core.*; import org.eclipse.pde.internal.ui.editor.*; @@ -27,7 +28,10 @@ private IColorManager fColorManager; private XMLSourcePage fSourcePage; private MonoReconciler fReconciler; + private NonRuleBasedDamagerRepairer fNdr; + private TextAttribute fXMLCommentAttr; + public XMLSourceViewerConfiguration(XMLSourcePage page, IColorManager colorManager) { fSourcePage = page; setColorManager(colorManager); @@ -62,6 +66,16 @@ return fPdeScanner; } + public void applyColorPreferenceChange(){ + fPdeScanner = new XMLScanner(fColorManager); + fPdeScanner.setDefaultReturnToken( + new Token( + new TextAttribute(fColorManager.getColor(IPDEColorConstants.P_DEFAULT)))); + fTagScanner = new XMLTagScanner(fColorManager); + fTagScanner.setDefaultReturnToken( + new Token(new TextAttribute(fColorManager.getColor(IPDEColorConstants.P_TAG)))); + + } protected XMLTagScanner getPDETagScanner() { if (fTagScanner == null) { fTagScanner = new XMLTagScanner(fColorManager); @@ -74,19 +88,19 @@ public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { PresentationReconciler reconciler = new PresentationReconciler(); - DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getPDEScanner()); - reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); - reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); - - dr = new DefaultDamagerRepairer(getPDETagScanner()); - reconciler.setDamager(dr, XMLPartitionScanner.XML_TAG); - reconciler.setRepairer(dr, XMLPartitionScanner.XML_TAG); - - NonRuleBasedDamagerRepairer ndr = - new NonRuleBasedDamagerRepairer( - new TextAttribute(fColorManager.getColor(IPDEColorConstants.P_XML_COMMENT))); - reconciler.setDamager(ndr, XMLPartitionScanner.XML_COMMENT); - reconciler.setRepairer(ndr, XMLPartitionScanner.XML_COMMENT); + DefaultDamagerRepairer fDr = new DefaultDamagerRepairer(getPDEScanner()); + reconciler.setDamager(fDr, IDocument.DEFAULT_CONTENT_TYPE); + reconciler.setRepairer(fDr, IDocument.DEFAULT_CONTENT_TYPE); + + fDr = new DefaultDamagerRepairer(getPDETagScanner()); + reconciler.setDamager(fDr, XMLPartitionScanner.XML_TAG); + reconciler.setRepairer(fDr, XMLPartitionScanner.XML_TAG); + + fXMLCommentAttr = new TextAttribute(fColorManager.getColor(IPDEColorConstants.P_XML_COMMENT)); + fNdr = + new NonRuleBasedDamagerRepairer(fXMLCommentAttr); + reconciler.setDamager(fNdr, XMLPartitionScanner.XML_COMMENT); + reconciler.setRepairer(fNdr, XMLPartitionScanner.XML_COMMENT); return reconciler; } @@ -115,4 +129,32 @@ public IColorManager getColorManager(){ return fColorManager; } + + /** + * Preference colors have changed. + * Update the default tokens of the scanners. + */ + public void adaptToPreferenceChange(PropertyChangeEvent event) { + if (fTagScanner == null) { + return; //property change before the editor is fully created + } + fTagScanner.adaptToPreferenceChange((ColorManager)fColorManager, event); + fPdeScanner.adaptToPreferenceChange((ColorManager)fColorManager, event); + String property= event.getProperty(); + if (property.startsWith(IPDEColorConstants.P_XML_COMMENT)) { + adaptToColorChange(event); + fNdr.setDefaultTextAttribute(fXMLCommentAttr); + } + } + + /** + * Update the text attributes associated with the tokens of this scanner as a color preference has been changed. + */ + private void adaptToColorChange(PropertyChangeEvent event) { + ((ColorManager)fColorManager).updateProperty(event.getProperty()); + fXMLCommentAttr= new TextAttribute(((ColorManager)fColorManager).getColor(event.getProperty()), fXMLCommentAttr.getBackground(), fXMLCommentAttr.getStyle()); + } + + + } Index: src/org/eclipse/pde/internal/ui/editor/text/XMLTagScanner.java =================================================================== RCS file: /home/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/XMLTagScanner.java,v retrieving revision 1.4 diff -u -r1.4 XMLTagScanner.java --- src/org/eclipse/pde/internal/ui/editor/text/XMLTagScanner.java 23 Jun 2004 15:46:05 -0000 1.4 +++ src/org/eclipse/pde/internal/ui/editor/text/XMLTagScanner.java 9 Jul 2004 14:42:21 -0000 @@ -12,20 +12,40 @@ import org.eclipse.jface.text.*; import org.eclipse.jface.text.rules.*; +import org.eclipse.jface.util.*; public class XMLTagScanner extends RuleBasedScanner { - + private Token fStringToken; public XMLTagScanner(IColorManager manager) { - IToken string = new Token(new TextAttribute(manager.getColor(IPDEColorConstants.P_STRING))); + fStringToken = new Token(new TextAttribute(manager.getColor(IPDEColorConstants.P_STRING))); IRule[] rules = new IRule[3]; // Add rule for single and double quotes - rules[0] = new SingleLineRule("\"", "\"", string, '\\'); //$NON-NLS-1$ //$NON-NLS-2$ - rules[1] = new SingleLineRule("'", "'", string, '\\'); //$NON-NLS-1$ //$NON-NLS-2$ + rules[0] = new SingleLineRule("\"", "\"", fStringToken, '\\'); //$NON-NLS-1$ //$NON-NLS-2$ + rules[1] = new SingleLineRule("'", "'", fStringToken, '\\'); //$NON-NLS-1$ //$NON-NLS-2$ // Add generic whitespace rule. rules[2] = new WhitespaceRule(new XMLWhitespaceDetector()); setRules(rules); } + protected void adaptToColorChange(ColorManager colorManager, PropertyChangeEvent event, Token token) { + colorManager.updateProperty(event.getProperty()); + TextAttribute attr= (TextAttribute) token.getData(); + token.setData(new TextAttribute(colorManager.getColor(event.getProperty()), attr.getBackground(), attr.getStyle())); + } + + public void adaptToPreferenceChange(ColorManager colorManager,PropertyChangeEvent event) { + String property= event.getProperty(); + if (property.startsWith(IPDEColorConstants.P_TAG) || property.startsWith(IPDEColorConstants.P_STRING)) { + adaptToColorChange(colorManager, event, getTokenAffected(event)); + } + } + + private Token getTokenAffected(PropertyChangeEvent event) { + String property= event.getProperty(); + if (property.startsWith(IPDEColorConstants.P_STRING)) + return fStringToken; + return (Token)fDefaultReturnToken; + } }