001 package org.springframework.richclient.widget;
002
003 import org.springframework.richclient.util.GuiStandardUtils;
004 import org.springframework.richclient.util.RcpSupport;
005 import org.springframework.richclient.dialog.TitlePane;
006 import org.springframework.richclient.dialog.Messagable;
007 import org.springframework.richclient.core.DefaultMessage;
008 import org.springframework.richclient.core.Message;
009 import org.springframework.richclient.core.Severity;
010 import org.springframework.richclient.form.ValidationResultsReporter;
011
012 import javax.swing.*;
013 import java.awt.*;
014 import java.beans.PropertyChangeListener;
015
016 public abstract class AbstractTitledWidget extends AbstractWidget implements TitledWidget
017 {
018
019 private Message description = new DefaultMessage(RcpSupport.getMessage(
020 "titledWidget", "defaultMessage", RcpSupport.TEXT), Severity.INFO);
021 private TitlePane titlePane = new TitlePane(1);
022
023 private JComponent component;
024
025 private String id;
026
027 public void setId(String id)
028 {
029 this.id = id;
030 }
031
032 public String getId()
033 {
034 return this.id;
035 }
036
037 public void setBeanName(String beanName)
038 {
039 setId(beanName);
040 }
041
042 public boolean isEnabled()
043 {
044 return false;
045 }
046
047 public void setEnabled(boolean enabled)
048 {
049 }
050
051 public void setTitle(String title)
052 {
053 this.titlePane.setTitle(title);
054 }
055
056 public void setImage(Image image)
057 {
058 this.titlePane.setImage(image);
059 }
060
061 public void setMessage(Message message)
062 {
063 if (message != null)
064 titlePane.setMessage(message);
065 else
066 titlePane.setMessage(getDescription());
067 }
068
069 public ValidationResultsReporter newSingleLineResultsReporter(Messagable messagable)
070 {
071 return null;
072 }
073
074 protected Message getDescription()
075 {
076 return description;
077 }
078
079 public void setDescription(String longDescription)
080 {
081 this.description = new DefaultMessage(longDescription);
082 setMessage(this.description);
083 }
084
085 public void setCaption(String shortDescription)
086 {
087 // TODO needed to comply to interface DescriptionConfigurable where will this end up?
088 }
089
090 /**
091 * Lazy creation of component
092 * <p/>
093 * {@inheritDoc}
094 */
095 public final JComponent getComponent()
096 {
097 if (component == null)
098 component = createComponent();
099
100 return component;
101 }
102
103 /**
104 * @return JComponent with titlePane, widgetContent and border.
105 */
106 private JComponent createComponent()
107 {
108 JPanel titlePaneContainer = new JPanel(new BorderLayout());
109 titlePaneContainer.add(titlePane.getControl());
110 titlePaneContainer.add(new JSeparator(), BorderLayout.SOUTH);
111
112 JPanel pageControl = new JPanel(new BorderLayout());
113 pageControl.add(titlePaneContainer, BorderLayout.NORTH);
114 JComponent content = createWidgetContent();
115 GuiStandardUtils.attachDialogBorder(content);
116 pageControl.add(content);
117
118 return pageControl;
119 }
120
121 public abstract JComponent createWidgetContent();
122
123 public void addPropertyChangeListener(PropertyChangeListener listener)
124 {
125 this.titlePane.addPropertyChangeListener(listener);
126 }
127
128 public void addPropertyChangeListener(String txt, PropertyChangeListener listener)
129 {
130 this.titlePane.addPropertyChangeListener(txt, listener);
131 }
132
133 public void removePropertyChangeListener(PropertyChangeListener listener)
134 {
135 this.titlePane.removePropertyChangeListener(listener);
136 }
137
138 public void removePropertyChangeListener(String txt, PropertyChangeListener listener)
139 {
140 this.titlePane.removePropertyChangeListener(txt, listener);
141 }
142 }