/* * 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.ZoomInAction; 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; /** * ZoomInWrapper * * @since 8.0 */ public class ZoomInWrapper 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 ZoomInWrapper. * */ public ZoomInWrapper() { super(); } /** * Construct an instance of ZoomInWrapper. * @param theStyle */ public ZoomInWrapper(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 in ZoomManager zoomMgr = getZoomManager(); if (zoomMgr != null) { ZoomInAction action = new ZoomInAction(zoomMgr); action.run(); DiagramEditor de = getDiagramEditor(); if( de != null ) { de.handleZoomChanged(); } zoomMgr.removeZoomListener(action); // after ZoomInWrapper operation, reset enable state from the current zoommanager setEnabled(zoomMgr.canZoomIn()); } } 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() { ModelEditor editor = getActiveEditor(); if (editor != null && editor.getCurrentPage() instanceof DiagramEditor) { ZoomManager zoomMgr = getZoomManager(); if (zoomMgr != null) { setEnabled(zoomMgr.canZoomIn()); } else { setEnabled(false); } } 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 OUT may affect us here in zoom IN // System.out.println("[ZoomOutWrapper.zoomChanged] !!!" ); //$NON-NLS-1$ setEnableState(); } }