/*
 * MyMultilineCellRenderer.java
 *
 * Created on November 14, 2005, 4:18 PM
 *
 * Allows a JCTable cell to be rendered as multiline text.  The new line character is \n
 */

package usda.weru.mcrew;
import com.klg.jclass.cell.*;
import com.klg.jclass.cell.renderers.*;
import java.awt.*;
import java.util.*;

/**
 *
 * @author Joseph Levin
 */
public class MyMultilineCellRenderer extends JCStringCellRenderer{
    private static final long serialVersionUID = 1L;
    
    @Override
    public void draw(Graphics gc, JCCellInfo cellInfo, Object o, boolean selected) {
         int x = 0;//cellInfo.getDrawingArea().x;
         int y = cellInfo.getDrawingArea().y;
         String text = (String) o;
         String newLineReplacement = getUniqueReplacement(text);
         String blankLineReplacement = getUniqueReplacement(text + newLineReplacement);
         text = text.replaceAll("\\\\n",newLineReplacement + blankLineReplacement);
         text = text.replaceAll("\\n",newLineReplacement + blankLineReplacement);
         gc.setFont(cellInfo.getFont());
         gc.setColor(cellInfo.getForeground());
         FontMetrics fm = gc.getFontMetrics();
         StringTokenizer st = new StringTokenizer(text, newLineReplacement);
         String line;
         int lineNumber = 0;   
         int py =  fm.getAscent() - fm.getDescent() + fm.getLeading();
         while (st.hasMoreTokens()){
             line = st.nextToken();
             line = line.replaceAll(blankLineReplacement, "");
             gc.drawString(line, x , y + py + (fm.getHeight() * lineNumber));
             lineNumber++;
         }
    }
         
     private String getUniqueReplacement(String text){
         int code = 0;
         while (text.indexOf(String.valueOf(code)) > -1){
             code++;
         }
         return String.valueOf(code);
     }
    
}
