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