blob: c2c067c0dadc04bf514685aaf7a31367308f78ac [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 Mathias Schaeffner and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Mathias Schaeffner - initial API and implementation
*******************************************************************************/
package org.eclipse.rap.themeeditor.editor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.rap.themeeditor.editor.source.CSSSourceEditor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
/**
* Implementation of an Outline page showing StyleRules as items if the
* Rules-Tab is activated, or showing OutlineRegions as items if the Source-Tab
* is activated.
*/
public class CSSContentOutlinePage extends ContentOutlinePage {
protected Object[] input;
protected IDocumentProvider documentProvider;
protected CSSSourceEditor textEditor;
private boolean isSetSelectionEnabled = true;
public CSSContentOutlinePage( CSSSourceEditor cssSourceEditor ) {
textEditor = cssSourceEditor;
}
public void createControl( final Composite parent ) {
super.createControl( parent );
TreeViewer viewer = getTreeViewer();
viewer.setContentProvider( new DefaultContentProvider() );
viewer.setLabelProvider( new ContentOutlineLabelProvider() );
if( input != null ) {
viewer.setInput( input );
}
}
public void selectionChanged( final SelectionChangedEvent event ) {
isSetSelectionEnabled = false;
super.selectionChanged( event );
int newIndex = -1;
Object item = null;
ISelection selection = event.getSelection();
if( !selection.isEmpty() ) {
item = ( ( IStructuredSelection )selection ).getFirstElement();
}
if( getTreeViewer().getTree().getSelectionCount() == 1 ) {
TreeItem treeItem = getTreeViewer().getTree().getSelection()[ 0 ];
newIndex = getTreeViewer().getTree().indexOf( treeItem );
}
textEditor.outlineSelectionChanged( newIndex, item );
isSetSelectionEnabled = true;
}
public void forceSelectionChanged( final int newIndex ) {
if( getTreeViewer() != null ) {
isSetSelectionEnabled = false;
Object item = null;
ISelection selection = getTreeViewer().getSelection();
if( !selection.isEmpty() ) {
item = ( ( IStructuredSelection )selection ).getFirstElement();
}
textEditor.outlineSelectionChanged( newIndex, item );
isSetSelectionEnabled = true;
}
}
public void setInput( final Object[] input ) {
this.input = input;
update();
}
public void setSelection( final int index ) {
if( isSetSelectionEnabled && getTreeViewer() != null ) {
Tree tree = getTreeViewer().getTree();
if( index >= 0 && index < tree.getItemCount() ) {
tree.setSelection( tree.getItem( index ) );
tree.showSelection();
} else {
tree.deselectAll();
}
}
}
private void update() {
TreeViewer viewer = getTreeViewer();
if( viewer != null ) {
Control control = viewer.getControl();
if( control != null && !control.isDisposed() ) {
control.setRedraw( false );
viewer.setInput( input );
viewer.expandAll();
control.setRedraw( true );
}
}
}
}