/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.diagram.ui.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWorkbenchPart;
import org.teiid.designer.diagram.ui.DiagramUiConstants;
import org.teiid.designer.diagram.ui.editor.DiagramEditor;
import org.teiid.designer.ui.editors.ModelEditor;
/**
* AutoLayoutWrapper
*
* @since 8.0
*/
public class AutoLayoutWrapper extends DiagramAction
implements DiagramUiConstants,
IDiagramActionConstants,
IPartListener,
ActionWrapper {
/**
* Construct an instance of AutoLayoutWrapper.
*
*/
public AutoLayoutWrapper() {
super();
initialize();
}
/**
* Construct an instance of AutoLayoutWrapper.
* @param theStyle
*/
public AutoLayoutWrapper(int theStyle) {
super(theStyle);
initialize();
}
@Override
public void initialize() {
setEnableState();
addAsPartListener();
}
@Override
protected void doRun() {
IEditorPart editor = getActiveEditor();
if ( editor != null ) {
AutoLayout autoLayoutMgr = getAutoLayoutManager();
IAction action = new AutoLayoutAction(autoLayoutMgr);
((AutoLayoutAction)action).run();
// after AutoLayoutWrapper operation, reset enable state from the current autoLayoutMgr
setEnabled( autoLayoutMgr.canAutoLayout() );
}
}
private void addAsPartListener() {
getPlugin().getCurrentWorkbenchWindow().getPartService().addPartListener( this );
}
/**
*
* @see org.teiid.designer.ui.common.actions.AbstractAction#dispose()
* @since 5.0
*/
@Override
public void dispose() {
getPlugin().getCurrentWorkbenchWindow().getPartService().removePartListener( this );
super.dispose();
}
/* (non-Javadoc)
* @see org.eclipse.ui.ISelectionListener#selectionChanged(IWorkbenchPart, ISelection)
*/
@Override
public void selectionChanged(IWorkbenchPart thePart, ISelection theSelection) {
// no action here...autolayout does not care about selection
}
private AutoLayout getAutoLayoutManager() {
ModelEditor editor = getActiveEditor();
if ( editor != null && editor.getCurrentPage() instanceof DiagramEditor ) {
DiagramEditor deEditorPage = (DiagramEditor)editor.getCurrentPage();
if ( deEditorPage != null ) {
AutoLayout autoLayoutMgr = (AutoLayout)deEditorPage.getAdapter(AutoLayout.class);
return autoLayoutMgr;
}
return null;
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.ui.ISelectionListener#selectionChanged(IWorkbenchPart, ISelection)
*/
public void setEnableState() {
ModelEditor editor = getActiveEditor();
if ( editor != null && editor.getCurrentPage() instanceof DiagramEditor ) {
AutoLayout autoLayoutMgr = getAutoLayoutManager();
if ( autoLayoutMgr != null ) {
// System.out.println("[AutoLayoutWrapper.setEnableState] about to set using canAutoLayout"); //$NON-NLS-1$
setEnabled( autoLayoutMgr.canAutoLayout() );
} else {
// System.out.println("[AutoLayoutWrapper.setEnableState] no autolayoutmgr found; about to set to false"); //$NON-NLS-1$
setEnabled( false );
}
}
}
/* (non-Javadoc)
* @see org.eclipse.ui.IPartListener#partActivated(org.eclipse.ui.IWorkbenchPart)
*/
@Override
public void partActivated(IWorkbenchPart part) {
setEnableState();
}
/* (non-Javadoc)
* @see org.eclipse.ui.IPartListener#partBroughtToTop(org.eclipse.ui.IWorkbenchPart)
*/
@Override
public void partBroughtToTop(IWorkbenchPart part) {
setEnableState();
}
/* (non-Javadoc)
* @see org.eclipse.ui.IPartListener#partClosed(org.eclipse.ui.IWorkbenchPart)
*/
@Override
public void partClosed(IWorkbenchPart part) {
setEnabled( false );
}
/* (non-Javadoc)
* @see org.eclipse.ui.IPartListener#partDeactivated(org.eclipse.ui.IWorkbenchPart)
*/
@Override
public void partDeactivated(IWorkbenchPart part) {
setEnabled( false );
}
/* (non-Javadoc)
* @see org.eclipse.ui.IPartListener#partOpened(org.eclipse.ui.IWorkbenchPart)
*/
@Override
public void partOpened(IWorkbenchPart part) {
setEnableState();
}
}