/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.jlab.groot.graphics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JDialog;
import javax.swing.JTabbedPane;
import org.jlab.groot.base.AxisAttributes;
import org.jlab.groot.base.PadAttributes;
import org.jlab.groot.base.PadMargins;
import org.jlab.groot.data.GraphErrors;
import org.jlab.groot.data.H1F;
import org.jlab.groot.data.H2F;
import org.jlab.groot.data.IDataSet;
import org.jlab.groot.math.Dimension2D;
import org.jlab.groot.math.Dimension3D;
import org.jlab.groot.math.Func1D;
import org.jlab.groot.ui.LatexText;
import org.jlab.groot.ui.PaveText;
/**
*
* @author gavalian
*/
public class EmbeddedPad {
PadAttributes attr = new PadAttributes();
Dimension2D padDimensions = new Dimension2D();
GraphicsAxisFrame axisFrame = new GraphicsAxisFrame();
List datasetPlotters = new ArrayList();
boolean preliminary = true;
int preliminarySize = 36;
PaveText statBox = null;
public EmbeddedPad(){
}
public EmbeddedPad(int x, int y, int width, int height){
this.setDimension(x, y, width, height);
}
public final EmbeddedPad setDimension(int x, int y, int width, int height){
this.padDimensions.getDimension(0).setMinMax(x,x+width);
this.padDimensions.getDimension(1).setMinMax(y,y+height);
axisFrame.setFrameDimensions(
padDimensions.getDimension(0).getMin(),
padDimensions.getDimension(0).getMax(),
padDimensions.getDimension(1).getMin(),
padDimensions.getDimension(1).getMax()
);
//System.out.println(padDimensions);
return this;
}
public void clear(){
this.datasetPlotters.clear();
}
public Map getObjectMap(){
Map objects = new LinkedHashMap();
for(IDataSetPlotter plotter : this.datasetPlotters){
objects.put(plotter.getName(), plotter.getDataSet());
}
return objects;
}
public void setAxisRange(double xmin, double xmax, double ymin, double ymax){
this.getAxisX().setRange(xmin, xmax);
this.getAxisY().setRange(ymin, ymax);
}
public void setMargins(PadMargins margins){
this.attr.getPadMargins().copy(margins);
//System.out.println(" PAD - > " + padMargins);
}
public GraphicsAxisFrame getAxisFrame(){
return this.axisFrame;
}
public void paint(Graphics g){
this.draw((Graphics2D)g);
}
/**
* @return the datasetPlotters
*/
public List getDatasetPlotters() {
return datasetPlotters;
}
/**
* @param datasetPlotters the datasetPlotters to set
*/
public void setDatasetPlotters(List datasetPlotters) {
this.datasetPlotters = datasetPlotters;
}
/*
public void drawScreenshot(Graphics g){
EmbeddedCanvas can = new EmbeddedCanvas();
can.setPreferredSize(new Dimension(this.getWidth(),this.getHeight()));
this.setDimension(5, -5, 362,218);
this.draw((Graphics2D)g);
this.setDimension((int)x1, (int)y1, (int)x2, (int)y2);
}*/
public void draw(Graphics2D g2d){
//axisFrame.updateMargins(g2d);
//axisFrame.setAxisMargins(padMargins);
//axisFrame.updateMargins(g2d);
g2d.setColor(this.attr.getBackgroundColor());
/*g2d.fillRect(
(int) padDimensions.getDimension(0).getMin(),
(int) padDimensions.getDimension(1).getMin(),
(int) ( padDimensions.getDimension(0).getMax()
- padDimensions.getDimension(0).getMin()),
(int) (padDimensions.getDimension(1).getMax()
-padDimensions.getDimension(1).getMin())
);
*/
//axisFrame.getAxisY().setTitle(datasetPlotters.get(0).getDataSet().getAttributes().getYTitle());
//axisFrame.getAxisX().setTitle(datasetPlotters.get(0).getDataSet().getAttributes().getXTitle());
//axisFrame.updateMargins(g2d);
//System.out.println(padMargins);
// padMargins = axisFrame.getFrameMargins();
// System.out.println(padMargins);
Dimension3D axis = new Dimension3D();
axis.set(0.0, 1.0, 0.0, 1.0, 0.0, 1.0);
if(this.datasetPlotters.size()>0){
axis.copy(datasetPlotters.get(0).getDataRegion());
for(IDataSetPlotter plotter : this.datasetPlotters){
Dimension3D d3d = plotter.getDataRegion();
axis.combine(d3d);
}
//System.out.println( "AXIS = " + axis.toString());
if(this.getAxisX().isAutoScale()==false){
axis.getDimension(0).copy(this.getAxisX().getRange());
//axis.getDimension(1).copy(this.getAxisY().getRange());
}else{
axisFrame.getAxisX().setRange(
axis.getDimension(0).getMin(),
axis.getDimension(0).getMax()
);
axisFrame.getAxisX().getAttributes().setAxisAutoScale(true);
}
double sum = 0.0;
for(int i=0; i0){
if(this.getDatasetPlotters().get(0) instanceof Histogram2DPlotter){
sum = 1.0;
}
}
if(this.getAxisY().isAutoScale()==false || sum==0.0){
axis.getDimension(1).copy(this.getAxisY().getRange());
//System.out.println("if 1");
}else{
axisFrame.getAxisY().setRange(
axis.getDimension(1).getMin(),
axis.getDimension(1).getMax()
);
axisFrame.getAxisY().getAttributes().setAxisAutoScale(true);
//System.out.println("if 2");
}
//System.out.println(" AXIS Y MIN MAX" + axisFrame.getAxisY().getMin() + " "
//+ axisFrame.getAxisY().getMax());
if(this.getAxisZ().isAutoScale()==false){
axis.getDimension(2).copy(this.getAxisZ().getRange());
}else{
axisFrame.getAxisZ().setRange(
axis.getDimension(2).getMin(),
axis.getDimension(2).getMax()
);
axisFrame.getAxisZ().getAttributes().setAxisAutoScale(true);
}
if(this.attr.getTitle()!=""){
this.attr.getPadMargins().setTopMargin(this.attr.getPadMargins().getTopMargin()+getTitleFontSize());
axisFrame.setAxisMargins(this.attr.getPadMargins());
axisFrame.updateMargins(g2d);
}else{
/*
this.attr.getPadMargins().setTopMargin(this.attr.getPadMargins().getTopMargin()-getTitleFontSize());
axisFrame.setAxisMargins(this.attr.getPadMargins());
axisFrame.updateMargins(g2d);*/
}
/*if(this.getAxisZ().getAttributes().showAxis()){
padMargins.setRightMargin(padMargins.getRightMargin()+10);
axisFrame
}*/
//System.out.println( "Y AXIS DIM = " + axisFrame.getAxisY().toString());
Rectangle2D rect = new Rectangle2D.Double(
axisFrame.getFrameDimensions().getDimension(0).getMin() + this.attr.getPadMargins().getLeftMargin(),
axisFrame.getFrameDimensions().getDimension(1).getMin() + this.attr.getPadMargins().getTopMargin(),
axisFrame.getFrameDimensions().getDimension(0).getLength()
- this.attr.getPadMargins().getLeftMargin() - this.attr.getPadMargins().getRightMargin(),
axisFrame.getFrameDimensions().getDimension(1).getLength() -
this.attr.getPadMargins().getTopMargin() - this.attr.getPadMargins().getBottomMargin()
);
g2d.setClip(rect);
for(IDataSetPlotter plotter : this.datasetPlotters){
plotter.draw(g2d, axisFrame);
}
g2d.setClip(null);
//System.out.println("PLOTTERS SIZE = " + this.datasetPlotters.size());
axisFrame.drawAxis(g2d, this.attr.getPadMargins());
List> toBeDrawn = new ArrayList< List>();
for(int i = 0; i> currentStats = this.datasetPlotters.get(i).getDataSet().getStatBox().getPaveTexts();
String optStat = this.datasetPlotters.get(i).getDataSet().getAttributes().getOptStat();
int counter = 0;
for(int j=0; j0){
statBox = new PaveText(2);
statBox.setPaveTexts(toBeDrawn);
statBox.setFont(this.attr.getStatBoxFont().getFontName());
statBox.setFontSize(this.attr.getStatBoxFont().getFontSize());
statBox.updateDimensions(g2d);
statBox.setBackground(255, 255, 255, 200);
int x = (int) (axisFrame.getFrameDimensions().getDimension(0).getMax() - statBox.getBounds().getDimension(0).getLength()-5) +this.attr.getStatBoxOffsetX();
int y = (int) (axisFrame.getFrameDimensions().getDimension(1).getMin()+5) +this.attr.getStatBoxOffsetY();
statBox.setPosition(x-this.attr.getPadMargins().getRightMargin(), y+this.attr.getPadMargins().getTopMargin());
statBox.drawPave(g2d, x-this.attr.getPadMargins().getRightMargin(), y+this.attr.getPadMargins().getTopMargin());
}
if( !"".equals(this.attr.getTitle())){
LatexText titleLatex = new LatexText(this.attr.getTitle());
titleLatex.setColor(1);
titleLatex.setFont(this.getTitleFont());
titleLatex.setFontSize(this.getTitleFontSize());
this.attr.getPadMargins().setTopMargin(this.attr.getPadMargins().getTopMargin()+getTitleFontSize()+10);
titleLatex.drawString(g2d, (int) axisFrame.getAxisX().getAxisPosition((axisFrame.getAxisX().getRange().getMin()+.5*axisFrame.getAxisX().getRange().getLength())),(int)( axisFrame.getFrameDimensions().getDimension(1).getMin()+this.attr.getTitleOffset()), 1, 0);
}
/*
if(this.optStat>0){
if(this.datasetPlotters.get(0).getDataSet() instanceof H1F){
List> toBeDrawn = new ArrayList< List>();
List> currentStats = this.datasetPlotters.get(0).getDataSet().getStatBox().getPaveTexts();
int tempOpt = optStat;
int counter = 0;
while(tempOpt>=1){
//System.out.println("Counter:"+counter);
if(tempOpt%10!=0){
toBeDrawn.add(currentStats.get(counter));
//System.out.print("counter:"+counter);
for(LatexText text : currentStats.get(counter)){
System.out.print(" "+text.getTextString());
}
}
tempOpt = tempOpt/10;
counter++;
}
//PaveText statBox = this.datasetPlotters.get(0).getDataSet().getStatBox();
PaveText statBox = new PaveText(2);
statBox.setPaveTexts(toBeDrawn);
statBox.setFont(this.statBoxFont.getFontName());
statBox.setFontSize(this.statBoxFont.getFontSize());
statBox.updateDimensions(g2d);
int x = (int) (axisFrame.getFrameDimensions().getDimension(0).getMax() - statBox.getBounds().getDimension(0).getLength()-5);
int y = (int) (axisFrame.getFrameDimensions().getDimension(1).getMin()+5) ;
statBox.setPosition(x-padMargins.getRightMargin(), y+padMargins.getTopMargin());
statBox.drawPave(g2d, x-padMargins.getRightMargin(), y+padMargins.getTopMargin());
PaveText statBox = this.datasetPlotters.get(0).getDataSet().getStatBox();
statBox.setFont(this.statBoxFont.getFontName());
statBox.setFontSize(this.statBoxFont.getFontSize());
statBox.updateDimensions(g2d);
int x = (int) (this.padDimensions.getDimension(0).getMax() - statBox.getBounds().getDimension(0).getLength()-10);
int y = (int) (this.padDimensions.getDimension(1).getMin() + 10) ;
statBox.setPosition(x, y);
statBox.drawPave(g2d, x, y);
}
}*/
}
}
public void setOptStat(int opts){
if( this.getDatasetPlotters().size()>0){
this.getDatasetPlotters().get(0).getDataSet().getAttributes().setOptStat(""+opts);
}
}
public void setOptStat(String opts){
if( this.getDatasetPlotters().size()>0){
this.getDatasetPlotters().get(0).getDataSet().getAttributes().setOptStat(opts);
}
}
public String getOptStat(){
if(this.getDatasetPlotters().size()>0){
return this.getDatasetPlotters().get(0).getDataSet().getAttributes().getOptStat();
}
return "0";
}
public EmbeddedPad setAutoScale(){
this.getAxisX().setAutoScale(true);
this.getAxisY().setAutoScale(true);
return this;
}
public GraphicsAxis getAxisX(){
return this.axisFrame.getAxisX();
}
public GraphicsAxis getAxisY(){
return this.axisFrame.getAxisY();
}
public void setStatBoxFont(String name){
this.attr.getStatBoxFont().setFontName(name);
}
public void setStatBoxFontSize(int size){
this.attr.getStatBoxFont().setFontSize(size);
}
public void setAxisFont(String name){
this.getAxisFrame().getAxisX().setAxisFont(name);
this.getAxisFrame().getAxisY().setAxisFont(name);
}
public void setAxisFontSize(int size){
this.getAxisFrame().getAxisX().setAxisFontSize(size);
this.getAxisFrame().getAxisY().setAxisFontSize(size);
}
public void addPlotter(IDataSetPlotter plotter){
this.datasetPlotters.add(plotter);
}
public int getWidth(){return (int)(padDimensions.getDimension(0).getMax() - padDimensions.getDimension(0).getMin());}
public int getHeight(){return (int)(padDimensions.getDimension(1).getMax() - padDimensions.getDimension(1).getMin());}
public void draw(IDataSet ds, String options){
ds.getAttributes().setDrawOptions(options);
if(options.contains("same")==false){
this.datasetPlotters.clear();
}
if(datasetPlotters.isEmpty()){
axisFrame.getAxisY().setTitle(ds.getAttributes().getTitleY());
axisFrame.getAxisX().setTitle(ds.getAttributes().getTitleX());
this.setTitle(ds.getAttributes().getTitle());
}else{
axisFrame.getAxisY().setTitle(datasetPlotters.get(0).getDataSet().getAttributes().getTitleY());
axisFrame.getAxisX().setTitle(datasetPlotters.get(0).getDataSet().getAttributes().getTitleX());
}
if(ds instanceof Func1D){
this.addPlotter(new FunctionPlotter(ds));
}
if(ds instanceof H1F){
this.addPlotter(new HistogramPlotter(ds,options));
H1F h = (H1F) ds;
if(h.getFunction()!=null){
this.addPlotter(new FunctionPlotter(h.getFunction()));
}
}
if(ds instanceof H2F){
axisFrame.getAxisZ().getAttributes().setShowAxis(true);
this.addPlotter(new Histogram2DPlotter(ds));
}
if(ds instanceof GraphErrors){
this.addPlotter(new GraphErrorsPlotter(ds));
GraphErrors gr = (GraphErrors) ds;
if(gr.getFunction()!=null){
this.addPlotter(new FunctionPlotter(gr.getFunction()));
}
}
//axisFrame.getAxisY().setTitle(datasetPlotters.get(0).getDataSet().getAttributes().getTitleY());
//axisFrame.getAxisX().setTitle(datasetPlotters.get(0).getDataSet().getAttributes().getTitleX());
}
public void remove(IDataSet ds){
for(IDataSetPlotter plotter :this.datasetPlotters ){
if(plotter.getDataSet().equals(ds)){
this.datasetPlotters.remove(plotter);
break;
}
}
}
/**
* returns copy of embedded pad with all plotters included.
* @return
*/
public EmbeddedPad getCopy(){
EmbeddedPad pad = new EmbeddedPad();
for(int i =0 ; i < this.datasetPlotters.size(); i++){
IDataSetPlotter plotter = this.datasetPlotters.get(i);
if(plotter instanceof HistogramPlotter){
pad.addPlotter(new HistogramPlotter(plotter.getDataSet()));
}
if(plotter instanceof FunctionPlotter){
pad.addPlotter(new FunctionPlotter(plotter.getDataSet()));
}
if(plotter instanceof Histogram2DPlotter){
pad.addPlotter(new Histogram2DPlotter(plotter.getDataSet()));
}
if(plotter instanceof GraphErrorsPlotter){
pad.addPlotter(new GraphErrorsPlotter(plotter.getDataSet()));
//System.out.println("Graph errors");
}
}
try {
pad.getAxisX().setAttributes((AxisAttributes) this.getAxisX().getAttributes().clone());
pad.getAxisY().setAttributes((AxisAttributes) this.getAxisY().getAttributes().clone());
pad.getAxisZ().setAttributes((AxisAttributes) this.getAxisZ().getAttributes().clone());
pad.setTitle(this.attr.getTitle());
pad.setTitleOffset(this.attr.getTitleOffset());
pad.setTitleFontSize(this.getTitleFontSize());
pad.setTitleFont(this.getTitleFont());
pad.setStatBoxFont(this.getStatBoxFontName());
pad.setStatBoxFontSize(this.getStatBoxFontSize());
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pad;
}
private String getStatBoxFontName() {
return this.attr.getStatBoxFont().getFontName();
}
public static class EmbeddedPadConfigurationPane extends JDialog {
EmbeddedPad embeddedPad = null;
JTabbedPane tabbedPane = null;
public EmbeddedPadConfigurationPane(EmbeddedPad pad){
super();
tabbedPane = new JTabbedPane();
this.setEmbeddedPad(pad);
}
public final void setEmbeddedPad(EmbeddedPad pad){
embeddedPad = pad;
}
public void initUI(){
//embeddedPad.getAxisFrame().getAxisX()
}
}
public GraphicsAxis getAxisZ() {
return this.axisFrame.getAxisZ();
}
public String getTitle() {
return this.attr.getTitle();
}
public int getTitleOffset() {
return this.attr.getTitleOffset();
}
public void setTitleOffset(int titleOffset) {
this.attr.setTitleOffset(titleOffset);
}
public void setTitleFont(String titleFont) {
this.attr.setTitleFontName(titleFont);
}
public void getTitle(String title) {
this.attr.setTitle(title);
}
public int getTitleFontSize() {
return this.attr.getTitleFontSize();
}
public String getTitleFont() {
return this.attr.getTitleFontName();
}
public void setTitleFontSize(int titleFontSize) {
this.attr.setTitleFontSize(titleFontSize);
}
public void getTitleFont(String titleFont) {
this.attr.setTitleFontName(titleFont);
}
public void setAxisTitleFontSize(int parseInt) {
this.getAxisX().getAttributes().setTitleFontSize(parseInt);
this.getAxisY().getAttributes().setTitleFontSize(parseInt);
this.getAxisZ().getAttributes().setTitleFontSize(parseInt);
}
public void setAxisLabelFontSize(int parseInt) {
this.getAxisX().getAttributes().setLabelFontSize(parseInt);
this.getAxisY().getAttributes().setLabelFontSize(parseInt);
this.getAxisZ().getAttributes().setLabelFontSize(parseInt);
}
public void setFontNameAll(String FontName) {
this.getAxisX().getAttributes().setLabelFontName(FontName);
this.getAxisY().getAttributes().setLabelFontName(FontName);
this.getAxisZ().getAttributes().setLabelFontName(FontName);
this.getAxisX().getAttributes().setTitleFontName(FontName);
this.getAxisY().getAttributes().setTitleFontName(FontName);
this.attr.setTitleFontName(FontName);
this.attr.getStatBoxFont().setFontName(FontName);
}
public int getStatBoxFontSize() {
return this.attr.getStatBoxFont().getFontSize();
}
public void setTitle(String title) {
this.attr.setTitle(title);
}
}
Ads help maintain this website.