Ignore:
Timestamp:
2009-10-25T18:22:28+01:00 (15 years ago)
Author:
Gubaer
Message:

fixed #3725: JOSM doesn't provide indication during upload that the server is sending 410 Gone errors
Progress dialog now includes a small log window for use cases like this. Use appendLogMessage() on the progress monitor.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java

    r2050 r2319  
    22package org.openstreetmap.josm.gui;
    33
    4 import java.awt.Dialog;
    5 import java.awt.Frame;
     4import static org.openstreetmap.josm.tools.I18n.tr;
     5
     6import java.awt.Component;
     7import java.awt.GridBagConstraints;
    68import java.awt.GridBagLayout;
     9import java.awt.event.ActionListener;
    710import java.awt.event.ComponentEvent;
    811import java.awt.event.ComponentListener;
     
    1316import javax.swing.JDialog;
    1417import javax.swing.JLabel;
     18import javax.swing.JOptionPane;
    1519import javax.swing.JPanel;
    1620import javax.swing.JProgressBar;
     21import javax.swing.JScrollPane;
     22import javax.swing.JTextArea;
    1723import javax.swing.UIManager;
    1824
    1925import org.openstreetmap.josm.Main;
    2026import org.openstreetmap.josm.tools.GBC;
    21 import org.openstreetmap.josm.tools.I18n;
     27import org.openstreetmap.josm.tools.ImageProvider;
    2228
    2329public class PleaseWaitDialog extends JDialog {
     
    2834    private final JLabel customText = new JLabel("");
    2935    public final BoundedRangeModel progress = progressBar.getModel();
    30     public final JButton cancel = new JButton(I18n.tr("Cancel"));
     36    private  JButton btnCancel;
     37    /** the text area and the scroll pane for the log */
     38    private JTextArea taLog = new JTextArea(5,50);
     39    private  JScrollPane spLog;
    3140
    3241    private void initDialog() {
     
    3746        pane.add(customText, GBC.eol().fill(GBC.HORIZONTAL));
    3847        pane.add(progressBar, GBC.eop().fill(GBC.HORIZONTAL));
    39         pane.add(cancel, GBC.eol().anchor(GBC.CENTER));
     48        btnCancel = new JButton(tr("Cancel"));
     49        btnCancel.setIcon(ImageProvider.get("cancel"));
     50        btnCancel.setToolTipText(tr("Click to cancel the current operation"));
     51        pane.add(btnCancel, GBC.eol().anchor(GBC.CENTER));
     52        GridBagConstraints gc = GBC.eol().fill(GBC.BOTH);
     53        gc.weighty = 1.0;
     54        gc.weightx = 1.0;
     55        pane.add(spLog = new JScrollPane(taLog), gc);
     56        spLog.setVisible(false);
    4057        setContentPane(pane);
    4158        //setSize(Main.pref.getInteger("progressdialog.size",600),100);
    4259        setCustomText("");
    43         setLocationRelativeTo(Main.parent);
     60        setLocationRelativeTo(getParent());
    4461        addComponentListener(new ComponentListener() {
    4562            public void componentHidden(ComponentEvent e) {}
     
    5572    }
    5673
    57     public PleaseWaitDialog(Frame parent) {
    58         super(parent, true);
    59         initDialog();
    60     }
    61 
    62     public PleaseWaitDialog(Dialog parent) {
    63         super(parent, true);
     74    public PleaseWaitDialog(Component parent) {
     75        super(JOptionPane.getFrameForComponent(parent), true);
    6476        initDialog();
    6577    }
     
    7082    }
    7183
     84    protected void adjustLayout() {
     85        invalidate();
     86        pack();
     87        setSize(Main.pref.getInteger("progressdialog.size", 600), getSize().height);
     88    }
     89
    7290    /**
    7391     * Sets a custom text line below currentAction. Can be used to display additional information
     
    7593     */
    7694    public void setCustomText(String text) {
    77         if(text.length() == 0) {
     95        if(text == null || text.trim().length() == 0) {
    7896            customText.setVisible(false);
    79             setSize(Main.pref.getInteger("progressdialog.size", 600), 100);
     97            adjustLayout();
    8098            return;
    8199        }
     100        if (!customText.isVisible()) {
     101            customText.setVisible(true);
     102            adjustLayout();
     103        }
     104        customText.setText(text);
     105    }
    82106
    83         customText.setVisible(true);
    84         customText.setText(text);
    85         setSize(Main.pref.getInteger("progressdialog.size", 600), 120);
     107    /**
     108     * Appends a log message to the progress dialog. If the log area isn't visible yet
     109     * it becomes visible. The height of the progress dialog is slightly increased too.
     110     *
     111     * @param message the message to append to the log. Ignore if null or white space only.
     112     */
     113    public void appendLogMessage(String message) {
     114        if (message == null || message.trim().length() ==0 )
     115            return;
     116        if (!spLog.isVisible()) {
     117            spLog.setVisible(true);
     118            taLog.setVisible(true);
     119            adjustLayout();
     120        }
     121        taLog.append(message);
     122        taLog.append("\n");
     123        spLog.getVerticalScrollBar().setValue(spLog.getVerticalScrollBar().getMaximum());
     124    }
     125
     126    /**
     127     * Sets whether the cancel button is enabled or not
     128     *
     129     * @param enabled true, if the cancel button is enabled; false otherwise
     130     */
     131    public void setCancelEnabled(boolean enabled) {
     132        btnCancel.setEnabled(enabled);
     133    }
     134
     135    /**
     136     * Installs a callback for the cancel button. If callback is null, all action listeners
     137     * are removed from the cancel button.
     138     *
     139     * @param callback the cancel callback
     140     */
     141    public void setCancelCallback(ActionListener callback) {
     142        if (callback == null) {
     143            ActionListener[] listeners = btnCancel.getActionListeners();
     144            for (ActionListener l: listeners) {
     145                btnCancel.removeActionListener(l);
     146            }
     147        } else {
     148            btnCancel.addActionListener(callback);
     149        }
    86150    }
    87151}
Note: See TracChangeset for help on using the changeset viewer.