Ticket #1977: EnhanceExtendedDialog.2.patch

File EnhanceExtendedDialog.2.patch, 4.1 KB (added by xeen, 12 years ago)

Now fixes the scrollbar issue too

  • src/org/openstreetmap/josm/gui/ExtendedDialog.java

     
    66import java.awt.event.ComponentEvent;
    77import java.awt.event.ComponentListener;
    88import java.awt.GridBagLayout;
     9import java.awt.Toolkit;
    910
    1011import javax.swing.AbstractAction;
    1112import javax.swing.Action;
     
    1819import javax.swing.JOptionPane;
    1920import javax.swing.JPanel;
    2021import javax.swing.JRootPane;
     22import javax.swing.JScrollBar;
    2123import javax.swing.JScrollPane;
    2224import javax.swing.KeyStroke;
    2325
    2426import org.openstreetmap.josm.Main;
     27import org.openstreetmap.josm.gui.JMultilineLabel;
    2528import org.openstreetmap.josm.tools.GBC;
    2629import org.openstreetmap.josm.tools.I18n;
    2730import org.openstreetmap.josm.tools.ImageProvider;
     
    4649    }
    4750   
    4851    public ExtendedDialog(Component parent, String title, Component content, String[] buttonTexts) {
     52        this(parent, title, content, buttonTexts, null);
     53    }
     54   
     55    // just display a breakable message
     56    public ExtendedDialog(Component parent, String title, String message, String[] buttonTexts, String[] buttonIcons) {
    4957        super(JOptionPane.getFrameForComponent(parent), title, true);
    50         bTexts = buttonTexts;
    51         setupDialog(parent, title, content, buttonTexts, null);
     58       
     59        JMultilineLabel lbl = new JMultilineLabel(message);
     60        // Make it not wider than 2/3 of the screen
     61        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
     62        lbl.setMaxWidth(Math.round(screenSize.width*2/3));
     63       
     64        bTexts = buttonTexts;       
     65        setupDialog(parent, title, lbl, buttonTexts, buttonIcons);
    5266    }
    5367   
     68    public ExtendedDialog(Component parent, String title, String message, String[] buttonTexts) {
     69        this(parent, title, message, buttonTexts, null);
     70    }
     71   
    5472    private void setupDialog(Component parent, String title, Component content, String[] buttonTexts, String[] buttonIcons) {
     73        setupEscListener();
     74       
    5575        JButton button;
    5676        JPanel buttonsPanel = new JPanel(new GridBagLayout());
    5777       
     
    7898        }
    7999       
    80100        JPanel cp = new JPanel(new GridBagLayout());       
    81         cp.add(content, GBC.eol().anchor(GBC.CENTER).insets(0,10,0,0)); //fill(GBC.HORIZONTAL).
     101        cp.add(content, GBC.eol().anchor(GBC.CENTER).insets(5,10,5,0));
    82102        cp.add(buttonsPanel, GBC.eol().anchor(GBC.CENTER).insets(5,5,5,5));
    83103       
    84         JScrollPane pane = new JScrollPane(cp); 
     104        JScrollPane pane = new JScrollPane(cp);
    85105        pane.setBorder(null);       
    86106        setContentPane(pane);
    87107       
    88108        pack();
    89109       
    90         // Try to make it not larger than the parent window or at least not larger than a reasonable value
     110        // Try to make it not larger than the parent window or at least not larger than 2/3 of the screen
    91111        Dimension d = getSize();
    92         Dimension x = new Dimension(700, 500);
     112        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
     113        Dimension x = new Dimension(Math.round(screenSize.width*2/3), Math.round(screenSize.height*2/3));
     114       
    93115        try {
    94            
    95116            if(parent != null)
    96117                x = JOptionPane.getFrameForComponent(parent).getSize();
    97118        } catch(NullPointerException e) { }
     119       
     120        boolean limitedInWidth = d.width > x.width;
     121        boolean limitedInHeight = d.height > x.height;
    98122
    99123        if(x.width  > 0 && d.width  > x.width)  d.width  = x.width;
    100124        if(x.height > 0 && d.height > x.height) d.height = x.height;
    101         setSize(d);
    102125       
    103         setLocationRelativeTo(parent);       
     126        // We have a vertical scrollbar and enough space to prevent a horizontal one
     127        if(!limitedInWidth && limitedInHeight)
     128            d.width += new JScrollBar().getPreferredSize().width;
    104129       
    105         setupEscListener();
     130        setSize(d);
     131        setLocationRelativeTo(parent);
    106132        setVisible(true);
    107133    }
    108134