139 lines
4.4 KiB
Java
139 lines
4.4 KiB
Java
|
/*
|
||
|
The contents of this file are subject to the AMP Open Community License
|
||
|
Version 1.0 (the "License"); you may not use this file except in compliance
|
||
|
with the License. You may obtain a copy of the License on the AMP web site
|
||
|
(http://www.tibet.iteso.mx/Guatemala/).
|
||
|
|
||
|
Software distributed under the License is distributed on an "AS IS" basis,
|
||
|
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||
|
License for the specific terms governing rights and limitations under the
|
||
|
License.
|
||
|
|
||
|
The Initial Developer of this software is Andres Montano Pellegrini. Portions
|
||
|
created by Andres Montano Pellegrini are Copyright 2001 Andres Montano
|
||
|
Pellegrini. All Rights Reserved.
|
||
|
|
||
|
Contributor(s): ______________________________________.
|
||
|
*/
|
||
|
package org.thdl.tib.scanner;
|
||
|
|
||
|
import java.awt.*;
|
||
|
import javax.swing.*;
|
||
|
import javax.swing.table.TableCellRenderer;
|
||
|
import javax.swing.border.*;
|
||
|
import javax.swing.text.*;
|
||
|
import org.thdl.tib.input.DuffPane;
|
||
|
import org.thdl.tib.text.*;
|
||
|
import org.thdl.tib.text.TibetanDocument.DuffData;
|
||
|
import java.io.Serializable;
|
||
|
|
||
|
/** Used by DictionaryTable to display a Tibetan word or phrase
|
||
|
(in either Roman or Tibetan script) in a single cell.
|
||
|
|
||
|
@author Andrés Montano Pellegrini
|
||
|
@see DictionaryTable
|
||
|
*/
|
||
|
public class DuffCellRenderer extends DuffPane implements TableCellRenderer, Serializable
|
||
|
{
|
||
|
|
||
|
protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
|
||
|
|
||
|
// We need a place to store the color the DuffPane should be returned
|
||
|
// to after its foreground and background colors have been set
|
||
|
// to the selection background color.
|
||
|
// These ivars will be made protected when their names are finalized.
|
||
|
private Color unselectedForeground;
|
||
|
private Color unselectedBackground;
|
||
|
|
||
|
public DuffCellRenderer()
|
||
|
{
|
||
|
super();
|
||
|
setOpaque(true);
|
||
|
setBorder(noFocusBorder);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Overrides <code>JComponent.setForeground</code> to assign
|
||
|
* the unselected-foreground color to the specified color.
|
||
|
*
|
||
|
* @param c set the foreground color to this value
|
||
|
*/
|
||
|
public void setForeground(Color c) {
|
||
|
super.setForeground(c);
|
||
|
unselectedForeground = c;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Overrides <code>JComponent.setForeground</code> to assign
|
||
|
* the unselected-background color to the specified color.
|
||
|
*
|
||
|
* @param c set the background color to this value
|
||
|
*/
|
||
|
public void setBackground(Color c) {
|
||
|
super.setBackground(c);
|
||
|
unselectedBackground = c;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Notification from the <code>UIManager</code> that the look and feel
|
||
|
* [L&F] has changed.
|
||
|
* Replaces the current UI object with the latest version from the
|
||
|
* <code>UIManager</code>.
|
||
|
*
|
||
|
* @see JComponent#updateUI
|
||
|
*/
|
||
|
public void updateUI() {
|
||
|
super.updateUI();
|
||
|
setForeground(null);
|
||
|
setBackground(null);
|
||
|
}
|
||
|
|
||
|
public Component getTableCellRendererComponent(JTable table, Object value,
|
||
|
boolean isSelected, boolean hasFocus, int row, int column)
|
||
|
{
|
||
|
if (isSelected)
|
||
|
{
|
||
|
super.setForeground(table.getSelectionForeground());
|
||
|
super.setBackground(table.getSelectionBackground());
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
super.setForeground((unselectedForeground != null) ? unselectedForeground : table.getForeground());
|
||
|
super.setBackground((unselectedBackground != null) ? unselectedBackground : table.getBackground());
|
||
|
}
|
||
|
|
||
|
if (hasFocus) {
|
||
|
setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") );
|
||
|
if (table.isCellEditable(row, column)) {
|
||
|
super.setForeground( UIManager.getColor("Table.focusCellForeground") );
|
||
|
super.setBackground( UIManager.getColor("Table.focusCellBackground") );
|
||
|
}
|
||
|
} else {
|
||
|
setBorder(noFocusBorder);
|
||
|
}
|
||
|
|
||
|
setValue(value);
|
||
|
|
||
|
// ---- begin optimization to avoid painting background ----
|
||
|
Color back = getBackground();
|
||
|
boolean colorMatch = (back != null) && ( back.equals(table.getBackground()) ) && table.isOpaque();
|
||
|
setOpaque(!colorMatch);
|
||
|
// ---- end optimization to aviod painting background ----
|
||
|
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public void setValue(Object value)
|
||
|
{
|
||
|
TibetanDocument doc = (TibetanDocument) getDocument();
|
||
|
try
|
||
|
{
|
||
|
doc.remove(0, doc.getLength());
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
System.out.println(e);
|
||
|
}
|
||
|
doc.insertDuff(0, (DuffData []) value);
|
||
|
}
|
||
|
}
|