package org.lemsml.jlems.viz.plot;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import org.lemsml.jlems.core.logging.E;
public class DataDisplay extends BasePanel implements ModeSettable, Repaintable, PaintListener {
static final long serialVersionUID = 1001;
XAxisCanvas xAxisCanvas;
YAxisCanvas yAxisCanvas;
PickWorldCanvas pwCanvas;
CornerPanel cornerPanel;
BasePanel controlPanel;
AboveBelowSplitPanel ab1;
AboveBelowSplitPanel ab2;
LeftRightSplitPanel lr;
GraphColors gcols;
RangeWatcher rangeWatcher;
static boolean interactive = true;
public static void setBatch() {
interactive = false;
}
public DataDisplay() {
super();
gcols = new GraphColors();
int leftmargin = 64;
int bottommargin = 32;
xAxisCanvas = new XAxisCanvas();
yAxisCanvas = new YAxisCanvas();
xAxisCanvas.setMinimumSize(new Dimension(200, bottommargin));
yAxisCanvas.setMinimumSize(new Dimension(leftmargin, 200));
xAxisCanvas.setPreferredSize(new Dimension(200, bottommargin));
yAxisCanvas.setPreferredSize(new Dimension(leftmargin, 200));
pwCanvas = new PickWorldCanvas(interactive);
cornerPanel = new CornerPanel();
ab1 = new AboveBelowSplitPanel(yAxisCanvas, cornerPanel, gcols);
ab2 = new AboveBelowSplitPanel(pwCanvas, xAxisCanvas, gcols);
ab1.setResizeWeight(0.95);
ab2.setResizeWeight(0.95);
lr = new LeftRightSplitPanel(ab1, ab2, gcols);
lr.setResizeWeight(0.0);
setLayout(new BorderLayout(0, 0));
add("Center", lr);
pwCanvas.addRangeListener(xAxisCanvas);
pwCanvas.addRangeListener(yAxisCanvas);
pwCanvas.addPaintListener(this);
}
public void repaintAll() {
xAxisCanvas.invalidate();
yAxisCanvas.invalidate();
validateTree();
xAxisCanvas.repaint();
yAxisCanvas.repaint();
repaint();
}
public void painted() {
int hc = pwCanvas.getHeight();
int ha = yAxisCanvas.getHeight();
if (ha != hc) {
ab1.setDividerLocation(hc);
}
}
public void setBg(Color c) {
setDataBg(c);
setBorderBg(c.brighter());
}
public void setDataBg(Color c) {
gcols.setGraphBg(c);
pwCanvas.setBg(c);
}
public void setBorderBg(Color c) {
gcols.setBorderBg(c);
xAxisCanvas.setBg(c);
yAxisCanvas.setBg(c);
cornerPanel.setBg(c);
}
public void setMode(String dom, String mod) {
pwCanvas.setMode(dom, mod);
}
public void setMode(String dom, boolean b) {
pwCanvas.setMode(dom, b);
}
public void setPaintInstructor(PaintInstructor pi) {
pwCanvas.setPaintInstructor(pi);
}
public void setBuildPaintInstructor(BuildPaintInstructor bpi) {
pwCanvas.setBuildPaintInstructor(bpi);
}
public void setPickListener(PickListener pl) {
pwCanvas.setPickListener(pl);
}
public void attach(Object obj) {
boolean done = false;
if (obj instanceof BuildPaintInstructor) {
setBuildPaintInstructor((BuildPaintInstructor)obj);
done = true;
} else if (obj instanceof PaintInstructor) {
setPaintInstructor((PaintInstructor)obj);
done = true;
}
if (obj instanceof PickListener) {
setPickListener((PickListener)obj);
done = true;
}
if (!done) {
E.error("cant attach " + obj + " to a data XDisplay");
}
}
public void setXAxisLabel(String lab) {
xAxisCanvas.setLabel(lab);
}
public void setYAxisLabel(String lab) {
yAxisCanvas.setLabel(lab);
}
public void setXAxis(String lab, double min, double max) {
setXAxisLabel(lab);
setXRange(min, max);
}
public void setYAxis(String lab, double min, double max) {
setYAxisLabel(lab);
setYRange(min, max);
}
public void setYRange(double min, double max) {
pwCanvas.setYRange(min, max);
}
public void setXXYYLimits(double[] d) {
double[] xyxy = {d[0], d[2], d[1], d[3]};
setLimits(xyxy);
}
public void setLimits(double[] xyxy) {
pwCanvas.syncSize();
pwCanvas.setXRange(xyxy[0], xyxy[2]);
pwCanvas.setYRange(xyxy[1], xyxy[3]);
pwCanvas.requestRepaint();
}
public void setXRange(double low, double high) {
pwCanvas.setXRange(low, high);
}
public double[] getXRange() {
return pwCanvas.getXRange();
}
public double[] getYRange() {
return pwCanvas.getYRange();
}
public void setFixedAspectRatio(double ar) {
pwCanvas.setFixedAspectRatio(ar);
}
public void viewChanged() {
if (pwCanvas != null) {
pwCanvas.repaint();
}
}
public void reframe() {
pwCanvas.reframe();
}
public static void main(String[] argv) {
JFrame f = new JFrame();
DataDisplay dataDisplay = new DataDisplay();
f.setPreferredSize(new Dimension(500, 300));
dataDisplay.setPaintInstructor(new Demo1());
f.getContentPane().add(dataDisplay);
f.pack();
f.setVisible(true);
}
public void setColorRange(double cmin, double cmax) {
pwCanvas.setColorRange(cmin, cmax);
}
public void setColorTable(Color[] ac) {
pwCanvas.setColorTable(ac);
}
public void syncSizes() {
pwCanvas.syncSize();
}
public void frameData() {
pwCanvas.reframe();
}
public void requestRepaint() {
pwCanvas.requestRepaint();
}
public void setCursor(String string) {
// TODO Auto-generated method stub
}
}