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.Dimension;
20import java.awt.Insets;
21import java.awt.Rectangle;
22import java.awt.event.ActionEvent;
23import java.awt.event.ActionListener;
24import java.io.PrintStream;
25import java.util.ResourceBundle;
26
27import javax.swing.BorderFactory;
28import javax.swing.JLabel;
29import javax.swing.JPanel;
30import javax.swing.JScrollPane;
31import javax.swing.JTabbedPane;
32import javax.swing.JToggleButton;
33
34import org.tp23.antinstaller.page.ProgressPage;
35import org.tp23.antinstaller.renderer.AntOutputRenderer;
36import org.tp23.gui.widget.SystemOutJTextArea;
37/**
38 *
39 * <p>Copyright: Copyright (c) 2004</p>
40 * <p>Company: tp23</p>
41 * @todo change absolute to Border layout and panels
42 * @author Paul Hinds
43 * @version $Id: ProgressPageRenderer.java,v 1.4 2006/12/21 00:03:00 teknopaul Exp $
44 */
45public class ProgressPageRenderer
46    extends SwingPageRenderer
47    implements AntOutputRenderer {
48
49    private static final ResourceBundle res = ResourceBundle.getBundle("org.tp23.antinstaller.renderer.Res");
50    private static final int MESSAGE_PANEL_HEIGHT = 30;
51
52    private JPanel contentPanel = new JPanel();
53
54    private JTabbedPane jTabbedPane = new JTabbedPane();
55    private JPanel messagesPanel = new JPanel();
56    private BorderLayout borderLayout1 = new BorderLayout();
57    private JToggleButton jToggleButton = new JToggleButton();
58    private JLabel feedBackLabel = new JLabel();
59
60    private SystemOutJTextArea outPanel = new SystemOutJTextArea();
61    private SystemOutJTextArea errPanel = new SystemOutJTextArea();
62    
63    private boolean showTargets = true;
64    private JScrollPane progressScrollPane = new JScrollPane();;
65    private ProgressPanel progressPanel;
66
67    public ProgressPageRenderer() {
68        errPanel.setAsSystemErr();
69        outPanel.setAsSystemOut();
70    }
71    /**
72     * getErr
73     * @return PrintStream
74     */
75    public PrintStream getErr() {
76        return errPanel.getOut();
77    }
78    /**
79     * getOut
80     * @return PrintStream
81     */
82    public PrintStream getOut() {
83        return outPanel.getOut();
84    }
85
86
87    /**
88     * instanceInit
89     */
90    public void instanceInit() {
91        showTargets = ((ProgressPage)page).isShowTargets();
92        contentPanel.setLayout(borderLayout1);
93        this.add(contentPanel,BorderLayout.CENTER);
94        
95        //progressScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
96
97        messagesPanel.setLayout(null);
98        Dimension messPanelSize = new Dimension(SizeConstants.PAGE_WIDTH,MESSAGE_PANEL_HEIGHT);
99        messagesPanel.setSize(messPanelSize);
00        messagesPanel.setPreferredSize(messPanelSize);
01        messagesPanel.setMaximumSize(messPanelSize);
02        messagesPanel.setMinimumSize(messPanelSize);
03
04        //FIXME not i18n properly since the sentence is not correct ordering in German
05        feedBackLabel.setText(res.getString("click")+" "+ctx.getInstaller().getFinishButtonText()+" "+res.getString("toContinue"));
06        feedBackLabel.setBounds(new Rectangle(115, 7, 272, 22));
07        jToggleButton.setText(res.getString("showDetails"));
08        jToggleButton.setBounds(new Rectangle(5, 7, 104, 22));
09        jToggleButton.setMargin(new Insets(0,0,0,0));
10        messagesPanel.add(jToggleButton, null);
11        messagesPanel.add(feedBackLabel, null);
12        jToggleButton.addActionListener(new ActionListener(){
13            public void actionPerformed(ActionEvent e) {
14                if(jToggleButton.isSelected()){
15                    if(showTargets){
16                        contentPanel.remove(progressScrollPane);
17                    }
18                    contentPanel.add(jTabbedPane, BorderLayout.CENTER);
19                    contentPanel.doLayout();
20                    contentPanel.repaint();
21                }
22                else {
23                    contentPanel.remove(jTabbedPane);
24                    if(showTargets){
25                        contentPanel.add(progressScrollPane, BorderLayout.CENTER);
26                        progressScrollPane.revalidate();
27                    }
28                    contentPanel.doLayout();
29                    contentPanel.repaint();
30                }
31            }
32        });
33        jToggleButton.setIcon(getImage("/resources/icons/showdetails.png"));
34        contentPanel.add(messagesPanel, BorderLayout.NORTH);
35
36        if(showTargets){
37            progressScrollPane.setBorder(BorderFactory.createEmptyBorder(10,5,5,5));
38            contentPanel.add(progressScrollPane, BorderLayout.CENTER);
39        }
40        jTabbedPane.add(res.getString("output"), outPanel);
41        jTabbedPane.add(res.getString("errors"), errPanel);
42//      if(OutputField.isTrue( ctx.getInstaller().getAntialiased())){
43//          outPanel.setAntialiased(true);
44//          errPanel.setAntialiased(true);
45//      }
46
47        //jTabbedPane.setVisible(false);
48        jTabbedPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
49        contentPanel.setMaximumSize(new Dimension(SizeConstants.PAGE_WIDTH, Integer.MAX_VALUE));
50        contentPanel.setMinimumSize(new Dimension(SizeConstants.PAGE_WIDTH, 100));
51        contentPanel.setPreferredSize(new Dimension(SizeConstants.PAGE_WIDTH, SizeConstants.PAGE_HEIGHT-100));
52        //contentPanel.add(jTabbedPane, null);
53        //jTabbedPane.setBounds(new Rectangle(4, MESSAGE_PANEL_HEIGHT, PAGE_WIDTH-12, 214));
54
55        this.getNextButton().setEnabled(false);
56        this.getFinishButton().setText(ctx.getInstaller().getFinishButtonText());
57        this.getFinishButton().setEnabled(true);
58    }
59
60    public void setContext(SwingInstallerContext swingCtx){
61        super.setContext(swingCtx);
62        if(showTargets){
63            progressPanel = new ProgressPanel(swingCtx.getInstallerContext());
64            progressScrollPane.getViewport().add(progressPanel);
65            this.swingCtx.setProgressPanel(progressPanel);
66        }
67        this.swingCtx.setFeedBackLabel(feedBackLabel);
68    }
69
70
71    /**
72     * updateInputFields
73     */
74    public void updateInputFields() {
75
76    }
77
78
79
80    /**
81     * validateFields
82     *
83     * @return boolean
84     */
85    public boolean validateFields() {
86        return true;
87    }
88
89
90
91    /**
92     * updateDefaultValues
93     */
94    public void updateDefaultValues() {
95    }
96}
97