/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package feuille.analysis.renderer; import java.awt.Color; import java.awt.Component; import java.awt.Font; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.border.Border; import javax.swing.table.TableCellRenderer; import feuille.analysis.lib.LineChangeObject; /** * * @author The Wingate 2940 */ public class CompareRenderer extends JLabel implements TableCellRenderer { // Couleurs générales private Color fcDialogue = Color.black; private Color bcDialogue = Color.white; private Color fcNew = new Color(210,255,193).darker(); private Color bcNew = new Color(210,255,193); private Color fcOld = new Color(255,152,142).darker(); private Color bcOld = new Color(255,152,142); // Couleur et bordure de selection private Color cSelection = new Color(184,207,229); private Color bordSelect = new Color(99,130,191); TextType texttype = TextType.Normal; Border unselectedBorder = null; Border selectedBorder = null; Border selectedBorderWithoutFocus = null; public enum Column{ ID(0), TYPE(1), LAYER(2), MARGINS(3), START(4), END(5), TOTAL(6), STYLE(7), NAME(8), EFFECTS(9), TEXT(10), FX(11); private int id; Column(int id){ this.id = id; } public int getId(){ return id; } } public enum TextType{ StripAll, Normal, WithItems; } public CompareRenderer(){ setOpaque(true); } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { //On obtient le LineChangeObject pour la ligne LineChangeObject lco; Object o = table.getValueAt(row, 11); if(o instanceof String){ lco = new LineChangeObject(); table.setValueAt(lco, row, 11); }else if(o instanceof LineChangeObject){ lco = (LineChangeObject)o; }else{ lco = new LineChangeObject(); table.setValueAt(lco, row, 11); } if(value instanceof String){ String s = (String)value; setFont(getFont().deriveFont(Font.PLAIN)); //Affiche le rendu if(column == table.getColumn(Column.TEXT.getId()).getModelIndex()){ //Texte setText(withTextRender(texttype,s)); if(lco.getSentenceState()==LineChangeObject.SentenceState.Added){ setBackground(isSelected==true ? cSelection : bcNew); }else if(lco.getSentenceState()==LineChangeObject.SentenceState.Deleted){ setBackground(isSelected==true ? cSelection : bcOld); }else if(lco.getSentenceState()==LineChangeObject.SentenceState.Double){ setBackground(isSelected==true ? cSelection : bcDialogue); }else{ setBackground(isSelected==true ? cSelection : bcDialogue); } }else if(column == table.getColumn(Column.ID.getId()).getModelIndex()){ //Numéro de ligne setText(withLineID(row)); setBackground(isSelected==true? cSelection : new Color(255,211,231)); }else if(column == table.getColumn(Column.NAME.getId()).getModelIndex()){ //Nom setText(s); if(lco.getNameState()==LineChangeObject.NameState.New){ setBackground(isSelected==true ? cSelection : bcNew); }else if(lco.getNameState()==LineChangeObject.NameState.Old){ setBackground(isSelected==true ? cSelection : bcOld); }else{ setBackground(isSelected==true ? cSelection : bcDialogue); } }else if(column == table.getColumn(Column.STYLE.getId()).getModelIndex()){ //Style setText(s); if(lco.getStyleState()==LineChangeObject.StyleState.New){ setBackground(isSelected==true ? cSelection : bcNew); }else if(lco.getStyleState()==LineChangeObject.StyleState.Old){ setBackground(isSelected==true ? cSelection : bcOld); }else{ setBackground(isSelected==true ? cSelection : bcDialogue); } }else if(column == table.getColumn(Column.TOTAL.getId()).getModelIndex()){ //Total setText(s); if(lco.getTimeState()==LineChangeObject.TimeState.Shift){ setBackground(isSelected==true ? cSelection : new Color(168,223,255)); }else if(lco.getTimeState()==LineChangeObject.TimeState.New){ setBackground(isSelected==true ? cSelection : bcNew); }else if(lco.getTimeState()==LineChangeObject.TimeState.Old){ setBackground(isSelected==true ? cSelection : bcOld); }else{ setBackground(isSelected==true ? cSelection : bcDialogue); } }else if(column == table.getColumn(Column.START.getId()).getModelIndex()){ //Début setText(s); if(lco.getTimeState()==LineChangeObject.TimeState.Shift){ setBackground(isSelected==true ? cSelection : new Color(168,223,255)); }else if(lco.getTimeState()==LineChangeObject.TimeState.New){ setBackground(isSelected==true ? cSelection : bcNew); }else if(lco.getTimeState()==LineChangeObject.TimeState.Old){ setBackground(isSelected==true ? cSelection : bcOld); }else{ setBackground(isSelected==true ? cSelection : bcDialogue); } }else if(column == table.getColumn(Column.END.getId()).getModelIndex()){ //Fin setText(s); if(lco.getTimeState()==LineChangeObject.TimeState.Shift){ setBackground(isSelected==true ? cSelection : new Color(168,223,255)); }else if(lco.getTimeState()==LineChangeObject.TimeState.New){ setBackground(isSelected==true ? cSelection : bcNew); }else if(lco.getTimeState()==LineChangeObject.TimeState.Old){ setBackground(isSelected==true ? cSelection : bcOld); }else{ setBackground(isSelected==true ? cSelection : bcDialogue); } }else{ setText(s); setBackground(isSelected==true? cSelection : Color.white); } } // if(value instanceof LineChangeObject){ // LineChangeObject lco = (LineChangeObject)value; // if(column == table.getColumn(Column.TEXT.getId()).getModelIndex()){ //Texte // if(lco.getSentenceState()==LineChangeObject.SentenceState.Added){ // setBackground(isSelected==true? cSelection : bcNew); // setForeground(fcNew); // }else if(lco.getSentenceState()==LineChangeObject.SentenceState.Deleted){ // setBackground(isSelected==true? cSelection : bcOld); // setForeground(fcOld); // } // } // } return this; } public void setTextType(TextType texttype){ this.texttype = texttype; } public TextType getTextType(){ return texttype; } public String withTextRender(TextType tt, String text){ // Change text as follow : // StripAll - clears all tags. // Normal - nothing is done. // WithItems - replace tags by specials characters. String str = ""; switch(tt){ case StripAll: // Strip text if the text contains edit marks. if(text.contains("{\\")){ try{ str = text.replaceAll("\\{[^\\}]+\\}", ""); }catch(Exception e){ str = text; } }else{ str = text; } break; case WithItems: // Replace tags by items if the text contains edit marks. if(text.contains("{\\")){ try{ str = text.replaceAll("\\{[^\\}]+\\}", "◆"); }catch(Exception e){ str = text; } }else{ str = text; } break; case Normal: // Do nothing. str = text; break; } return str; } public String withLineID(int rowId){ String str = String.valueOf(rowId+1); if(str.length()==1){ str = "00"+str; }else if(str.length()==2){ str = "0"+str; } return str; } }