Changeset 8516 in josm


Ignore:
Timestamp:
2015-06-21T12:36:09+02:00 (6 years ago)
Author:
simon04
Message:

see #11355 - Splash screen: scroll overlong task list

File:
1 edited

Legend:

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

    r8513 r8516  
    66import java.awt.Color;
    77import java.awt.Component;
    8 import java.awt.Graphics;
     8import java.awt.Dimension;
    99import java.awt.GridBagConstraints;
    1010import java.awt.GridBagLayout;
     
    1818import java.util.Objects;
    1919
     20import javax.swing.BorderFactory;
    2021import javax.swing.ImageIcon;
    2122import javax.swing.JFrame;
     
    2324import javax.swing.JPanel;
    2425import javax.swing.JProgressBar;
     26import javax.swing.JScrollPane;
    2527import javax.swing.JSeparator;
     28import javax.swing.ScrollPaneConstants;
    2629import javax.swing.border.Border;
    2730import javax.swing.border.EmptyBorder;
     
    3538import org.openstreetmap.josm.gui.progress.ProgressTaskId;
    3639import org.openstreetmap.josm.gui.util.GuiHelper;
     40import org.openstreetmap.josm.gui.widgets.JosmEditorPane;
     41import org.openstreetmap.josm.tools.GBC;
    3742import org.openstreetmap.josm.tools.ImageProvider;
    3843import org.openstreetmap.josm.tools.Predicates;
     
    118123    @Override
    119124    public void stateChanged(ChangeEvent ignore) {
    120         progressRenderer.setTasks(progressMonitor.toString());
     125        GuiHelper.runInEDT(new Runnable() {
     126            @Override
     127            public void run() {
     128                progressRenderer.setTasks(progressMonitor.toString());
     129            }
     130        });
    121131    }
    122132
     
    129139         * Returns a HTML representation for this task.
    130140         */
    131         public abstract String toHtml();
     141        public abstract StringBuilder toHtml(StringBuilder sb);
    132142
    133143        @Override
    134144        public final String toString() {
    135             return toHtml();
     145            return toHtml(new StringBuilder(1024)).toString();
    136146        }
    137147    }
     
    159169
    160170        @Override
    161         public String toHtml() {
    162             return name + "<i style='color: #666666;'>" + duration + "</i>";
     171        public StringBuilder toHtml(StringBuilder sb) {
     172            return sb.append(name).append("<i style='color: #666666;'>").append(duration).append("</i>");
    163173        }
    164174
     
    193203
    194204        @Override
    195         public String toHtml() {
     205        public StringBuilder toHtml(StringBuilder sb) {
    196206            synchronized (tasks) {
    197                 return Utils.firstNonNull(name, "") + (tasks.isEmpty() ? "" : Utils.joinAsHtmlUnorderedList(tasks));
     207                sb.append(Utils.firstNonNull(name, ""));
     208                if (!tasks.isEmpty()) {
     209                    sb.append("<ul>");
     210                    for (Task i : tasks) {
     211                        sb.append("<li>");
     212                        i.toHtml(sb);
     213                        sb.append("</li>");
     214                    }
     215                    sb.append("</ul>");
     216                }
     217                return sb;
    198218            }
    199219        }
     
    328348
    329349    private static class SplashScreenProgressRenderer extends JPanel {
    330         private JLabel lblTaskTitle;
    331         private JProgressBar progressBar;
     350        private final JosmEditorPane lblTaskTitle = new JosmEditorPane();
     351        private final JProgressBar progressBar = new JProgressBar(JProgressBar.HORIZONTAL);
    332352        private static final String labelHtml = "<html>"
    333                 + "<style>ul {margin-top: 0; margin-bottom: 0; padding: 0;} li {margin: 0; padding: 0;}</style>"
    334                 + "<body height='320'>";
     353                + "<style>ul {margin-top: 0; margin-bottom: 0; padding: 0;} li {margin: 0; padding: 0;}</style>";
    335354
    336355        protected void build() {
    337356            setLayout(new GridBagLayout());
    338             GridBagConstraints gc = new GridBagConstraints();
    339             gc.gridx = 0;
    340             gc.gridy = 0;
    341             gc.fill = GridBagConstraints.HORIZONTAL;
    342             gc.weightx = 1.0;
    343             gc.weighty = 0.0;
    344             gc.insets = new Insets(5, 0, 0, 0);
    345             add(lblTaskTitle = new JLabel(labelHtml), gc);
    346 
    347             gc.gridy = 1;
    348             gc.insets = new Insets(15, 0, 0, 0);
    349             add(progressBar = new JProgressBar(JProgressBar.HORIZONTAL), gc);
     357
     358            JosmEditorPane.makeJLabelLike(lblTaskTitle, false);
     359            lblTaskTitle.setText(labelHtml);
     360            final JScrollPane scrollPane = new JScrollPane(lblTaskTitle,
     361                    ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
     362            scrollPane.setPreferredSize(new Dimension(0, 320));
     363            scrollPane.setBorder(BorderFactory.createEmptyBorder());
     364            add(scrollPane, GBC.eol().insets(5, 5, 0, 0).fill(GridBagConstraints.HORIZONTAL));
     365
    350366            progressBar.setIndeterminate(true);
     367            add(progressBar, GBC.eol().insets(5, 15, 0, 0).fill(GridBagConstraints.HORIZONTAL));
    351368        }
    352369
     
    355372        }
    356373
    357         @Override
    358         public void paint(Graphics g) {
    359             try {
    360                 super.paint(g);
    361             } catch (NullPointerException ignore) {
    362                 // NullPointerException at javax.swing.text.html.StyleSheet$ListPainter.paint
    363                 if (Main.isTraceEnabled()) {
    364                     Main.trace(ignore.getMessage());
    365                 }
    366             }
    367         }
    368 
    369374        public void setTasks(String tasks) {
    370             lblTaskTitle.setText(labelHtml + tasks);
     375            synchronized (lblTaskTitle) {
     376                lblTaskTitle.setText(labelHtml + tasks);
     377                lblTaskTitle.setCaretPosition(lblTaskTitle.getDocument().getLength());
     378            }
    371379            repaint();
    372380        }
Note: See TracChangeset for help on using the changeset viewer.