/* * RapidMiner * * Copyright (C) 2001-2008 by Rapid-I and the contributors * * Complete list of developers available at our web site: * * http://rapid-i.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.gui.tools; import java.awt.Component; import java.awt.Dialog; import java.awt.Frame; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.SwingUtilities; import javax.swing.Timer; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** * Some utils for the creation of a modal progress monitor dialog. * * @author Santhosh Kumar, Ingo Mierswa * @version $Id: ProgressUtils.java,v 1.3 2008/05/09 19:22:59 ingomierswa Exp $ */ public class ProgressUtils { static class MonitorListener implements ChangeListener, ActionListener { private ProgressMonitor monitor; private Window owner; private Timer timer; private boolean modal; public MonitorListener(Window owner, ProgressMonitor monitor, boolean modal) { this.owner = owner; this.monitor = monitor; this.modal = modal; } public void stateChanged(ChangeEvent ce) { ProgressMonitor monitor = (ProgressMonitor) ce.getSource(); if (monitor.getCurrent() != monitor.getTotal()) { if (timer == null) { timer = new Timer(monitor.getWaitingTime(), this); timer.setRepeats(false); timer.start(); } } else { if (timer != null && timer.isRunning()) timer.stop(); monitor.removeChangeListener(this); } } public void actionPerformed(ActionEvent e) { monitor.removeChangeListener(this); ProgressDialog dlg = owner instanceof Frame ? new ProgressDialog((Frame) owner, monitor, modal) : new ProgressDialog((Dialog) owner, monitor, modal); dlg.pack(); dlg.setLocationRelativeTo(null); dlg.setVisible(true); } } /** Create a new (modal) progress monitor dialog. Please note the the value for total (the maximum * number of possible steps) is greater then 0 even for indeterminate progresses. The value * of waitingTime is used before the dialog is actually created and shown. */ public static ProgressMonitor createModalProgressMonitor(Component owner, int total, boolean indeterminate, int waitingTimeBeforeDialogAppears, boolean modal) { ProgressMonitor monitor = new ProgressMonitor(total, indeterminate, waitingTimeBeforeDialogAppears); Window window = owner instanceof Window ? (Window) owner : SwingUtilities.getWindowAncestor(owner); monitor.addChangeListener(new MonitorListener(window, monitor, modal)); return monitor; } }