001 package org.springframework.richclient.samples.showcase.util;
002
003 import java.awt.Dimension;
004
005 import javax.swing.JComponent;
006 import javax.swing.JPanel;
007 import javax.swing.JScrollPane;
008 import javax.swing.JSplitPane;
009 import javax.swing.JTextArea;
010 import javax.swing.ScrollPaneConstants;
011
012 import org.springframework.richclient.command.AbstractCommand;
013 import org.springframework.richclient.command.ActionCommand;
014 import org.springframework.richclient.command.CommandGroup;
015 import org.springframework.richclient.dialog.TitledApplicationDialog;
016 import org.springframework.util.Assert;
017
018 import com.jgoodies.forms.factories.FormFactory;
019 import com.jgoodies.forms.layout.CellConstraints;
020 import com.jgoodies.forms.layout.ColumnSpec;
021 import com.jgoodies.forms.layout.FormLayout;
022 import com.jgoodies.forms.layout.FormSpec;
023 import com.jgoodies.forms.layout.RowSpec;
024 import com.jgoodies.forms.layout.Sizes;
025
026 public abstract class AbstractReporterTitledApplicationDialog extends TitledApplicationDialog {
027
028 private ActionCommand clearTextAreaCommand;
029
030 private JTextArea messageArea;
031
032 /**
033 * Returns the textArea to append info.
034 */
035 public JTextArea getMessageArea() {
036 return messageArea;
037 }
038
039 public ActionCommand getClearTextAreaCommand() {
040 if (this.clearTextAreaCommand == null) {
041 this.clearTextAreaCommand = new ActionCommand(getClearTextAreaCommandFaceDescriptorId()) {
042
043 protected void doExecuteCommand() {
044 getMessageArea().setText(null);
045 }
046 };
047 getCommandConfigurer().configure(this.clearTextAreaCommand);
048 }
049 return this.clearTextAreaCommand;
050 }
051
052 protected String getClearTextAreaCommandFaceDescriptorId() {
053 return "reporterDialog.clearTextAreaCommand";
054 }
055
056 abstract protected Reporter getReporter();
057
058 @Override
059 protected JComponent createTitledDialogContentPane() {
060 messageArea = new JTextArea();
061 messageArea.setEditable(false);
062 Reporter reporter = getReporter();
063 Assert.notNull(reporter);
064 reporter.setMessageArea(messageArea);
065
066 JPanel panel = new JPanel(new FormLayout(new ColumnSpec[] {
067 new ColumnSpec(ColumnSpec.FILL, Sizes.PREFERRED, FormSpec.DEFAULT_GROW),
068 FormFactory.UNRELATED_GAP_COLSPEC, new ColumnSpec(ColumnSpec.FILL, Sizes.DEFAULT, FormSpec.NO_GROW) },
069 new RowSpec[] { new RowSpec(RowSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW), }));
070 CellConstraints cc = new CellConstraints();
071 panel.add(reporter.getControl(), cc.xy(1, 1));
072 AbstractCommand[] reporterCommands = reporter.getReporterCommands();
073 AbstractCommand[] commandStack = new AbstractCommand[reporterCommands.length + 1];
074 System.arraycopy(reporterCommands, 0, commandStack, 0, reporterCommands.length);
075 commandStack[reporterCommands.length] = getClearTextAreaCommand();
076 CommandGroup commandGroup = CommandGroup.createCommandGroup(commandStack);
077 panel.add(commandGroup.createButtonStack(), cc.xy(3, 1));
078 JScrollPane scrollPane = new JScrollPane(messageArea,
079 ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
080 JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, panel, scrollPane);
081 scrollPane.setPreferredSize(new Dimension(200, 100));
082 return splitPane;
083 }
084
085 @Override
086 protected boolean onFinish() {
087 return true;
088 }
089
090 }