Package org.openpnp.machine.zippy

Source Code of org.openpnp.machine.zippy.ZippyNozzleTipConfigurationWizard

/*
   Copyright (C) 2013 Richard Spelling <openpnp@chebacco.com>
  
   This file is part of OpenPnP.
  
  OpenPnP is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    OpenPnP is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with OpenPnP.  If not, see <http://www.gnu.org/licenses/>.
  
   For more information about OpenPnP visit http://openpnp.org
*/

package org.openpnp.machine.zippy;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.BevelBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;

import org.jdesktop.beansbinding.AutoBinding.UpdateStrategy;
import org.openpnp.gui.MainFrame;
import org.openpnp.gui.components.CameraView;
import org.openpnp.gui.components.ComponentDecorators;
import org.openpnp.gui.components.LocationButtonsPanel;
import org.openpnp.gui.support.AbstractConfigurationWizard;
import org.openpnp.gui.support.BufferedImageIconConverter;
import org.openpnp.gui.support.IntegerConverter;
import org.openpnp.gui.support.LengthConverter;
import org.openpnp.gui.support.MessageBoxes;
import org.openpnp.gui.support.MutableLocationProxy;

import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;

public class ZippyNozzleTipConfigurationWizard extends
        AbstractConfigurationWizard {
    private final ZippyNozzleTip zippynozzletip;

    private JTextField textFieldMirrorStartX;
    private JTextField textFieldMirrorStartY;
    private JTextField textFieldMirrorStartZ;
    private JTextField textFieldMirrorMidX;
    private JTextField textFieldMirrorMidY;
    private JTextField textFieldMirrorMidZ;
    private JTextField textFieldMirrorEndX;
    private JTextField textFieldMirrorEndY;
    private JTextField textFieldMirrorEndZ;
    private LocationButtonsPanel locationButtonsPanelMirrorStart;
    private LocationButtonsPanel locationButtonsPanelMirrorMid;
    private LocationButtonsPanel locationButtonsPanelMirrorEnd;

    private JTextField textFieldChangerStartX;
    private JTextField textFieldChangerStartY;
    private JTextField textFieldChangerStartZ;
    private JTextField textFieldChangerMidX;
    private JTextField textFieldChangerMidY;
    private JTextField textFieldChangerMidZ;
    private JTextField textFieldChangerEndX;
    private JTextField textFieldChangerEndY;
    private JTextField textFieldChangerEndZ;
    private LocationButtonsPanel locationButtonsPanelChangerStart;
    private LocationButtonsPanel locationButtonsPanelChangerMid;
    private LocationButtonsPanel locationButtonsPanelChangerEnd;
  
    private JTextField locationX;
    private JTextField locationY;
    private JTextField locationZ;
    private JTextField pixelCompJTF;
    private JPanel panelOffsets;
    private JPanel panelMirrorWaypoints;
    private JPanel panelChangerWaypoints;

    private JPanel panelVision;
    private JPanel panelLocations;
    private JCheckBox chckbxVisionEnabled;
    private JPanel panelVisionEnabled;
    private JPanel panelTemplate;
    private JLabel labelTemplateImage;
    private JButton btnChangeTemplateImage;
    private JSeparator separator;
    private JPanel panelVisionTemplateAndAoe;
    private JPanel panelAoE;
    private JLabel lblX_1;
    private JLabel lblY_1;
    private JTextField textFieldAoiX;
    private JTextField textFieldAoiY;
    private JTextField textFieldAoiWidth;
    private JTextField textFieldAoiHeight;
    private LocationButtonsPanel locationButtonsPanelFeedStart;
    private LocationButtonsPanel locationButtonsPanelFeedEnd;
    private JLabel lblWidth;
    private JLabel lblHeight;
    private JButton btnChangeAoi;
    private JButton btnCancelChangeAoi;
    private JPanel panel;
    private JButton btnCancelChangeTemplateImage;

    public ZippyNozzleTipConfigurationWizard(ZippyNozzleTip zippynozzletip) {
        this.zippynozzletip = zippynozzletip;

        //setup panel for nozzle offsets (crookedness)
        JPanel panelFields = new JPanel();
        panelFields.setLayout(new BoxLayout(panelFields, BoxLayout.Y_AXIS));

        panelOffsets = new JPanel();
        panelFields.add(panelOffsets);
        panelOffsets.setBorder(new TitledBorder(new EtchedBorder(
                EtchedBorder.LOWERED, null, null), "Offsets",
                TitledBorder.LEADING, TitledBorder.TOP, null,
                new Color(0, 0, 0)));
        panelOffsets.setLayout(new FormLayout(
                new ColumnSpec[] { FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC, }, new RowSpec[] {
                        FormFactory.RELATED_GAP_ROWSPEC,
                        FormFactory.DEFAULT_ROWSPEC,
                        FormFactory.RELATED_GAP_ROWSPEC,
                        FormFactory.DEFAULT_ROWSPEC, }));

        JLabel lblX = new JLabel("X");
        panelOffsets.add(lblX, "2, 2");

        JLabel lblY = new JLabel("Y");
        panelOffsets.add(lblY, "4, 2");

        JLabel lblZ = new JLabel("Z");
        panelOffsets.add(lblZ, "6, 2");

        JLabel lblC = new JLabel("comp");
        panelOffsets.add(lblC, "8, 2");

        locationX = new JTextField();
        panelOffsets.add(locationX, "2, 4");
        locationX.setColumns(5);

        locationY = new JTextField();
        panelOffsets.add(locationY, "4, 4");
        locationY.setColumns(5);

        locationZ = new JTextField();
        panelOffsets.add(locationZ, "6, 4");
        locationZ.setColumns(5);
       
        pixelCompJTF = new JTextField();
        panelOffsets.add(pixelCompJTF, "8, 4");
        pixelCompJTF.setColumns(5);
       
        // setup panel for mirror waypoints
        panelMirrorWaypoints = new JPanel();
//        panelFields.add(panelMirrorWaypoints);
        panelMirrorWaypoints.setBorder(new TitledBorder(null, "Mirror Waypoints",
                TitledBorder.LEADING, TitledBorder.TOP, null, null));
        panelMirrorWaypoints
                .setLayout(new FormLayout(new ColumnSpec[] {
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        ColumnSpec.decode("left:default:grow"), },
                        new RowSpec[] { FormFactory.RELATED_GAP_ROWSPEC,
                            FormFactory.DEFAULT_ROWSPEC,
                            FormFactory.RELATED_GAP_ROWSPEC,
                            FormFactory.DEFAULT_ROWSPEC,
                            FormFactory.RELATED_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC,
                                FormFactory.RELATED_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC,
                                FormFactory.RELATED_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC, }));

        JLabel lblmwX = new JLabel("X");
        panelMirrorWaypoints.add(lblmwX, "4, 4");

        JLabel lblmwY = new JLabel("Y");
        panelMirrorWaypoints.add(lblmwY, "6, 4");

        JLabel lblmwZ = new JLabel("Z");
        panelMirrorWaypoints.add(lblmwZ, "8, 4");

        //start location
        JLabel lblMirrorStartLocation = new JLabel("Mirror Start Location");
        panelMirrorWaypoints.add(lblMirrorStartLocation, "2, 6, right, default");

        textFieldMirrorStartX = new JTextField();
        panelMirrorWaypoints.add(textFieldMirrorStartX, "4, 6");
        textFieldMirrorStartX.setColumns(8);

        textFieldMirrorStartY = new JTextField();
        panelMirrorWaypoints.add(textFieldMirrorStartY, "6, 6");
        textFieldMirrorStartY.setColumns(8);

        textFieldMirrorStartZ = new JTextField();
        panelMirrorWaypoints.add(textFieldMirrorStartZ, "8, 6");
        textFieldMirrorStartZ.setColumns(8);

        locationButtonsPanelMirrorStart = new LocationButtonsPanel(
                textFieldMirrorStartX, textFieldMirrorStartY, textFieldMirrorStartZ,
                null);
        panelMirrorWaypoints.add(locationButtonsPanelMirrorStart, "10, 6");
  
       //mid location
        JLabel lblMirrorMidLocation = new JLabel("Mirror Middle Location");
        panelMirrorWaypoints.add(lblMirrorMidLocation, "2, 8, right, default");

        textFieldMirrorMidX = new JTextField();
        panelMirrorWaypoints.add(textFieldMirrorMidX, "4, 8");
        textFieldMirrorMidX.setColumns(8);

        textFieldMirrorMidY = new JTextField();
        panelMirrorWaypoints.add(textFieldMirrorMidY, "6, 8");
        textFieldMirrorMidY.setColumns(8);

        textFieldMirrorMidZ = new JTextField();
        panelMirrorWaypoints.add(textFieldMirrorMidZ, "8, 8");
        textFieldMirrorMidZ.setColumns(8);

        locationButtonsPanelMirrorMid = new LocationButtonsPanel(
                textFieldMirrorMidX, textFieldMirrorMidY, textFieldMirrorMidZ, null);
        panelMirrorWaypoints.add(locationButtonsPanelMirrorMid, "10, 8");
       
        //end location
        JLabel lblMirrorEndLocation = new JLabel("Mirror End Location");
        panelMirrorWaypoints.add(lblMirrorEndLocation, "2, 10, right, default");

        textFieldMirrorEndX = new JTextField();
        panelMirrorWaypoints.add(textFieldMirrorEndX, "4, 10");
        textFieldMirrorEndX.setColumns(8);

        textFieldMirrorEndY = new JTextField();
        panelMirrorWaypoints.add(textFieldMirrorEndY, "6, 10");
        textFieldMirrorEndY.setColumns(8);

        textFieldMirrorEndZ = new JTextField();
        panelMirrorWaypoints.add(textFieldMirrorEndZ, "8, 10");
        textFieldMirrorEndZ.setColumns(8);

        locationButtonsPanelMirrorEnd = new LocationButtonsPanel(
                textFieldMirrorEndX, textFieldMirrorEndY, textFieldMirrorEndZ, null);
        panelMirrorWaypoints.add(locationButtonsPanelMirrorEnd, "10, 10");
       
       

        // setup panel for Changer waypoints
        panelChangerWaypoints = new JPanel();
//        panelFields.add(panelChangerWaypoints);
        panelChangerWaypoints.setBorder(new TitledBorder(null, "Changer Waypoints",
                TitledBorder.LEADING, TitledBorder.TOP, null, null));
        panelChangerWaypoints
                .setLayout(new FormLayout(new ColumnSpec[] {
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        ColumnSpec.decode("left:default:grow"), },
                        new RowSpec[] { FormFactory.RELATED_GAP_ROWSPEC,
                            FormFactory.DEFAULT_ROWSPEC,
                            FormFactory.RELATED_GAP_ROWSPEC,
                            FormFactory.DEFAULT_ROWSPEC,
                            FormFactory.RELATED_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC,
                                FormFactory.RELATED_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC,
                                FormFactory.RELATED_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC, }));

        JLabel lblchX = new JLabel("X");
        panelChangerWaypoints.add(lblchX, "4, 4");

        JLabel lblchY = new JLabel("Y");
        panelChangerWaypoints.add(lblchY, "6, 4");

        JLabel lblchZ = new JLabel("Z");
        panelChangerWaypoints.add(lblchZ, "8, 4");

        //start location
        JLabel lblChangerStartLocation = new JLabel("Changer Start Location");
        panelChangerWaypoints.add(lblChangerStartLocation, "2, 6, right, default");

        textFieldChangerStartX = new JTextField();
        panelChangerWaypoints.add(textFieldChangerStartX, "4, 6");
        textFieldChangerStartX.setColumns(8);

        textFieldChangerStartY = new JTextField();
        panelChangerWaypoints.add(textFieldChangerStartY, "6, 6");
        textFieldChangerStartY.setColumns(8);

        textFieldChangerStartZ = new JTextField();
        panelChangerWaypoints.add(textFieldChangerStartZ, "8, 6");
        textFieldChangerStartZ.setColumns(8);

        locationButtonsPanelChangerStart = new LocationButtonsPanel(
                textFieldChangerStartX, textFieldChangerStartY, textFieldChangerStartZ,
                null);
        panelChangerWaypoints.add(locationButtonsPanelChangerStart, "10, 6");
  
       //mid location
        JLabel lblChangerMidLocation = new JLabel("Changer Middle Location");
        panelChangerWaypoints.add(lblChangerMidLocation, "2, 8, right, default");

        textFieldChangerMidX = new JTextField();
        panelChangerWaypoints.add(textFieldChangerMidX, "4, 8");
        textFieldChangerMidX.setColumns(8);

        textFieldChangerMidY = new JTextField();
        panelChangerWaypoints.add(textFieldChangerMidY, "6, 8");
        textFieldChangerMidY.setColumns(8);

        textFieldChangerMidZ = new JTextField();
        panelChangerWaypoints.add(textFieldChangerMidZ, "8, 8");
        textFieldChangerMidZ.setColumns(8);

        locationButtonsPanelChangerMid = new LocationButtonsPanel(
                textFieldChangerMidX, textFieldChangerMidY, textFieldChangerMidZ, null);
        panelChangerWaypoints.add(locationButtonsPanelChangerMid, "10, 8");
       
        //end location
        JLabel lblChangerEndLocation = new JLabel("Changer End Location");
        panelChangerWaypoints.add(lblChangerEndLocation, "2, 10, right, default");

        textFieldChangerEndX = new JTextField();
        panelChangerWaypoints.add(textFieldChangerEndX, "4, 10");
        textFieldChangerEndX.setColumns(8);

        textFieldChangerEndY = new JTextField();
        panelChangerWaypoints.add(textFieldChangerEndY, "6, 10");
        textFieldChangerEndY.setColumns(8);

        textFieldChangerEndZ = new JTextField();
        panelChangerWaypoints.add(textFieldChangerEndZ, "8, 10");
        textFieldChangerEndZ.setColumns(8);

        locationButtonsPanelChangerEnd = new LocationButtonsPanel(
                textFieldChangerEndX, textFieldChangerEndY, textFieldChangerEndZ, null);
        panelChangerWaypoints.add(locationButtonsPanelChangerEnd, "10, 10");
       
        //vision panel
        panelVision = new JPanel();
        panelVision.setBorder(new TitledBorder(null, "Vision",
                TitledBorder.LEADING, TitledBorder.TOP, null, null));
        panelFields.add(panelVision);
        panelVision.setLayout(new BoxLayout(panelVision, BoxLayout.Y_AXIS));

        panelVisionEnabled = new JPanel();
        FlowLayout fl_panelVisionEnabled = (FlowLayout) panelVisionEnabled
                .getLayout();
        fl_panelVisionEnabled.setAlignment(FlowLayout.LEFT);
        panelVision.add(panelVisionEnabled);

        chckbxVisionEnabled = new JCheckBox("Vision Enabled?");
        panelVisionEnabled.add(chckbxVisionEnabled);

        separator = new JSeparator();
        panelVision.add(separator);

        panelVisionTemplateAndAoe = new JPanel();
        panelVision.add(panelVisionTemplateAndAoe);
        panelVisionTemplateAndAoe
                .setLayout(new FormLayout(new ColumnSpec[] {
                        FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC, }, new RowSpec[] {
                        FormFactory.RELATED_GAP_ROWSPEC,
                        FormFactory.DEFAULT_ROWSPEC, }));
       
        panelTemplate = new JPanel();
        panelTemplate.setBorder(new TitledBorder(new EtchedBorder(
                EtchedBorder.LOWERED, null, null), "Template Image",
                TitledBorder.LEADING, TitledBorder.TOP, null,
                new Color(0, 0, 0)));
        panelVisionTemplateAndAoe.add(panelTemplate, "2, 2, center, fill");
        panelTemplate.setLayout(new BoxLayout(panelTemplate, BoxLayout.Y_AXIS));

        labelTemplateImage = new JLabel("");
        labelTemplateImage.setAlignmentX(Component.CENTER_ALIGNMENT);
        panelTemplate.add(labelTemplateImage);
        labelTemplateImage.setBorder(new BevelBorder(BevelBorder.LOWERED, null,
                null, null, null));
        labelTemplateImage.setMinimumSize(new Dimension(150, 150));
        labelTemplateImage.setMaximumSize(new Dimension(150, 150));
        labelTemplateImage.setHorizontalAlignment(SwingConstants.CENTER);
        labelTemplateImage.setSize(new Dimension(150, 150));
        labelTemplateImage.setPreferredSize(new Dimension(150, 150));

        panel = new JPanel();
        panelTemplate.add(panel);

        btnChangeTemplateImage = new JButton(selectTemplateImageAction);
        panel.add(btnChangeTemplateImage);
        btnChangeTemplateImage.setAlignmentX(Component.CENTER_ALIGNMENT);

        btnCancelChangeTemplateImage = new JButton(
                cancelSelectTemplateImageAction);
        panel.add(btnCancelChangeTemplateImage);

        panelAoE = new JPanel();
        panel.add(panelAoE);
        panelAoE.setBorder(new TitledBorder(null, "Area of Interest",
                TitledBorder.LEADING, TitledBorder.TOP, null, null));
        panelAoE.setLayout(new FormLayout(
                new ColumnSpec[] { FormFactory.RELATED_GAP_COLSPEC,
                        ColumnSpec.decode("default:grow"),
                        FormFactory.RELATED_GAP_COLSPEC,
                        ColumnSpec.decode("default:grow"),
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC,
                        FormFactory.RELATED_GAP_COLSPEC,
                        FormFactory.DEFAULT_COLSPEC, }, new RowSpec[] {
                        FormFactory.RELATED_GAP_ROWSPEC,
                        FormFactory.DEFAULT_ROWSPEC,
                        FormFactory.RELATED_GAP_ROWSPEC,
                        FormFactory.DEFAULT_ROWSPEC, }));

        lblX_1 = new JLabel("X");
        panelAoE.add(lblX_1, "2, 2");

        lblY_1 = new JLabel("Y");
        panelAoE.add(lblY_1, "4, 2");

        lblWidth = new JLabel("Width");
        panelAoE.add(lblWidth, "6, 2");

        lblHeight = new JLabel("Height");
        panelAoE.add(lblHeight, "8, 2");

        textFieldAoiX = new JTextField();
        panelAoE.add(textFieldAoiX, "2, 4, fill, default");
        textFieldAoiX.setColumns(5);

        textFieldAoiY = new JTextField();
        panelAoE.add(textFieldAoiY, "4, 4, fill, default");
        textFieldAoiY.setColumns(5);

        textFieldAoiWidth = new JTextField();
        panelAoE.add(textFieldAoiWidth, "6, 4, fill, default");
        textFieldAoiWidth.setColumns(5);

        textFieldAoiHeight = new JTextField();
        panelAoE.add(textFieldAoiHeight, "8, 4, fill, default");
        textFieldAoiHeight.setColumns(5);

        btnChangeAoi = new JButton("Change");
        btnChangeAoi.setAction(selectAoiAction);
        panelAoE.add(btnChangeAoi, "10, 4");

        btnCancelChangeAoi = new JButton("Cancel");
        btnCancelChangeAoi.setAction(cancelSelectAoiAction);
        panelAoE.add(btnCancelChangeAoi, "12, 4");

        cancelSelectTemplateImageAction.setEnabled(false);
        cancelSelectAoiAction.setEnabled(false);

       
        //add panels to wizard content
        panelFields.add(panelOffsets);
        panelFields.add(panelMirrorWaypoints);
        panelFields.add(panelChangerWaypoints);
        contentPanel.add(panelFields);
  }

    @Override
    public void createBindings() {
        LengthConverter lengthConverter = new LengthConverter();
        IntegerConverter intConverter = new IntegerConverter();
        BufferedImageIconConverter imageConverter = new BufferedImageIconConverter();
       
//        bind(UpdateStrategy.READ_WRITE, zippynozzletip, "pixelComp", pixelCompJTF, "location");
       
        MutableLocationProxy nozzleOffsets = new MutableLocationProxy();
        bind(UpdateStrategy.READ_WRITE, zippynozzletip, "nozzleOffsets", nozzleOffsets, "location");
        addWrappedBinding(nozzleOffsets, "lengthX", locationX, "text", lengthConverter);
        addWrappedBinding(nozzleOffsets, "lengthY", locationY, "text", lengthConverter);
        addWrappedBinding(nozzleOffsets, "lengthZ", locationZ, "text", lengthConverter);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(locationX);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(locationY);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(locationZ);
    
       
        MutableLocationProxy mirrorStartLocation = new MutableLocationProxy();
        bind(UpdateStrategy.READ_WRITE, zippynozzletip, "mirrorStartLocation", mirrorStartLocation, "location");
        addWrappedBinding(mirrorStartLocation, "lengthX", textFieldMirrorStartX, "text", lengthConverter);
        addWrappedBinding(mirrorStartLocation, "lengthY", textFieldMirrorStartY, "text", lengthConverter);
        addWrappedBinding(mirrorStartLocation, "lengthZ", textFieldMirrorStartZ, "text", lengthConverter);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldMirrorStartX);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldMirrorStartY);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldMirrorStartZ);

        MutableLocationProxy mirrorMidLocation = new MutableLocationProxy();
        bind(UpdateStrategy.READ_WRITE, zippynozzletip, "mirrorMidLocation", mirrorMidLocation, "location");
        addWrappedBinding(mirrorMidLocation, "lengthX", textFieldMirrorMidX, "text", lengthConverter);
        addWrappedBinding(mirrorMidLocation, "lengthY", textFieldMirrorMidY, "text", lengthConverter);
        addWrappedBinding(mirrorMidLocation, "lengthZ", textFieldMirrorMidZ, "text", lengthConverter);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldMirrorMidX);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldMirrorMidY);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldMirrorMidZ);

        MutableLocationProxy mirrorEndLocation = new MutableLocationProxy();
        bind(UpdateStrategy.READ_WRITE, zippynozzletip, "mirrorEndLocation", mirrorEndLocation, "location");
        addWrappedBinding(mirrorEndLocation, "lengthX", textFieldMirrorEndX, "text", lengthConverter);
        addWrappedBinding(mirrorEndLocation, "lengthY", textFieldMirrorEndY, "text", lengthConverter);
        addWrappedBinding(mirrorEndLocation, "lengthZ", textFieldMirrorEndZ, "text", lengthConverter);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldMirrorEndX);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldMirrorEndY);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldMirrorEndZ);

        MutableLocationProxy changerStartLocation = new MutableLocationProxy();
        bind(UpdateStrategy.READ_WRITE, zippynozzletip, "changerStartLocation", changerStartLocation, "location");
        addWrappedBinding(changerStartLocation, "lengthX", textFieldChangerStartX, "text", lengthConverter);
        addWrappedBinding(changerStartLocation, "lengthY", textFieldChangerStartY, "text", lengthConverter);
        addWrappedBinding(changerStartLocation, "lengthZ", textFieldChangerStartZ, "text", lengthConverter);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldChangerStartX);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldChangerStartY);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldChangerStartZ);

        MutableLocationProxy changerMidLocation = new MutableLocationProxy();
        bind(UpdateStrategy.READ_WRITE, zippynozzletip, "changerMidLocation", changerMidLocation, "location");
        addWrappedBinding(changerMidLocation, "lengthX", textFieldChangerMidX, "text", lengthConverter);
        addWrappedBinding(changerMidLocation, "lengthY", textFieldChangerMidY, "text", lengthConverter);
        addWrappedBinding(changerMidLocation, "lengthZ", textFieldChangerMidZ, "text", lengthConverter);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldChangerMidX);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldChangerMidY);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldChangerMidZ);

        MutableLocationProxy changerEndLocation = new MutableLocationProxy();
        bind(UpdateStrategy.READ_WRITE, zippynozzletip, "changerEndLocation", changerEndLocation, "location");
        addWrappedBinding(changerEndLocation, "lengthX", textFieldChangerEndX, "text", lengthConverter);
        addWrappedBinding(changerEndLocation, "lengthY", textFieldChangerEndY, "text", lengthConverter);
        addWrappedBinding(changerEndLocation, "lengthZ", textFieldChangerEndZ, "text", lengthConverter);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldChangerEndX);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldChangerEndY);
        ComponentDecorators.decorateWithAutoSelectAndLengthConversion(textFieldChangerEndZ);

        addWrappedBinding(zippynozzletip, "vision.enabled", chckbxVisionEnabled, "selected");
        addWrappedBinding(zippynozzletip, "vision.templateImage", labelTemplateImage, "icon", imageConverter);
        addWrappedBinding(zippynozzletip, "vision.areaOfInterest.x", textFieldAoiX, "text", intConverter);
        addWrappedBinding(zippynozzletip, "vision.areaOfInterest.y", textFieldAoiY, "text", intConverter);
        addWrappedBinding(zippynozzletip, "vision.areaOfInterest.width", textFieldAoiWidth, "text", intConverter);
        addWrappedBinding(zippynozzletip, "vision.areaOfInterest.height", textFieldAoiHeight, "text", intConverter);
        ComponentDecorators.decorateWithAutoSelect(textFieldAoiX);
        ComponentDecorators.decorateWithAutoSelect(textFieldAoiY);
        ComponentDecorators.decorateWithAutoSelect(textFieldAoiWidth);
        ComponentDecorators.decorateWithAutoSelect(textFieldAoiHeight);


    }
    @SuppressWarnings("serial")
    private Action selectTemplateImageAction = new AbstractAction("Select") {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            CameraView cameraView = MainFrame.cameraPanel
                    .getSelectedCameraView();
            cameraView.setSelectionEnabled(true);
            // org.openpnp.model.Rectangle r =
            // feeder.getVision().getTemplateImageCoordinates();
            org.openpnp.model.Rectangle r = null;
            if (r == null || r.getWidth() == 0 || r.getHeight() == 0) {
                cameraView.setSelection(0, 0, 100, 100);
            }
            else {
                // cameraView.setSelection(r.getLeft(), r.getTop(),
                // r.getWidth(), r.getHeight());
            }
            btnChangeTemplateImage.setAction(confirmSelectTemplateImageAction);
            cancelSelectTemplateImageAction.setEnabled(true);
        }
    };

    @SuppressWarnings("serial")
    private Action confirmSelectTemplateImageAction = new AbstractAction(
            "Confirm") {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            new Thread() {
                public void run() {
                    CameraView cameraView = MainFrame.cameraPanel
                            .getSelectedCameraView();
                    BufferedImage image = cameraView.captureSelectionImage();
                    if (image == null) {
                        MessageBoxes
                                .errorBox(
                                        ZippyNozzleTipConfigurationWizard.this,
                                        "No Image Selected",
                                        "Please select an area of the camera image using the mouse.");
                    }
                    else {
                        labelTemplateImage.setIcon(new ImageIcon(image));
                    }
                    cameraView.setSelectionEnabled(false);
                    btnChangeTemplateImage.setAction(selectTemplateImageAction);
                    cancelSelectTemplateImageAction.setEnabled(false);
                }
            }.start();
        }
    };

    @SuppressWarnings("serial")
    private Action cancelSelectTemplateImageAction = new AbstractAction(
            "Cancel") {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            btnChangeTemplateImage.setAction(selectTemplateImageAction);
            cancelSelectTemplateImageAction.setEnabled(false);
            CameraView cameraView = MainFrame.cameraPanel
                    .getSelectedCameraView();
            if (cameraView == null) {
                MessageBoxes.errorBox(getTopLevelAncestor(), "Error",
                        "Unable to locate Camera.");
            }
            cameraView.setSelectionEnabled(false);
        }
    };

    @SuppressWarnings("serial")
    private Action selectAoiAction = new AbstractAction("Select") {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            btnChangeAoi.setAction(confirmSelectAoiAction);
            cancelSelectAoiAction.setEnabled(true);
            CameraView cameraView = MainFrame.cameraPanel.getSelectedCameraView();
            cameraView.setSelectionEnabled(true);
/*            org.openpnp.model.Rectangle r = zippynozzletip.getVision().getAreaOfInterest();
            if (r == null || r.getWidth() == 0 || r.getHeight() == 0) {
                cameraView.setSelection(0, 0, 100, 100);
            }
            else {
                cameraView.setSelection(r.getX(), r.getY(), r.getWidth(),
                        r.getHeight());
            }
*/        }
    };

    @SuppressWarnings("serial")
    private Action confirmSelectAoiAction = new AbstractAction("Confirm") {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            new Thread() {
                public void run() {
                    btnChangeAoi.setAction(selectAoiAction);
                    cancelSelectAoiAction.setEnabled(false);

                    CameraView cameraView = MainFrame.cameraPanel
                            .getSelectedCameraView();
                    cameraView.setSelectionEnabled(false);
                    final Rectangle rect = cameraView.getSelection();
                    SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            textFieldAoiX.setText(Integer.toString(rect.x));
                            textFieldAoiY.setText(Integer.toString(rect.y));
                            textFieldAoiWidth.setText(Integer
                                    .toString(rect.width));
                            textFieldAoiHeight.setText(Integer
                                    .toString(rect.height));
                        }
                    });
                }
            }.start();
        }
    };

    @SuppressWarnings("serial")
    private Action cancelSelectAoiAction = new AbstractAction("Cancel") {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            btnChangeAoi.setAction(selectAoiAction);
            cancelSelectAoiAction.setEnabled(false);
            CameraView cameraView = MainFrame.cameraPanel
                    .getSelectedCameraView();
            if (cameraView == null) {
                MessageBoxes.errorBox(getTopLevelAncestor(), "Error",
                        "Unable to locate Camera.");
            }
            cameraView.setSelectionEnabled(false);
        }
    };

}
TOP

Related Classes of org.openpnp.machine.zippy.ZippyNozzleTipConfigurationWizard

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.