Ignore:
Timestamp:
2009-07-05T10:48:09+02:00 (15 years ago)
Author:
stoecker
Message:

fixed #2821, #2775 - agpifojpicture position wrong, preferences callable twice

File:
1 edited

Legend:

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

    r1670 r1733  
    99import java.awt.event.WindowAdapter;
    1010import java.awt.event.WindowEvent;
     11import java.awt.event.WindowListener;
    1112import java.io.FileNotFoundException;
    1213import java.io.IOException;
     
    3637    private final String title;
    3738
     39    private ActionListener cancelListener = new ActionListener(){
     40        public void actionPerformed(ActionEvent e) {
     41            if (!cancelled) {
     42                cancelled = true;
     43                cancel();
     44            }
     45        }
     46    };
     47
     48    private WindowListener windowListener = new WindowAdapter(){
     49        @Override public void windowClosing(WindowEvent e) {
     50            if (!closeDialogCalled) {
     51                if (!cancelled) {
     52                    cancelled = true;
     53                    cancel();
     54                }
     55                closeDialog();
     56            }
     57        }
     58    };
     59
    3860    /**
    3961     * Create the runnable object with a given message for the user.
     
    5375        this.title = title;
    5476        this.ignoreException = ignoreException;
    55         Main.pleaseWaitDlg.cancel.addActionListener(new ActionListener(){
    56             public void actionPerformed(ActionEvent e) {
    57                 if (!cancelled) {
    58                     cancelled = true;
    59                     cancel();
    60                 }
    61             }
    62         });
    63         Main.pleaseWaitDlg.addWindowListener(new WindowAdapter(){
    64             @Override public void windowClosing(WindowEvent e) {
    65                 if (!closeDialogCalled) {
    66                     if (!cancelled) {
    67                         cancelled = true;
    68                         cancel();
    69                     }
    70                     closeDialog();
    71                 }
    72             }
    73         });
    74     }
    75 
    76     public final void run() {
     77    }
     78
     79    private void prepareDialog() {
     80        // reset dialog state
     81        errorMessage = null;
     82        closeDialogCalled = false;
     83
     84        Main.pleaseWaitDlg.setTitle(title);
     85        Main.pleaseWaitDlg.cancel.setEnabled(true);
     86        Main.pleaseWaitDlg.setCustomText("");
     87        Main.pleaseWaitDlg.cancel.addActionListener(cancelListener);
     88        Main.pleaseWaitDlg.addWindowListener(windowListener);
     89        Main.pleaseWaitDlg.setVisible(true);
     90    }
     91
     92    private void doRealRun() {
    7793        try {
    7894            try {
    79                 if (cancelled)
    80                     return; // since realRun isn't executed, do not call to finish
    81 
    82                 // reset dialog state
    83                 Main.pleaseWaitDlg.setTitle(title);
    84                 Main.pleaseWaitDlg.cancel.setEnabled(true);
    85                 Main.pleaseWaitDlg.setCustomText("");
    86                 errorMessage = null;
    87                 closeDialogCalled = false;
    88 
    89                 // show the dialog
    90                 synchronized (this) {
    91                     EventQueue.invokeLater(new Runnable() {
    92                         public void run() {
    93                             synchronized (PleaseWaitRunnable.this) {
    94                                 PleaseWaitRunnable.this.notifyAll();
    95                             }
    96                             Main.pleaseWaitDlg.setVisible(true);
    97                         }
    98                     });
    99                     try {wait();} catch (InterruptedException e) {}
    100                 }
    101 
    10295                realRun();
    10396            } catch (SAXException x) {
     
    129122                });
    130123            }
     124        }
     125    }
     126
     127    public final void run() {
     128        if (cancelled)
     129            return; // since realRun isn't executed, do not call to finish
     130
     131        if (EventQueue.isDispatchThread()) {
     132            new Thread(new Runnable() {
     133                public void run() {
     134                    doRealRun();
     135                }
     136            }).start();
     137            prepareDialog();
     138        } else {
     139            EventQueue.invokeLater(new Runnable() {
     140                public void run() {
     141                    prepareDialog();
     142                }
     143            });
     144            doRealRun();
    131145        }
    132146    }
     
    165179                        Main.pleaseWaitDlg.setVisible(false);
    166180                        Main.pleaseWaitDlg.dispose();
     181                        Main.pleaseWaitDlg.removeWindowListener(windowListener);
     182                        Main.pleaseWaitDlg.cancel.removeActionListener(cancelListener);
    167183                    }
    168184                    if (errorMessage != null && !silent) {
Note: See TracChangeset for help on using the changeset viewer.