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

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

fixes to the last change and made the selectinput render more nicely

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