/* * 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.gef.editparts.ZoomListener; import org.eclipse.gef.editparts.ZoomManager; import org.eclipse.gef.ui.actions.ZoomOutAction; import org.eclipse.jface.viewers.ISelection; 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.diagram.ui.editor.ZoomableEditor; import org.teiid.designer.ui.editors.ModelEditor; /** * ZoomOutWrapper * * * * @since 8.0 */ public class ZoomOutWrapper extends DiagramAction implements DiagramUiConstants, IDiagramActionConstants, IPartListener, ActionWrapper, ZoomListener { private static final double[] zoomValues = { 0.1, 0.25, 0.50, 0.75, 0.9, 1.0, 1.10, 1.25, 1.50, 2.0, 3.0, 4.0, 10.0 }; private boolean wasInitialized = false; private ZoomManager zoomManager; /** * Construct an instance of ZoomOutWrapper. * */ public ZoomOutWrapper() { super(); } /** * Construct an instance of ZoomOutWrapper. * @param theStyle */ public ZoomOutWrapper(int theStyle) { super(theStyle); } @Override public void initialize() { ModelEditor editor = getActiveEditor(); if ( editor != null && editor.getCurrentPage() instanceof ZoomableEditor) { DiagramEditor deEditorPage = ((ZoomableEditor)editor.getCurrentPage()).getDiagramEditor(); if ( deEditorPage != null ) { zoomManager = (ZoomManager)deEditorPage.getAdapter(ZoomManager.class); } } if (this.zoomManager != null) { this.zoomManager.setZoomLevels(zoomValues); if( !wasInitialized ) { wasInitialized = true; this.zoomManager.setZoom(getEditorZoomLevel()); } this.zoomManager.addZoomListener(this); } setEnableState(); addAsPartListener(); } @Override protected void doRun() { // zoom out ZoomManager zoomMgr = getZoomManager(); if ( zoomMgr != null ) { ZoomOutAction action = new ZoomOutAction(zoomMgr); action.run(); DiagramEditor de = getDiagramEditor(); if( de != null ) { de.handleZoomChanged(); } zoomMgr.removeZoomListener(action); // after ZoomOutWrapper operation, reset enable state from the current zoommanager setEnabled( zoomMgr.canZoomOut() ); } } private DiagramEditor getDiagramEditor() { ModelEditor editor = getActiveEditor(); if (editor != null && editor.getCurrentPage() instanceof ZoomableEditor) { DiagramEditor deEditorPage = ((ZoomableEditor)editor.getCurrentPage()).getDiagramEditor(); if (deEditorPage != null) { return deEditorPage; } } return null; } public void closeZoomManager() { if( zoomManager != null ) { zoomManager.removeZoomListener(this); zoomManager = null; } } private double getEditorZoomLevel() { double currentZoom = 1.0; DiagramEditor de = getDiagramEditor(); if( de != null ) { currentZoom = de.getCurrentZoomFactor(); } return currentZoom; } private ZoomManager getZoomManager() { if( zoomManager == null ) { initialize(); } return zoomManager; } 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...zooms do not care about selection } /* (non-Javadoc) * @see org.eclipse.ui.ISelectionListener#selectionChanged(IWorkbenchPart, ISelection) */ public void setEnableState() { // System.out.println("[ZoomOutWrapper.setEnableState] TOP"); //$NON-NLS-1$ ModelEditor editor = getActiveEditor(); if ( editor != null && editor.getCurrentPage() instanceof DiagramEditor ) { ZoomManager zoomMgr = getZoomManager(); if ( zoomMgr != null ) { setEnabled( zoomMgr.canZoomOut() ); } else { 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(); } @Override public void zoomChanged( double d ) { // reset enable state; a change in zoom IN may affect us here in zoom OUT // System.out.println("[ZoomInWrapper.zoomChanged] !!!" ); //$NON-NLS-1$ setEnableState(); } }