EasyNeuronsApplicationView.java :  » Net » Neuroph-2.4 » org » neuroph » easyneurons » Java Open Source

Java Open Source » Net » Neuroph 2.4 
Neuroph 2.4 » org » neuroph » easyneurons » EasyNeuronsApplicationView.java
/*
 * EasyNeuronsApplicationView.java
 * odraditi serijalizaciju i snimanje (treba dodati lokaciju kao promenjivu u neural net i training set)
 */

package org.neuroph.easyneurons;

import org.neuroph.easyneurons.samples.mlperceptron.TransferableObject;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragSource;
import java.awt.dnd.DragSourceContext;
import java.awt.dnd.DragSourceDragEvent;
import java.awt.dnd.DragSourceDropEvent;
import java.awt.dnd.DragSourceEvent;
import java.awt.dnd.DragSourceListener;
import java.awt.dnd.InvalidDnDOperationException;
import org.neuroph.easyneurons.samples.perceptron.PerceptronSampleTrainingSet;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyVetoException;
import java.io.File;
import java.io.Serializable;
import java.net.URL;
import java.util.Observable;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.help.CSH;
import javax.help.HelpBroker;
import javax.help.HelpSet;
import javax.swing.Icon;
import javax.swing.JDesktopPane;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JTree;
import javax.swing.Timer;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreePath;

import org.jdesktop.application.Action;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.TaskMonitor;
import org.neuroph.core.Layer;
import org.neuroph.core.NeuralNetwork;
import org.neuroph.core.Neuron;
import org.neuroph.core.learning.SupervisedTrainingElement;
import org.neuroph.core.learning.TrainingElement;
import org.neuroph.core.learning.TrainingSet;
import org.neuroph.core.transfer.Trapezoid;
import org.neuroph.easyneurons.dialog.AdalineWizard;
import org.neuroph.easyneurons.dialog.BamWizard;
import org.neuroph.easyneurons.dialog.CompetitiveNetworkWizard;
import org.neuroph.easyneurons.dialog.HopfieldWizard;
import org.neuroph.easyneurons.dialog.InstarWizard;
import org.neuroph.easyneurons.dialog.KohonenWizard;
import org.neuroph.easyneurons.dialog.MultiLayerPerceptronWizard;
import org.neuroph.easyneurons.dialog.MaxnetWizard;
import org.neuroph.easyneurons.dialog.NeuronPropertiesFrame;
import org.neuroph.easyneurons.dialog.OutstarWizard;
import org.neuroph.easyneurons.dialog.PerceptronWizard;
import org.neuroph.easyneurons.dialog.RbfWizard;
import org.neuroph.easyneurons.dialog.RenameNodeDialog;
import org.neuroph.easyneurons.dialog.SupervisedHebbianWizard;
import org.neuroph.easyneurons.dialog.TrainingSetWizard;
import org.neuroph.easyneurons.dialog.UnsupervisedHebbianWizard;
import org.neuroph.easyneurons.errorgraph.GraphFrame;
import org.neuroph.easyneurons.file.FileFilterAdapter;
import org.neuroph.easyneurons.file.FileIO;
import org.neuroph.easyneurons.file.FileObserver;
import org.neuroph.easyneurons.file.FileUtils;
import org.neuroph.easyneurons.file.WindowObserver;
import org.neuroph.easyneurons.samples.BasicNeuronSample;
import org.neuroph.easyneurons.samples.KohonenSample;
import org.neuroph.easyneurons.samples.NFRSample;
import org.neuroph.nnet.Adaline;
import org.neuroph.nnet.BAM;
import org.neuroph.nnet.CompetitiveNetwork;
import org.neuroph.nnet.Hopfield;
import org.neuroph.nnet.Instar;
import org.neuroph.nnet.Kohonen;
import org.neuroph.nnet.MaxNet;
import org.neuroph.nnet.MultiLayerPerceptron;
import org.neuroph.nnet.NeuroFuzzyPerceptron;
import org.neuroph.nnet.Outstar;
import org.neuroph.nnet.Perceptron;
import org.neuroph.nnet.RbfNetwork;
import org.neuroph.nnet.SupervisedHebbianNetwork;
import org.neuroph.nnet.UnsupervisedHebbianNetwork;
import org.neuroph.util.NeuralNetworkFactory;
import org.neuroph.util.TransferFunctionType;
import org.neuroph.util.plugins.LabelsPlugin;
import org.neuroph.easyneurons.dialog.SupervisedTrainingMonitorFrame;
import org.neuroph.easyneurons.ocr.hwr.HandwritingRecognitionToolFrame;
import org.neuroph.easyneurons.ocr.tcr.TextRecognitionFrame;
import org.neuroph.nnet.learning.BackPropagation;
import org.neuroph.nnet.learning.BinaryDeltaRule;

/**
 * The application's main frame.
 */
public class EasyNeuronsApplicationView extends FrameView implements
    Serializable {
  private static final long serialVersionUID = 1L;
        int counter = 0;
        public static EasyNeuronsApplicationView myInstance;
  
  private EasyNeuronsProject easyNeuronsProject;
  private NeuralNetworkViewFrame netActiveWindow = null; // ovo je dodato
  private TrainingSet traActiveWindow = null; // ovo je dodato
  private FileObserver fileObserver = new FileObserver(); // ovo je dodato
  private JFileChooser fileChooser = new JFileChooser();
  private JFrame mainFrame = EasyNeuronsApplication.getApplication()
      .getMainFrame();
        private ProjectManager projectManager;
    
  public EasyNeuronsApplicationView(SingleFrameApplication app) {
    super(app);

    initComponents();

    // status bar initialization - message timeout, idle icon and busy
    // animation, etc
    ResourceMap resourceMap = getResourceMap();
    int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
    messageTimer = new Timer(messageTimeout, new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        statusMessageLabel.setText("");
      }
    });
    messageTimer.setRepeats(false);
    int busyAnimationRate = resourceMap
        .getInteger("StatusBar.busyAnimationRate");
    for (int i = 0; i < busyIcons.length; i++) {
      busyIcons[i] = resourceMap
          .getIcon("StatusBar.busyIcons[" + i + "]");
    }
    busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
        statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
      }
    });
    idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
    statusAnimationLabel.setIcon(idleIcon);
    progressBar.setVisible(false);

    // connecting action tasks to status bar via TaskMonitor
    TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
    taskMonitor
        .addPropertyChangeListener(new java.beans.PropertyChangeListener() {
          public void propertyChange(
              java.beans.PropertyChangeEvent evt) {
            String propertyName = evt.getPropertyName();
            if ("started".equals(propertyName)) {
              if (!busyIconTimer.isRunning()) {
                statusAnimationLabel.setIcon(busyIcons[0]);
                busyIconIndex = 0;
                busyIconTimer.start();
              }
              progressBar.setVisible(true);
              progressBar.setIndeterminate(true);
            } else if ("done".equals(propertyName)) {
              busyIconTimer.stop();
              statusAnimationLabel.setIcon(idleIcon);
              progressBar.setVisible(false);
              progressBar.setValue(0);
            } else if ("message".equals(propertyName)) {
              String text = (String) (evt.getNewValue());
              statusMessageLabel.setText((text == null) ? ""
                  : text);
              messageTimer.restart();
            } else if ("progress".equals(propertyName)) {
              int value = (Integer) (evt.getNewValue());
              progressBar.setVisible(true);
              progressBar.setIndeterminate(false);
              progressBar.setValue(value);
            }
          }
        });

    // fix for shutdown on window close
    JFrame mainFrame2 = this.getFrame();
    mainFrame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    this.easyNeuronsProject = new EasyNeuronsProject();

    MouseListener ml = new MouseAdapter() {
      @Override
      public void mouseClicked(MouseEvent e) {
        int selRow = projectTree.getRowForLocation(e.getX(), e.getY());
        TreePath selPath = projectTree.getPathForLocation(e.getX(), e
            .getY());
        if (selRow != -1) {
          if (e.getClickCount() == 2) {
            treeNodeDoubleClick(selRow, selPath);
          }
        }
      }

    };

    projectTree.addMouseListener(ml);

    DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
                // renderer.setOpenIcon();
                // renderer.setClosedIcon();
    renderer.setLeafIcon(null);
    projectTree.setCellRenderer(renderer);

    this.updateProjectTree();

    desktopPanel.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
                this.myInstance = this;
                projectManager = new ProjectManager(easyNeuronsProject);

// DragNDrop - start
                //DnD Listeneri - dodavanje
                 projectTree.setDragEnabled(false);
                //JTree myTree = getProjectTree();
                 this.dragSource = DragSource.getDefaultDragSource();

                 this.dgListener = new DGListener();
                 this.dsListener = new DSListener();
                 this.tsListener = new TSListener();

                // component, action, listener
                this.dragSource.createDefaultDragGestureRecognizer(
                     projectTree,
                     this.dragAction,
                      this.dgListener);


                projectTree.addTreeSelectionListener(tsListener);
