diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashScreen.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashScreen.java | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashScreen.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashScreen.java new file mode 100644 index 00000000..5de84cca --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashScreen.java @@ -0,0 +1,181 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.taskdefs.optional.splash; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.JWindow; + +import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.BuildListener; + +class SplashScreen extends JWindow implements ActionListener, BuildListener { + private static final int FONT_SIZE = 12; + private JLabel text; + private JProgressBar pb; + private int total; + private static final int MIN = 0; + private static final int MAX = 200; + private Pattern progressRegExpPattern; + + public SplashScreen(String msg) { + this(msg, null, null); + } + + public SplashScreen(ImageIcon img) { + this(img, null, null); + } + + public SplashScreen(String msg, String progressRegExp, String displayText) { + init(null, progressRegExp, displayText); + setText(msg); + } + + public SplashScreen(ImageIcon img, String progressRegExp, + String displayText) { + init(img, progressRegExp, displayText); + } + + protected void init(ImageIcon img) { + init(img, null, null); + } + + protected void init(ImageIcon img, String progressRegExp, + String displayText) { + if (progressRegExp != null) { + progressRegExpPattern = Pattern.compile(progressRegExp); + } + + JPanel pan = (JPanel) getContentPane(); + JLabel piccy; + if (img == null) { + piccy = new JLabel(); + } else { + piccy = new JLabel(img); + } + + piccy.setBorder(BorderFactory.createLineBorder(Color.black, 1)); + if (displayText == null) { + displayText = "Building...."; + } + text = new JLabel(displayText, JLabel.CENTER); + text.setFont(new Font("Sans-Serif", Font.BOLD, FONT_SIZE)); + text.setBorder(BorderFactory.createEtchedBorder()); + + pb = new JProgressBar(MIN, MAX); + pb.setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED)); + JPanel pan2 = new JPanel(); + pan2.setLayout(new BorderLayout()); + + pan2.add(text, BorderLayout.NORTH); + pan2.add(pb, BorderLayout.SOUTH); + + pan.setLayout(new BorderLayout()); + pan.add(piccy, BorderLayout.CENTER); + pan.add(pan2, BorderLayout.SOUTH); + + pan.setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED)); + + pack(); + + Dimension size = getSize(); + Dimension scr = Toolkit.getDefaultToolkit().getScreenSize(); + int x = (scr.width - size.width) / 2; + int y = (scr.height - size.height) / 2; + setBounds(x, y, size.width, size.height); + } + + public void setText(String txt) { + text.setText(txt); + } + + public void actionPerformed(ActionEvent a) { + if (!hasProgressPattern()) { + if (total < MAX) { + total++; + } else { + total = MIN; + } + pb.setValue(total); + } + } + + public void buildStarted(BuildEvent event) { + actionPerformed(null); + } + + public void buildFinished(BuildEvent event) { + pb.setValue(MAX); + setVisible(false); + dispose(); + } + public void targetStarted(BuildEvent event) { + actionPerformed(null); + } + + public void targetFinished(BuildEvent event) { + actionPerformed(null); + } + + public void taskStarted(BuildEvent event) { + actionPerformed(null); + } + + public void taskFinished(BuildEvent event) { + actionPerformed(null); + } + + public void messageLogged(BuildEvent event) { + actionPerformed(null); + if (hasProgressPattern()) { + String message = event.getMessage(); + Matcher matcher = progressRegExpPattern.matcher(message); + if (matcher != null && matcher.matches()) { + String gr = matcher.group(1); + try { + int i = Math.min(new Integer(gr).intValue() * 2, MAX); + pb.setValue(i); + } catch (NumberFormatException e) { + //TODO: how to reach logger?!? + //log("Number parsing error in progressRegExp", Project.MSG_VERBOSE); + + } + } + } + } + + protected boolean hasProgressPattern() { + return progressRegExpPattern != null; + } + +} + |