001 package ui.renderer; 002 003 import astronomy.data.spectra.*; 004 import java.awt.Component; 005 import java.util.*; 006 import javax.swing.*; 007 import javax.swing.tree.*; 008 import javax.swing.event.*; 009 010 public class SpectraTreeCellRenderer extends DefaultTreeCellRenderer { 011 012 public void SpectraTreeCellRenderer() { 013 } 014 015 public Component getTreeCellRendererComponent(JTree aTree, Object anObject, boolean isSelected, boolean isExpanded, boolean isLeaf, int aRow, boolean hasFocus) { 016 super.getTreeCellRendererComponent(aTree, anObject, isSelected, isExpanded, isLeaf, aRow, hasFocus); 017 018 // look up the classes and their corresponding icons and text representations 019 if (anObject instanceof Spectradatabase) { 020 //Spectradatabase sd = (Spectradatabase) aParent; 021 setText("spectra database"); 022 023 } else if (anObject instanceof SpectradatabaseType.TypeType) { 024 SpectradatabaseType.TypeType type = (SpectradatabaseType.TypeType) anObject; 025 setText(type.getName()); 026 027 } else if (anObject instanceof SpectradatabaseType.TypeType.SourceType) { 028 029 SpectradatabaseType.TypeType.SourceType source = (SpectradatabaseType.TypeType.SourceType) anObject; 030 setText(source.getReference().getAdscode()); 031 setIcon(ICON_PUBLICATION); 032 //TODO: Set ToolTip to author list, institution etc... 033 034 } else if (anObject instanceof SpectraType) { 035 SpectraType spectraType = (SpectraType) anObject; 036 List ids = spectraType.getId(); 037 setText( ((IdType) ids.get(0)).getSpectraname().get(0).toString()); 038 039 } else if (anObject instanceof PlotType) { 040 PlotType plot = (PlotType) anObject; 041 String label = null; 042 // setToolTip("page " + plot.getPage() ", " + plot.getResolution() + ", " + plot.getExposure()); 043 List dateList = plot.getDate(); 044 if ( dateList != null && dateList.size() > 0) { 045 Calendar date = (Calendar) dateList.get(0); // show first date only 046 // TODO: fix formatting of date such as adding leading zero to single digits etc... 047 label= date.get(Calendar.YEAR) + "-" + (date.get(Calendar.MONTH)+1) + "-" + date.get(Calendar.DATE); 048 } 049 if (label == null || label.length() == 0) 050 label = "page " + Long.toString(plot.getPage()); 051 if (label == null || label.length() == 0) 052 label = plot.getPlotrange().getStartwavelength() + " - " + plot.getPlotrange().getEndwavelength(); 053 setText(label); 054 setIcon(ICON_SPECTRA); 055 056 } else if (anObject instanceof PlotType.PlotdataType) { 057 PlotType.PlotdataType data = (PlotType.PlotdataType) anObject; 058 String label = "plot"; 059 if (data.getImagefile() != null) label += " [image]"; 060 if (data.getPlotfile() != null) label += " [data]"; 061 setText(label); 062 setIcon(ICON_PLOT); 063 064 } else if(anObject instanceof PlotType.PlotdataType.PlotfileType) { 065 PlotType.PlotdataType.PlotfileType plotFile = (PlotType.PlotdataType.PlotfileType) anObject; 066 setText(plotFile.getName()); 067 //setToolTip(plotFile.getFormat()); 068 setIcon(ICON_DATA); 069 070 } else if(anObject instanceof PlotType.PlotdataType.ImagefileType) { 071 PlotType.PlotdataType.ImagefileType imageFile = (PlotType.PlotdataType.ImagefileType) anObject; 072 setText(imageFile.getName()); 073 //setToolTip(imageFile.getFormat()); 074 setIcon(ICON_IMAGE); 075 076 } else if(anObject instanceof LineType.TransitionType) { 077 LineType.TransitionType transition = (LineType.TransitionType) anObject; 078 //TODO: Format getWavelength() as XXXX.XX 079 String terms = transition.getLower() + " - " + transition.getUpper(); 080 setText("<html>" + transition.getIon() + " " + transition.getWavelength() + " " + terms); 081 // BUG: ToolTips don't work because renderer is a 'rubber-stamp' not a true component 082 setToolTipText(terms); 083 setIcon(ICON_TRANSITION); 084 //TODO: Too much vertical space allocated for exponents, reduce the height 085 086 } else if(anObject instanceof SpectraType.EmissionlineType) { 087 SpectraType.EmissionlineType line = (SpectraType.EmissionlineType) anObject; 088 float wavelength = line.getWavelength(); 089 setText(Float.toString(wavelength)); 090 setIcon(LineIcon.getIcon(wavelength, true)); 091 092 } else if(anObject instanceof SpectraType.AbsorptionlineType) { 093 SpectraType.AbsorptionlineType line = (SpectraType.AbsorptionlineType) anObject; 094 float wavelength = line.getWavelength(); 095 setText(Float.toString(wavelength)); 096 setIcon(LineIcon.getIcon(wavelength, false)); 097 098 } else if(anObject instanceof SpectraType.DiscontinuityType) { 099 SpectraType.DiscontinuityType discontinuity = (SpectraType.DiscontinuityType) anObject; 100 float wavelength = discontinuity.getWavelength(); 101 setText(Float.toString(wavelength)); 102 103 if (discontinuity.isEmission()) { 104 setIcon(ICON_EMISSION_DISCONTINUITY); 105 } else { 106 setIcon(ICON_ABSORPTION_DISCONTINUITY); 107 } 108 } 109 return this; 110 } 111 112 public static final Icon ICON_SPECTRA= getImageIcon("images/spectra.gif"); 113 public static final Icon ICON_PLOT = getImageIcon("images/plot.gif"); 114 public static final Icon ICON_IMAGE = getImageIcon("images/image.gif"); 115 public static final Icon ICON_DATA = getImageIcon("images/data.gif"); 116 public static final Icon ICON_ABSORPTION_DISCONTINUITY = getImageIcon("images/absorption-discontinuity.gif"); 117 public static final Icon ICON_EMISSION_DISCONTINUITY = getImageIcon("images/emission-discontinuity.gif"); 118 public static final Icon ICON_PUBLICATION= getImageIcon("images/publication.gif"); 119 public static final Icon ICON_TRANSITION = getImageIcon("images/transition.gif"); 120 121 public static ImageIcon getImageIcon(String fileName) { 122 // TODO: handle case when images are a part of a resource such as a JAR file etc... 123 return new ImageIcon(fileName); 124 } 125 126 }