Package com.cburch.logisim.gui.generic

Source Code of com.cburch.logisim.gui.generic.LFrame

/* Copyright (c) 2010, Carl Burch. License information is located in the
* com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */

package com.cburch.logisim.gui.generic;

import java.awt.Image;
import java.awt.Window;
import java.awt.event.WindowEvent;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

import com.cburch.logisim.util.WindowClosable;

@SuppressWarnings("serial")
public class LFrame extends JFrame implements WindowClosable {
    private static final String PATH = "logisim/img/logisim-icon-";
    private static final int[] SIZES = { 16, 20, 24, 48, 64, 128 };
    private static List<Image> ICONS = null;
    private static final int DEFAULT_SIZE = 48;
    private static Image DEFAULT_ICON = null;

    public static void attachIcon(Window frame) {
        if (ICONS == null) {
            List<Image> loadedIcons = new ArrayList<Image>();
            ClassLoader loader = LFrame.class.getClassLoader();
            for (int size : SIZES) {
                URL url = loader.getResource(PATH + size + ".svg");
                if (url != null) {
                    ImageIcon icon = new ImageIcon(url);
                    loadedIcons.add(icon.getImage());
                    if (size == DEFAULT_SIZE) {
                        DEFAULT_ICON = icon.getImage();
                    }
                }
            }
            ICONS = loadedIcons;
        }

        boolean success = false;
        try {
            if (ICONS != null && !ICONS.isEmpty()) {
                Method set = frame.getClass().getMethod("setIconImages", List.class);
                set.invoke(frame, ICONS);
                success = true;
            }
        } catch (Exception e) { }

        if (!success && frame instanceof JFrame && DEFAULT_ICON != null) {
            ((JFrame) frame).setIconImage(DEFAULT_ICON);
        }
    }

    public LFrame() {
        LFrame.attachIcon(this);
    }

    @Override
    public void requestClose() {
        WindowEvent closing = new WindowEvent(this, WindowEvent.WINDOW_CLOSING);
        processWindowEvent(closing);
    }
}
TOP

Related Classes of com.cburch.logisim.gui.generic.LFrame

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.