source: release-kits/lirk3/bin/ant-installer/src/org/tp23/antinstaller/renderer/swing/SwingPageRenderer.java@ 14982

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

initial import of LiRK3

File size: 8.4 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 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 this.add(titlePanel, BorderLayout.NORTH);
123 this.add(controlPanel, BorderLayout.SOUTH);
124
125 // title panel
126 titlePanel.add(imagePanel, null);
127 titlePanel.add(titleLabel, null);
128
129 titlePanel.setLayout(titleLayout);
130 titleLayout.setColumns(1);
131 titleLayout.setHgap(0);
132 titleLayout.setRows(2);
133 titleLayout.setVgap(2);
134 titlePanel.setMinimumSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_PANEL_HEIGHT));
135 titlePanel.setMaximumSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_PANEL_HEIGHT));
136 titlePanel.setPreferredSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_PANEL_HEIGHT));
137
138 titleLabel.setText(page.getDisplayText());
139 titleLabel.setFont(titleFont);
140 setImage(page.getImageResource());
141 imagePanel.setMinimumSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_IMAGE_HEIGHT));
142 imagePanel.setMaximumSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_IMAGE_HEIGHT));
143 imagePanel.setPreferredSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.TITLE_IMAGE_HEIGHT));
144
145 // Ctrl Panel
146 controlPanel.add(cancelButton, null);
147 controlPanel.add(backButton, null);
148 controlPanel.add(nextButton, null);
149 controlPanel.add(finishButton, null);
150 backButton.setText(res.getString("backButton"));// "<< Back");
151 cancelButton.setText(res.getString("cancelButton"));// "Cancel");
152 nextButton.setText(res.getString("nextButton"));// "Next >>");
153 finishButton.setText(ctx.getInstaller().getFinishButtonText());
154 finishButton.setEnabled(false);
155 setEventListeners();
156 setIcons();
157 }
158 public abstract void instanceInit() throws Exception ;
159 public abstract void updateInputFields();
160 public abstract void updateDefaultValues();
161 public abstract boolean validateFields()throws ValidationException;
162
163 public void setPageCompletionListener(PageCompletionListener listener){
164 this.listener = listener;
165 }
166
167 private void setImage(String resource) throws Exception{
168 if(resource == null){
169 resource = ctx.getInstaller().getDefaultImageResource();
170 }
171 ImageIcon icon = getImage(resource);
172 imagePanel.setIcon(icon);
173 }
174
175 protected ImageIcon getImage(String resource){
176 try {
177 if (resource != null) {
178 ByteArrayOutputStream baos = new ByteArrayOutputStream();
179 InputStream in = this.getClass().getResourceAsStream(resource);
180 byte[] buffer = new byte[2048];
181 int read = -1;
182 while ( (read = in.read(buffer)) != -1) {
183 baos.write(buffer, 0, read);
184 }
185 ImageIcon icon = new ImageIcon(baos.toByteArray());
186 return icon;
187 }
188 }
189 catch (Exception ex) {
190 ctx.log("Can't load image resource:" + resource);
191 if(ctx.getInstaller().isVerbose()){
192 ctx.log(ex);
193 }
194 }
195 return null;
196 }
197
198
199 private void setEventListeners(){
200 backButton.addActionListener(new ActionListener(){
201 public void actionPerformed(ActionEvent e){
202 listener.pageBack(page);
203 }
204 });
205 cancelButton.addActionListener(new ActionListener(){
206 public void actionPerformed(ActionEvent e){
207 page.setAbort(true);
208 if (ctx.getInstaller().isVerbose()) {
209 ctx.log("Abort called");
210 }
211 listener.pageComplete(page);
212 }
213 });
214 nextButton.addActionListener(new ActionListener(){
215 public void actionPerformed(ActionEvent e){
216 listener.pageComplete(page);
217
218 }
219 });
220 finishButton.addActionListener(new ActionListener(){
221 public void actionPerformed(ActionEvent e){
222 if(finishButton.getText().equals(res.getString("exit"))) {
223 //TODO FindBugs this will prevent cleanup in FinalizerFilter
224 System.exit(0);
225 }
226 listener.pageComplete(page);
227 //((SwingInstallerContext)ctx).getSwingRunner().finish();
228 }
229 });
230 }
231
232 private void setIcons(){
233 backButton.setIcon(getImage("/resources/icons/back.png"));
234 cancelButton.setIcon(getImage("/resources/icons/cancel.png"));
235 nextButton.setIcon(getImage("/resources/icons/next.png"));
236 finishButton.setIcon(getImage("/resources/icons/finish.png"));
237 }
238
239 public JButton getCancelButton() {
240 return cancelButton;
241 }
242
243 public InstallerContext getCtx() {
244 return ctx;
245 }
246
247 public JPanel getControlPanel() {
248 return controlPanel;
249 }
250
251 public JLabel getImagePanel() {
252 return imagePanel;
253 }
254
255 public JButton getNextButton() {
256 return nextButton;
257 }
258
259 public JLabel getTitleLabel() {
260 return titleLabel;
261 }
262 public JButton getFinishButton() {
263 return finishButton;
264 }
265 public JButton getBackButton() {
266 return backButton;
267 }
268
269}
Note: See TracBrowser for help on using the repository browser.