001 /* 002 * Copyright 2002-2007 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 package org.springframework.richclient.dialog; 017 018 import java.awt.Color; 019 import java.awt.Font; 020 import java.awt.Image; 021 import java.beans.PropertyChangeListener; 022 023 import javax.swing.Icon; 024 import javax.swing.ImageIcon; 025 import javax.swing.JComponent; 026 import javax.swing.JLabel; 027 import javax.swing.JPanel; 028 import javax.swing.UIManager; 029 030 import org.springframework.richclient.core.Message; 031 import org.springframework.richclient.core.TitleConfigurable; 032 import org.springframework.richclient.factory.AbstractControlFactory; 033 import org.springframework.richclient.image.config.ImageConfigurable; 034 import org.springframework.richclient.layout.TableLayoutBuilder; 035 036 import com.jgoodies.forms.factories.FormFactory; 037 038 /** 039 * A container class that that has a title area for displaying a title and an 040 * image as well as a common area for displaying a description, a message, or an 041 * error message. 042 */ 043 public class TitlePane extends AbstractControlFactory implements MessagePane, TitleConfigurable, ImageConfigurable { 044 045 /** 046 * Image source key for banner image (value <code>dialog_title_banner</code>). 047 */ 048 public static final String DEFAULT_TITLE_IMAGE = "titledDialog.image"; 049 050 private String title = "Title Pane Title"; 051 052 private Image image; 053 054 private JLabel titleLabel; 055 056 private JLabel iconLabel; 057 058 private MessagePane messagePane; 059 060 public TitlePane() { 061 this(DefaultMessageAreaPane.DEFAULT_LINES_TO_DISPLAY); 062 } 063 064 public TitlePane(int linesToDisplay) { 065 this.messagePane = new DefaultMessageAreaPane(linesToDisplay, this); 066 } 067 068 public void setTitle(String newTitle) { 069 if (newTitle == null) { 070 newTitle = ""; 071 } 072 this.title = newTitle; 073 if (isControlCreated()) { 074 titleLabel.setText(newTitle); 075 } 076 } 077 078 public void setImage(Image image) { 079 this.image = image; 080 if (isControlCreated()) { 081 iconLabel.setIcon(getIcon()); 082 } 083 } 084 085 protected JComponent createControl() { 086 titleLabel = new JLabel(); 087 titleLabel.setName("title"); 088 titleLabel.setOpaque(false); 089 titleLabel.setFont(titleLabel.getFont().deriveFont(Font.BOLD)); 090 titleLabel.setText(title); 091 092 iconLabel = new JLabel(); 093 iconLabel.setName("icon"); 094 iconLabel.setBackground(getBackgroundColor()); 095 iconLabel.setIcon(getIcon()); 096 097 JPanel panel = new JPanel(); 098 panel.setName("panel"); 099 panel.setBackground(getBackgroundColor()); 100 TableLayoutBuilder table = new TableLayoutBuilder(panel); 101 table.row(FormFactory.LINE_GAP_ROWSPEC); 102 table.gapCol(); 103 table.cell(titleLabel); 104 table.gapCol(); 105 table.cell(iconLabel, "rowspan=2 colspec=pref"); 106 table.row(FormFactory.NARROW_LINE_GAP_ROWSPEC); 107 table.cell(messagePane.getControl()); 108 table.row(FormFactory.NARROW_LINE_GAP_ROWSPEC); 109 return table.getPanel(); 110 } 111 112 private Icon getIcon() { 113 if (image != null) 114 return new ImageIcon(image); 115 116 return new ImageIcon(getImageSource().getImage(DEFAULT_TITLE_IMAGE)); 117 } 118 119 private Color getBackgroundColor() { 120 Color c = UIManager.getLookAndFeel().getDefaults().getColor("primaryControlHighlight"); 121 if (c == null) { 122 c = UIManager.getColor("controlLtHighlight"); 123 } 124 return c; 125 } 126 127 public boolean isMessageShowing() { 128 return messagePane.isMessageShowing(); 129 } 130 131 public Message getMessage() { 132 return messagePane.getMessage(); 133 } 134 135 public void setMessage(Message newMessage) { 136 messagePane.setMessage(newMessage); 137 } 138 139 public void addPropertyChangeListener(PropertyChangeListener listener) { 140 messagePane.addPropertyChangeListener(listener); 141 } 142 143 public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { 144 messagePane.addPropertyChangeListener(propertyName, listener); 145 } 146 147 public void removePropertyChangeListener(PropertyChangeListener listener) { 148 messagePane.removePropertyChangeListener(listener); 149 } 150 151 public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { 152 messagePane.removePropertyChangeListener(propertyName, listener); 153 } 154 155 public String getTitle() { 156 return title; 157 } 158 159 public Image getImage() { 160 return image; 161 } 162 }