// DragNDrop - end

  }

  @SuppressWarnings("unchecked")
  // <editor-fold defaultstate="collapsed"
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        mainPanel = new javax.swing.JPanel();
        jToolBar1 = new javax.swing.JToolBar();
        openButton = new javax.swing.JButton();
        saveButton = new javax.swing.JButton();
        newTrainingSetButton = new javax.swing.JButton();
        jSplitPane1 = new javax.swing.JSplitPane();
        projectTreeScrollPane = new javax.swing.JScrollPane();
        projectTree = new javax.swing.JTree();
        jSplitPane2 = new javax.swing.JSplitPane();
        desktopPanel = new javax.swing.JDesktopPane();
        jScrollPane1 = new javax.swing.JScrollPane();
        messageBox = new javax.swing.JTextArea();
        menuBar = new javax.swing.JMenuBar();
        javax.swing.JMenu fileMenu = new javax.swing.JMenu();
        openMenuItem = new javax.swing.JMenuItem();
        saveMenuItem = new javax.swing.JMenuItem();
        saveAsMenuItem = new javax.swing.JMenuItem();
        javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem();
        editMenu = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();
        jMenuItem3 = new javax.swing.JMenuItem();
        jMenuItem4 = new javax.swing.JMenuItem();
        jMenuItem6 = new javax.swing.JMenuItem();
        viewMenu = new javax.swing.JMenu();
        viewBlockMenuItem = new javax.swing.JMenuItem();
        viewGraphMenuItem = new javax.swing.JMenuItem();
        viewRefreshMenuItem = new javax.swing.JMenuItem();
        networksMenu = new javax.swing.JMenu();
        adalineMenuItem = new javax.swing.JMenuItem();
        perceptronMenuItem = new javax.swing.JMenuItem();
        mlpMenuItem = new javax.swing.JMenuItem();
        hopfieldMenuItem = new javax.swing.JMenuItem();
        bamMenuItem = new javax.swing.JMenuItem();
        kohonenMenuItem = new javax.swing.JMenuItem();
        supervisedHebbianMenuItem = new javax.swing.JMenuItem();
        unsupervisedHebbianMenuItem = new javax.swing.JMenuItem();
        maxnetMenuItem = new javax.swing.JMenuItem();
        competitiveMenuItem = new javax.swing.JMenuItem();
        rbfMenuItem = new javax.swing.JMenuItem();
        instarMenuItem = new javax.swing.JMenuItem();
        outstarMenuItem = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JSeparator();
        trainingMenu = new javax.swing.JMenu();
        trainingSetWizardMenuItem = new javax.swing.JMenuItem();
        trainMenuItem = new javax.swing.JMenuItem();
        toolsMenu = new javax.swing.JMenu();
        imageRecognitionMenuItem = new javax.swing.JMenuItem();
        handwritingRecognitionMenuItem = new javax.swing.JMenuItem();
        textRecognitionMenuItem = new javax.swing.JMenuItem();
        samplesMenu = new javax.swing.JMenu();
        sampleBasicNeuron = new javax.swing.JMenuItem();
        sampleKohonenMenuItem = new javax.swing.JMenuItem();
        sampleNFRMenuItem = new javax.swing.JMenuItem();
        sampleRecommenderMenuItem = new javax.swing.JMenuItem();
        samplePerceptronMenuItem = new javax.swing.JMenuItem();
        sampleMLPerceptronMenuItem = new javax.swing.JMenuItem();
        javax.swing.JMenu helpMenu = new javax.swing.JMenu();
        jMenuItem7 = new javax.swing.JMenuItem();
        javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem();
        statusPanel = new javax.swing.JPanel();
        javax.swing.JSeparator statusPanelSeparator = new javax.swing.JSeparator();
        statusMessageLabel = new javax.swing.JLabel();
        statusAnimationLabel = new javax.swing.JLabel();
        progressBar = new javax.swing.JProgressBar();
        treePopupMenu = new javax.swing.JPopupMenu();
        renameMenuItem = new javax.swing.JMenuItem();
        removeMenuItem = new javax.swing.JMenuItem();

        mainPanel.setName("mainPanel"); // NOI18N
        mainPanel.setPreferredSize(new java.awt.Dimension(900, 600));
        mainPanel.setLayout(new java.awt.BorderLayout(2, 2));

        jToolBar1.setRollover(true);
        jToolBar1.setName("jToolBar1"); // NOI18N
        jToolBar1.setPreferredSize(new java.awt.Dimension(154, 33));

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(org.neuroph.easyneurons.EasyNeuronsApplication.class).getContext().getActionMap(EasyNeuronsApplicationView.class, this);
        openButton.setAction(actionMap.get("showOpenDialog")); // NOI18N
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(org.neuroph.easyneurons.EasyNeuronsApplication.class).getContext().getResourceMap(EasyNeuronsApplicationView.class);
        openButton.setIcon(resourceMap.getIcon("openButton.icon")); // NOI18N
        openButton.setText(resourceMap.getString("openButton.text")); // NOI18N
        openButton.setToolTipText(resourceMap.getString("openButton.toolTipText")); // NOI18N
        openButton.setFocusable(false);
        openButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        openButton.setName("openButton"); // NOI18N
        openButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(openButton);

        saveButton.setAction(actionMap.get("showSaveDialog")); // NOI18N
        saveButton.setIcon(resourceMap.getIcon("saveButton.icon")); // NOI18N
        saveButton.setText(resourceMap.getString("saveButton.text")); // NOI18N
        saveButton.setToolTipText(resourceMap.getString("saveButton.toolTipText")); // NOI18N
        saveButton.setFocusable(false);
        saveButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        saveButton.setName("saveButton"); // NOI18N
        saveButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(saveButton);

        newTrainingSetButton.setAction(actionMap.get("showTrainingSetWizard")); // NOI18N
        newTrainingSetButton.setIcon(resourceMap.getIcon("newTrainingSetButton.icon")); // NOI18N
        newTrainingSetButton.setText(resourceMap.getString("newTrainingSetButton.text")); // NOI18N
        newTrainingSetButton.setToolTipText(resourceMap.getString("newTrainingSetButton.toolTipText")); // NOI18N
        newTrainingSetButton.setFocusable(false);
        newTrainingSetButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        newTrainingSetButton.setName("newTrainingSetButton"); // NOI18N
        newTrainingSetButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(newTrainingSetButton);

        mainPanel.add(jToolBar1, java.awt.BorderLayout.PAGE_START);

        jSplitPane1.setMaximumSize(null);
        jSplitPane1.setName("jSplitPane1"); // NOI18N

        projectTreeScrollPane.setAlignmentX(1.0F);
        projectTreeScrollPane.setAlignmentY(1.0F);
        projectTreeScrollPane.setName("projectTreeScrollPane"); // NOI18N

        projectTree.setAutoscrolls(true);
        projectTree.setComponentPopupMenu(treePopupMenu);
        projectTree.setDragEnabled(true);
        projectTree.setMaximumSize(new java.awt.Dimension(100, 64));
        projectTree.setName("projectTree"); // NOI18N
        projectTree.setPreferredSize(new java.awt.Dimension(150, 100));
        projectTree.setRowHeight(22);
        projectTreeScrollPane.setViewportView(projectTree);

        jSplitPane1.setLeftComponent(projectTreeScrollPane);

        jSplitPane2.setDividerLocation(590);
        jSplitPane2.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
        jSplitPane2.setAutoscrolls(true);
        jSplitPane2.setContinuousLayout(true);
        jSplitPane2.setMaximumSize(null);
        jSplitPane2.setName("jSplitPane2"); // NOI18N

        desktopPanel.setName("desktopPanel"); // NOI18N
        jSplitPane2.setLeftComponent(desktopPanel);

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        messageBox.setColumns(20);
        messageBox.setEditable(false);
        messageBox.setFont(resourceMap.getFont("messageBox.font")); // NOI18N
        messageBox.setRows(8);
        messageBox.setName("messageBox"); // NOI18N
        jScrollPane1.setViewportView(messageBox);

        jSplitPane2.setRightComponent(jScrollPane1);

        jSplitPane1.setRightComponent(jSplitPane2);

        mainPanel.add(jSplitPane1, java.awt.BorderLayout.CENTER);

        menuBar.setName("menuBar"); // NOI18N

        fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N
        fileMenu.setName("fileMenu"); // NOI18N

        openMenuItem.setAction(actionMap.get("showOpenDialog")); // NOI18N
        openMenuItem.setToolTipText(resourceMap.getString("openMenuItem.toolTipText")); // NOI18N
        openMenuItem.setName("openMenuItem"); // NOI18N
        fileMenu.add(openMenuItem);

        saveMenuItem.setAction(actionMap.get("showSaveDialog")); // NOI18N
        saveMenuItem.setText(resourceMap.getString("saveMenuItem.text")); // NOI18N
        saveMenuItem.setToolTipText(resourceMap.getString("saveMenuItem.toolTipText")); // NOI18N
        saveMenuItem.setName("saveMenuItem"); // NOI18N
        fileMenu.add(saveMenuItem);

        saveAsMenuItem.setAction(actionMap.get("showSaveAsDialog")); // NOI18N
        saveAsMenuItem.setText(resourceMap.getString("saveAsMenuItem.text")); // NOI18N
        saveAsMenuItem.setToolTipText(resourceMap.getString("saveAsMenuItem.toolTipText")); // NOI18N
        saveAsMenuItem.setName("saveAsMenuItem"); // NOI18N
        fileMenu.add(saveAsMenuItem);

        exitMenuItem.setAction(actionMap.get("quit")); // NOI18N
        exitMenuItem.setName("exitMenuItem"); // NOI18N
        fileMenu.add(exitMenuItem);

        menuBar.add(fileMenu);

        editMenu.setText(resourceMap.getString("editMenu.text")); // NOI18N
        editMenu.setName("editMenu"); // NOI18N

        jMenuItem1.setText(resourceMap.getString("jMenuItem1.text")); // NOI18N
        jMenuItem1.setEnabled(false);
        jMenuItem1.setName("jMenuItem1"); // NOI18N
        editMenu.add(jMenuItem1);

        jMenuItem2.setText(resourceMap.getString("jMenuItem2.text")); // NOI18N
        jMenuItem2.setEnabled(false);
        jMenuItem2.setName("jMenuItem2"); // NOI18N
        editMenu.add(jMenuItem2);

        jMenuItem3.setText(resourceMap.getString("jMenuItem3.text")); // NOI18N
        jMenuItem3.setEnabled(false);
        jMenuItem3.setName("jMenuItem3"); // NOI18N
        editMenu.add(jMenuItem3);

        jMenuItem4.setText(resourceMap.getString("jMenuItem4.text")); // NOI18N
        jMenuItem4.setEnabled(false);
        jMenuItem4.setName("jMenuItem4"); // NOI18N
        editMenu.add(jMenuItem4);

        jMenuItem6.setText(resourceMap.getString("jMenuItem6.text")); // NOI18N
        jMenuItem6.setEnabled(false);
        jMenuItem6.setName("jMenuItem6"); // NOI18N
        editMenu.add(jMenuItem6);

        menuBar.add(editMenu);

        viewMenu.setText(resourceMap.getString("viewMenu.text")); // NOI18N
        viewMenu.setName("viewMenu"); // NOI18N

        viewBlockMenuItem.setAction(actionMap.get("switchToBlockView")); // NOI18N
        viewBlockMenuItem.setText(resourceMap.getString("viewBlockMenuItem.text")); // NOI18N
        viewBlockMenuItem.setName("viewBlockMenuItem"); // NOI18N
        viewMenu.add(viewBlockMenuItem);

        viewGraphMenuItem.setAction(actionMap.get("switchToGraphView")); // NOI18N
        viewGraphMenuItem.setText(resourceMap.getString("viewGraphMenuItem.text")); // NOI18N
        viewGraphMenuItem.setName("viewGraphMenuItem"); // NOI18N
        viewMenu.add(viewGraphMenuItem);

        viewRefreshMenuItem.setAction(actionMap.get("refreshView")); // NOI18N
        viewRefreshMenuItem.setText(resourceMap.getString("viewRefreshMenuItem.text")); // NOI18N
        viewRefreshMenuItem.setName("viewRefreshMenuItem"); // NOI18N
        viewMenu.add(viewRefreshMenuItem);

        menuBar.add(viewMenu);

        networksMenu.setText(resourceMap.getString("networksMenu.text")); // NOI18N
        networksMenu.setName("networksMenu"); // NOI18N

        adalineMenuItem.setAction(actionMap.get("showAdalineWizard")); // NOI18N
        adalineMenuItem.setText(resourceMap.getString("adalineMenuItem.text")); // NOI18N
        adalineMenuItem.setToolTipText(resourceMap.getString("adalineMenuItem.toolTipText")); // NOI18N
        adalineMenuItem.setName("adalineMenuItem"); // NOI18N
        networksMenu.add(adalineMenuItem);

        perceptronMenuItem.setAction(actionMap.get("showPerceptronWizard")); // NOI18N
        perceptronMenuItem.setText(resourceMap.getString("perceptronMenuItem.text")); // NOI18N
        perceptronMenuItem.setToolTipText(resourceMap.getString("perceptronMenuItem.toolTipText")); // NOI18N
        perceptronMenuItem.setName("perceptronMenuItem"); // NOI18N
        networksMenu.add(perceptronMenuItem);

        mlpMenuItem.setAction(actionMap.get("showMLPerceptronWizard")); // NOI18N
        mlpMenuItem.setText(resourceMap.getString("mlpMenuItem.text")); // NOI18N
        mlpMenuItem.setToolTipText(resourceMap.getString("mlpMenuItem.toolTipText")); // NOI18N
        mlpMenuItem.setName("mlpMenuItem"); // NOI18N
        networksMenu.add(mlpMenuItem);

        hopfieldMenuItem.setAction(actionMap.get("showHopfieldWizard")); // NOI18N
        hopfieldMenuItem.setText(resourceMap.getString("hopfieldMenuItem.text")); // NOI18N
        hopfieldMenuItem.setToolTipText(resourceMap.getString("hopfieldMenuItem.toolTipText")); // NOI18N
        hopfieldMenuItem.setName("hopfieldMenuItem"); // NOI18N
        networksMenu.add(hopfieldMenuItem);

        bamMenuItem.setAction(actionMap.get("showBAMWizard")); // NOI18N
        bamMenuItem.setText(resourceMap.getString("bamMenuItem.text")); // NOI18N
        bamMenuItem.setName("bamMenuItem"); // NOI18N
        networksMenu.add(bamMenuItem);

        kohonenMenuItem.setAction(actionMap.get("showKohonenWizard")); // NOI18N
        kohonenMenuItem.setToolTipText(resourceMap.getString("kohonenMenuItem.toolTipText")); // NOI18N
        kohonenMenuItem.setName("kohonenMenuItem"); // NOI18N
        networksMenu.add(kohonenMenuItem);

        supervisedHebbianMenuItem.setAction(actionMap.get("showHebbianWizard")); // NOI18N
        supervisedHebbianMenuItem.setText(resourceMap.getString("supervisedHebbianMenuItem.text")); // NOI18N
        supervisedHebbianMenuItem.setToolTipText(resourceMap.getString("supervisedHebbianMenuItem.toolTipText")); // NOI18N
        supervisedHebbianMenuItem.setName("supervisedHebbianMenuItem"); // NOI18N
        networksMenu.add(supervisedHebbianMenuItem);

        unsupervisedHebbianMenuItem.setAction(actionMap.get("showUnsupervisedHebbianWizard")); // NOI18N
        unsupervisedHebbianMenuItem.setText(resourceMap.getString("unsupervisedHebbianMenuItem.text")); // NOI18N
        unsupervisedHebbianMenuItem.setName("unsupervisedHebbianMenuItem"); // NOI18N
        networksMenu.add(unsupervisedHebbianMenuItem);

        maxnetMenuItem.setAction(actionMap.get("showMaxnetWizard")); // NOI18N
        maxnetMenuItem.setText(resourceMap.getString("maxnetMenuItem.text")); // NOI18N
        maxnetMenuItem.setName("maxnetMenuItem"); // NOI18N
        networksMenu.add(maxnetMenuItem);

        competitiveMenuItem.setAction(actionMap.get("showCompetitiveNetworkWizard")); // NOI18N
        competitiveMenuItem.setText(resourceMap.getString("competitiveMenuItem.text")); // NOI18N
        competitiveMenuItem.setName("competitiveMenuItem"); // NOI18N
        networksMenu.add(competitiveMenuItem);

        rbfMenuItem.setAction(actionMap.get("showRbfWizard")); // NOI18N
        rbfMenuItem.setName("rbfMenuItem"); // NOI18N
        networksMenu.add(rbfMenuItem);

        instarMenuItem.setAction(actionMap.get("showInstarWizard")); // NOI18N
        instarMenuItem.setText(resourceMap.getString("instarMenuItem.text")); // NOI18N
        instarMenuItem.setName("instarMenuItem"); // NOI18N
        networksMenu.add(instarMenuItem);

        outstarMenuItem.setAction(actionMap.get("showOutstarWizard")); // NOI18N
        outstarMenuItem.setText(resourceMap.getString("outstarMenuItem.text")); // NOI18N
        outstarMenuItem.setName("outstarMenuItem"); // NOI18N
        networksMenu.add(outstarMenuItem);

        jSeparator1.setName("jSeparator1"); // NOI18N
        networksMenu.add(jSeparator1);

        menuBar.add(networksMenu);

        trainingMenu.setText(resourceMap.getString("trainingMenu.text")); // NOI18N
        trainingMenu.setName("trainingMenu"); // NOI18N

        trainingSetWizardMenuItem.setAction(actionMap.get("showTrainingSetWizard")); // NOI18N
        trainingSetWizardMenuItem.setText(resourceMap.getString("trainingSetWizardMenuItem.text")); // NOI18N
        trainingSetWizardMenuItem.setToolTipText(resourceMap.getString("trainingSetWizardMenuItem.toolTipText")); // NOI18N
        trainingSetWizardMenuItem.setName("trainingSetWizardMenuItem"); // NOI18N
        trainingMenu.add(trainingSetWizardMenuItem);

        trainMenuItem.setAction(actionMap.get("trainNetwork")); // NOI18N
        trainMenuItem.setText(resourceMap.getString("trainMenuItem.text")); // NOI18N
        trainMenuItem.setToolTipText(resourceMap.getString("trainMenuItem.toolTipText")); // NOI18N
        trainMenuItem.setName("trainMenuItem"); // NOI18N
        trainingMenu.add(trainMenuItem);

        menuBar.add(trainingMenu);

        toolsMenu.setText(resourceMap.getString("toolsMenu.text")); // NOI18N
        toolsMenu.setName("toolsMenu"); // NOI18N

        imageRecognitionMenuItem.setAction(actionMap.get("imageRecognitionSample")); // NOI18N
        imageRecognitionMenuItem.setText(resourceMap.getString("imageRecognitionMenuItem.text")); // NOI18N
        imageRecognitionMenuItem.setName("imageRecognitionMenuItem"); // NOI18N
        toolsMenu.add(imageRecognitionMenuItem);

        handwritingRecognitionMenuItem.setAction(actionMap.get("handwritingRecogn")); // NOI18N
        handwritingRecognitionMenuItem.setText(resourceMap.getString("handwritingRecognitionMenuItem.text")); // NOI18N
        handwritingRecognitionMenuItem.setName("handwritingRecognitionMenuItem"); // NOI18N
        toolsMenu.add(handwritingRecognitionMenuItem);

        textRecognitionMenuItem.setAction(actionMap.get("characterRecognitionTool")); // NOI18N
        textRecognitionMenuItem.setText(resourceMap.getString("textRecognitionMenuItem.text")); // NOI18N
        textRecognitionMenuItem.setName("textRecognitionMenuItem"); // NOI18N
        toolsMenu.add(textRecognitionMenuItem);

        menuBar.add(toolsMenu);

        samplesMenu.setText(resourceMap.getString("samplesMenu.text")); // NOI18N
        samplesMenu.setName("samplesMenu"); // NOI18N

        sampleBasicNeuron.setAction(actionMap.get("showBasicNeuronSample")); // NOI18N
        sampleBasicNeuron.setText(resourceMap.getString("sampleBasicNeuron.text")); // NOI18N
        sampleBasicNeuron.setName("sampleBasicNeuron"); // NOI18N
        samplesMenu.add(sampleBasicNeuron);

        sampleKohonenMenuItem.setAction(actionMap.get("kohonenSample")); // NOI18N
        sampleKohonenMenuItem.setText(resourceMap.getString("sampleKohonenMenuItem.text")); // NOI18N
        sampleKohonenMenuItem.setToolTipText(resourceMap.getString("sampleKohonenMenuItem.toolTipText")); // NOI18N
        sampleKohonenMenuItem.setName("sampleKohonenMenuItem"); // NOI18N
        samplesMenu.add(sampleKohonenMenuItem);

        sampleNFRMenuItem.setAction(actionMap.get("nfrSample")); // NOI18N
        sampleNFRMenuItem.setText(resourceMap.getString("sampleNFRMenuItem.text")); // NOI18N
        sampleNFRMenuItem.setToolTipText(resourceMap.getString("sampleNFRMenuItem.toolTipText")); // NOI18N
        sampleNFRMenuItem.setName("sampleNFRMenuItem"); // NOI18N
        samplesMenu.add(sampleNFRMenuItem);

        sampleRecommenderMenuItem.setAction(actionMap.get("recommenderSample")); // NOI18N
        sampleRecommenderMenuItem.setName("sampleRecommenderMenuItem"); // NOI18N
        samplesMenu.add(sampleRecommenderMenuItem);

        samplePerceptronMenuItem.setAction(actionMap.get("showPerceptronSample")); // NOI18N
        samplePerceptronMenuItem.setText(resourceMap.getString("samplePerceptronMenuItem.text")); // NOI18N
        samplePerceptronMenuItem.setName("samplePerceptronMenuItem"); // NOI18N
        samplesMenu.add(samplePerceptronMenuItem);

        sampleMLPerceptronMenuItem.setAction(actionMap.get("showMultiLayerPerceptronSample")); // NOI18N
        sampleMLPerceptronMenuItem.setText(resourceMap.getString("sampleMLPerceptronMenuItem.text")); // NOI18N
        sampleMLPerceptronMenuItem.setName("sampleMLPerceptronMenuItem"); // NOI18N
        samplesMenu.add(sampleMLPerceptronMenuItem);

        menuBar.add(samplesMenu);

        helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N
        helpMenu.setName("helpMenu"); // NOI18N

        jMenuItem7.setText(resourceMap.getString("jMenuItem7.text")); // NOI18N
        jMenuItem7.setName("jMenuItem7"); // NOI18N
        jMenuItem7.addActionListener((showHelpContents()));
        helpMenu.add(jMenuItem7);

        aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N
        aboutMenuItem.setToolTipText(resourceMap.getString("aboutMenuItem.toolTipText")); // NOI18N
        aboutMenuItem.setName("aboutMenuItem"); // NOI18N
        helpMenu.add(aboutMenuItem);

        menuBar.add(helpMenu);

        statusPanel.setName("statusPanel"); // NOI18N

        statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N

        statusMessageLabel.setName("statusMessageLabel"); // NOI18N

        statusAnimationLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N

        progressBar.setName("progressBar"); // NOI18N

        javax.swing.GroupLayout statusPanelLayout = new javax.swing.GroupLayout(statusPanel);
        statusPanel.setLayout(statusPanelLayout);
        statusPanelLayout.setHorizontalGroup(
            statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(statusPanelSeparator, javax.swing.GroupLayout.DEFAULT_SIZE, 622, Short.MAX_VALUE)
            .addGroup(statusPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(statusMessageLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 452, Short.MAX_VALUE)
                .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(statusAnimationLabel)
                .addContainerGap())
        );
        statusPanelLayout.setVerticalGroup(
            statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(statusPanelLayout.createSequentialGroup()
                .addComponent(statusPanelSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(statusMessageLabel)
                    .addComponent(statusAnimationLabel)
                    .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(3, 3, 3))
        );

        treePopupMenu.setName("treePopupMenu"); // NOI18N

        renameMenuItem.setAction(actionMap.get("renameTreeNode")); // NOI18N
        renameMenuItem.setName("renameMenuItem"); // NOI18N
        treePopupMenu.add(renameMenuItem);

        removeMenuItem.setAction(actionMap.get("removeTreeNode")); // NOI18N
        removeMenuItem.setText(resourceMap.getString("removeMenuItem.text")); // NOI18N
        removeMenuItem.setName("removeMenuItem"); // NOI18N
        treePopupMenu.add(removeMenuItem);

        setComponent(mainPanel);
        setMenuBar(menuBar);
        setStatusBar(statusPanel);
        setToolBar(jToolBar1);
    }// </editor-fold>//GEN-END:initComponents

