[ 1988593 ] Let show Totals in a MiniTable for Numeric Value

http://sourceforge.net/tracker/index.php?func=detail&aid=1988593&group_id=176962&atid=879335
This commit is contained in:
vpj-cd 2008-06-09 05:53:58 +00:00
parent e3dd22ccc6
commit b13354d076
3 changed files with 198 additions and 7 deletions

View File

@ -423,6 +423,7 @@ public abstract class Info extends CDialog
p_table.setRowSelectionAllowed(true);
p_table.addMouseListener(this);
p_table.setMultiSelection(p_multiSelection);
p_table.setShowTotals(true);
// set editors (two steps)
for (int i = 0; i < layout.length; i++)
@ -1088,6 +1089,8 @@ public abstract class Info extends CDialog
//
int no = p_table.getRowCount();
log.fine("#" + no + " - " + (System.currentTimeMillis()-start) + "ms");
if(p_table.getShowTotals())
p_table.addTotals(p_layout);
p_table.autoSize();
//
setCursor(Cursor.getDefaultCursor());

View File

@ -228,6 +228,7 @@ public final class InfoProduct extends Info implements ActionListener
warehouseTbl.setMultiSelection(false);
warehouseTbl.addMouseListener(this);
warehouseTbl.getSelectionModel().addListSelectionListener(this);
warehouseTbl.setShowTotals(true);
warehouseTbl.autoSize();
ColumnInfo[] s_layoutSubstitute = new ColumnInfo[]{

View File

@ -23,6 +23,8 @@ import java.util.*;
import java.util.logging.*;
import javax.swing.*;
import javax.swing.table.*;
import org.compiere.apps.search.Info_Column;
import org.compiere.grid.ed.*;
import org.compiere.model.*;
import org.compiere.swing.*;
@ -79,7 +81,9 @@ public class MiniTable extends CTable
/** Lauout set in prepareTable and used in loadTable */
private ColumnInfo[] m_layout = null;
/** Logger */
private static CLogger log = CLogger.getCLogger(MiniTable.class);
private static CLogger log = CLogger.getCLogger(MiniTable.class);
/** Is Total Show */
private boolean showTotals = false;
/**
* Size Columns.
@ -468,15 +472,21 @@ public class MiniTable extends CTable
setValueAt(data, row, col);
// log.fine( "r=" + row + ", c=" + col + " " + m_layout[col].getColHeader(),
// "data=" + data.toString() + " " + data.getClass().getName() + " * " + m_table.getCellRenderer(row, col));
}
}
}
}
catch (SQLException e)
{
log.log(Level.SEVERE, "", e);
}
}
if(getShowTotals())
addTotals(m_layout);
autoSize();
log.config("Row(rs)=" + getRowCount());
log.config("Row(rs)=" + getRowCount());
} // loadTable
/**
@ -512,7 +522,9 @@ public class MiniTable extends CTable
// store
setValueAt(data, row, col);
}
}
}
if(getShowTotals())
addTotals(m_layout);
autoSize();
log.config("Row(array)=" + getRowCount());
} // loadTable
@ -634,6 +646,181 @@ public class MiniTable extends CTable
if (cmp < 0)
return 1;
return 0;
} // getColorCode
} // getColorCode
/**
* Set if Totals is Show
* @param boolean Show
*/
public void setShowTotals(boolean show)
{
showTotals= show;
}
/**
* get if Totals is Show
* @param boolean Show
*/
public boolean getShowTotals()
{
return showTotals;
}
/**
* Adding a new row with the totals
*/
public void addTotals(ColumnInfo[] layout)
{
if (getRowCount() == 0 || layout.length == 0)
return;
Object[] total = new Object[layout.length];
for (int row = 0 ; row < getRowCount(); row ++)
{
int colOffset = 1; // columns start with 1
for (int col = 0; col < layout.length; col++)
{
Object data = getModel().getValueAt(row, col);
Class c = layout[col].getColClass();
int colIndex = col + colOffset;
if (c == BigDecimal.class)
{
BigDecimal subtotal = Env.ZERO;
if(total[col]!= null)
subtotal = (BigDecimal)(total[col]);
BigDecimal amt = (BigDecimal) data;
if(subtotal == null)
subtotal = Env.ZERO;
if(amt == null )
amt = Env.ZERO;
total[col] = subtotal.add(amt);
}
else if (c == Double.class)
{
Double subtotal = new Double(0);
if(total[col] != null)
subtotal = (Double)(total[col]);
Double amt = (Double) data;
if(subtotal == null)
subtotal = new Double(0);
if(amt == null )
subtotal = new Double(0);
total[col] = subtotal + amt;
}
}
}
//adding total row
int row = getRowCount() + 1;
setRowCount(row);
int colOffset = 1; // columns start with 1
for (int col = 0; col < layout.length; col++)
{
Class c = layout[col].getColClass();
int colIndex = col + colOffset;
if (c == BigDecimal.class)
{
setValueAt(total[col] , row - 1, col);
}
else if (c == Double.class)
{
setValueAt(total[col] , row -1 , col);
}
else
{
if(col == 0 )
{
setValueAt(" Σ " , row -1 , col);
}
else
setValueAt(null , row - 1, col );
}
}
}
/**
* Adding a new row with the totals
*/
public void addTotals(Info_Column[] layout)
{
if (getRowCount() == 0 || layout.length == 0)
return;
Object[] total = new Object[layout.length];
for (int row = 0 ; row < getRowCount(); row ++)
{
int colOffset = 1; // columns start with 1
for (int col = 0; col < layout.length; col++)
{
Object data = getModel().getValueAt(row, col);
Class c = layout[col].getColClass();
int colIndex = col + colOffset;
if (c == BigDecimal.class)
{
BigDecimal subtotal = Env.ZERO;
if(total[col]!= null)
subtotal = (BigDecimal)(total[col]);
BigDecimal amt = (BigDecimal) data;
if(subtotal == null)
subtotal = Env.ZERO;
if(amt == null )
amt = Env.ZERO;
total[col] = subtotal.add(amt);
}
else if (c == Double.class)
{
Double subtotal = new Double(0);
if(total[col] != null)
subtotal = (Double)(total[col]);
Double amt = (Double) data;
if(subtotal == null)
subtotal = new Double(0);
if(amt == null )
subtotal = new Double(0);
total[col] = subtotal + amt;
}
}
}
//adding total row
int row = getRowCount() + 1;
setRowCount(row);
int colOffset = 1; // columns start with 1
for (int col = 0; col < layout.length; col++)
{
Class c = layout[col].getColClass();
int colIndex = col + colOffset;
if (c == BigDecimal.class)
{
setValueAt(total[col] , row - 1, col);
}
else if (c == Double.class)
{
setValueAt(total[col] , row -1 , col);
}
else
{
if(col == 1 )
{
setValueAt(" Σ " , row -1 , col);
}
else
setValueAt(null , row - 1, col );
}
}
}
} // MiniTable