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 }