/******************************************************************************* * Copyright © 2008, 2013 IBM Corporation 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: * IBM Corporation - initial API and implementation * *******************************************************************************/ package org.eclipse.edt.ide.rui.visualeditor.internal.editor; import org.eclipse.edt.ide.rui.visualeditor.internal.outline.WidgetDragListener; import org.eclipse.edt.ide.rui.visualeditor.internal.outline.WidgetDropAdapter; import org.eclipse.edt.ide.rui.visualeditor.internal.outline.WidgetTransfer; import org.eclipse.edt.ide.rui.visualeditor.internal.widget.WidgetPart; import org.eclipse.edt.ide.rui.visualeditor.plugin.Activator; import org.eclipse.gef.dnd.TemplateTransfer; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.views.contentoutline.ContentOutlinePage; public class EvDesignOutlinePage extends ContentOutlinePage implements KeyListener { protected EvDesignPage _designPage = null; protected WidgetPart _model = null; protected boolean _bProcessingSelectionChange = false; protected EvEditorOutlinePage _editorOutlinePage = null; /** * Constructor. */ public EvDesignOutlinePage( EvDesignPage editor ) { super(); _designPage = editor; } /** * Creates the visibile user interface. */ public void createControl( Composite parent ) { super.createControl( parent ); // Create actions //--------------- /* _actionRefreshView = new ISeriesEditorRefreshAction(); IActionBars actionBars = getSite().getActionBars(); IToolBarManager toolBar = actionBars.getToolBarManager(); toolBar.add( _actionRefreshView ); */ // Create a tree viewer for drag and drop //--------------------------------------- // treeViewer = new LanguageTreeViewer(new Tree(parent, SWT.BORDER + SWT.MULTI), this); TreeViewer treeViewer = getTreeViewer(); //add drag and drop support int ops = DND.DROP_MOVE; WidgetTransfer transfer = new WidgetTransfer( _designPage.getWidgetManager() ); Transfer[] transfers = new Transfer[] { transfer }; treeViewer.addDragSupport( ops, transfers, new WidgetDragListener( treeViewer, transfer ) ); transfers = new Transfer[] { transfer, TemplateTransfer.getInstance() }; WidgetDropAdapter dropAdapter = new WidgetDropAdapter( treeViewer, _designPage, transfer, _designPage._overlay ); treeViewer.addDropSupport( ops, transfers, dropAdapter ); // Add tree viewer listeners //-------------------------- treeViewer.addSelectionChangedListener( this ); treeViewer.getTree().addKeyListener(this); // Create content providers for the tree viewer //--------------------------------------------- EvDesignOutlineProvider provider = new EvDesignOutlineProvider(); treeViewer.setContentProvider( provider ); treeViewer.setLabelProvider( provider ); // Set initial expansion level //---------------------------- treeViewer.setAutoExpandLevel( 4 ); // Give the root element to the tree viewer //----------------------------------------- _model = _designPage.getWidgetManager().getWidgetRoot(); if( _model != null ) { treeViewer.setInput( _model ); ISelection selection = new StructuredSelection( _model ); setSelection( selection ); } createContextMenu(); } protected void createContextMenu() { // Create menu manager MenuManager manager = new MenuManager( "", Activator.PLUGIN_ID + ".outline.manu" ); // set menu manager options and add listener manager.setRemoveAllWhenShown(true); manager.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { contextMenuAboutToShow(manager); } }); // Register menu manager (needs to be after listeners are added) _editorOutlinePage.getSite().registerContextMenu( Activator.PLUGIN_ID + ".outline", manager, getTreeViewer() ); //$NON-NLS-1$ // Create context menu Control c = getTreeViewer().getControl(); Menu menu = manager.createContextMenu(c); c.setMenu(menu); } protected void contextMenuAboutToShow(IMenuManager menu) { IStructuredSelection selection = (IStructuredSelection) getSelection(); boolean actionEnabled = (selection!= null && selection.size() == 1); Action deleteAction = _designPage._overlay._actionWidgetDelete; menu.add( deleteAction ); menu.add(new Separator()); Action propertyAction = _designPage._overlay._actionWidgetProperties; menu.add( propertyAction ); propertyAction.setEnabled( actionEnabled ); } /** * Overrides the super class because it doesn't check for widgetDisposed. */ public ISelection getSelection() { if( getTreeViewer().getTree() != null && getTreeViewer().getTree().isDisposed() == false ) { return getTreeViewer().getSelection(); } return null; } /** * */ public void partSelected( WidgetPart nodeSelected, String strSource ) { StructuredSelection selection = new StructuredSelection( nodeSelected ); removeSelectionChangedListener( this ); setSelection( selection ); addSelectionChangedListener( this ); } /** * * */ public void selectView() { TreeViewer treeViewer = getTreeViewer(); TreeItem[] items0 = treeViewer.getTree().getItems(); TreeItem[] items1 = items0[ 0 ].getItems(); TreeItem[] itemsSelect = new TreeItem[1]; // View //----- if( items1.length > 0 ) itemsSelect[ 0 ] = items1[ 0 ]; // Form //----- else itemsSelect[ 0 ] = items0[ 0 ]; treeViewer.getTree().setSelection( itemsSelect ); } /** * */ public void setEnabled( boolean bEnable ) { if( getTreeViewer() != null ) { Control control = getTreeViewer().getControl(); if( control.isDisposed() == false ) { control.setEnabled( bEnable ); } } } /** * Sets the input of the outline page */ public void setInput( Object input ) { if( input instanceof WidgetPart ) { _model = (WidgetPart)input; } update(); } /** * Overrides the super class because it doesn't check for widgetDisposed. */ public void setSelection( ISelection selection ) { // System.out.println( "DesignEditorContentOutlinePage.setSelection " + selection ); if( getTreeViewer() == null ) return; if( getTreeViewer().getTree() != null && getTreeViewer().getTree().isDisposed() == false ) { getTreeViewer().setSelection( selection ); } } /** * Updates the outline page. */ public void update() { if( getTreeViewer() != null ) { Control control = getTreeViewer().getControl(); if( control.isDisposed() == false ) { control.setRedraw( false ); _model = _designPage.getWidgetManager().getWidgetRoot(); getTreeViewer().setInput( _model ); // Update the selection //--------------------- WidgetPart part = _designPage.getEditor().getWidgetSelected(); if( part != null ){ StructuredSelection selection = new StructuredSelection( part ); setSelection( selection ); } control.setRedraw( true ); } } } public void keyPressed(KeyEvent keyEvent) { if( keyEvent.keyCode == SWT.DEL ){ _designPage._overlay._actionWidgetDelete.run(); } } public void keyReleased(KeyEvent keyEvent) { // do nothing } }