package SesameGUI; import java.util.Vector; import java.awt.*; import java.awt.geom.*; public class Windows { public Windows() { spectrumWindows = new Vector(); recalc = true; } public void add(double from, double to) { spectrumWindows.add(new SpectrumWindow(from, to)); } public SpectrumWindow get(int i) { return (SpectrumWindow)(spectrumWindows.elementAt(i-1)); } public void remove(int i) { spectrumWindows.removeElementAt(i-1); } public void draw(DoubleWrapper x, DoubleWrapper x1, SpectrumView view, DoubleWrapper y, Graphics2D g, int selectedWindow) { int i; double origin = x1.value; tmpOrigin = origin; SpectrumWindow sw; for (i = 0; i < spectrumWindows.size(); i++) { sw = ((SpectrumWindow)spectrumWindows.get(i)); x.value = sw.getLowerBound() - origin; x1.value = sw.getUpperBound() - origin; view.getScaleX().real2Pane(x); view.getScaleY().real2Pane(y); view.getScaleX().real2Pane(x1); if (selectedWindow - 1 != i) { g.setPaint(new Color(138, 255, 138, 100)); g.fill(new Rectangle2D.Double(x.value, view.getBottomMargin(), x1.value - x.value, view.getTopMargin() - view.getBottomMargin())); g.setPaint(new Color(0, 138, 0)); g.draw(new Rectangle2D.Double(x.value, view.getBottomMargin(), x1.value - x.value, view.getTopMargin() - view.getBottomMargin())); } else { g.setPaint(new Color(255, 0, 0, 100)); g.fill(new Rectangle2D.Double(x.value, view.getBottomMargin(), x1.value - x.value, view.getTopMargin() - view.getBottomMargin())); g.setPaint(new Color(255, 0, 0)); g.draw(new Rectangle2D.Double(x.value, view.getBottomMargin(), x1.value - x.value, view.getTopMargin() - view.getBottomMargin())); } if (!((x.value < view.getLeftMargin() && x1.value < view.getLeftMargin()) || (x.value > view.getRightMargin() && x1.value > view.getRightMargin()))) { if (x.value < view.getLeftMargin()) x.value = view.getLeftMargin(); if (x1.value < view.getLeftMargin()) x1.value = view.getLeftMargin(); if (x.value > view.getRightMargin()) x.value = view.getRightMargin(); if (x1.value > view.getRightMargin()) x1.value = view.getRightMargin(); if (selectedWindow - 1 != i) { g.setPaint(new Color(138, 255, 138, 100)); g.fill(new Rectangle2D.Double(x.value, view.getBottomMargin(), x1.value - x.value, view.getTopMargin() - view.getBottomMargin())); g.setPaint(new Color(0, 138, 0)); g.draw(new Rectangle2D.Double(x.value, view.getBottomMargin(), x1.value - x.value, view.getTopMargin() - view.getBottomMargin())); } else { g.setPaint(new Color(255, 0, 0, 100)); g.fill(new Rectangle2D.Double(x.value, view.getBottomMargin(), x1.value - x.value, view.getTopMargin() - view.getBottomMargin())); g.setPaint(new Color(255, 0, 0)); g.draw(new Rectangle2D.Double(x.value, view.getBottomMargin(), x1.value - x.value, view.getTopMargin() - view.getBottomMargin())); } } } } public int find(double where) { int ret = 0; int i; double x; double x1; SpectrumWindow sw; for (i = 0; i < spectrumWindows.size(); i++) { sw = ((SpectrumWindow)spectrumWindows.get(i)); x = sw.getLowerBound(); // - tmpOrigin; x1 = sw.getUpperBound(); // - tmpOrigin; if (x <= where && x1 >= where) { ret = i + 1; break; } } return ret; } public void recalc (double samplingRate) { /* if (!recalc) return; recalc = false; samplingRate *= samplingRate; int i; double x; double x1; SpectrumWindow sw; for (i = 0; i < spectrumWindows.size(); i++) { sw = ((SpectrumWindow)spectrumWindows.get(i)); x = (sw.getLowerBound() / 10000.0) * samplingRate; x1 = (sw.getUpperBound() / 10000.0) * samplingRate; sw.setLowerBound(x); sw.setUpperBound(x1); }*/ } public int getNumberWindows() { return spectrumWindows.size(); } public boolean isAutoWindow(int i) { return ((SpectrumWindow)(spectrumWindows.elementAt(i-1))).isAutoWindow(); } public void setAutoWindow(int i,boolean flag) { ((SpectrumWindow)(spectrumWindows.elementAt(i-1))).setAutoWindow(flag); } /** *@link aggregation * @associates <{SpectrumWindow}> */ private Vector spectrumWindows; private double tmpOrigin; private boolean recalc; }