001 package nl.cwi.sen1.gui.component; 002 003 import javax.swing.Icon; 004 import javax.swing.JComponent; 005 import javax.swing.event.EventListenerList; 006 007 import nl.cwi.sen1.gui.CloseAbortedException; 008 009 /** 010 * A default implementation of a StudioComponent. This is the starting 011 * point for any StudioComponent. This convience class wraps a JComponent, 012 * and implements the default behavior for the StudioComponent interface. 013 */ 014 public class StudioComponentImpl implements StudioComponent { 015 private Icon icon; 016 017 private EventListenerList listenerList = new EventListenerList(); 018 019 private String name; 020 021 private String tooltip; 022 023 private JComponent viewComponent; 024 025 /** 026 * Construct a new component. 027 * @param name the name of the component (for a tab label). 028 * @param viewComponent the Swing component to show in the tab. 029 */ 030 public StudioComponentImpl(String name, JComponent viewComponent) { 031 this.name = name; 032 this.viewComponent = viewComponent; 033 } 034 035 public StudioComponentImpl(String name, JComponent viewComonent, String tooltip) { 036 this.name = name; 037 this.viewComponent = viewComonent; 038 this.tooltip = tooltip; 039 } 040 041 public String getName() { 042 return name; 043 } 044 045 public void setName(String name) { 046 this.name = name; 047 fireNameChangedEvent(); 048 } 049 050 public String getTooltip() { 051 return tooltip; 052 } 053 054 public void setTooltip(String tooltip) { 055 this.tooltip = tooltip; 056 fireTooltipChangedEvent(); 057 } 058 059 public JComponent getViewComponent() { 060 return viewComponent; 061 } 062 063 public void addStudioComponentListener(StudioComponentListener l) { 064 listenerList.add(StudioComponentListener.class, l); 065 } 066 067 public void removeStudioComponentListener(StudioComponentListener l) { 068 listenerList.remove(StudioComponentListener.class, l); 069 } 070 071 // Take from javax.swing.event.EventListenerList example 072 protected void fireComponentRequestClose() throws CloseAbortedException { 073 Object[] listeners = listenerList.getListenerList(); 074 for (int i = listeners.length - 2; i >= 0; i -= 2) { 075 if (listeners[i] == StudioComponentListener.class) { 076 ((StudioComponentListener) listeners[i + 1]) 077 .componentRequestClose(); 078 } 079 } 080 } 081 082 protected void fireComponentClose() { 083 Object[] listeners = listenerList.getListenerList(); 084 for (int i = listeners.length - 2; i >= 0; i -= 2) { 085 if (listeners[i] == StudioComponentListener.class) { 086 ((StudioComponentListener) listeners[i + 1]).componentClose(); 087 } 088 } 089 } 090 091 protected void fireComponentFocusReceived() { 092 Object[] listeners = listenerList.getListenerList(); 093 for (int i = listeners.length - 2; i >= 0; i -= 2) { 094 if (listeners[i] == StudioComponentListener.class) { 095 ((StudioComponentListener) listeners[i + 1]) 096 .componentFocusReceived(); 097 } 098 } 099 } 100 101 public Icon getIcon() { 102 return icon; 103 } 104 105 public void setIcon(Icon icon) { 106 this.icon = icon; 107 } 108 109 public void requestClose() throws CloseAbortedException { 110 fireComponentRequestClose(); 111 } 112 113 public void close() { 114 fireComponentClose(); 115 } 116 117 public void receiveFocus() { 118 fireComponentFocusReceived(); 119 } 120 121 public JComponent[] getStatusBarComponents() { 122 return new JComponent[] {}; 123 } 124 125 public void addNameChangedListener(NameChangedListener l) { 126 listenerList.add(NameChangedListener.class, l); 127 } 128 129 public void removeNameChangedListener(NameChangedListener l) { 130 listenerList.remove(NameChangedListener.class, l); 131 } 132 133 public void fireNameChangedEvent() { 134 Object[] listeners = listenerList.getListenerList(); 135 for (int i = listeners.length - 2; i >= 0; i -= 2) { 136 if (listeners[i] == NameChangedListener.class) { 137 ((NameChangedListener) listeners[i + 1]) 138 .componentNameChanged(); 139 } 140 } 141 } 142 143 public void addTooltipChangedListener(TooltipChangedListener l) { 144 listenerList.add(TooltipChangedListener.class, l); 145 } 146 147 public void removeTooltipChangedListener(TooltipChangedListener l) { 148 listenerList.remove(TooltipChangedListener.class, l); 149 } 150 151 public void fireTooltipChangedEvent() { 152 Object[] listeners = listenerList.getListenerList(); 153 for (int i = listeners.length - 2; i >= 0; i -= 2) { 154 if (listeners[i] == TooltipChangedListener.class) { 155 ((TooltipChangedListener) listeners[i + 1]) 156 .componentTooltipChanged(); 157 } 158 } 159 } 160 161 }