2016-03-06 08:05:32 +00:00
|
|
|
package com.bytezone.diskbrowser.visicalc;
|
|
|
|
|
2016-03-07 04:37:01 +00:00
|
|
|
public class Sum extends Function
|
2016-03-06 08:05:32 +00:00
|
|
|
{
|
2016-03-12 05:05:50 +00:00
|
|
|
private final Range range;
|
|
|
|
private boolean hasChecked;
|
|
|
|
private double sum = 0;
|
2016-03-06 08:05:32 +00:00
|
|
|
|
|
|
|
public Sum (Sheet parent, String text)
|
|
|
|
{
|
2016-03-09 10:38:53 +00:00
|
|
|
super (parent, text);
|
2016-03-07 12:16:11 +00:00
|
|
|
range = getRange (text);
|
2016-03-06 08:05:32 +00:00
|
|
|
}
|
|
|
|
|
2016-03-12 05:05:50 +00:00
|
|
|
@Override
|
|
|
|
public boolean hasValue ()
|
|
|
|
{
|
|
|
|
if (!hasChecked)
|
|
|
|
calculate ();
|
|
|
|
return hasValue;
|
|
|
|
}
|
|
|
|
|
2016-03-07 04:37:01 +00:00
|
|
|
@Override
|
2016-03-06 08:05:32 +00:00
|
|
|
public double getValue ()
|
|
|
|
{
|
2016-03-12 11:19:53 +00:00
|
|
|
return hasValue () ? sum : 0;
|
2016-03-12 05:05:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void calculate ()
|
|
|
|
{
|
|
|
|
hasChecked = true;
|
|
|
|
hasValue = false;
|
2016-03-06 08:05:32 +00:00
|
|
|
|
|
|
|
for (Address address : range)
|
2016-03-06 23:52:46 +00:00
|
|
|
{
|
|
|
|
Cell cell = parent.getCell (address);
|
|
|
|
if (cell != null && cell.hasValue ())
|
2016-03-12 05:05:50 +00:00
|
|
|
{
|
|
|
|
hasValue = true;
|
|
|
|
sum += cell.getValue ();
|
|
|
|
}
|
2016-03-06 23:52:46 +00:00
|
|
|
}
|
2016-03-06 08:05:32 +00:00
|
|
|
}
|
|
|
|
}
|