| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
package javax.swing.plaf.synth;  | 
 | 
 | 
 | 
import java.awt.*;  | 
 | 
import java.awt.event.*;  | 
 | 
import javax.swing.*;  | 
 | 
import javax.swing.plaf.*;  | 
 | 
import javax.swing.plaf.basic.BasicDesktopIconUI;  | 
 | 
import java.beans.*;  | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
public class SynthDesktopIconUI extends BasicDesktopIconUI  | 
 | 
                                implements SynthUI, PropertyChangeListener { | 
 | 
    private SynthStyle style;  | 
 | 
    private Handler handler = new Handler();  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public static ComponentUI createUI(JComponent c)    { | 
 | 
        return new SynthDesktopIconUI();  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    @Override  | 
 | 
    protected void installComponents() { | 
 | 
        if (UIManager.getBoolean("InternalFrame.useTaskBar")) { | 
 | 
            iconPane = new JToggleButton(frame.getTitle(), frame.getFrameIcon()) { | 
 | 
                @Override public String getToolTipText() { | 
 | 
                    return getText();  | 
 | 
                }  | 
 | 
 | 
 | 
                @Override public JPopupMenu getComponentPopupMenu() { | 
 | 
                    return frame.getComponentPopupMenu();  | 
 | 
                }  | 
 | 
            };  | 
 | 
            ToolTipManager.sharedInstance().registerComponent(iconPane);  | 
 | 
            iconPane.setFont(desktopIcon.getFont());  | 
 | 
            iconPane.setBackground(desktopIcon.getBackground());  | 
 | 
            iconPane.setForeground(desktopIcon.getForeground());  | 
 | 
        } else { | 
 | 
            iconPane = new SynthInternalFrameTitlePane(frame);  | 
 | 
            iconPane.setName("InternalFrame.northPane"); | 
 | 
        }  | 
 | 
        desktopIcon.setLayout(new BorderLayout());  | 
 | 
        desktopIcon.add(iconPane, BorderLayout.CENTER);  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    @Override  | 
 | 
    protected void installListeners() { | 
 | 
        super.installListeners();  | 
 | 
        desktopIcon.addPropertyChangeListener(this);  | 
 | 
 | 
 | 
        if (iconPane instanceof JToggleButton) { | 
 | 
            frame.addPropertyChangeListener(this);  | 
 | 
            ((JToggleButton)iconPane).addActionListener(handler);  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    @Override  | 
 | 
    protected void uninstallListeners() { | 
 | 
        if (iconPane instanceof JToggleButton) { | 
 | 
            ((JToggleButton)iconPane).removeActionListener(handler);  | 
 | 
            frame.removePropertyChangeListener(this);  | 
 | 
        }  | 
 | 
        desktopIcon.removePropertyChangeListener(this);  | 
 | 
        super.uninstallListeners();  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    @Override  | 
 | 
    protected void installDefaults() { | 
 | 
        updateStyle(desktopIcon);  | 
 | 
    }  | 
 | 
 | 
 | 
    private void updateStyle(JComponent c) { | 
 | 
        SynthContext context = getContext(c, ENABLED);  | 
 | 
        style = SynthLookAndFeel.updateStyle(context, this);  | 
 | 
        context.dispose();  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    @Override  | 
 | 
    protected void uninstallDefaults() { | 
 | 
        SynthContext context = getContext(desktopIcon, ENABLED);  | 
 | 
        style.uninstallDefaults(context);  | 
 | 
        context.dispose();  | 
 | 
        style = null;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    @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().paintDesktopIconBackground(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().paintDesktopIconBorder(context, g, x, y, w, h);  | 
 | 
    }  | 
 | 
 | 
 | 
    public void propertyChange(PropertyChangeEvent evt) { | 
 | 
        if (evt.getSource() instanceof JInternalFrame.JDesktopIcon) { | 
 | 
            if (SynthLookAndFeel.shouldUpdateStyle(evt)) { | 
 | 
                updateStyle((JInternalFrame.JDesktopIcon)evt.getSource());  | 
 | 
            }  | 
 | 
        } else if (evt.getSource() instanceof JInternalFrame) { | 
 | 
            JInternalFrame frame = (JInternalFrame)evt.getSource();  | 
 | 
            if (iconPane instanceof JToggleButton) { | 
 | 
                JToggleButton button = (JToggleButton)iconPane;  | 
 | 
                String prop = evt.getPropertyName();  | 
 | 
                if (prop == "title") { | 
 | 
                    button.setText((String)evt.getNewValue());  | 
 | 
                } else if (prop == "frameIcon") { | 
 | 
                    button.setIcon((Icon)evt.getNewValue());  | 
 | 
                } else if (prop == JInternalFrame.IS_ICON_PROPERTY ||  | 
 | 
                           prop == JInternalFrame.IS_SELECTED_PROPERTY) { | 
 | 
                    button.setSelected(!frame.isIcon() && frame.isSelected());  | 
 | 
                }  | 
 | 
            }  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
    private final class Handler implements ActionListener { | 
 | 
        public void actionPerformed(ActionEvent evt) { | 
 | 
            if (evt.getSource() instanceof JToggleButton) { | 
 | 
                  | 
 | 
                JToggleButton button = (JToggleButton)evt.getSource();  | 
 | 
                try { | 
 | 
                    boolean selected = button.isSelected();  | 
 | 
                    if (!selected && !frame.isIconifiable()) { | 
 | 
                        button.setSelected(true);  | 
 | 
                    } else { | 
 | 
                        frame.setIcon(!selected);  | 
 | 
                        if (selected) { | 
 | 
                            frame.setSelected(true);  | 
 | 
                        }  | 
 | 
                    }  | 
 | 
                } catch (PropertyVetoException e2) { | 
 | 
                }  | 
 | 
            }  | 
 | 
        }  | 
 | 
    }  | 
 | 
}  |