package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
import java.awt.*;
class DataScaleLayout extends GridLayout
{
private Dimension buf = new Dimension();
private double[] _renormedWeights;
public DataScaleLayout(double[] weights)
{
super(1, weights.length);
createRenormedWeights(weights);
}
/**
* Renorming is done to make sure very small intervals become visible.
*/
private void createRenormedWeights(double[] weights)
{
double[] buf = new double[weights.length];
double sumRenormed = 0;
for (int i = 0; i < weights.length; i++)
{
//System.out.println("weight = " + weights[i]);
buf[i] = Math.max(weights[i], 1d/60d);
sumRenormed += buf[i];
}
_renormedWeights = new double[buf.length];
for (int i = 0; i < buf.length; i++)
{
_renormedWeights[i] = buf[i] / sumRenormed;
//System.out.println("_renormedWeight = " + _renormedWeights[i]);
}
}
@Override
public void layoutContainer(Container parent)
{
synchronized (parent.getTreeLock())
{
Insets insets = parent.getInsets();
if (_renormedWeights.length == 0)
{
return;
}
Dimension pSize = parent.getSize(buf);
int pw = pSize.width - (insets.left + insets.right);
int h = pSize.height - (insets.top + insets.bottom);
int y = insets.top;
int x = insets.left;
int pwLeftOver = pw;
for (int i = 0; i < _renormedWeights.length; i++)
{
if ( i < _renormedWeights.length - 1)
{
int width = (int) (_renormedWeights[i] * (double) pw + 0.5);
parent.getComponent(i).setBounds(x, y, width, h);
x += width;
pwLeftOver -= width;
}
else
{
parent.getComponent(i).setBounds(x, y, pwLeftOver, h);
}
}
}
}
}