/*
 * NFRStudentDemoFrame.java
 *
 * Created on March 30, 2009, 4:31 PM
 */

package org.neuroph.easyneurons.samples;

import java.util.Vector;

import javax.swing.JSlider;

import org.neuroph.easyneurons.TrainingController;

/**
 *
 * @author  Zoran Sevarac <sevarac@gmail.com>
 */
public class NFRSample extends javax.swing.JInternalFrame {
	private TrainingController controller;
	
    /** Creates new form NFRStudentDemoNew */
    public NFRSample(TrainingController controller) {
	this.controller = controller;
        initComponents();
	
	pointsField.setText((new Integer(pointsSlider.getValue())).toString());
	timeField.setText((new Integer(timeSlider.getValue())).toString());
	
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
        private void initComponents() {
                java.awt.GridBagConstraints gridBagConstraints;

                jPanel1 = new javax.swing.JPanel();
                pointsSlider = new javax.swing.JSlider();
                timeSlider = new javax.swing.JSlider();
                pointsField = new javax.swing.JTextField();
                timeField = new javax.swing.JTextField();
                jLabel1 = new javax.swing.JLabel();
                jLabel2 = new javax.swing.JLabel();
                classifyButton = new javax.swing.JButton();
                trainButton = new javax.swing.JButton();
                jPanel2 = new javax.swing.JPanel();
                badPanel = new javax.swing.JPanel();
                goodPanel = new javax.swing.JPanel();
                veryGoodPanel = new javax.swing.JPanel();
                excellentPanel = new javax.swing.JPanel();
                jLabel3 = new javax.swing.JLabel();
                jLabel4 = new javax.swing.JLabel();
                jLabel5 = new javax.swing.JLabel();
                jLabel6 = new javax.swing.JLabel();

                setClosable(true);
                setIconifiable(true);
                org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(org.neuroph.easyneurons.EasyNeuronsApplication.class).getContext().getResourceMap(NFRSample.class);
                setTitle(resourceMap.getString("Form.title")); // NOI18N
                setName("Form"); // NOI18N

                jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
                jPanel1.setName("jPanel1"); // NOI18N
                jPanel1.setLayout(new java.awt.GridBagLayout());

                pointsSlider.setMajorTickSpacing(10);
                pointsSlider.setMinorTickSpacing(1);
                pointsSlider.setPaintLabels(true);
                pointsSlider.setPaintTicks(true);
                pointsSlider.setName("pointsSlider"); // NOI18N
                pointsSlider.setPreferredSize(new java.awt.Dimension(330, 40));
                pointsSlider.addChangeListener(new javax.swing.event.ChangeListener() {
                        public void stateChanged(javax.swing.event.ChangeEvent evt) {
                                pointsSliderStateChanged(evt);
                        }
                });
                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.gridx = 1;
                gridBagConstraints.gridy = 0;
                gridBagConstraints.insets = new java.awt.Insets(5, 5, 15, 5);
                jPanel1.add(pointsSlider, gridBagConstraints);

                timeSlider.setMajorTickSpacing(10);
                timeSlider.setMaximum(120);
                timeSlider.setMinimum(15);
                timeSlider.setMinorTickSpacing(1);
                timeSlider.setPaintLabels(true);
                timeSlider.setPaintTicks(true);
                timeSlider.setName("timeSlider"); // NOI18N
                timeSlider.setPreferredSize(new java.awt.Dimension(330, 40));
                timeSlider.addChangeListener(new javax.swing.event.ChangeListener() {
                        public void stateChanged(javax.swing.event.ChangeEvent evt) {
                                timeSliderStateChanged(evt);
                        }
                });
                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.gridx = 1;
                gridBagConstraints.gridy = 1;
                gridBagConstraints.insets = new java.awt.Insets(5, 5, 15, 5);
                jPanel1.add(timeSlider, gridBagConstraints);

                pointsField.setBackground(resourceMap.getColor("timeField.background")); // NOI18N
                pointsField.setColumns(5);
                pointsField.setEditable(false);
                pointsField.setText(resourceMap.getString("pointsField.text")); // NOI18N
                pointsField.setName("pointsField"); // NOI18N
                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.gridx = 2;
                gridBagConstraints.gridy = 0;
                gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
                gridBagConstraints.insets = new java.awt.Insets(10, 5, 5, 5);
                jPanel1.add(pointsField, gridBagConstraints);

                timeField.setBackground(resourceMap.getColor("timeField.background")); // NOI18N
                timeField.setColumns(5);
                timeField.setEditable(false);
                timeField.setText(resourceMap.getString("timeField.text")); // NOI18N
                timeField.setName("timeField"); // NOI18N
                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.gridx = 2;
                gridBagConstraints.gridy = 1;
                gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
                gridBagConstraints.insets = new java.awt.Insets(10, 5, 5, 5);
                jPanel1.add(timeField, gridBagConstraints);

                jLabel1.setFont(resourceMap.getFont("jLabel2.font")); // NOI18N
                jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
                jLabel1.setName("jLabel1"); // NOI18N
                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.gridx = 0;
                gridBagConstraints.gridy = 0;
                gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
                gridBagConstraints.insets = new java.awt.Insets(10, 5, 5, 5);
                jPanel1.add(jLabel1, gridBagConstraints);

                jLabel2.setFont(resourceMap.getFont("jLabel2.font")); // NOI18N
                jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
                jLabel2.setName("jLabel2"); // NOI18N
                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.gridx = 0;
                gridBagConstraints.gridy = 1;
                gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
                gridBagConstraints.insets = new java.awt.Insets(10, 5, 5, 5);
                jPanel1.add(jLabel2, gridBagConstraints);

                classifyButton.setText(resourceMap.getString("classifyButton.text")); // NOI18N
                classifyButton.setName("classifyButton"); // NOI18N
                classifyButton.addMouseListener(new java.awt.event.MouseAdapter() {
                        public void mousePressed(java.awt.event.MouseEvent evt) {
                                classifyButtonMousePressed(evt);
                        }
                });
                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.gridx = 3;
                gridBagConstraints.gridy = 0;
                gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
                gridBagConstraints.insets = new java.awt.Insets(10, 5, 5, 5);
                jPanel1.add(classifyButton, gridBagConstraints);

                trainButton.setText(resourceMap.getString("trainButton.text")); // NOI18N
                trainButton.setName("trainButton"); // NOI18N
                trainButton.addActionListener(new java.awt.event.ActionListener() {
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
                                trainButtonActionPerformed(evt);
                        }
                });
                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.gridx = 3;
                gridBagConstraints.gridy = 1;
                gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
                gridBagConstraints.insets = new java.awt.Insets(10, 5, 5, 5);
                jPanel1.add(trainButton, gridBagConstraints);

                getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);

                jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
                jPanel2.setName("jPanel2"); // NOI18N
                jPanel2.setLayout(new java.awt.GridBagLayout());

                badPanel.setBackground(resourceMap.getColor("badPanel.background")); // NOI18N
                badPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
                badPanel.setName("badPanel"); // NOI18N
                badPanel.setOpaque(false);

                javax.swing.GroupLayout badPanelLayout = new javax.swing.GroupLayout(badPanel);
                badPanel.setLayout(badPanelLayout);
                badPanelLayout.setHorizontalGroup(
                        badPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGap(0, 100, Short.MAX_VALUE)
                );
                badPanelLayout.setVerticalGroup(
                        badPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGap(0, 100, Short.MAX_VALUE)
                );

                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.insets = new java.awt.Insets(5, 10, 10, 10);
                jPanel2.add(badPanel, gridBagConstraints);

                goodPanel.setBackground(resourceMap.getColor("goodPanel.background")); // NOI18N
                goodPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
                goodPanel.setName("goodPanel"); // NOI18N
                goodPanel.setOpaque(false);

                javax.swing.GroupLayout goodPanelLayout = new javax.swing.GroupLayout(goodPanel);
                goodPanel.setLayout(goodPanelLayout);
                goodPanelLayout.setHorizontalGroup(
                        goodPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGap(0, 100, Short.MAX_VALUE)
                );
                goodPanelLayout.setVerticalGroup(
                        goodPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGap(0, 100, Short.MAX_VALUE)
                );

                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.insets = new java.awt.Insets(5, 10, 10, 10);
                jPanel2.add(goodPanel, gridBagConstraints);

                veryGoodPanel.setBackground(resourceMap.getColor("veryGoodPanel.background")); // NOI18N
                veryGoodPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
                veryGoodPanel.setName("veryGoodPanel"); // NOI18N
                veryGoodPanel.setOpaque(false);

                javax.swing.GroupLayout veryGoodPanelLayout = new javax.swing.GroupLayout(veryGoodPanel);
                veryGoodPanel.setLayout(veryGoodPanelLayout);
                veryGoodPanelLayout.setHorizontalGroup(
                        veryGoodPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGap(0, 100, Short.MAX_VALUE)
                );
                veryGoodPanelLayout.setVerticalGroup(
                        veryGoodPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGap(0, 100, Short.MAX_VALUE)
                );

                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.insets = new java.awt.Insets(5, 10, 10, 10);
                jPanel2.add(veryGoodPanel, gridBagConstraints);

                excellentPanel.setBackground(resourceMap.getColor("excellentPanel.background")); // NOI18N
                excellentPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
                excellentPanel.setName("excellentPanel"); // NOI18N
                excellentPanel.setOpaque(false);