//  public void addNewNetworkToProject(NeuralNetwork nnet) {
//    int count = easyNeuronsProject.getNeuralNetworks().size() + 1;
//        LabelsPlugin labels = (LabelsPlugin)nnet.getPlugin("LabelsPlugin");
//        if ((labels.getLabel(nnet) == null) || (labels.getLabel(nnet).equals("")))
//            labels.setLabel(nnet, "NewNetwork" + count);
//
//    this.addNetworkToProject(nnet);
//  }
//
//  private void addNetworkToProject(NeuralNetwork nnet) {
//    easyNeuronsProject.addNeuralNetwork(nnet);
//    updateProjectTree();
//    this.openNetworkViewFrame(nnet);
//  }
//
  public void updateProjectTree() {
    projectTree.setModel(easyNeuronsProject.getTreeModel());

    // fully expand tree
    int row = 0;
    while (row < projectTree.getRowCount()) {
      projectTree.expandRow(row);
      row++;
    }
  }

  public void updateFrameTitles() {
    JInternalFrame frames[] = desktopPanel.getAllFrames();
    for (int i = 0; i < frames.length; i++) {
      ((NeuralNetworkViewFrame) frames[i]).updateTitle();
    }
  }

  private void treeNodeDoubleClick(int selRow, TreePath selPath) {

    Object[] nodes = selPath.getPath();
    Object selectedNode = ((DefaultMutableTreeNode) nodes[nodes.length - 1])
        .getUserObject();

    if (selectedNode instanceof NeuralNetwork) {
      NeuralNetwork nnet = (NeuralNetwork) selectedNode;
      this.openNetworkViewFrame(nnet);

    } else if (selectedNode instanceof TrainingSet) {
      TrainingSet trainingSet = (TrainingSet) selectedNode;
      this.openTrainingSetEditFrame(trainingSet);
    }

  }

  public void openNetworkViewFrame(NeuralNetwork nnet) {
    NeuralNetworkViewFrame networkViewFrame = new NeuralNetworkViewFrame(
        nnet, easyNeuronsProject.getTrainingSets());
                               
    networkViewFrame.addInternalFrameListener(new WindowObserver(networkViewFrame) {
      @Override
      public void internalFrameActivated(InternalFrameEvent e) {
        netActiveWindow = nn;
        traActiveWindow = null;
      }
    });
  
    networkViewFrame.setVisible(true);

    desktopPanel.add(networkViewFrame);
    try {
      networkViewFrame.setSelected(true);
      networkViewFrame.setMaximum(true);
    } catch (java.beans.PropertyVetoException e) {
    }
  }



  private void openTrainingSetEditFrame(TrainingSet trainingSet) {
    TrainingSetEditFrame trainingSetEditFrame = new TrainingSetEditFrame(trainingSet);
    trainingSetEditFrame.setVisible(true);

    trainingSetEditFrame.addInternalFrameListener(new WindowObserver(
        trainingSet) {
      @Override
      public void internalFrameActivated(InternalFrameEvent e) {
        traActiveWindow = ts;
        netActiveWindow = null;
      }
    });

    desktopPanel.add(trainingSetEditFrame);
    try {
      trainingSetEditFrame.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {
    }
  }

        public static EasyNeuronsApplicationView getInstance() {
            return myInstance;
        }

  public void openNeuronPropertiesFrame(Neuron neuron) {
    NeuronPropertiesFrame neuronPropertiesFrame = new NeuronPropertiesFrame(neuron);

    neuronPropertiesFrame.setVisible(true);

    desktopPanel.add(neuronPropertiesFrame);
    try {
      neuronPropertiesFrame.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {
    }
  }

  private void showWizard(JDialog wizardDialog) {
    wizardDialog.setLocationRelativeTo(mainFrame);
    EasyNeuronsApplication.getApplication().show(wizardDialog);
  }

  @Action
  public void showOpenDialog() {
    fileChooser.resetChoosableFileFilters();
    fileChooser.addChoosableFileFilter(new FileFilterAdapter.NeuralNetworkBinaryFileFilter());
    fileChooser.addChoosableFileFilter(new FileFilterAdapter.NeuralNetworkXmlFileFilter());
    fileChooser.addChoosableFileFilter(new FileFilterAdapter.TrainingSetBinaryFileFilter());
    fileChooser.addChoosableFileFilter(new FileFilterAdapter.TrainingSetXmlFileFilter());
    int option = fileChooser.showOpenDialog(mainFrame);

    if (option == JFileChooser.CANCEL_OPTION) {
    }
    if (option == JFileChooser.APPROVE_OPTION) {
      File selectedFile = fileChooser.getSelectedFile();
      String fileExtension = FileUtils.getExtension(selectedFile);

      if (fileExtension != null) {
        if (FileUtils.isNeuralNetwork(fileExtension)) {
          String location = selectedFile.getPath();
          String fileName = selectedFile.getName();
          FileIO io = new FileIO();
          NeuralNetwork nnet = io.loadNeuralNetwork(location);

          ProjectManager.getInstance().addNetworkToProject(nnet);
                    
          fileObserver.put(location, fileName);
        }

        if (FileUtils.isTrainingSet(fileExtension)) {
          String location = selectedFile.getPath();
          String fileName = selectedFile.getName();
          fileObserver.put(location, fileName);
          FileIO io = new FileIO();
          TrainingSet trainingSet = io.loadTrainingSet(location);

          ProjectManager.getInstance().updateTrainingSets(trainingSet);
          this.openTrainingSetEditFrame(trainingSet);

          fileObserver.put(location, fileName);
        }
      } else {
      }
    } else {
    }
  }

  @Action
  public void showSaveDialog() {

    if (netActiveWindow != null) { // prvo proveravamo da li je aktivan
                    // neural net prozor

      if (fileObserver.containsKey(netActiveWindow.getFilePath())) // ako jeste da li ga
                                     // ima u mapi
      {
        FileIO io = new FileIO();
        io.saveNeuralNetwork(netActiveWindow.getNeuralNetwork(), netActiveWindow.getNeuralNetwork().toString(), netActiveWindow.getFilePath());
      } else { // otvaranje prozora za Neural net posto ga nema u mapi
        fileChooser.resetChoosableFileFilters();
        fileChooser.addChoosableFileFilter(new FileFilterAdapter.NeuralNetworkBinaryFileFilter());
        fileChooser.addChoosableFileFilter(new FileFilterAdapter.NeuralNetworkXmlFileFilter());
        int option = fileChooser.showSaveDialog(mainFrame);
        if (option == JFileChooser.APPROVE_OPTION) {
          int count = fileChooser.getCurrentDirectory().toString().length();
          String name = fileChooser.getSelectedFile().toString().substring(count + 1);
          String location = fileChooser.getSelectedFile().toString()+fileChooser.getFileFilter().getDescription();
          FileIO io = new FileIO();
          io.saveNeuralNetwork(netActiveWindow.getNeuralNetwork(), name, location);
          fileObserver.put(location, name);
                                        showMessage("Neural network saved");
        }
        updateProjectTree();
        updateFrameTitles();
      }
    }

    if (traActiveWindow != null) { // proveravamo da li je training prozor
                    // otvoren
      if (fileObserver.containsKey(traActiveWindow.getFilePath())) // ako
                                      // jeste
                                      // da
                                      // li
                                      // je
                                      // u
                                      // mapi
                                      // promeni
      {
        FileIO io = new FileIO();
        io.saveTrainingSet(traActiveWindow, traActiveWindow.getLabel(),
            traActiveWindow.getFilePath());
      } else { // otvaranje prozora za Training posto ga nema u mapi
        fileChooser.resetChoosableFileFilters();
        fileChooser.addChoosableFileFilter(new FileFilterAdapter.TrainingSetBinaryFileFilter());
        fileChooser.addChoosableFileFilter(new FileFilterAdapter.TrainingSetXmlFileFilter());
        int option = fileChooser.showSaveDialog(mainFrame);

        if (option == JFileChooser.APPROVE_OPTION) {
          int count = fileChooser.getCurrentDirectory().toString().length();
          String name = fileChooser.getSelectedFile().toString().substring(count + 1);
          String location = fileChooser.getSelectedFile().toString();
          FileIO io = new FileIO();
          io.saveTrainingSet(traActiveWindow, name, location);
          fileObserver.put(location, name);
                                        showMessage("Training set saved");
        }
        updateProjectTree();
        updateFrameTitles();
      }
    }
  }

  @Action
  public void showSaveAsDialog() {
    if (netActiveWindow != null) {
      fileChooser.resetChoosableFileFilters();
      fileChooser.addChoosableFileFilter(new FileFilterAdapter.NeuralNetworkBinaryFileFilter());
      fileChooser.addChoosableFileFilter(new FileFilterAdapter.NeuralNetworkXmlFileFilter());
      int option = fileChooser.showSaveDialog(mainFrame);
      if (option == JFileChooser.APPROVE_OPTION) {
        int count = fileChooser.getCurrentDirectory().toString().length();
        String name = fileChooser.getSelectedFile().toString().substring(count + 1);
        String location = fileChooser.getSelectedFile().toString()+fileChooser.getFileFilter().getDescription();
        FileIO io = new FileIO();
        io.saveNeuralNetwork(netActiveWindow.getNeuralNetwork(), name, location);
        fileObserver.put(location, name);
                                showMessage("Neural network saved");
      }
      updateProjectTree();
      updateFrameTitles();
    }
    if (traActiveWindow != null) {
      fileChooser.resetChoosableFileFilters();
      fileChooser.addChoosableFileFilter(new FileFilterAdapter.TrainingSetBinaryFileFilter());
      fileChooser.addChoosableFileFilter(new FileFilterAdapter.TrainingSetXmlFileFilter());
      int option = fileChooser.showSaveDialog(mainFrame);
      if (option == JFileChooser.APPROVE_OPTION) {
        int count = fileChooser.getCurrentDirectory().toString().length();
        String name = fileChooser.getSelectedFile().toString().substring(count + 1);
        String location = fileChooser.getSelectedFile().toString();
        FileIO io = new FileIO();
        io.saveTrainingSet(traActiveWindow, name, location);
        fileObserver.put(location, name);
                                showMessage("Training set saved");
      }
      updateProjectTree();
      updateFrameTitles();
    }
  }

  @Action
  public void showAdalineWizard() {
    AdalineWizard wizard = new AdalineWizard(mainFrame, true);
    showWizard(wizard);
  }

  @Action
  public void showPerceptronWizard() {
    PerceptronWizard wizard = new PerceptronWizard(mainFrame, true);
    showWizard(wizard);
  }

  @Action
  public void showMLPerceptronWizard() {
    MultiLayerPerceptronWizard wizard = new MultiLayerPerceptronWizard(mainFrame, true);
    showWizard(wizard);
  }

  @Action
  public void showHopfieldWizard() {
    HopfieldWizard wizard = new HopfieldWizard(mainFrame, true);
    showWizard(wizard);
  }
  
  @Action
  public void showBAMWizard() {
    BamWizard wizard = new BamWizard(mainFrame, true);
    showWizard(wizard);    
  }  

  @Action
  public void showKohonenWizard() {
    KohonenWizard wizard = new KohonenWizard(mainFrame, true);
    showWizard(wizard);
  }

  @Action
  public void showHebbianWizard() {
    SupervisedHebbianWizard wizard = new SupervisedHebbianWizard(mainFrame, true);
    showWizard(wizard);
  }
  
  @Action
  public void showUnsupervisedHebbianWizard() {
    UnsupervisedHebbianWizard wizard = new UnsupervisedHebbianWizard(mainFrame, true);
    showWizard(wizard);    
  }  

  @Action
  public void showCompetitiveNetworkWizard() {
    CompetitiveNetworkWizard wizard = new CompetitiveNetworkWizard(mainFrame, true);
    showWizard(wizard);
  }

  @Action
  public void showMaxnetWizard() {
    MaxnetWizard wizard = new MaxnetWizard(mainFrame, true);
    showWizard(wizard);
  }
  
  @Action
  public void showInstarWizard() {
    InstarWizard wizard = new InstarWizard(mainFrame, true);
    showWizard(wizard);    
  }  
  
  @Action
  public void showOutstarWizard() {
    OutstarWizard wizard = new OutstarWizard(mainFrame, true);
    showWizard(wizard);    
  }  

  @Action
  public void showRbfWizard() {
    RbfWizard wizard = new RbfWizard(mainFrame, true);
    showWizard(wizard);
  }

  @Action
  public void showTrainingSetWizard() {
    TrainingSetWizard wizard = new TrainingSetWizard(mainFrame, true);
    showWizard(wizard);
  }

  public void newAdalineNetwork(int inputNeurons) {
    Adaline nnet = NeuralNetworkFactory.createAdaline(inputNeurons);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
  }

  public void newPerceptronNetwork(int inputNeurons, int outputNeurons,
      TransferFunctionType transferFunction, Class learningRule) {
    Perceptron nnet = NeuralNetworkFactory.createPerceptron(inputNeurons,
        outputNeurons, transferFunction, learningRule);
      ProjectManager.getInstance().addNewNetworkToProject(nnet);
                showMessage("Created new Perceptron Network");
  }
  
  public void newInstarNetwork(int inputNeuronsNum) {
    Instar nnet = NeuralNetworkFactory.createInstar(inputNeuronsNum);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
                showMessage("Created new Instar Network");
  }  
  
  public void newOutstarNetwork(int outputNeuronsNum) {
    Outstar nnet = NeuralNetworkFactory.createOutstar(outputNeuronsNum);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
                showMessage("Created new Outstar Network");
  }    

  public void newMaxnetNetwork(int neuronsNum) {
    MaxNet nnet = NeuralNetworkFactory.createMaxNet(neuronsNum);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
                showMessage("Created new Maxnet Network");
  }

  public void newCompetitiveNetwork(int inputNeuronsNum, int outputNeuronsNum) {
    CompetitiveNetwork nnet = NeuralNetworkFactory
        .createCompetitiveNetwork(inputNeuronsNum, outputNeuronsNum);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
                showMessage("Created new Competitive Network");
  }

  public void newMLPerceptronNetwork(String neuronsNum,
      TransferFunctionType transferFunctionType) {
    MultiLayerPerceptron nnet = NeuralNetworkFactory.createMLPerceptron(
        neuronsNum, transferFunctionType);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
                showMessage("Created new Multi Layer Perceptron Network");
  }

   public void newMLPerceptronNetwork(String neuronsNum,
      TransferFunctionType transferFunctionType, Class learningRule, boolean useBias, boolean connectI2O) {
    MultiLayerPerceptron nnet = NeuralNetworkFactory.createMLPerceptron(
        neuronsNum, transferFunctionType, learningRule, useBias, connectI2O);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
                 showMessage("Created new Multi Layer Perceptron Network");
  }

  public void newHopfieldNetwork(int inputNeurons) {
    Hopfield nnet = NeuralNetworkFactory.createHopfield(inputNeurons);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
                 showMessage("Created new Hopfield Network");
  }

  public void newBamNetwork(int inputNeurons, int outputNeurons) {
    BAM nnet = NeuralNetworkFactory.createBam(inputNeurons, outputNeurons);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
                showMessage("Created new BAM Network");
  }
  
  public void newKohonenNetwork(int inputNeurons, int mapNeurons) {
    Kohonen nnet = NeuralNetworkFactory.createKohonen(inputNeurons,
        mapNeurons);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
                showMessage("Created new Kohonen Network");
  }

  public void newHebbianNetwork(int inputNeurons, int outputNeurons,
      TransferFunctionType transferFunction) {
    SupervisedHebbianNetwork nnet = NeuralNetworkFactory.createSupervisedHebbian(inputNeurons,
        outputNeurons, transferFunction);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
                showMessage("Created new Supervised Hebbian Network");
  }
  
  public void newUnsupervisedHebbianNetwork(int inputNeurons, int outputNeurons,
      TransferFunctionType transferFunction) {
    UnsupervisedHebbianNetwork nnet = NeuralNetworkFactory.createUnsupervisedHebbian(inputNeurons,
        outputNeurons, transferFunction);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
                showMessage("Created new Unsupervised Hopfield Network");
  }  
  
  

  public void newRbfNetwork(int inputNeuronsNum, int rbfNeuronsNum,
      int outputNeuronsNum) {
    RbfNetwork nnet = NeuralNetworkFactory.createRbfNetwork(
        inputNeuronsNum, rbfNeuronsNum, outputNeuronsNum);
    ProjectManager.getInstance().addNewNetworkToProject(nnet);
                showMessage("Created new RBF Network");
  }

  public void showTrainingSetEditFrame(int inputs, int outputs, String type, String label) {

    TrainingSet trainingSet = new TrainingSet(label);
    TrainingSetEditFrame trainingSetEditFrame = new TrainingSetEditFrame(trainingSet, type, inputs, outputs);
    trainingSetEditFrame.setVisible(true);

    desktopPanel.add(trainingSetEditFrame);
    try {
      trainingSetEditFrame.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {
    }
  }

        public SupervisedTrainingMonitorFrame openMonitorFrame(NeuralNetworkTraining trainingController) {
            SupervisedTrainingMonitorFrame monitorFrame = new SupervisedTrainingMonitorFrame(trainingController);

            monitorFrame.setVisible(true);
                desktopPanel.add(monitorFrame);
            try {
               monitorFrame.setSelected(true);
            } catch (java.beans.PropertyVetoException e) {
            }

            return monitorFrame;
            
        }

        public GraphFrame openErrorGraphFrame() {
            // pre otvaranja graph frama proveri da li vec postoji jedan otvoren, je ce u njemu da crta
            JInternalFrame iframes[]  = desktopPanel.getAllFrames();
            for(int i=0; i<iframes.length; i++) {
                if (iframes[i] instanceof GraphFrame) {

                   try {
                    iframes[i].setSelected(true);
                    } catch (java.beans.PropertyVetoException e) {
                    }

                    return (GraphFrame)iframes[i];
                }
            }

            GraphFrame graphFrame = new GraphFrame();

            graphFrame.setVisible(true);
            desktopPanel.add(graphFrame);
            try {
              graphFrame.setSelected(true);
            } catch (java.beans.PropertyVetoException e) {
            }

            return graphFrame;
        }



  @Action
  public void trainNetwork() {
    JInternalFrame selectedFrame = desktopPanel.getSelectedFrame();
    if (selectedFrame != null) {
      if (selectedFrame instanceof NeuralNetworkViewFrame) {
        ((NeuralNetworkViewFrame) selectedFrame).train();
      }
    }
  }

  @Action
  public void removeTreeNode() {
    Object[] nodes = projectTree.getSelectionPath().getPath();
    Object selectedNode = ((DefaultMutableTreeNode) nodes[nodes.length - 1])
        .getUserObject();

    if (selectedNode instanceof NeuralNetwork) {
      NeuralNetwork nnet = (NeuralNetwork) selectedNode;
      easyNeuronsProject.removeNeuralNetwork(nnet);
      this.updateProjectTree();

    } else if (selectedNode instanceof TrainingSet) {
      TrainingSet trainingSet = (TrainingSet) selectedNode;
      easyNeuronsProject.removeTrainingSet(trainingSet);
      this.updateProjectTree();
    }
  }

  @Action
  public void kohonenSample() {
    int sampleSize = 100;
    NeuralNetwork neuralNet = new Kohonen(new Integer(2), new Integer(sampleSize));
  
    ((LabelsPlugin)neuralNet.getPlugin("LabelsPlugin")).setLabel(neuralNet, "Kohonen sample");
    easyNeuronsProject.addNeuralNetwork(neuralNet);

    TrainingSet trainingSet = new TrainingSet();
    trainingSet.setLabel("Sample training set");

    for (int i = 0; i < sampleSize; i++) {
      Vector<Double> trainVect = new Vector<Double>();
      trainVect.add(Math.random());
      trainVect.add(Math.random());
      TrainingElement te = new TrainingElement(trainVect);
      trainingSet.addElement(te);
    }

    easyNeuronsProject.addTrainingSet(trainingSet);

    updateProjectTree();

    NeuralNetworkTraining controller = new NeuralNetworkTraining(neuralNet, trainingSet);

    KohonenSample kohonenVisualizer = new KohonenSample(
        controller);
    neuralNet.getLearningRule().addObserver(kohonenVisualizer);
    neuralNet.addObserver(kohonenVisualizer);

    kohonenVisualizer.setVisible(true);
    desktopPanel.add(kohonenVisualizer);
    try {
      kohonenVisualizer.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {
    }

                showMessage("Created Kohonen Sample");
  }

  @Action
  public void nfrSample() {
    double[][] pointsSets = { { 0, 0, 20, 22 }, // bad
        { 20, 22, 40, 42 }, // good
        { 40, 42, 80, 82 }, // very good
        { 80, 82, 100, 100 } }; // excellent

    double[][] timeSets = { { 15, 15, 20, 25 }, // fast
        { 20, 25, 35, 40 }, // moderate
        { 35, 40, 1000, 1000 } }; // slow

    NeuralNetwork nnet = new NeuroFuzzyPerceptron(pointsSets, timeSets);
    TrainingSet tSet = new TrainingSet();

    Layer setLayer = nnet.getLayerAt(1);

    int outClass = 0;

    for (int i = 0; i <= 3; i++) { // iterate points sets
      Neuron icell = setLayer.getNeuronAt(i);
      Trapezoid tfi = (Trapezoid) icell.getTransferFunction();
      double r1i = tfi.getRightLow();
      double l2i = tfi.getLeftHigh();
      double r2i = tfi.getRightHigh();
      double right_intersection_i = r2i + (r1i - r2i) / 2;

      for (int j = 6; j >= 4; j--) { // iterate speed sets
        Neuron jcell = setLayer.getNeuronAt(j);
        Trapezoid tfj = (Trapezoid) jcell.getTransferFunction();

        double r1j = tfj.getRightLow();
        double l2j = tfj.getLeftHigh();
        double r2j = tfj.getRightHigh();
        double right_intersection_j = r2j + (r1j - r2j) / 2;

        String outputPattern;
        if (outClass <= 3) {
          outputPattern = "1 0 0 0";
        } else if ((outClass >= 4) && (outClass <= 6)) {
          outputPattern = "0 1 0 0";
        } else if ((outClass >= 7) && (outClass <= 9)) {
          outputPattern = "0 0 1 0";
        } else {
          outputPattern = "0 0 0 1";
        }

        String inputPattern = Double.toString(l2i) + " "
            + Double.toString(l2j);
        SupervisedTrainingElement tEl = new SupervisedTrainingElement(
            inputPattern, outputPattern);
        tSet.addElement(tEl);

        inputPattern = Double.toString(l2i) + " "
            + Double.toString(r2j);
        tEl = new SupervisedTrainingElement(inputPattern, outputPattern);
        tSet.addElement(tEl);

        inputPattern = Double.toString(l2i) + " "
            + Double.toString(right_intersection_j);
        tEl = new SupervisedTrainingElement(inputPattern, outputPattern);
        tSet.addElement(tEl);

        inputPattern = Double.toString(r2i) + " "
            + Double.toString(l2j);
        tEl = new SupervisedTrainingElement(inputPattern, outputPattern);
        tSet.addElement(tEl);

        inputPattern = Double.toString(r2i) + " "
            + Double.toString(r2j);
        tEl = new SupervisedTrainingElement(inputPattern, outputPattern);
        tSet.addElement(tEl);

        inputPattern = Double.toString(r2i) + " "
            + Double.toString(right_intersection_j);
        tEl = new SupervisedTrainingElement(inputPattern, outputPattern);
        tSet.addElement(tEl);

        inputPattern = Double.toString(right_intersection_i) + " "
            + Double.toString(l2j);
        tEl = new SupervisedTrainingElement(inputPattern, outputPattern);
        tSet.addElement(tEl);

        inputPattern = Double.toString(right_intersection_i) + " "
            + Double.toString(r2j);
        tEl = new SupervisedTrainingElement(inputPattern, outputPattern);
        tSet.addElement(tEl);

        inputPattern = Double.toString(right_intersection_i) + " "
            + Double.toString(right_intersection_j);
        tEl = new SupervisedTrainingElement(inputPattern, outputPattern);
        tSet.addElement(tEl);

        outClass++;
      } // for j

    } // for i

    // this.setProject(new SmartNetProject(nnet, tSet));
    ((LabelsPlugin)nnet.getPlugin("LabelsPlugin")).setLabel(nnet, "NFR sample");
    tSet.setLabel("NFR tset");
    easyNeuronsProject.addNeuralNetwork(nnet);
    easyNeuronsProject.addTrainingSet(tSet);

    updateProjectTree();

    NeuralNetworkTraining controller = new NeuralNetworkTraining(nnet, tSet);

    
    NFRSample frame = new NFRSample(controller);

    frame.setVisible(true);
    desktopPanel.add(frame);
    try {
      frame.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {
    }    
    

  }

  @Action
  public void showAboutBox() {
    if (aboutBox == null) {
      aboutBox = new AboutBox(mainFrame);
      aboutBox.setLocationRelativeTo(mainFrame);
    }
    EasyNeuronsApplication.getApplication().show(aboutBox);
  }

  @Action
  public void renameTreeNode() {
    Object[] nodes = projectTree.getSelectionPath().getPath();
    Object selectedNode = ((DefaultMutableTreeNode) nodes[nodes.length - 1])
        .getUserObject();

    RenameNodeDialog dialog = new RenameNodeDialog(mainFrame, true, selectedNode);
    dialog.setLocationRelativeTo(mainFrame);
    EasyNeuronsApplication.getApplication().show(dialog);

  }

  public void treeNodesChanged(TreeModelEvent e) {
    Object[] nodes = projectTree.getSelectionPath().getPath();
    Object selectedNode = ((DefaultMutableTreeNode) nodes[nodes.length - 1])
        .getUserObject();

    /*
     * TreePath selectedPath = projectTree.getSelectionPath() ; if (
     * selectedPath == null ) return ;
     * 
     * Object selectedNode = selectedPath.getLastPathComponent() ;
     */
    String newLabel = selectedNode.toString();

    if (selectedNode instanceof NeuralNetwork) {
      NeuralNetwork nnet = (NeuralNetwork) selectedNode;
      
      ((LabelsPlugin)nnet.getPlugin("LabelsPlugin") ).setLabel(nnet, newLabel);
      // this.updateProjectTree();

    } else if (selectedNode instanceof TrainingSet) {
      TrainingSet trainingSet = (TrainingSet) selectedNode;
      trainingSet.setLabel(newLabel);
      // this.updateProjectTree();
    }

  }

  public JTree getProjectTree() {
    return this.projectTree;
  }

  @Action
  public void switchToGraphView() {
    JInternalFrame iframe = desktopPanel.getSelectedFrame();

    if (iframe instanceof NeuralNetworkViewFrame) {
      ((NeuralNetworkViewFrame) iframe)
          .switchToView(NeuralNetworkViewFrame.GRAPH_VIEW);
    }
  }

  @Action
  public void switchToBlockView() {
    JInternalFrame iframe = desktopPanel.getSelectedFrame();

    if (iframe instanceof NeuralNetworkViewFrame) {
      ((NeuralNetworkViewFrame) iframe)
          .switchToView(NeuralNetworkViewFrame.BLOCK_VIEW);
    }
  }
  
  @Action
  public void refreshView() {
    JInternalFrame iframe = desktopPanel.getSelectedFrame();

    if (iframe instanceof NeuralNetworkViewFrame) {
      ((NeuralNetworkViewFrame) iframe).refresh();
    }    
  }

        public void showMessage(String message) {
            messageBox.append(message + "\r\n");
        }

  @Action
  public void showBasicNeuronSample() {
    BasicNeuronSample sample = new BasicNeuronSample();

    sample.setVisible(true);
    desktopPanel.add(sample);
    try {
      sample.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {
    }

                showMessage("Started Basic Neuron Sample");
  }

    public ActionListener showHelpContents() {
    String path = "org/neuroph/easyneurons/help/EasyNeurons.hs";
    ClassLoader loader = this.getClass().getClassLoader();

    HelpSet hs = null;

    try {
      URL hsURL = HelpSet.findHelpSet(loader, path);
      hs = new HelpSet(loader, hsURL);
    } catch (Exception ee) {
      ee.printStackTrace();
    }

    HelpBroker hb = hs.createHelpBroker();

    return new CSH.DisplayHelpFromSource(hb);

    }

  @Action
  public void recommenderSample() {
    NeuralNetwork nnet = new org.neuroph.contrib.RecommenderNetwork();
        ((org.neuroph.contrib.RecommenderNetwork)nnet).createDemoNetwork();
    TrainingSet tSet = new TrainingSet();
  
    ((LabelsPlugin)nnet.getPlugin("LabelsPlugin")).setLabel(nnet, "Recommender sample");
    tSet.setLabel("E-commerce tset");
    easyNeuronsProject.addNeuralNetwork(nnet);
    easyNeuronsProject.addTrainingSet(tSet);

    updateProjectTree();

    NeuralNetworkTraining controller = new NeuralNetworkTraining(nnet, tSet);
  }

    @Action
    public void imageRecognitionSample() {
    org.neuroph.easyneurons.imgrec.ImageRecognitionFrame sample = new org.neuroph.easyneurons.imgrec.ImageRecognitionFrame();
    sample.setVisible(true);
    desktopPanel.add(sample);
    try {
      sample.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {
    }

    }

    public EasyNeuronsProject getProject() {
        return this.easyNeuronsProject;
    }

    @Action
    public void showPerceptronSample() {
           NeuralNetwork neuralNet = new Perceptron(new Integer(2), new Integer(1));
           neuralNet.setLearningRule(new BinaryDeltaRule());
           ((LabelsPlugin)neuralNet.getPlugin("LabelsPlugin")).setLabel(neuralNet, "PerceptronSampleNetwork");
           easyNeuronsProject.addNeuralNetwork(neuralNet);

            org.neuroph.easyneurons.samples.perceptron.TrainingSetObserver trainingSet = new org.neuroph.easyneurons.samples.perceptron.TrainingSetObserver(){

                       @Override
                       public void update(Observable o, Object arg) {
                       TrainingSet t = new TrainingSet();
                       easyNeuronsProject.removeTrainingSet(getTrainingSet());
                      // System.out.println(" update je obavljen...");// ((TrainingSet)this).toString();
                       super.update(o, arg);
                       t = getTrainingSet();
                       t.setLabel("Perceptron Sample Training Set");
                       easyNeuronsProject.addTrainingSet(t);
                       updateProjectTree();
                       }
            };
            org.neuroph.easyneurons.samples.perceptron.PerceptronSampleTrainingSet pst = new PerceptronSampleTrainingSet();
            pst.addObserver(trainingSet);

            TrainingSet ts = trainingSet.getTrainingSet();

            NeuralNetworkTraining nnTraining = new NeuralNetworkTraining(neuralNet, ts);

            org.neuroph.easyneurons.samples.perceptron.PerceptronSampleFrame perceptronVisualizer = new org.neuroph.easyneurons.samples.perceptron.PerceptronSampleFrame(nnTraining, pst);
      neuralNet.getLearningRule().addObserver(perceptronVisualizer);
      neuralNet.addObserver(perceptronVisualizer);

            perceptronVisualizer.setVisible(true);
            desktopPanel.add(perceptronVisualizer);

            try {
          perceptronVisualizer.setSelected(true);
            } catch (java.beans.PropertyVetoException e) {   }

            showMessage("Started Perceptron Sample");
    }

    @Action
    public void showMultiLayerPerceptronSample() {
          org.neuroph.easyneurons.samples.mlperceptron.NeuralNetObserver markovNeuralNet = new org.neuroph.easyneurons.samples.mlperceptron.NeuralNetObserver()
            {
                      @Override
                       public void update(Observable o, Object arg) {
                          NeuralNetwork net = getNnet();
                          easyNeuronsProject.removeNeuralNetwork(net);

                          super.update(o, arg);
                          net = getNnet();
                          if(net == null){updateProjectTree();}
                          else{
                            ((LabelsPlugin)net.getPlugin("LabelsPlugin")).setLabel(net, "MultiLayerPerceptron Sample");
                            ProjectManager.getInstance().addNewNetworkToProject(net);
                           }
                      }
            };

            org.neuroph.easyneurons.samples.perceptron.TrainingSetObserver trainingSet = new org.neuroph.easyneurons.samples.perceptron.TrainingSetObserver(){

                       @Override
                       public void update(Observable o, Object arg) {
                           TrainingSet t = getTrainingSet();
                           easyNeuronsProject.removeTrainingSet(t);
                           super.update(o, arg);
                           t = getTrainingSet();
                           if(t.isEmpty()){updateProjectTree();}
                           else{
                           t.setLabel("Backpropagation Sample Training Set");
                           easyNeuronsProject.addTrainingSet(t);
                           updateProjectTree();
                           }
                       }
            };

            org.neuroph.easyneurons.samples.perceptron.PerceptronSampleTrainingSet pst = new PerceptronSampleTrainingSet();
            pst.addObserver(trainingSet);
            pst.addObserver(markovNeuralNet);

            NeuralNetwork nnet = markovNeuralNet.getNnet();
            nnet.setLearningRule(new BackPropagation());       //ovo je moralo da se stavi...

            TrainingSet ts = trainingSet.getTrainingSet();

            org.neuroph.easyneurons.samples.mlperceptron.MultiLayerPerceptronSample backpropagationVisualizer = new org.neuroph.easyneurons.samples.mlperceptron.MultiLayerPerceptronSample(pst);

            backpropagationVisualizer.setVisible(true);
            desktopPanel.add(backpropagationVisualizer);

            try {
    backpropagationVisualizer.setSelected(true);
            } catch (java.beans.PropertyVetoException e) {  }

              showMessage("Started Multi Layer Perceptron with Backpropagation Sample");

    }

    @Action
    public void handwritingRecogn() {
            HandwritingRecognitionToolFrame hwFrame = new HandwritingRecognitionToolFrame(null, true, true, true, true);
            desktopPanel.add(hwFrame);
            hwFrame.setVisible(true);
            try {
                hwFrame.setMaximum(true);
            } catch (PropertyVetoException ex) {
            }
    }

    @Action
    public void characterRecognitionTool() {
            TextRecognitionFrame tcrFrame = new TextRecognitionFrame();
            tcrFrame.setVisible(true);
            desktopPanel.add(tcrFrame);
        try {
            tcrFrame.setSelected(true);
        //    tcr.setDesktop(desktopPanel);
        } catch (PropertyVetoException ex) {
            Logger.getLogger(EasyNeuronsApplicationView.class.getName()).log(Level.SEVERE, null, ex);
        }

    }



    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuItem adalineMenuItem;
    private javax.swing.JMenuItem bamMenuItem;
    private javax.swing.JMenuItem competitiveMenuItem;
    private javax.swing.JDesktopPane desktopPanel;
    private javax.swing.JMenu editMenu;
    private javax.swing.JMenuItem handwritingRecognitionMenuItem;
    private javax.swing.JMenuItem hopfieldMenuItem;
    private javax.swing.JMenuItem imageRecognitionMenuItem;
    private javax.swing.JMenuItem instarMenuItem;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JMenuItem jMenuItem3;
    private javax.swing.JMenuItem jMenuItem4;
    private javax.swing.JMenuItem jMenuItem6;
    private javax.swing.JMenuItem jMenuItem7;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JSplitPane jSplitPane1;
    private javax.swing.JSplitPane jSplitPane2;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JMenuItem kohonenMenuItem;
    private javax.swing.JPanel mainPanel;
    private javax.swing.JMenuItem maxnetMenuItem;
    private javax.swing.JMenuBar menuBar;
    private javax.swing.JTextArea messageBox;
    private javax.swing.JMenuItem mlpMenuItem;
    private javax.swing.JMenu networksMenu;
    private javax.swing.JButton newTrainingSetButton;
    private javax.swing.JButton openButton;
    private javax.swing.JMenuItem openMenuItem;
    private javax.swing.JMenuItem outstarMenuItem;
    private javax.swing.JMenuItem perceptronMenuItem;
    private javax.swing.JProgressBar progressBar;
    private javax.swing.JTree projectTree;
    private javax.swing.JScrollPane projectTreeScrollPane;
    private javax.swing.JMenuItem rbfMenuItem;
    private javax.swing.JMenuItem removeMenuItem;
    private javax.swing.JMenuItem renameMenuItem;
    private javax.swing.JMenuItem sampleBasicNeuron;
    private javax.swing.JMenuItem sampleKohonenMenuItem;
    private javax.swing.JMenuItem sampleMLPerceptronMenuItem;
    private javax.swing.JMenuItem sampleNFRMenuItem;
    private javax.swing.JMenuItem samplePerceptronMenuItem;
    private javax.swing.JMenuItem sampleRecommenderMenuItem;
    private javax.swing.JMenu samplesMenu;
    private javax.swing.JMenuItem saveAsMenuItem;
    private javax.swing.JButton saveButton;
    private javax.swing.JMenuItem saveMenuItem;
    private javax.swing.JLabel statusAnimationLabel;
    private javax.swing.JLabel statusMessageLabel;
    private javax.swing.JPanel statusPanel;
    private javax.swing.JMenuItem supervisedHebbianMenuItem;
    private javax.swing.JMenuItem textRecognitionMenuItem;
    private javax.swing.JMenu toolsMenu;
    private javax.swing.JMenuItem trainMenuItem;
    private javax.swing.JMenu trainingMenu;
    private javax.swing.JMenuItem trainingSetWizardMenuItem;
    private javax.swing.JPopupMenu treePopupMenu;
    private javax.swing.JMenuItem unsupervisedHebbianMenuItem;
    private javax.swing.JMenuItem viewBlockMenuItem;
    private javax.swing.JMenuItem viewGraphMenuItem;
    private javax.swing.JMenu viewMenu;
    private javax.swing.JMenuItem viewRefreshMenuItem;
    // End of variables declaration//GEN-END:variables

  private final Timer messageTimer;
  private final Timer busyIconTimer;
  private final Icon idleIcon;
  private final Icon[] busyIcons = new Icon[15];
  private int busyIconIndex = 0;

  private JDialog aboutBox;

// DragNDrop - start
       //DnD Listeneri i TreeSelectionListener

        class TSListener implements TreeSelectionListener
        {

              public void valueChanged(TreeSelectionEvent e) {
                   TreePath SelectedTreePath = e.getNewLeadSelectionPath();

                    if (SelectedTreePath == null) {
                      SelectedNode = null;
                      return;
                    }
                    SelectedNode = (DefaultMutableTreeNode) SelectedTreePath.getLastPathComponent();
                    }
         }





        class DGListener implements DragGestureListener
        {

                public void dragGestureRecognized(DragGestureEvent e) {


                    if((e.getDragAction() & EasyNeuronsApplicationView.this.dragAction) == 0)
                    return;

                    DefaultMutableTreeNode dragNode = getSelectedNode();
                    if (dragNode != null){
                    Transferable transferable = new TransferableObject( dragNode.getUserObject() );

                           try {
                            // initial cursor, transferrable, dsource listener
                               e.startDrag(DragSource.DefaultCopyDrop,//DefaultCopyNoDrop,
                                  transferable, //dsListener
                                  EasyNeuronsApplicationView.this.dsListener);

                              }catch( InvalidDnDOperationException idoe ) {
                                      System.out.println("Juhu");
                                      System.err.println( idoe );
                          }
                }
             }
        }

        class DSListener implements DragSourceListener
        {

                    public void dragDropEnd(DragSourceDropEvent e) {
                         if( e.getDropSuccess() == false ) {
                           System.out.println( "not successful");
                         return;
                    }
                    }

                    public void dragEnter(DragSourceDragEvent e) {
                           DragSourceContext context = e.getDragSourceContext();
                          //intersection of the users selected action, and the source and target actions
                          int myaction = e.getDropAction();
                          if( (myaction & EasyNeuronsApplicationView.this.dragAction) != 0) {
                            context.setCursor(DragSource.DefaultCopyDrop);
                          } else {
                            context.setCursor(DragSource.DefaultCopyNoDrop);
                          }
                    }

                    public void dragExit(DragSourceEvent dse) {
                        //throw new UnsupportedOperationException("Not supported yet.");
                    }

                    public void dragOver(DragSourceDragEvent dsde) {
                        //throw new UnsupportedOperationException("Not supported yet.");
                    }

                    public void dropActionChanged(DragSourceDragEvent dsde) {
                       // throw new UnsupportedOperationException("Not supported yet.");
                    }

          }

          public DefaultMutableTreeNode getSelectedNode() {
                return SelectedNode;
          }



          private DragSource dragSource;
          private DragGestureListener dgListener;
          private DragSourceListener dsListener;
          private TreeSelectionListener tsListener;
          private int dragAction = DnDConstants.ACTION_COPY;
          protected DefaultMutableTreeNode SelectedNode;// = null;
// DragNDrop - end
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.