package com.isti.traceview.gui; import java.text.DecimalFormat; import java.util.List; import com.isti.traceview.common.TimeInterval; import com.isti.traceview.data.PlotData; import com.isti.traceview.gui.ScaleModeAbstract; /** * State pattern realization for scale mode, COM scaling. It means that value axis in all channel * views scales to the same maximum and minimum values. Maximum and minimum searches among all * loaded in graph panel traces (in all channel views) in visible time range. * * @author Max Kokoulin */ public class ScaleModeCom extends ScaleModeAbstract implements IScaleModeState { public void init(List<PlotData> graphs, List<ChannelView> allViews, TimeInterval timeRange, IMeanState meanState, int height) { maxValue = Double.NEGATIVE_INFINITY; double minValue = Double.POSITIVE_INFINITY; DecimalFormat df = new DecimalFormat("#.###E0"); for (ChannelView view: allViews) { for (PlotData data: view.getPlotData()) { double meanMaxValue = meanState.getValue(data.getMaxValue(), data.getMeanValue()); double meanMinValue = meanState.getValue(data.getMinValue(), data.getMeanValue()); if (maxValue < meanMaxValue || maxValue == Double.NEGATIVE_INFINITY) { maxValue = Double.valueOf(df.format(meanMaxValue)); } if (minValue > meanMinValue || minValue == Double.POSITIVE_INFINITY) { minValue = Double.valueOf(df.format(meanMinValue)); } } } if (maxValue == minValue) { amp = 100.0; } else { amp = maxValue - minValue; } this.height = height; } public String getStateName() { return "COM"; } }