source: other-projects/trunk/realistic-books/packages/AntInstaller/src/org/tp23/antinstaller/renderer/swing/SimpleInputPageRenderer.java@ 19253

Last change on this file since 19253 was 19253, checked in by davidb, 15 years ago

Establishing a source code repository for Veronica's Realistic Book's software

File size: 5.7 KB
Line 
1/*
2 * Copyright 2005 Paul Hinds
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.tp23.antinstaller.renderer.swing;
17
18import java.awt.BorderLayout;
19import java.awt.Color;
20import java.awt.Dimension;
21import java.awt.Font;
22import java.awt.GridBagLayout;
23import java.awt.Insets;
24import java.util.ArrayList;
25
26import javax.swing.BorderFactory;
27import javax.swing.JLabel;
28import javax.swing.JPanel;
29import javax.swing.JScrollPane;
30import javax.swing.JTextArea;
31
32import org.tp23.antinstaller.ValidationException;
33import org.tp23.antinstaller.input.CommentOutput;
34import org.tp23.antinstaller.input.OutputField;
35import org.tp23.antinstaller.page.SimpleInputPage;
36import org.tp23.antinstaller.renderer.RendererFactory;
37import org.tp23.gui.GBCF;
38
39/**
40 *
41 * <p>This PageRenderer just renders a list of SwingInputRenderers using
42* a BoxLayout </p>
43 * <p> </p>
44 * <p>Copyright: Copyright (c) 2004</p>
45 * <p>Company: tp23</p>
46 * @author Paul Hinds
47 * @version $Id: SimpleInputPageRenderer.java,v 1.6 2006/12/27 21:46:35 teknopaul Exp $
48 */
49public class SimpleInputPageRenderer
50 extends SwingPageRenderer {
51
52 //Prevent displayText and explanatoryText being rendered using different fonts
53 private static final Font defaultFont = new JLabel().getFont();
54
55 private JPanel contentPanel = new JPanel();
56
57 private GridBagLayout gridLayout = new GridBagLayout();
58 private GBCF cf = new GBCF(); // GridBagConstraintsFactory
59 private boolean overflow = false;
60 // used in overflow
61 JScrollPane scroller = null;
62
63
64 private ArrayList renderers = new ArrayList();
65
66 public SimpleInputPageRenderer(){
67 }
68
69 public boolean validateFields() throws ValidationException {
70 OutputField[] fields = page.getOutputField();
71 for (int i = 0; i < fields.length; i++) {
72 if(!fields[i].validate(ctx)){
73 SwingOutputFieldRenderer renderer = (SwingOutputFieldRenderer)renderers.get(i);
74 renderer.renderError();
75 return false;
76 }
77 }
78 return true;
79 }
80 public void updateInputFields(){
81 for (int i = 0; i < renderers.size(); i++) {
82 ((SwingOutputFieldRenderer)renderers.get(i)).updateInputField();
83 }
84 }
85
86 public void updateDefaultValues(){
87 for (int i = 0; i < renderers.size(); i++) {
88 ((SwingOutputFieldRenderer)renderers.get(i)).updateDefaultValue();
89 }
90 }
91
92 public void instanceInit() throws Exception {
93 overflow = ((SimpleInputPage)page).isOverflow();
94 if(overflow){
95 //WARNING this causes flickering in the UI
96 contentPanel.setMaximumSize(new Dimension(SizeConstants.PAGE_WIDTH - 50, SizeConstants.PAGE_HEIGHT));
97 scroller = new JScrollPane();
98 scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
99 scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
100 scroller.setBorder(BorderFactory.createCompoundBorder(
101 BorderFactory.createEmptyBorder(4,4,4,4),
102 BorderFactory.createEtchedBorder()
103 ));
104 add(scroller, BorderLayout.CENTER);
105 scroller.getViewport().add(contentPanel);
106 //contentPanel.setBackground(Color.red);
107 }
108 else {
109 this.add(contentPanel, BorderLayout.CENTER);
110 contentPanel.setBorder(BorderFactory.createEmptyBorder(SizeConstants.TOP_INDENT, 4, 4, 4));
111 }
112
113 OutputField[] fields = page.getOutputField();
114 contentPanel.setDoubleBuffered(true);
115 contentPanel.setLayout(gridLayout);
116 int row = 0;
117 for (int i = 0; i < fields.length; i++) {
118 SwingOutputFieldRenderer renderer = RendererFactory.getSwingRenderer(fields[i]);
119 String text = fields[i].getExplanatoryText();
120 if(fields[i].getExplanatoryText() != null){
121 JTextArea area = new DisplayTextArea(contentPanel.getBackground(), contentPanel.getForeground());
122 area.setIgnoreRepaint(true);
123 area.setFont( defaultFont );
124 area.setText(text);
125 contentPanel.add(area, cf.getSpan(row++));
126 if(fields[i] instanceof CommentOutput){
127 CommentOutputRenderer crenderer = (CommentOutputRenderer)renderer;
128 crenderer.setExplanatoryTextField(area);
129 if(fields[i].getDisplayText() == null){
130 continue;
131 }
132 }
133 }
134 renderer.setOutputField(fields[i]);
135 renderer.setInstallerContext(ctx);
136 renderer.initComponent(contentPanel);
137 row = renderer.addSelf(contentPanel, cf, row, overflow);
138 renderers.add(renderer);
139 }
140 contentPanel.add(new JPanel(), cf.getVertGlue(row++));
141 }
142}
143/**
144 * A JTextArea that is not editable and looks like a JLabel but uses
145 * JTextAreas ability to wrap. Also has a fixed prefered width;
146 * @author Paul Hinds
147 * @version $Id: SimpleInputPageRenderer.java,v 1.6 2006/12/27 21:46:35 teknopaul Exp $
148 */
149class DisplayTextArea extends JTextArea{
150 DisplayTextArea(Color back, Color fore){
151 super();
152 this.setBackground(back);
153 this.setForeground(fore);
154 this.setLineWrap(true);
155 this.setWrapStyleWord(true);
156 this.setEditable(false);
157 this.setSelectionColor(back);
158 this.setSelectionColor(back);
159 this.setMargin(new Insets(5,0,0,0));
160 }
161
162 public Dimension getPreferredSize(){
163 Dimension pref = super.getPreferredSize();
164 return new Dimension(SizeConstants.PAGE_WIDTH - 40, pref.height);
165 }
166 public Dimension getMinimumSize(){
167 Dimension pref = super.getMinimumSize();
168 return new Dimension(SizeConstants.PAGE_WIDTH - 40, pref.height);
169 }
170}
Note: See TracBrowser for help on using the repository browser.