/* * Copyright (c) 2003-2004 Christopher Lenz and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * Christopher Lenz - initial API and implementation * * $Id: ShowSelectedElementOnlyAction.java,v 1.1 2004-09-02 18:11:50 jsurfer Exp $ */ package net.sourceforge.phpeclipse.css.ui.internal.editor; import net.sourceforge.phpeclipse.css.ui.CssUI; import net.sourceforge.phpeclipse.css.ui.internal.CssUIMessages; import net.sourceforge.phpeclipse.css.ui.internal.CssUIPreferences; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.ui.texteditor.TextEditorAction; /** * A toolbar action which toggles the presentation model of the connected text * editor. The editor shows either the highlight range only or always the whole * document. * *

* This class is an implementation for the retargetable action * TOGGLE_SHOW_SELECTED_ELEMENT_ONLY provided by the platform. *

* * @see org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds#TOGGLE_SHOW_SELECTED_ELEMENT_ONLY */ public class ShowSelectedElementOnlyAction extends TextEditorAction implements IPropertyChangeListener { // Instance Variables ------------------------------------------------------ private IPreferenceStore store; // Constructors ------------------------------------------------------------ /** * Constructor. */ public ShowSelectedElementOnlyAction() { super(CssUIMessages.getResourceBundle(), "CssEditor.showSelectedElementOnly.", null); //$NON-NLS-1$ store = CssUI.getDefault().getPreferenceStore(); update(); } // TextEditor Implementation ----------------------------------------------- /* * @see org.eclipse.jface.action.IAction#run() */ public void run() { ITextEditor editor = getTextEditor(); if (editor != null) { IRegion highlightRange = editor.getHighlightRange(); editor.resetHighlightRange(); boolean show = !editor.showsHighlightRangeOnly(); setChecked(show); editor.showHighlightRangeOnly(show); if (highlightRange != null) { editor.setHighlightRange(highlightRange.getOffset(), highlightRange.getLength(), true); } store.removePropertyChangeListener(this); store.setValue( CssUIPreferences.EDITOR_SHOW_SELECTED_ELEMENT_ONLY, show); store.addPropertyChangeListener(this); } } /* * @see TextEditorAction#setEditor(ITextEditor) */ public void setEditor(ITextEditor editor) { super.setEditor(editor); if (editor != null) { if (store == null) { store = CssUI.getDefault().getPreferenceStore(); store.addPropertyChangeListener(this); } synchronizeWithPreference(editor); } else if (store != null) { store.removePropertyChangeListener(this); store = null; } update(); } /* * @see org.eclipse.ui.texteditor.IUpdate#update() */ public void update() { ITextEditor editor = getTextEditor(); if (editor != null) { setChecked(getTextEditor().showsHighlightRangeOnly()); setEnabled(true); } else { setEnabled(false); } } // IPropertyChangeListener Implementation ---------------------------------- /* * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent event) { String p = event.getProperty(); if (CssUIPreferences.EDITOR_SHOW_SELECTED_ELEMENT_ONLY.equals(p)) { synchronizeWithPreference(getTextEditor()); } } // Private Methods --------------------------------------------------------- /** * Synchronizes the appearance of the editor with what the preference store * contains. * * @param editor the editor to synchronize */ private void synchronizeWithPreference(ITextEditor editor) { if (editor != null) { boolean show = this.store.getBoolean( CssUIPreferences.EDITOR_SHOW_SELECTED_ELEMENT_ONLY); setChecked(show); if (show != editor.showsHighlightRangeOnly()) { IRegion highlightRange = editor.getHighlightRange(); editor.resetHighlightRange(); editor.showHighlightRangeOnly(show); if (highlightRange != null) { editor.setHighlightRange(highlightRange.getOffset(), highlightRange.getLength(), true); } } } } }