/*******************************************************************************
* Copyright (c) 2004 Chengdong Li : cdli@ccs.uky.edu
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*******************************************************************************/
package jqian.slicer.plugin.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.ui.IViewActionDelegate;
import org.eclipse.ui.IViewPart;
import jqian.slicer.plugin.view.ImageView;
import jqian.slicer.view.SWTImageCanvas;
/**
* Action delegate for all toolbar push-buttons.
* <p>
* @author Chengdong Li: cli4@uky.edu
*/
public class PushActionDelegate implements IViewActionDelegate {
/** pointer to image view */
public ImageView view=null;
/** Action id of this delegate */
public String id;
/* (non-Javadoc)
* @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
*/
public void init(IViewPart viewPart) {
if(viewPart instanceof ImageView){
this.view=(ImageView)viewPart;
}
}
/* (non-Javadoc)
* @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
*/
public void run(IAction action) {
String id=action.getId();
SWTImageCanvas imageCanvas=view.imageCanvas;
if(id.equals("toolbar.open")){
imageCanvas.onFileOpen();
return;
}
if(imageCanvas.getSourceImage()==null) return;
if(id.equals("toolbar.zoomin")){
imageCanvas.zoomIn();
return;
}else if(id.equals("toolbar.zoomout")){
imageCanvas.zoomOut();
return;
}else if(id.equals("toolbar.fit")){
imageCanvas.fitCanvas();
return;
}else if(id.equals("toolbar.rotate")){
/* rotate image anti-clockwise */
ImageData src=imageCanvas.getImageData();
if(src==null) return;
PaletteData srcPal=src.palette;
PaletteData destPal;
ImageData dest;
/* construct a new ImageData */
if(srcPal.isDirect){
destPal=new PaletteData(srcPal.redMask,srcPal.greenMask,srcPal.blueMask);
}else{
destPal=new PaletteData(srcPal.getRGBs());
}
dest=new ImageData(src.height,src.width,src.depth,destPal);
/* rotate by rearranging the pixels */
for(int i=0;i<src.width;i++){
for(int j=0;j<src.height;j++){
int pixel=src.getPixel(i,j);
dest.setPixel(j,src.width-1-i,pixel);
}
}
imageCanvas.setImageData(dest);
return;
}else if(id.equals("toolbar.original")){
imageCanvas.showOriginal();
return;
}
}
/* (non-Javadoc)
* @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
*/
public void selectionChanged(IAction action, ISelection selection) {}
}