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

Last change on this file since 17622 was 17622, checked in by oranfry, 15 years ago

extra options to directory chooser and page

File size: 9.1 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,12,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 nextButton.setVisible( page.isShowNextButton() );
163 finishButton.setText(ctx.getInstaller().getFinishButtonText());
164 finishButton.setVisible(false);
165 setEventListeners();
166 setIcons();
167 }
168 public abstract void instanceInit() throws Exception ;
169 public abstract void reInstanceInit();
170 public abstract void updateInputFields();
171 public abstract void updateDefaultValues();
172 public abstract boolean validateFields()throws ValidationException;
173
174 public void setPageCompletionListener(PageCompletionListener listener){
175 this.listener = listener;
176 }
177
178 public void stopPage() {}
179
180 private void setImage(String resource) throws Exception{
181 if(resource == null){
182 resource = ctx.getInstaller().getDefaultImageResource();
183 }
184 ImageIcon icon = getImage(resource);
185 imagePanel.setIcon(icon);
186 }
187
188 protected ImageIcon getImage(String resource){
189 try {
190 if (resource != null) {
191 ByteArrayOutputStream baos = new ByteArrayOutputStream();
192 InputStream in = this.getClass().getResourceAsStream(resource);
193 byte[] buffer = new byte[2048];
194 int read = -1;
195 while ( (read = in.read(buffer)) != -1) {
196 baos.write(buffer, 0, read);
197 }
198 ImageIcon icon = new ImageIcon(baos.toByteArray());
199 return icon;
200 }
201 }
202 catch (Exception ex) {
203 ctx.log("Can't load image resource:" + resource);
204 if(ctx.getInstaller().isVerbose()){
205 ctx.log(ex);
206 }
207 }
208 return null;
209 }
210
211
212 private void setEventListeners(){
213 backButton.addActionListener(new ActionListener(){
214 public void actionPerformed(ActionEvent e){
215 listener.pageBack(page);
216 }
217 });
218 cancelButton.addActionListener(new ActionListener(){
219 public void actionPerformed(ActionEvent e){
220 page.setAbort(true);
221 if (ctx.getInstaller().isVerbose()) {
222 ctx.log("Abort called");
223 }
224 listener.pageComplete(page);
225 }
226 });
227 nextButton.addActionListener(new ActionListener(){
228 public void actionPerformed(ActionEvent e){
229 listener.pageComplete(page);
230
231 }
232 });
233 finishButton.addActionListener(new ActionListener(){
234 public void actionPerformed(ActionEvent e){
235 if(finishButton.getText().equals(org.tp23.antinstaller.Installer.langPack.getString("exit"))) {
236 //TODO FindBugs this will prevent cleanup in FinalizerFilter
237 System.exit(0);
238 }
239 listener.pageComplete(page);
240 //((SwingInstallerContext)ctx).getSwingRunner().finish();
241 }
242 });
243 }
244
245 private void setIcons(){
246 backButton.setIcon(getImage("/resources/icons/back.png"));
247 cancelButton.setIcon(getImage("/resources/icons/cancel.png"));
248 nextButton.setIcon(getImage("/resources/icons/next.png"));
249 finishButton.setIcon(getImage("/resources/icons/finish.png"));
250 }
251
252 public JButton getCancelButton() {
253 return cancelButton;
254 }
255
256 public InstallerContext getCtx() {
257 return ctx;
258 }
259
260 public JPanel getControlPanel() {
261 return controlPanel;
262 }
263
264 public JLabel getImagePanel() {
265 return imagePanel;
266 }
267
268 public JButton getNextButton() {
269 return nextButton;
270 }
271
272 public JLabel getTitleLabel() {
273 return titleLabel;
274 }
275 public JButton getFinishButton() {
276 return finishButton;
277 }
278 public JButton getBackButton() {
279 return backButton;
280 }
281}
Note: See TracBrowser for help on using the repository browser.