code: package gr.uom.java.ast.visualization;
  import gr.uom.java.jdeodorant.refactoring.views.ZoomValueValidator;
  
  import org.eclipse.draw2d.ScalableFreeformLayeredPane;
  import org.eclipse.draw2d.ScalableLayeredPane;
  import org.eclipse.jface.action.Action;  
  import org.eclipse.jface.dialogs.InputDialog;
  import org.eclipse.jface.window.Window;
  import org.eclipse.swt.widgets.Shell;  
  import org.eclipse.ui.PlatformUI;  
  import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;  
  
  public class ZoomInputAction extends Action implements IWorkbenchAction{  
  
  	private static final String ID = "gr.uom.java.ast.visualiztion.ZoomInputAction";  
  	private ScalableFreeformLayeredPane root;
  	private ScalableLayeredPane root2;
  	private boolean isFreeform= true;
  
  	public ZoomInputAction(ScalableLayeredPane root){  
  		setId(ID); 
  		this.root2 = root;
  		isFreeform = false;
  	}  
  	
  	public ZoomInputAction(ScalableFreeformLayeredPane root){  
  		setId(ID); 
  		this.root = root;
  	}  
  
  	public void run() {  
  
  		Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();  
  		String dialogBoxTitle = "Custom Zoom";  
  		String message = "Enter Zoom Value (in percent): ";  
  		String initialValue = "";
  		
  		
  		InputDialog dialog = new InputDialog(shell, dialogBoxTitle, message, initialValue, new ZoomValueValidator() );
  		if(dialog.open() == Window.OK){
  			String value = dialog.getValue();
  			if(value != null && (root != null || root2!= null)){
  				if(isFreeform)
  				this.root.setScale(Double.parseDouble(value)/100);
  				else
  					this.root2.setScale(Double.parseDouble(value)/100);
  			}
  		}
  	}  
  
  	public void dispose() {}  
  
  }  
  