All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bidib.wizard.mvc.features.view.FeaturesView Maven / Gradle / Ivy

There is a newer version: 2.0.0-M1
Show newest version
package org.bidib.wizard.mvc.features.view;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Collection;
import java.util.HashSet;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.WindowConstants;

import org.bidib.jbidibc.core.Feature;
import org.bidib.wizard.locale.Resources;
import org.bidib.wizard.mvc.features.model.FeaturesModel;
import org.bidib.wizard.mvc.features.view.listener.FeaturesViewListener;
import org.bidib.wizard.mvc.features.view.panel.FeaturesPanel;
import org.bidib.wizard.mvc.features.view.panel.listener.FeaturesWriteListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jgoodies.forms.builder.ButtonBarBuilder;
import com.jgoodies.forms.factories.Borders;

public class FeaturesView extends JDialog {
    private static final Logger LOGGER = LoggerFactory.getLogger(FeaturesView.class);

    private static final long serialVersionUID = 1L;

    // private final FeaturesModel model;
    private final Collection listeners = new HashSet();

    private final JButton saveButton = new JButton(Resources.getString(getClass(), "save"));

    private final JButton cancelButton = new JButton(Resources.getString(getClass(), "cancel"));

    private final FeaturesPanel featuresPanel;

    public FeaturesView(JFrame parent, FeaturesModel model, int x, int y) {
        super(parent);
        // this.model = model;

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                cancel();
            }
        });
        setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        setLocation(x, y);
        setResizable(true);
        setTitle(Resources.getString(getClass(), "title"));

        JPanel mainPanel = new JPanel(new BorderLayout());

        featuresPanel = new FeaturesPanel(model);
        JScrollPane scroll = new JScrollPane();
        scroll.setViewportView(featuresPanel.getTable());
        mainPanel.add(scroll, BorderLayout.CENTER);

        featuresPanel.addFeaturesWriteListener(new FeaturesWriteListener() {
            @Override
            public void write(Collection features) {
                fireWrite(features);
            }
        });

        // prepare the buttons
        saveButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                save();
            }
        });

        cancelButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                cancel();
            }
        });

        JPanel buttons =
            new ButtonBarBuilder().addGlue().addButton(saveButton, cancelButton).border(Borders.DLU2).build();

        mainPanel.add(buttons, BorderLayout.SOUTH);

        getContentPane().add(mainPanel);
        pack();
        setMinimumSize(getSize());
        setSize(new Dimension(getSize().width + 10, getSize().height));
        setPreferredSize(new Dimension(400, 200));

        int buttonWidth = Math.max(saveButton.getWidth(), cancelButton.getWidth());

        saveButton.setPreferredSize(new Dimension(buttonWidth, saveButton.getSize().height));
        cancelButton.setPreferredSize(new Dimension(buttonWidth, cancelButton.getSize().height));
    }

    public void addFeaturesViewListener(FeaturesViewListener listener) {
        listeners.add(listener);
    }

    private void save() {
        LOGGER.debug("Save the changed features.");

        // write the features to the node
        featuresPanel.writeFeatures();

        // close the dialog
        setVisible(false);
        fireClose();
    }

    private void cancel() {
        setVisible(false);
        fireClose();
    }

    private void fireClose() {
        for (FeaturesViewListener listener : listeners) {
            listener.close();
        }
    }

    private void fireWrite(Collection features) {
        for (FeaturesViewListener listener : listeners) {
            listener.write(features);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy