1   /*
2    *  Copyright (c) 1998-2001, The University of Sheffield.
3    *
4    *  This file is part of GATE (see http://gate.ac.uk/), and is free
5    *  software, licenced under the GNU Library General Public License,
6    *  Version 2, June 1991 (in the distribution as file licence.html,
7    *  and also available at http://gate.ac.uk/gate/licence.html).
8    *
9    *  Valentin Tablan 02/10/2001
10   *
11   *  $Id: ResourceRenderer.java,v 1.5 2001/11/12 18:06:08 valyt Exp $
12   *
13   */
14  package gate.gui;
15  
16  import gate.*;
17  import gate.creole.*;
18  
19  import java.awt.*;
20  import javax.swing.*;
21  import javax.swing.border.*;
22  import javax.swing.table.*;
23  import javax.swing.tree.*;
24  
25  /**
26   * Renders a {@link Resource} for tables, trees and lists.
27   * It will use the icon info from the creole register, the name of the resource
28   * as the rendered string and the type of the resource as the tooltip.
29   */
30  public class ResourceRenderer extends JLabel
31                                implements ListCellRenderer, TableCellRenderer,
32                                           TreeCellRenderer {
33  
34    public ResourceRenderer(){
35      setOpaque(true);
36    }
37  
38    public Component getListCellRendererComponent(JList list,
39                                                  Object value,
40                                                  int index,
41                                                  boolean isSelected,
42                                                  boolean cellHasFocus){
43      prepareRenderer(list, value, isSelected, hasFocus());
44      return this;
45    }
46  
47  
48    public Component getTableCellRendererComponent(JTable table,
49                                                   Object value,
50                                                   boolean isSelected,
51                                                   boolean hasFocus,
52                                                   int row,
53                                                   int column){
54      prepareRenderer(table, value, isSelected, hasFocus);
55      return this;
56    }
57  
58    public Component getTreeCellRendererComponent(JTree tree,
59                                                  Object value,
60                                                  boolean selected,
61                                                  boolean expanded,
62                                                  boolean leaf,
63                                                  int row,
64                                                  boolean hasFocus){
65      prepareRenderer(tree, value, selected, hasFocus);
66      return this;
67    }
68  
69    private void prepareRenderer(JComponent ownerComponent, Object value,
70                                 boolean isSelected, boolean hasFocus){
71  
72      if (isSelected) {
73        if(ownerComponent instanceof JTable){
74          setForeground(((JTable)ownerComponent).getSelectionForeground());
75          setBackground(((JTable)ownerComponent).getSelectionBackground());
76        }else if(ownerComponent instanceof JTree){
77          setForeground(UIManager.getColor("Tree.selectionForeground"));
78          setBackground(UIManager.getColor("Tree.selectionBackground"));
79        }else if(ownerComponent instanceof JList){
80          setForeground(((JList)ownerComponent).getSelectionForeground());
81          setBackground(((JList)ownerComponent).getSelectionBackground());
82        }
83      }else{
84        if(ownerComponent instanceof JTable){
85          JTable table = (JTable)ownerComponent;
86          setForeground(ownerComponent.getForeground());
87          setBackground(ownerComponent.getBackground());
88        }else{
89          setForeground(ownerComponent.getForeground());
90          setBackground(ownerComponent.getBackground());
91        }
92      }
93  
94      setFont(ownerComponent.getFont());
95  
96      if (hasFocus) {
97        setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") );
98      }else{
99        setBorder(noFocusBorder);
100     }
101 
102     String text;
103     String toolTipText;
104     Icon icon;
105     ResourceData rData = null;
106     if(value instanceof Resource){
107       text = ((Resource)value).getName();
108 
109       rData = (ResourceData)Gate.getCreoleRegister().
110                                  get(value.getClass().getName());
111     }else{
112       text = (value == null) ? "<none>" : value.toString();
113     }
114     if(rData != null){
115       toolTipText = "<HTML>Type: <b>" + rData.getName() + "</b></HTML>";
116       String iconName = rData.getIcon();
117       if(iconName == null){
118         if(value instanceof LanguageResource) iconName = "lr.gif";
119         else if(value instanceof ProcessingResource) iconName = "pr.gif";
120         else if(value instanceof Controller) iconName = "controller.gif";
121       }
122       icon = (iconName == null) ? null : MainFrame.getIcon(iconName);
123     }else{
124       icon = null;
125       toolTipText = null;
126     }
127 
128     setText(text);
129     setIcon(icon);
130     setToolTipText(toolTipText);
131   }
132 
133   protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
134 }