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 }