/*
* 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);
}
}
}
}
}