source: release-kits/shared/ant-installer/src/org/tp23/antinstaller/renderer/swing/SwingPageRenderer.java@ 17516

Last change on this file since 17516 was 17516, checked in by oranfry, 16 years ago

made pages reinitialise just before they are shown and added an option to selectinput to change the locale, the end result of this being that you can change the language of the installer as it runs

File size: 9.0 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.FlowLayout;
20import java.awt.Color;
21import java.awt.Dimension;
22import java.awt.Font;
23import java.awt.GridLayout;
24import java.awt.event.ActionEvent;
25import java.awt.event.ActionListener;
26import java.io.ByteArrayOutputStream;
27import java.io.InputStream;
28import java.util.ResourceBundle;
29
30import javax.swing.BorderFactory;
31import javax.swing.ImageIcon;
32import javax.swing.JButton;
33import javax.swing.JLabel;
34import javax.swing.JPanel;
35import javax.swing.border.Border;
36
37import org.tp23.antinstaller.InstallerContext;
38import org.tp23.antinstaller.ValidationException;
39import org.tp23.antinstaller.page.Page;
40
41/**
42 *
43 * <p>Abstract super class for page renderers. setPage will always be called. </p>
44 * <p>Subclasses should implement instanceInit for initialising swing components
45 * on the page. </p>
46 * @author Paul Hinds
47 * @version $Id: SwingPageRenderer.java,v 1.10 2007/01/19 00:24:35 teknopaul Exp $
48 */
49public abstract class SwingPageRenderer
50 extends JPanel {
51
52 // gui components
53 private BorderLayout borderLayout1 = new BorderLayout();
54
55 // holds the next back buttons etc
56 private JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.CENTER,20,3));
57
58 private JButton backButton = new JButton();
59 private JButton cancelButton = new JButton();
60 private JButton nextButton = new JButton();
61 private JButton finishButton = new JButton();
62
63 public JPanel masterPanel = new JPanel( new BorderLayout() );
64
65 private JPanel titlePanel = new JPanel();
66 private JLabel titleLabel = new JLabel();
67 private JLabel imagePanel = new JLabel(); // Graphic for the installer
68 private GridLayout titleLayout = new GridLayout();
69
70 // app components
71 protected Page page;
72 protected SwingInstallerContext swingCtx;
73 protected InstallerContext ctx;
74 protected PageCompletionListener listener;
75 private Border bevelBorder;
76
77
78 private static Font titleFont;
79 static{
80 titleFont = new JLabel().getFont();
81 try {
82 titleFont = new Font(titleFont.getFamily(), Font.BOLD, 14);
83 }
84 catch (Exception ex) {
85 // lets not fail due to font errors
86 }
87 }
88
89 public SwingPageRenderer(){
90 super();
91 }
92 public void setPage(Page page){
93 this.page = page;
94 try {
95 jbInit();
96 }
97 catch (Exception e) {
98 ctx.log(e.getMessage());
99 if(ctx.getInstaller().isVerbose()) {
100 ctx.log(e);
101 }
102 }
103 }
104
105 public void setContext(SwingInstallerContext swingCtx){
106 this.ctx = swingCtx.getInstallerContext();
107 this.swingCtx = swingCtx;
108 }
109
110 public void reInit() {
111 backButton.setText(org.tp23.antinstaller.Installer.langPack.getString("backButton"));// "<< Back");
112 cancelButton.setText(org.tp23.antinstaller.Installer.langPack.getString("cancelButton"));// "Cancel");
113 nextButton.setText(org.tp23.antinstaller.Installer.langPack.getString("nextButton"));// "Next >>");
114 finishButton.setText(ctx.getInstaller().getFinishButtonText());
115 titleLabel.setText(page.getDisplayText());
116 }
117
118 private void jbInit() throws Exception {
119
120 this.setDoubleBuffered(true);
121 //emptyBorder = BorderFactory.createEmptyBorder(2,5,2,2);
122 //bevelBorder = BorderFactory.createCompoundBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.white,Color.white,new Color(116, 116, 112),new Color(166, 166, 161)),BorderFactory.createEmptyBorder(2,SwingInputFieldRenderer.LEFT_INDENT,2,2));
123 bevelBorder = BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.black,1),BorderFactory.createEmptyBorder(2,SizeConstants.LEFT_INDENT,2,2));
124 bevelBorder = BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(),BorderFactory.createEmptyBorder(2,SizeConstants.LEFT_INDENT,2,2));
125 Border tripleBorder = BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(3,4,1,4),bevelBorder);
126 this.setLayout(borderLayout1);
127 titleLabel.setBorder(tripleBorder);
128 controlPanel.setBorder(tripleBorder);
129
130 masterPanel.add(titlePanel, BorderLayout.NORTH);
131 this.add(masterPanel, BorderLayout.NORTH);
132 this.add(controlPanel, BorderLayout.SOUTH);
133
134 // title panel
135 titlePanel.add(imagePanel, null);
136 titlePanel.add(titleLabel, null);
137
138 titlePanel.setLayout(titleLayout);
139 titleLayout.setColumns(1);
140 titleLayout.setHgap(0);
141 titleLayout.setRows(2);
142 titleLayout.setVgap(2);
143 titlePanel.setMinimumSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_PANEL_HEIGHT));
144 titlePanel.setMaximumSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_PANEL_HEIGHT));
145 titlePanel.setPreferredSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_PANEL_HEIGHT));
146
147 titleLabel.setText(page.getDisplayText());
148 titleLabel.setFont(titleFont);
149 setImage(page.getImageResource());
150 imagePanel.setMinimumSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_IMAGE_HEIGHT));
151 imagePanel.setMaximumSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_IMAGE_HEIGHT));
152 imagePanel.setPreferredSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_IMAGE_HEIGHT));
153
154 // Ctrl Panel
155 controlPanel.add(cancelButton, null);
156 controlPanel.add(backButton, null);
157 controlPanel.add(nextButton, null);
158 controlPanel.add(finishButton, null);
159 backButton.setText(org.tp23.antinstaller.Installer.langPack.getString("backButton"));// "<< Back");
160 cancelButton.setText(org.tp23.antinstaller.Installer.langPack.getString("cancelButton"));// "Cancel");
161 nextButton.setText(org.tp23.antinstaller.Installer.langPack.getString("nextButton"));// "Next >>");
162 finishButton.setText(ctx.getInstaller().getFinishButtonText());
163 finishButton.setEnabled(false);
164 setEventListeners();
165 setIcons();
166 }
167 public abstract void instanceInit() throws Exception ;
168 public abstract void updateInputFields();
169 public abstract void updateDefaultValues();
170 public abstract boolean validateFields()throws ValidationException;
171
172 public void setPageCompletionListener(PageCompletionListener listener){
173 this.listener = listener;
174 }
175
176 private void setImage(String resource) throws Exception{
177 if(resource == null){
178 resource = ctx.getInstaller().getDefaultImageResource();
179 }
180 ImageIcon icon = getImage(resource);
181 imagePanel.setIcon(icon);
182 }
183
184 protected ImageIcon getImage(String resource){
185 try {
186 if (resource != null) {
187 ByteArrayOutputStream baos = new ByteArrayOutputStream();
188 InputStream in = this.getClass().getResourceAsStream(resource);
189 byte[] buffer = new byte[2048];
190 int read = -1;
191 while ( (read = in.read(buffer)) != -1) {
192 baos.write(buffer, 0, read);
193 }
194 ImageIcon icon = new ImageIcon(baos.toByteArray());
195 return icon;
196 }
197 }
198 catch (Exception ex) {
199 ctx.log("Can't load image resource:" + resource);
200 if(ctx.getInstaller().isVerbose()){
201 ctx.log(ex);
202 }
203 }
204 return null;
205 }
206
207
208 private void setEventListeners(){
209 backButton.addActionListener(new ActionListener(){
210 public void actionPerformed(ActionEvent e){
211 listener.pageBack(page);
212 }
213 });
214 cancelButton.addActionListener(new ActionListener(){
215 public void actionPerformed(ActionEvent e){
216 page.setAbort(true);
217 if (ctx.getInstaller().isVerbose()) {
218 ctx.log("Abort called");
219 }
220 listener.pageComplete(page);
221 }
222 });
223 nextButton.addActionListener(new ActionListener(){
224 public void actionPerformed(ActionEvent e){
225 listener.pageComplete(page);
226
227 }
228 });
229 finishButton.addActionListener(new ActionListener(){
230 public void actionPerformed(ActionEvent e){
231 if(finishButton.getText().equals(org.tp23.antinstaller.Installer.langPack.getString("exit"))) {
232 //TODO FindBugs this will prevent cleanup in FinalizerFilter
233 System.exit(0);
234 }
235 listener.pageComplete(page);
236 //((SwingInstallerContext)ctx).getSwingRunner().finish();
237 }
238 });
239 }
240
241 private void setIcons(){
242 backButton.setIcon(getImage("/resources/icons/back.png"));
243 cancelButton.setIcon(getImage("/resources/icons/cancel.png"));
244 nextButton.setIcon(getImage("/resources/icons/next.png"));
245 finishButton.setIcon(getImage("/resources/icons/finish.png"));
246 }
247
248 public JButton getCancelButton() {
249 return cancelButton;
250 }
251
252 public InstallerContext getCtx() {
253 return ctx;
254 }
255
256 public JPanel getControlPanel() {
257 return controlPanel;
258 }
259
260 public JLabel getImagePanel() {
261 return imagePanel;
262 }
263
264 public JButton getNextButton() {
265 return nextButton;
266 }
267
268 public JLabel getTitleLabel() {
269 return titleLabel;
270 }
271 public JButton getFinishButton() {
272 return finishButton;
273 }
274 public JButton getBackButton() {
275 return backButton;
276 }
277}
Note: See TracBrowser for help on using the repository browser.