/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
* For the text or an alternative of this public license, you may reach us *
* ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
* or via info@compiere.org or http://www.compiere.org/license.html *
*****************************************************************************/
package org.compiere.report.core;
import java.awt.Component;
import java.awt.Font;
import java.awt.Insets;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import org.adempiere.plaf.AdempierePLAF;
import org.compiere.util.DisplayType;
import org.omidp.util.LocaleUtil;
import org.omidp.util.PersianCalendar;
/**
* Cell Renderer for Report Result Table
*
* @author Jorg Janke
* @version $Id: ResultTableCellRenderer.java,v 1.2 2006/07/30 00:51:06 jjanke Exp $
*/
class ResultTableCellRenderer extends DefaultTableCellRenderer implements TableCellRenderer
{
/**
*
*/
private static final long serialVersionUID = -1491594061244117003L;
/**
* Constructor (extends Label)
* @param rm
* @param rc
*/
public ResultTableCellRenderer(RModel rm, RColumn rc)
{
m_rm = rm;
m_rc = rc;
int dt = m_rc.getDisplayType();
// Numbers
if (DisplayType.isNumeric(dt))
{
super.setHorizontalAlignment(JLabel.TRAILING);
m_nFormat = DisplayType.getNumberFormat(dt);
}
// Dates
else if (DisplayType.isDate(m_rc.getDisplayType()))
{
super.setHorizontalAlignment(JLabel.TRAILING);
m_dFormat = DisplayType.getDateFormat(dt);
}
//
else if (dt == DisplayType.YesNo)
{
m_check = new JCheckBox();
m_check.setMargin(new Insets(0,0,0,0));
m_check.setHorizontalAlignment(JLabel.CENTER);
}
} // ResultTableCellRenderer
/** Report Column */
private RModel m_rm = null;
/** Report Column */
private RColumn m_rc = null;
/** Number Format */
private DecimalFormat m_nFormat = null;
/** Date Format */
private SimpleDateFormat m_dFormat = null;
/** Boolean renderer */
private JCheckBox m_check;
/**
* Return Renderer Component
* @param table
* @param value
* @param isSelected
* @param hasFocus
* @param row
* @param col
* @return renderer component
*/
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int col)
{
// Get Component
Component c = m_check;
if (c == null) // default JLabel
c = super.getTableCellRendererComponent(table,value, isSelected,hasFocus, row,col);
// Background
if (m_rm.isCellEditable(row, col))
c.setBackground(AdempierePLAF.getFieldBackground_Normal());
else
c.setBackground(AdempierePLAF.getFieldBackground_Inactive());
//
if (m_rm.isGroupRow(row))
c.setFont(c.getFont().deriveFont(Font.BOLD));
// Value
setValue (value);
return c;
} // getTableCellRendererComponent
/**
* Set Value
* @param value
*/
protected void setValue (Object value)
{
// Boolean
if (m_check != null)
{
boolean sel = false;
if (value != null && ((Boolean)value).booleanValue())
sel = true;
m_check.setSelected(sel);
return;
}
// JLabel
if (value == null)
setText("");
else if (m_nFormat != null)
try
{
setText(m_nFormat.format(value));
}
catch (Exception e)
{
setText(value.toString());
}
else if (m_dFormat != null)
try
{
if(LocaleUtil.isIranLocale())
setText(new PersianCalendar().GregorianToSolar(m_dFormat.format(value)));
else
setText(m_dFormat.format(value));
}
catch (Exception e)
{
setText(value.toString());
}
else
setText(value.toString());
} // setValue
} // ResultTableCellRenderer