Ignore:
Timestamp:
2011-12-27T12:56:27+01:00 (12 years ago)
Author:
jttt
Message:

Add posibility to run please wait runnable tasks in background

File:
1 edited

Legend:

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

    r4604 r4718  
    3232import javax.swing.JLabel;
    3333import javax.swing.JPanel;
     34import javax.swing.JProgressBar;
    3435import javax.swing.JScrollPane;
    3536import javax.swing.JTextField;
    3637import javax.swing.Popup;
    3738import javax.swing.PopupFactory;
     39import javax.swing.UIManager;
    3840
    3941import org.openstreetmap.josm.Main;
     
    4446import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    4547import org.openstreetmap.josm.gui.help.Helpful;
     48import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
     49import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor.ProgressMonitorDialog;
    4650import org.openstreetmap.josm.tools.GBC;
    4751import org.openstreetmap.josm.tools.ImageProvider;
     
    9599    }
    96100
     101    public class BackgroundProgressMonitor implements ProgressMonitorDialog {
     102
     103        private String title;
     104        private String customText;
     105
     106        private void updateText() {
     107            if (customText != null && !customText.isEmpty()) {
     108                progressBar.setToolTipText(tr("{0} ({1})", title, customText));
     109            } else {
     110                progressBar.setToolTipText(title);
     111            }
     112        }
     113
     114        public void setVisible(boolean visible) {
     115            progressBar.setVisible(visible);
     116        }
     117
     118        public void updateProgress(int progress) {
     119            progressBar.setValue(progress);
     120            MapStatus.this.doLayout();
     121        }
     122
     123        public void setCustomText(String text) {
     124            this.customText = text;
     125            updateText();
     126        }
     127
     128        public void setTitle(String text) {
     129            this.title = text;
     130            updateText();
     131        }
     132
     133        public void setIndeterminate(boolean newValue) {
     134            UIManager.put("ProgressBar.cycleTime", UIManager.getInt("ProgressBar.repaintInterval") * 100);
     135            progressBar.setIndeterminate(newValue);
     136        }
     137
     138        @Override
     139        public void appendLogMessage(String message) {
     140            if (message != null && !message.isEmpty()) {
     141                System.out.println("appendLogMessage not implemented for background tasks. Message was: " + message);
     142            }
     143        }
     144
     145    }
     146
    97147    final ImageLabel lonText = new ImageLabel("lon", tr("The geographic longitude at the mouse pointer."), 11);
    98148    final ImageLabel nameText = new ImageLabel("name", tr("The name of the object at the mouse pointer."), 20);
     
    102152    final ImageLabel headingText = new ImageLabel("heading", tr("The (compass) heading of the line segment being drawn."), 6);
    103153    final ImageLabel distText = new ImageLabel("dist", tr("The length of the new way segment being drawn."), 10);
     154    final JProgressBar progressBar = new JProgressBar();
     155    public final BackgroundProgressMonitor progressMonitor = new BackgroundProgressMonitor();
    104156
    105157    /**
     
    658710        helpText.setEditable(false);
    659711        add(nameText, GBC.std().insets(3,0,0,0));
    660         add(helpText, GBC.eol().insets(3,0,0,0).fill(GBC.HORIZONTAL));
     712        add(helpText, GBC.std().insets(3,0,0,0).fill(GBC.HORIZONTAL));
     713
     714        progressBar.setMaximum(PleaseWaitProgressMonitor.PROGRESS_BAR_MAX);
     715        {
     716            GBC gbc = GBC.eol();
     717            gbc.ipadx = 100;
     718            add(progressBar,gbc);
     719        }
     720        progressBar.addMouseListener(new MouseAdapter() {
     721            @Override
     722            public void mouseClicked(MouseEvent e) {
     723                PleaseWaitProgressMonitor monitor = Main.currentProgressMonitor;
     724                if (monitor != null) {
     725                    monitor.showForegroundDialog();
     726                }
     727            }
     728        });
    661729
    662730        // The background thread
Note: See TracChangeset for help on using the changeset viewer.