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

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

work on the GUI of the installer

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