/** * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.django_templates.editor; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.python.pydev.core.log.Log; import org.python.pydev.django_templates.completions.templates.TemplateHelper; import org.python.pydev.editor.actions.PyBackspace; import org.python.pydev.plugin.preferences.PydevPrefs; import org.python.pydev.ui.ColorAndStyleCache; import org.python.pydev.utils.ICallback; public class DjEditor { private IPropertyChangeListener prefChangeListener; public char[] getPairMatchingCharacters(char[] orig) { char[] modified = new char[orig.length + 2]; System.arraycopy(orig, 0, modified, 0, orig.length); modified[orig.length] = '%'; modified[orig.length + 1] = '%'; return modified; } public void registerPrefChangeListener(final ICallback getISourceViewer) { this.prefChangeListener = createPrefChangeListener(getISourceViewer); getChainedPrefStore().addPropertyChangeListener(prefChangeListener); TemplateHelper.getTemplatesPreferenceStore().addPropertyChangeListener(prefChangeListener); } private IPropertyChangeListener createPrefChangeListener(final ICallback getISourceViewer) { return new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { String property = event.getProperty(); if (ColorAndStyleCache.isColorOrStyleProperty(property) || TemplateHelper.CUSTOM_TEMPLATES_DJ_KEY.equals(property)) { try { ((ISourceViewer) getISourceViewer.call(null)).invalidateTextPresentation(); } catch (Exception e) { Log.log(e); } } } }; } public IPreferenceStore getChainedPrefStore() { return PydevPrefs.getChainedPrefStore(); } public void dispose() { if (prefChangeListener != null) { getChainedPrefStore().removePropertyChangeListener(prefChangeListener); prefChangeListener = null; } } public void onCreateSourceViewer(ISourceViewer viewer) { if (viewer instanceof TextViewer) { TextViewer textViewer = (TextViewer) viewer; ((TextViewer) viewer).appendVerifyKeyListener(PyBackspace.createVerifyKeyListener(textViewer, null)); } } }