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

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

changes to the way ant-installer loads and reloads the language packs, and a new attribute to the select input which triggers it to change the language to the input value

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