Package org.timepedia.chronoscope.java2d.swing

Source Code of org.timepedia.chronoscope.java2d.swing.SwingChartPanel

package org.timepedia.chronoscope.java2d.swing;

import org.timepedia.chronoscope.client.Chart;
import org.timepedia.chronoscope.client.Dataset;
import org.timepedia.chronoscope.client.Datasets;
import org.timepedia.chronoscope.client.canvas.View;
import org.timepedia.chronoscope.client.canvas.ViewReadyCallback;
import org.timepedia.chronoscope.client.gss.DefaultGssContext;
import org.timepedia.chronoscope.client.plot.DefaultXYPlot;
import org.timepedia.chronoscope.client.render.XYPlotRenderer;
import org.timepedia.chronoscope.java2d.canvas.CanvasJava2D;

import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
* A ChartPanel analog implemented for Swing
*/
public class SwingChartPanel extends JPanel implements ViewReadyCallback,
    KeyListener, MouseWheelListener, MouseMotionListener, MouseListener,
    RedrawListener {

  private DefaultXYPlot plot;

  private Chart chart;

  private InteractiveViewJava2D view;

  private JLabel label;

  private int selStart;

  private boolean maybeDrag;

  private int startDragX;

  public SwingChartPanel(Dataset[] xyDatasets) {
    addKeyListener(this);


    label = new JLabel();

    chart = new Chart();
    plot = new DefaultXYPlot();
    plot.setDatasets(new Datasets(xyDatasets));
    XYPlotRenderer plotRenderer = new XYPlotRenderer();
    plot.setPlotRenderer(plotRenderer);
    chart.setPlot(plot);

    add(label);
    label.addMouseWheelListener(this);
    label.addMouseMotionListener(this);
    label.addMouseListener(this);
  }

  public void addNotify() {
    super.addNotify();

    view = new InteractiveViewJava2D();
    view.initialize(getParent().getWidth(), getParent().getHeight(), false,
        new DefaultGssContext(), this, this);
    view.onAttach();
   
  }

  public boolean imageUpdate(Image img, int infoflags, int x, int y, int w,
      int h) {

    return super.imageUpdate(img, infoflags, x, y, w, h);
  }

  public boolean isFocusTraversable() {
    return true;
  }

  public void keyPressed(final KeyEvent e) {
    final char kchar = e.getKeyChar();

    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        if (kchar == '\t') {
          chart.nextFocus();
        } else if (kchar == 'z') {
          chart.nextZoom();
        } else if (kchar == 'x') {
          chart.prevZoom();
          redraw();
        } else if (kchar == 's') {
//          chart.getPlot()
//              .setSelectionMode(!chart.getPlot().isSelectionModeEnabled());
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
          chart.pageLeft(0.5);
          redraw();
        } else if (kchar == KeyEvent.VK_RIGHT) {
          chart.pageRight(0.5);
        } else if (kchar == KeyEvent.VK_PAGE_UP) {
          chart.pageLeft(1.0);
        } else if (kchar == KeyEvent.VK_PAGE_DOWN) {
          chart.pageRight(1.0);
        } else if (kchar == 'r') {
          chart.redraw();
        } else if (e.getKeyChar() == 'm') {
          ((DefaultXYPlot)chart.getPlot()).fireContextMenuEvent(0,0);
        }
      }
    });
  }

  public void keyReleased(KeyEvent e) {
    //To change body of implemented methods use File | Settings | File Templates.
  }

  public void keyTyped(KeyEvent e) {
    //To change body of implemented methods use File | Settings | File Templates.
  }

  public void mouseClicked(MouseEvent e) {

    final boolean isContextMenu = e.isPopupTrigger()
        || e.getButton() == MouseEvent.BUTTON3;
    final int mouseX = e.getX();
    final int mouseY = e.getY();
    final int clickCount = e.getClickCount();

    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        if (isContextMenu) {

          ((DefaultXYPlot)chart.getPlot()).fireContextMenuEvent(mouseX, mouseY);
        } else {
          if (clickCount >= 2) {
            chart.maxZoomTo(mouseX, mouseY);
          } else {
            chart.click(mouseX, mouseY);
          }
        }
      }
    });
  }

  public void mouseDragged(MouseEvent e) {
    mouseMoved(e);
  }

  public void mouseEntered(MouseEvent e) {
    //To change body of implemented methods use File | Settings | File Templates.
  }

  public void mouseExited(MouseEvent e) {
  }

  public void mouseMoved(MouseEvent e) {
    final int x = e.getX();
    final int y = e.getY();
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
//        if (chart.getPlot().isSelectionModeEnabled() && selStart > -1) {
//          chart.getPlot().setHighlight(selStart, x);
//        } else {
          if (maybeDrag && Math.abs(startDragX - x) > 10) {
            chart.scrollPixels(startDragX - x);
            startDragX = x;
          } else {
            chart.setHover(x, y);
          }
//        }
      }
    });
  }

  public void mousePressed(MouseEvent e) {
//    if (chart.getPlot().isSelectionModeEnabled()) {
//      selStart = e.getX();
//    } else {
      maybeDrag = true;
      startDragX = e.getX();
//    }
  }

  public void mouseReleased(MouseEvent e) {
//    if (chart.getPlot().isSelectionModeEnabled()) {
//      chart.getPlot().setSelectionMode(false);
//      selStart = -1;
//    } else if (maybeDrag) {
//    }
    maybeDrag = false;
  }

  public void mouseWheelMoved(MouseWheelEvent e) {
    if (e.getWheelRotation() < 0) {
      SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          chart.nextZoom();
        }
      });
    } else {
      SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          chart.prevZoom();
        }
      });
    }
  }

  public void onRedraw() {
    Image im = ((CanvasJava2D) view.getCanvas()).getImage();
    ImageIcon ii = new ImageIcon(im);
    label.setIcon(ii);
  }

  public void onViewReady(View view) {
    plot.init(view);
   
    // configure chart
    chart = new Chart();
    chart.setPlot(plot);
    chart.setView(view);
    view.setChart(chart);
//    chart.init(view, plot);
    redraw();
  }

  private void redraw() {
    chart.redraw();
  }
}
TOP

Related Classes of org.timepedia.chronoscope.java2d.swing.SwingChartPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.