package edu.mbl.jif.gui.imaging;
import edu.mbl.jif.gui.imaging.zoom.core.ZoomJPanel;
import edu.mbl.jif.gui.imaging.zoom.core.ZoomScrollPane;
import edu.mbl.jif.gui.imaging.zoom.util.MouseSensitiveZSP;
import edu.mbl.jif.gui.imaging.zoom.util.ctrlbar.ZoomCtrlBar;
import edu.mbl.jif.utils.ResourceManager;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.util.Iterator;
import javax.swing.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
/** @todo
* Panner
* disable hand if no scrollbars
* ZoomToROI
* enable ZoomToROI if ROI selected
* */
public class ZoomControl16 extends ZoomCtrlBar // extends JPanel
{
JButton buttonZoomIn = new JButton();
JButton buttonZoomOne = new JButton();
JButton buttonZoomOut = new JButton();
JButton buttonZoomRoi = new JButton();
JButton buttonFitWindow = new JButton();
JToggleButton togglePan = new JToggleButton();
JLabel zFactor = new JLabel();
ZoomScrollPane zsp;
double[] factors = {1.0/32, 1.0/16 , 1.0/8 , 1.0/4 , 1.0/2 , 1.0/1.0 , 2.0, 4.0, 8.0, 16.0, 32.0};
int currentFactorIndex = 5; // zoomfactor = 1.0
// @todo disable hand if no scrollbars
// @todo enable ZoomToROI if ROI selected
NumberFormat formatter = new DecimalFormat("#.##");
//MouseSensitiveZSP zsp;
public ZoomControl16(ZoomScrollPane zsp) { //(ZoomScrollPane zsp) {
this.zsp = zsp;
addZoomScrollPane(zsp);
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
void jbInit() throws Exception {
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
ResourceManager rm = new ResourceManager(
"edu/mbl/jif/gui/imaging/icons");
// @todo Fix: on loading icons from jar file
buttonZoomIn.setToolTipText("Zoom In");
buttonZoomIn.setIcon(new ImageIcon(ZoomControl16.class
.getResource("icons/zoomin.gif")));
buttonZoomIn.setMargin(new Insets(0, 0, 0, 0));
buttonZoomOne.setMargin(new Insets(0, 0, 0, 0));
buttonZoomOne.setToolTipText("Zoom 1:1");
buttonZoomOne.setIcon(new ImageIcon(ZoomControl16.class
.getResource("icons/zoom1.gif")));
buttonZoomOut.setMargin(new Insets(0, 0, 0, 0));
buttonZoomOut.setToolTipText("Zoom Out");
buttonZoomOut.setIcon(new ImageIcon(ZoomControl16.class
.getResource("icons/zoomout.gif")));
/** @todo Zoom to ROI... */
buttonZoomRoi.setMargin(new Insets(0, 0, 0, 0));
buttonZoomRoi.setToolTipText("Zoom to ROI");
buttonZoomRoi.setIcon(new ImageIcon(ZoomControl16.class
.getResource("icons/zoomToRoi.gif")));
buttonFitWindow.setMargin(new Insets(0, 0, 0, 0));
buttonFitWindow.setToolTipText("Fit to Window");
buttonFitWindow.setIcon(new ImageIcon(ZoomControl16.class
.getResource("icons/fitToWindow.png")));
togglePan.setMargin(new Insets(0, 0, 0, 0));
togglePan.setToolTipText("Pan image");
togglePan.setIcon(new ImageIcon(ZoomControl16.class
.getResource("icons/hand16.gif")));
togglePan.setSelectedIcon(new ImageIcon(ZoomControl16.class
.getResource("icons/normal.gif")));
togglePan.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (togglePan.isSelected()) {
} else {
}
updateZoomValue();
}
}
);
buttonZoomIn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// zsp.getBounds();
zsp.zoom(0, 0, zsp.getZoomFactorX() + 1.1,
zsp.getZoomFactorY() + 1.1);
updateZoomValue();
}
});
buttonZoomOut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
zsp.zoom(0, 0, zsp.getZoomFactorX() / 1.5,
zsp.getZoomFactorY() / 1.5);
updateZoomValue();
}
});
buttonZoomOne.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
//currentFactorIndex = 5;
//factor[5]
zsp.zoom(0, 0, 1.0, 1.0);
//zsp.restore();
//zsp.repaint();
updateZoomValue();
}
});
buttonFitWindow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
zsp.fitToScreen();
updateZoomValue();
}
});
buttonZoomRoi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
zoomToRoi();
// if (zsp.getRoiRect() != null) {
// zsp.zoomRectangleToWholeWindow(zsp.getRoiRect());
// }
updateZoomValue();
}
});
this.add(buttonZoomIn, null);
this.add(buttonZoomOne, null);
this.add(buttonZoomOut, null);
this.add(buttonZoomRoi, null);
this.add(buttonFitWindow, null);
this.add(togglePan, null);
zFactor.setHorizontalAlignment(JLabel.CENTER);
zFactor.setPreferredSize(new Dimension(32, 16));
zFactor.setFont(new Font("Dialog", Font.PLAIN, 10));
this.add(zFactor, null);
this.setMargin(new Insets(0, 0, 0, 0));
updateZoomValue();
}
public void setToPanningMode() {
// set to panning mode using current zoom factor
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
public void updateZoomValue() {
zFactor.setText("" + formatter.format(zsp.getZoomFactorX()));
}
/**
* set the zoom mode
* zoom mode decides what happens when the zoomable JPanel is mouse clicked
*/
public void setZoomMode(int zoomManner) {
Iterator it = zoomScrollPanes.iterator();
while (it.hasNext()) {
ZoomScrollPane zsp = (ZoomScrollPane) it.next();
if (zsp instanceof MouseSensitiveZSP) {
((MouseSensitiveZSP) zsp).setZoomMode(zoomManner);
}
}
}
/**
* zoomToRoi
*/
public void zoomToRoi() {
Iterator it = zoomScrollPanes.iterator();
while (it.hasNext()) {
ZoomScrollPane zsp = (ZoomScrollPane) it.next();
if (zsp instanceof MouseSensitiveZSP) {
Rectangle roi = ((MouseSensitiveZSP) zsp).getRoiRect();
((MouseSensitiveZSP) zsp).zoomRectangleToWholeWindow(roi);
((MouseSensitiveZSP) zsp).setRoiRect(null);
}
if (zsp instanceof ZoomScrollPane) {
ZoomJPanel zjp = zsp.getZoomPanel();
Rectangle roi = zjp.getROI();
zsp.zoomRectangleToWholeWindow(roi);
zjp.setROI(null);
}
}
}
public void addZoomScrollPane(ZoomScrollPane zsp) {
super.addZoomScrollPane(zsp);
if (zsp instanceof MouseSensitiveZSP) {
((MouseSensitiveZSP) zsp).enableMouseInteraction(true);
}
}
public void removeScrollPane(ZoomScrollPane zsp) {
super.removeScrollPane(zsp);
if (zsp instanceof MouseSensitiveZSP) {
((MouseSensitiveZSP) zsp).enableMouseInteraction(false);
}
}
}