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

edu.cmu.tetradapp.editor.BayesPmEditor Maven / Gradle / Ivy

The newest version!
///////////////////////////////////////////////////////////////////////////////
// For information as to what this class does, see the Javadoc, below.       //
// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,       //
// 2007, 2008, 2009, 2010, 2014, 2015, 2022 by Peter Spirtes, Richard        //
// Scheines, Joseph Ramsey, and Clark Glymour.                               //
//                                                                           //
// This program is free software; you can redistribute it and/or modify      //
// it under the terms of the GNU General Public License as published by      //
// the Free Software Foundation; either version 2 of the License, or         //
// (at your option) any later version.                                       //
//                                                                           //
// This program is distributed in the hope that it will be useful,           //
// but WITHOUT ANY WARRANTY; without even the implied warranty of            //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             //
// GNU General Public License for more details.                              //
//                                                                           //
// You should have received a copy of the GNU General Public License         //
// along with this program; if not, write to the Free Software               //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA //
///////////////////////////////////////////////////////////////////////////////
package edu.cmu.tetradapp.editor;

import edu.cmu.tetrad.graph.Graph;
import edu.cmu.tetradapp.model.BayesPmWrapper;
import edu.cmu.tetradapp.session.DelegatesEditing;
import edu.cmu.tetradapp.workbench.GraphWorkbench;

import javax.swing.*;
import java.awt.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

/**
 * Displays a workbench editing workbench area together with a toolbench for editing tetrad-style graphs.
 *
 * @author Aaron Powers
 * @author josephramsey
 * @version $Id: $Id
 */
public class BayesPmEditor extends JPanel
        implements PropertyChangeListener, DelegatesEditing {

    /**
     * The panel that contains the workbench and the wizard.
     */
    private final JPanel targetPanel;

    /**
     * The wrapper for the Bayes PM.
     */
    private final BayesPmWrapper wrapper;

    /**
     * The wizard that lets the user edit values.
     */
    private BayesPmEditorWizard wizard;

    /**
     * Constructs a new editor for parameterized models (for now only for Bayes net parameterized models).
     *
     * @param wrapper a {@link edu.cmu.tetradapp.model.BayesPmWrapper} object
     */
    public BayesPmEditor(BayesPmWrapper wrapper) {
        this.wrapper = wrapper;
        setLayout(new BorderLayout());

        this.targetPanel = new JPanel();
        this.targetPanel.setLayout(new BorderLayout());

        setEditorPanel();

        add(this.targetPanel, BorderLayout.CENTER);
        validate();

        if (wrapper.getNumModels() > 1) {
            JComboBox comp = new JComboBox<>();

            for (int i = 0; i < wrapper.getNumModels(); i++) {
                comp.addItem(i + 1);
            }

            comp.addActionListener(e -> {
                wrapper.setModelIndex((Integer) comp.getSelectedItem() - 1);
                setEditorPanel();
                validate();
            });

            comp.setMaximumSize(comp.getPreferredSize());

            Box b = Box.createHorizontalBox();
            b.add(new JLabel("Using model"));
            b.add(comp);
            b.add(new JLabel("from "));
            b.add(new JLabel(wrapper.getModelSourceName()));
            b.add(Box.createHorizontalGlue());

            add(b, BorderLayout.NORTH);
        }
    }

    private void setEditorPanel() {
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());

        if (this.wrapper.getBayesPm().getDag().getNumNodes() == 0) {
            throw new IllegalArgumentException("There are no nodes in that Bayes PM.");
        }

        setLayout(new BorderLayout());

        Graph graph = this.wrapper.getBayesPm().getDag();
        GraphWorkbench workbench = new GraphWorkbench(graph);
        workbench.setEnableEditing(false);
        BayesPmEditorWizard wizard = new BayesPmEditorWizard(this.wrapper.getBayesPm(), workbench);

        JScrollPane workbenchScroll = new JScrollPane(workbench);
        JScrollPane wizardScroll = new JScrollPane(wizard);

        workbenchScroll.setPreferredSize(new Dimension(450, 450));
        wizardScroll.setPreferredSize(new Dimension(450, 450));

        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
                workbenchScroll, wizardScroll);
        splitPane.setOneTouchExpandable(true);
        splitPane.setDividerLocation(workbenchScroll.getPreferredSize().width);
        panel.add(splitPane, BorderLayout.CENTER);

        JMenuBar menuBar = new JMenuBar();
        JMenu file = new JMenu("File");
        menuBar.add(file);
//        file.add(new SaveScreenshot(this, true, "Save Screenshot..."));
        file.add(new SaveComponentImage(workbench, "Save Graph Image..."));
        panel.add(menuBar, BorderLayout.NORTH);

        setName("Bayes PM Editor");
        wizard.addPropertyChangeListener(this);

        wizard.setEditingLatentVariablesAllowed(isEditingLatentVariablesAllowed());
        wizard.setEditingMeasuredVariablesAllowed(true);
        this.wizard = wizard;

        this.targetPanel.add(panel, BorderLayout.CENTER);
    }

    /**
     * {@inheritDoc}
     * 

* G Reacts to property change events. */ public void propertyChange(PropertyChangeEvent e) { if ("editorClosing".equals(e.getPropertyName())) { firePropertyChange("editorClosing", null, getName()); } if ("closeFrame".equals(e.getPropertyName())) { firePropertyChange("closeFrame", null, null); } if ("modelChanged".equals(e.getPropertyName())) { firePropertyChange("modelChanged", e.getOldValue(), e.getNewValue()); } } /** * {@inheritDoc} *

* Sets the name fo the Bayes PM. */ public void setName(String name) { String oldName = getName(); super.setName(name); firePropertyChange("name", oldName, getName()); } /** *

getEditDelegate.

* * @return a {@link javax.swing.JComponent} object */ public JComponent getEditDelegate() { return this.wizard; } /** * True iff the editing of latent variables is allowed. */ private boolean isEditingLatentVariablesAllowed() { return true; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy