|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
package javax.swing.plaf.synth; |
|
|
|
import java.awt.*; |
|
import java.beans.*; |
|
import javax.swing.*; |
|
import javax.swing.plaf.*; |
|
import javax.swing.plaf.basic.*; |
|
import sun.swing.DefaultLookup; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public class SynthOptionPaneUI extends BasicOptionPaneUI implements |
|
PropertyChangeListener, SynthUI { |
|
private SynthStyle style; |
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public static ComponentUI createUI(JComponent x) { |
|
return new SynthOptionPaneUI(); |
|
} |
|
|
|
|
|
|
|
*/ |
|
@Override |
|
protected void installDefaults() { |
|
updateStyle(optionPane); |
|
} |
|
|
|
|
|
|
|
*/ |
|
@Override |
|
protected void installListeners() { |
|
super.installListeners(); |
|
optionPane.addPropertyChangeListener(this); |
|
} |
|
|
|
private void updateStyle(JComponent c) { |
|
SynthContext context = getContext(c, ENABLED); |
|
SynthStyle oldStyle = style; |
|
|
|
style = SynthLookAndFeel.updateStyle(context, this); |
|
if (style != oldStyle) { |
|
minimumSize = (Dimension)style.get(context, |
|
"OptionPane.minimumSize"); |
|
if (minimumSize == null) { |
|
minimumSize = new Dimension(262, 90); |
|
} |
|
if (oldStyle != null) { |
|
uninstallKeyboardActions(); |
|
installKeyboardActions(); |
|
} |
|
} |
|
context.dispose(); |
|
} |
|
|
|
|
|
|
|
*/ |
|
@Override |
|
protected void uninstallDefaults() { |
|
SynthContext context = getContext(optionPane, ENABLED); |
|
|
|
style.uninstallDefaults(context); |
|
context.dispose(); |
|
style = null; |
|
} |
|
|
|
|
|
|
|
*/ |
|
@Override |
|
protected void uninstallListeners() { |
|
super.uninstallListeners(); |
|
optionPane.removePropertyChangeListener(this); |
|
} |
|
|
|
|
|
|
|
*/ |
|
@Override |
|
protected void installComponents() { |
|
optionPane.add(createMessageArea()); |
|
|
|
Container separator = createSeparator(); |
|
if (separator != null) { |
|
optionPane.add(separator); |
|
SynthContext context = getContext(optionPane, ENABLED); |
|
optionPane.add(Box.createVerticalStrut(context.getStyle(). |
|
getInt(context, "OptionPane.separatorPadding", 6))); |
|
context.dispose(); |
|
} |
|
optionPane.add(createButtonArea()); |
|
optionPane.applyComponentOrientation(optionPane.getComponentOrientation()); |
|
} |
|
|
|
|
|
|
|
*/ |
|
@Override |
|
public SynthContext getContext(JComponent c) { |
|
return getContext(c, getComponentState(c)); |
|
} |
|
|
|
private SynthContext getContext(JComponent c, int state) { |
|
return SynthContext.getContext(c, style, state); |
|
} |
|
|
|
private int getComponentState(JComponent c) { |
|
return SynthLookAndFeel.getComponentState(c); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
@Override |
|
public void update(Graphics g, JComponent c) { |
|
SynthContext context = getContext(c); |
|
|
|
SynthLookAndFeel.update(context, g); |
|
context.getPainter().paintOptionPaneBackground(context, |
|
g, 0, 0, c.getWidth(), c.getHeight()); |
|
paint(context, g); |
|
context.dispose(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
@Override |
|
public void paint(Graphics g, JComponent c) { |
|
SynthContext context = getContext(c); |
|
|
|
paint(context, g); |
|
context.dispose(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
protected void paint(SynthContext context, Graphics g) { |
|
} |
|
|
|
|
|
|
|
*/ |
|
@Override |
|
public void paintBorder(SynthContext context, Graphics g, int x, |
|
int y, int w, int h) { |
|
context.getPainter().paintOptionPaneBorder(context, g, x, y, w, h); |
|
} |
|
|
|
|
|
|
|
*/ |
|
@Override |
|
public void propertyChange(PropertyChangeEvent e) { |
|
if (SynthLookAndFeel.shouldUpdateStyle(e)) { |
|
updateStyle((JOptionPane)e.getSource()); |
|
} |
|
} |
|
|
|
|
|
|
|
*/ |
|
@Override |
|
protected boolean getSizeButtonsToSameWidth() { |
|
return DefaultLookup.getBoolean(optionPane, this, |
|
"OptionPane.sameSizeButtons", true); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
@Override |
|
protected Container createMessageArea() { |
|
JPanel top = new JPanel(); |
|
top.setName("OptionPane.messageArea"); |
|
top.setLayout(new BorderLayout()); |
|
|
|
|
|
Container body = new JPanel(new GridBagLayout()); |
|
Container realBody = new JPanel(new BorderLayout()); |
|
|
|
body.setName("OptionPane.body"); |
|
realBody.setName("OptionPane.realBody"); |
|
|
|
if (getIcon() != null) { |
|
JPanel sep = new JPanel(); |
|
sep.setName("OptionPane.separator"); |
|
sep.setPreferredSize(new Dimension(15, 1)); |
|
realBody.add(sep, BorderLayout.BEFORE_LINE_BEGINS); |
|
} |
|
realBody.add(body, BorderLayout.CENTER); |
|
|
|
GridBagConstraints cons = new GridBagConstraints(); |
|
cons.gridx = cons.gridy = 0; |
|
cons.gridwidth = GridBagConstraints.REMAINDER; |
|
cons.gridheight = 1; |
|
|
|
SynthContext context = getContext(optionPane, ENABLED); |
|
cons.anchor = context.getStyle().getInt(context, |
|
"OptionPane.messageAnchor", GridBagConstraints.CENTER); |
|
context.dispose(); |
|
|
|
cons.insets = new Insets(0,0,3,0); |
|
|
|
addMessageComponents(body, cons, getMessage(), |
|
getMaxCharactersPerLineCount(), false); |
|
top.add(realBody, BorderLayout.CENTER); |
|
|
|
addIcon(top); |
|
return top; |
|
} |
|
|
|
|
|
|
|
*/ |
|
@Override |
|
protected Container createSeparator() { |
|
JSeparator separator = new JSeparator(SwingConstants.HORIZONTAL); |
|
|
|
separator.setName("OptionPane.separator"); |
|
return separator; |
|
} |
|
} |