Package com.cburch.logisim.gui.prefs

Source Code of com.cburch.logisim.gui.prefs.TemplateOptions$MyListener

/* 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.prefs;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

import com.cburch.logisim.file.Loader;
import com.cburch.logisim.file.LoaderException;
import com.cburch.logisim.file.LogisimFile;
import com.cburch.logisim.prefs.AppPreferences;
import com.cburch.logisim.prefs.Template;
import com.cburch.logisim.util.JFileChoosers;
import static com.cburch.logisim.util.LocaleString.*;

@SuppressWarnings("serial")
class TemplateOptions extends OptionsPanel {
    private class MyListener implements ActionListener, PropertyChangeListener {
        @Override
        public void actionPerformed(ActionEvent event) {
            Object src = event.getSource();
            if (src == templateButton) {
                JFileChooser chooser = JFileChoosers.create();
                chooser.setDialogTitle(getFromLocale("selectDialogTitle"));
                chooser.setApproveButtonText(getFromLocale("selectDialogButton"));
                int action = chooser.showOpenDialog(getPreferencesFrame());
                if (action == JFileChooser.APPROVE_OPTION) {
                    File file = chooser.getSelectedFile();
                    FileInputStream reader = null;
                    InputStream reader2 = null;
                    try {
                        Loader loader = new Loader(getPreferencesFrame());
                        reader = new FileInputStream(file);
                        Template template = Template.create(reader);
                        reader2 = template.createStream();
                        // to see if OK
                        LogisimFile.load(reader2, loader);
                        AppPreferences.setTemplateFile(file, template);
                        AppPreferences.setTemplateType(AppPreferences.TEMPLATE_CUSTOM);
                    } catch (LoaderException ex) {
                    } catch (IOException ex) {
                        JOptionPane.showMessageDialog(getPreferencesFrame(),
                                String.format(getFromLocale("templateErrorMessage"), ex.toString()),
                                getFromLocale("templateErrorTitle"),
                                JOptionPane.ERROR_MESSAGE);
                    } finally {
                        try {
                            if (reader != null) {
                                reader.close();
                            }

                        } catch (IOException ex) { }
                        try {
                            if (reader != null) {
                                reader2.close();
                            }

                        } catch (IOException ex) { }
                    }
                }
            } else {
                int value = AppPreferences.TEMPLATE_UNKNOWN;
                if (plain.isSelected()) {
                    value = AppPreferences.TEMPLATE_PLAIN;
                }

                else if (empty.isSelected()) {
                    value = AppPreferences.TEMPLATE_EMPTY;
                }

                else if (custom.isSelected()) {
                    value = AppPreferences.TEMPLATE_CUSTOM;
                }

                AppPreferences.setTemplateType(value);
            }
            computeEnabled();
        }

        @Override
        public void propertyChange(PropertyChangeEvent event) {
            String prop = event.getPropertyName();
            if (prop.equals(AppPreferences.TEMPLATE_TYPE)) {
                int value = AppPreferences.getTemplateType();
                plain.setSelected(value == AppPreferences.TEMPLATE_PLAIN);
                empty.setSelected(value == AppPreferences.TEMPLATE_EMPTY);
                custom.setSelected(value == AppPreferences.TEMPLATE_CUSTOM);
            } else if (prop.equals(AppPreferences.TEMPLATE_FILE)) {
                setTemplateField((File) event.getNewValue());
            }
        }

        private void setTemplateField(File f) {
            try {
                templateField.setText(f == null ? "" : f.getCanonicalPath());
            } catch (IOException e) {
                templateField.setText(f.getName());
            }
            computeEnabled();
        }

        private void computeEnabled() {
            custom.setEnabled(!templateField.getText().equals(""));
            templateField.setEnabled(custom.isSelected());
        }
    }

    private MyListener myListener = new MyListener();

    private JRadioButton plain = new JRadioButton();
    private JRadioButton empty = new JRadioButton();
    private JRadioButton custom = new JRadioButton();
    private JTextField templateField = new JTextField(40);
    private JButton templateButton = new JButton();

    public TemplateOptions(PreferencesFrame window) {
        super(window);

        ButtonGroup bgroup = new ButtonGroup();
        bgroup.add(plain);
        bgroup.add(empty);
        bgroup.add(custom);

        plain.addActionListener(myListener);
        empty.addActionListener(myListener);
        custom.addActionListener(myListener);
        templateField.setEditable(false);
        templateButton.addActionListener(myListener);
        myListener.computeEnabled();

        GridBagLayout gridbag = new GridBagLayout();
        GridBagConstraints gbc = new GridBagConstraints();
        setLayout(gridbag);
        gbc.weightx = 1.0;
        gbc.gridx = 0;
        gbc.gridy = GridBagConstraints.RELATIVE;
        gbc.gridwidth = 3;
        gbc.anchor = GridBagConstraints.LINE_START;
        gridbag.setConstraints(plain, gbc); add(plain);
        gridbag.setConstraints(empty, gbc); add(empty);
        gridbag.setConstraints(custom, gbc); add(custom);
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridwidth = 1;
        gbc.gridy = 3;
        gbc.gridx = GridBagConstraints.RELATIVE;
        JPanel strut = new JPanel();
        strut.setMinimumSize(new Dimension(50, 1));
        strut.setPreferredSize(new Dimension(50, 1));
        gbc.weightx = 0.0; gridbag.setConstraints(strut, gbc); add(strut);
        gbc.weightx = 1.0; gridbag.setConstraints(templateField, gbc); add(templateField);
        gbc.weightx = 0.0; gridbag.setConstraints(templateButton, gbc); add(templateButton);

        AppPreferences.addPropertyChangeListener(AppPreferences.TEMPLATE_TYPE, myListener);
        AppPreferences.addPropertyChangeListener(AppPreferences.TEMPLATE_FILE, myListener);
        switch (AppPreferences.getTemplateType()) {
        case AppPreferences.TEMPLATE_PLAIN: plain.setSelected(true); break;
        case AppPreferences.TEMPLATE_EMPTY: empty.setSelected(true); break;
        case AppPreferences.TEMPLATE_CUSTOM: custom.setSelected(true); break;
        }
        myListener.setTemplateField(AppPreferences.getTemplateFile());
    }

    @Override
    public String getTitle() {
        return getFromLocale("templateTitle");
    }

    @Override
    public String getHelpText() {
        return getFromLocale("templateHelp");
    }

    @Override
    public void localeChanged() {
        plain.setText(getFromLocale("templatePlainOption"));
        empty.setText(getFromLocale("templateEmptyOption"));
        custom.setText(getFromLocale("templateCustomOption"));
        templateButton.setText(getFromLocale("templateSelectButton"));
    }
}
TOP

Related Classes of com.cburch.logisim.gui.prefs.TemplateOptions$MyListener

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.