                javax.swing.GroupLayout excellentPanelLayout = new javax.swing.GroupLayout(excellentPanel);
                excellentPanel.setLayout(excellentPanelLayout);
                excellentPanelLayout.setHorizontalGroup(
                        excellentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGap(0, 100, Short.MAX_VALUE)
                );
                excellentPanelLayout.setVerticalGroup(
                        excellentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGap(0, 100, Short.MAX_VALUE)
                );

                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.insets = new java.awt.Insets(5, 10, 10, 10);
                jPanel2.add(excellentPanel, gridBagConstraints);

                jLabel3.setFont(resourceMap.getFont("jLabel6.font")); // NOI18N
                jLabel3.setText(resourceMap.getString("jLabel3.text")); // NOI18N
                jLabel3.setName("jLabel3"); // NOI18N
                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.gridx = 0;
                gridBagConstraints.gridy = 1;
                jPanel2.add(jLabel3, gridBagConstraints);

                jLabel4.setFont(resourceMap.getFont("jLabel6.font")); // NOI18N
                jLabel4.setText(resourceMap.getString("jLabel4.text")); // NOI18N
                jLabel4.setName("jLabel4"); // NOI18N
                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.gridx = 1;
                gridBagConstraints.gridy = 1;
                jPanel2.add(jLabel4, gridBagConstraints);

                jLabel5.setFont(resourceMap.getFont("jLabel6.font")); // NOI18N
                jLabel5.setText(resourceMap.getString("jLabel5.text")); // NOI18N
                jLabel5.setName("jLabel5"); // NOI18N
                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.gridx = 2;
                gridBagConstraints.gridy = 1;
                jPanel2.add(jLabel5, gridBagConstraints);

                jLabel6.setFont(resourceMap.getFont("jLabel6.font")); // NOI18N
                jLabel6.setText(resourceMap.getString("jLabel6.text")); // NOI18N
                jLabel6.setName("jLabel6"); // NOI18N
                gridBagConstraints = new java.awt.GridBagConstraints();
                gridBagConstraints.gridx = 3;
                gridBagConstraints.gridy = 1;
                jPanel2.add(jLabel6, gridBagConstraints);

                getContentPane().add(jPanel2, java.awt.BorderLayout.CENTER);

                pack();
        }// </editor-fold>//GEN-END:initComponents

private void pointsSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_pointsSliderStateChanged
		JSlider source = (JSlider) evt.getSource();
		if (!source.getValueIsAdjusting()) {
			int value = source.getValue();
			pointsField.setText((new Integer(value)).toString());
		}
}//GEN-LAST:event_pointsSliderStateChanged

private void timeSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_timeSliderStateChanged
		JSlider source = (JSlider) evt.getSource();
		if (!source.getValueIsAdjusting()) {
			int value = source.getValue();
			timeField.setText((new Integer(value)).toString());
		}
}//GEN-LAST:event_timeSliderStateChanged

private void classifyButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_classifyButtonMousePressed
		badPanel.setOpaque(false);
		goodPanel.setOpaque(false);
		veryGoodPanel.setOpaque(false);
		excellentPanel.setOpaque(false);

		String inStr = pointsField.getText().trim() + " "
				+ timeField.getText().trim();
		controller.setInput(inStr);

		Vector<Double> output = controller.getNetwork().getOutput();
		if (((Double) output.elementAt(0)).doubleValue() == 1)
			badPanel.setOpaque(true);
		if (((Double) output.elementAt(1)).doubleValue() == 1)
			goodPanel.setOpaque(true);
		if (((Double) output.elementAt(2)).doubleValue() == 1)
			veryGoodPanel.setOpaque(true);
		if (((Double) output.elementAt(3)).doubleValue() == 1)
			excellentPanel.setOpaque(true);
		this.paintAll(this.getGraphics());
		this.repaint();	
}//GEN-LAST:event_classifyButtonMousePressed

private void trainButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_trainButtonActionPerformed
		controller.getNetwork().learnInNewThread(controller.getTrainingSet());
}//GEN-LAST:event_trainButtonActionPerformed


        // Variables declaration - do not modify//GEN-BEGIN:variables
        private javax.swing.JPanel badPanel;
        private javax.swing.JButton classifyButton;
        private javax.swing.JPanel excellentPanel;
        private javax.swing.JPanel goodPanel;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JLabel jLabel3;
        private javax.swing.JLabel jLabel4;
        private javax.swing.JLabel jLabel5;
        private javax.swing.JLabel jLabel6;
        private javax.swing.JPanel jPanel1;
        private javax.swing.JPanel jPanel2;
        private javax.swing.JTextField pointsField;
        private javax.swing.JSlider pointsSlider;
        private javax.swing.JTextField timeField;
        private javax.swing.JSlider timeSlider;
        private javax.swing.JButton trainButton;
        private javax.swing.JPanel veryGoodPanel;
        // End of variables declaration//GEN-END:variables

}
