package org.clothocad.tool.primerdesigner;
import java.awt.Color;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter.DefaultHighlightPainter;
import javax.swing.text.Highlighter;
import org.clothocore.api.core.Collector;
import org.clothocore.api.data.ObjLink;
import org.clothocore.api.data.ObjType;
import org.openide.util.Exceptions;
import org.openide.windows.TopComponent;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* DesignFrame.java
*
* Created on Jul 5, 2011, 5:06:34 PM
*/
/**
* View for PrimerDesignController
* @author Jenhan Tao
*/
public class DesignFrame extends javax.swing.JFrame {
/** Creates new form DesignFrame */
public DesignFrame() {
initComponents();
}
public DesignFrame(String s) {
initComponents();
sequenceTextField.setText(s);
sequenceTextField.setCaretPosition(0);
endLabel.setText(Integer.toString(s.length()));
_controller = new PrimerDesignController(this);
ArrayList<ObjLink> featureList = Collector.getAllLinksOf(ObjType.FEATURE);
insertComboBox1.removeAllItems();
insertComboBox2.removeAllItems();
insertComboBox1.addItem("none");
insertComboBox2.addItem("none");
for (ObjLink ol : featureList) {
insertComboBox1.addItem(ol.name);
insertComboBox2.addItem(ol.name);
}
insertComboBox1.setSize(50, 28);
insertComboBox2.setSize(50, 28);
sequenceTextField.getDocument().addDocumentListener(new PrimerDesignerListener(this));
}
/** 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() {
generateButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
insertComboBox2 = new javax.swing.JComboBox();
insertComboBox1 = new javax.swing.JComboBox();
spacerTextField1 = new javax.swing.JTextField();
spacerTextField2 = new javax.swing.JTextField();
backgroundPanel = new javax.swing.JPanel();
sequenceTextField = new javax.swing.JTextField();
navigatorPanel = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
positionLabel = new javax.swing.JLabel();
startLabel = new javax.swing.JLabel();
endLabel = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
tmTextField = new javax.swing.JTextField();
jLabel8 = new javax.swing.JLabel();
lengthTextField = new javax.swing.JTextField();
statusLabel = new javax.swing.JLabel();
reCheckButton = new javax.swing.JButton();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
loadSequenceMenuItem = new javax.swing.JMenuItem();
jMenuItem1 = new javax.swing.JMenuItem();
jMenu2 = new javax.swing.JMenu();
switchViewMenuItem = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.title")); // NOI18N
generateButton.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.generateButton.text")); // NOI18N
generateButton.setMaximumSize(new java.awt.Dimension(140, 30));
generateButton.setMinimumSize(new java.awt.Dimension(140, 30));
generateButton.setPreferredSize(new java.awt.Dimension(140, 30));
generateButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
generateButtonActionPerformed(evt);
}
});
cancelButton.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.cancelButton.text")); // NOI18N
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
insertComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
insertComboBox2.setToolTipText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.insertComboBox2.toolTipText")); // NOI18N
insertComboBox2.setMaximumSize(new java.awt.Dimension(50, 28));
insertComboBox2.setMinimumSize(new java.awt.Dimension(50, 28));
insertComboBox2.setPreferredSize(new java.awt.Dimension(50, 28));
insertComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
insertComboBox1.setToolTipText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.insertComboBox1.toolTipText")); // NOI18N
insertComboBox1.setMaximumSize(new java.awt.Dimension(50, 28));
insertComboBox1.setMinimumSize(new java.awt.Dimension(50, 28));
insertComboBox1.setPreferredSize(new java.awt.Dimension(50, 28));
spacerTextField1.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.spacerTextField1.text")); // NOI18N
spacerTextField1.setToolTipText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.spacerTextField1.toolTipText")); // NOI18N
spacerTextField1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
spacerTextField1MousePressed(evt);
}
});
spacerTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
spacerTextField1KeyTyped(evt);
}
public void keyPressed(java.awt.event.KeyEvent evt) {
spacerTextField1KeyPressed(evt);
}
});
spacerTextField2.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.spacerTextField2.text")); // NOI18N
spacerTextField2.setToolTipText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.spacerTextField2.toolTipText")); // NOI18N
spacerTextField2.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
spacerTextField2KeyTyped(evt);
}
public void keyPressed(java.awt.event.KeyEvent evt) {
spacerTextField2KeyPressed(evt);
}
});
sequenceTextField.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.sequenceTextField.text")); // NOI18N
sequenceTextField.setMaximumSize(new java.awt.Dimension(200, 30));
sequenceTextField.setMinimumSize(new java.awt.Dimension(100, 30));
sequenceTextField.setPreferredSize(new java.awt.Dimension(200, 30));
sequenceTextField.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
sequenceTextFieldMouseClicked(evt);
}
});
sequenceTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
sequenceTextFieldActionPerformed(evt);
}
});
sequenceTextField.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
sequenceTextFieldKeyTyped(evt);
}
public void keyPressed(java.awt.event.KeyEvent evt) {
sequenceTextFieldKeyPressed(evt);
}
});
navigatorPanel.setBackground(java.awt.Color.gray);
navigatorPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
navigatorPanel.setForeground(java.awt.Color.gray);
navigatorPanel.setToolTipText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.navigatorPanel.toolTipText")); // NOI18N
navigatorPanel.setMaximumSize(new java.awt.Dimension(200, 30));
navigatorPanel.setMinimumSize(new java.awt.Dimension(100, 30));
navigatorPanel.setPreferredSize(new java.awt.Dimension(200, 30));
navigatorPanel.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
navigatorPanelMouseClicked(evt);
}
public void mouseEntered(java.awt.event.MouseEvent evt) {
navigatorPanelMouseEntered(evt);
}
});
navigatorPanel.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(java.awt.event.MouseEvent evt) {
navigatorPanelMouseMoved(evt);
}
});
javax.swing.GroupLayout navigatorPanelLayout = new javax.swing.GroupLayout(navigatorPanel);
navigatorPanel.setLayout(navigatorPanelLayout);
navigatorPanelLayout.setHorizontalGroup(
navigatorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 513, Short.MAX_VALUE)
);
navigatorPanelLayout.setVerticalGroup(
navigatorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 26, Short.MAX_VALUE)
);
javax.swing.GroupLayout backgroundPanelLayout = new javax.swing.GroupLayout(backgroundPanel);
backgroundPanel.setLayout(backgroundPanelLayout);
backgroundPanelLayout.setHorizontalGroup(
backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(backgroundPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(navigatorPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 517, Short.MAX_VALUE)
.addComponent(sequenceTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 517, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
backgroundPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {navigatorPanel, sequenceTextField});
backgroundPanelLayout.setVerticalGroup(
backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(backgroundPanelLayout.createSequentialGroup()
.addComponent(navigatorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sequenceTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
backgroundPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {navigatorPanel, sequenceTextField});
jLabel2.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.jLabel2.text")); // NOI18N
jLabel3.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.jLabel3.text")); // NOI18N
jLabel4.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.jLabel4.text")); // NOI18N
jLabel5.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.jLabel5.text")); // NOI18N
positionLabel.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.positionLabel.text")); // NOI18N
startLabel.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.startLabel.text")); // NOI18N
startLabel.setMaximumSize(new java.awt.Dimension(40, 30));
startLabel.setMinimumSize(new java.awt.Dimension(40, 30));
endLabel.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.endLabel.text")); // NOI18N
endLabel.setMaximumSize(new java.awt.Dimension(40, 30));
endLabel.setMinimumSize(new java.awt.Dimension(40, 30));
jLabel7.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.jLabel7.text")); // NOI18N
jLabel7.setEnabled(false);
tmTextField.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.tmTextField.text")); // NOI18N
tmTextField.setToolTipText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.tmTextField.toolTipText")); // NOI18N
tmTextField.setEnabled(false);
tmTextField.setMinimumSize(new java.awt.Dimension(35, 28));
tmTextField.setPreferredSize(new java.awt.Dimension(35, 28));
tmTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
tmTextFieldActionPerformed(evt);
}
});
tmTextField.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
tmTextFieldKeyTyped(evt);
}
});
jLabel8.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.jLabel8.text")); // NOI18N
lengthTextField.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.lengthTextField.text")); // NOI18N
lengthTextField.setToolTipText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.lengthTextField.toolTipText")); // NOI18N
lengthTextField.setMinimumSize(new java.awt.Dimension(35, 28));
lengthTextField.setPreferredSize(new java.awt.Dimension(35, 28));
lengthTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
lengthTextFieldActionPerformed(evt);
}
});
lengthTextField.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
lengthTextFieldKeyTyped(evt);
}
});
statusLabel.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.statusLabel.text")); // NOI18N
reCheckButton.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.reCheckButton.text")); // NOI18N
reCheckButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
reCheckButtonActionPerformed(evt);
}
});
jMenu1.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.jMenu1.text")); // NOI18N
loadSequenceMenuItem.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.loadSequenceMenuItem.text")); // NOI18N
loadSequenceMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
loadSequenceMenuItemActionPerformed(evt);
}
});
jMenu1.add(loadSequenceMenuItem);
jMenuItem1.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.jMenuItem1.text")); // NOI18N
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem1);
jMenuBar1.add(jMenu1);
jMenu2.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.jMenu2.text")); // NOI18N
switchViewMenuItem.setText(org.openide.util.NbBundle.getMessage(DesignFrame.class, "DesignFrame.switchViewMenuItem.text")); // NOI18N
switchViewMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
switchViewMenuItemActionPerformed(evt);
}
});
jMenu2.add(switchViewMenuItem);
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(spacerTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel5)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel7)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tmTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel4)
.addComponent(insertComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 138, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(insertComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel3)
.addComponent(spacerTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel8)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lengthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(reCheckButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(generateButton, javax.swing.GroupLayout.PREFERRED_SIZE, 134, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cancelButton)))
.addContainerGap())
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(statusLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE)
.addGap(497, 497, 497))
.addGroup(layout.createSequentialGroup()
.addGap(14, 14, 14)
.addComponent(startLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(187, 187, 187)
.addComponent(positionLabel)
.addGap(199, 199, 199)
.addComponent(endLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(88, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(backgroundPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())))
);
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spacerTextField1, spacerTextField2});
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {insertComboBox1, insertComboBox2});
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(startLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(positionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(endLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(backgroundPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(jLabel4))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(spacerTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(insertComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(insertComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(spacerTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel3)
.addGap(34, 34, 34)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel7)
.addComponent(tmTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel8)
.addComponent(lengthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(statusLabel))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(reCheckButton)
.addComponent(generateButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cancelButton)))
.addContainerGap(24, Short.MAX_VALUE))
);
layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {insertComboBox1, insertComboBox2});
layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {spacerTextField1, spacerTextField2});
layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {cancelButton, generateButton, reCheckButton});
pack();
}// </editor-fold>//GEN-END:initComponents
public PrimerDesignController getController() {
return _controller;
}
public void updateLabels() {
endLabel.setText("" + sequenceTextField.getText().length());
}
private void generateButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateButtonActionPerformed
statusLabel.setText("Status: Generating primers....");
String seq = sequenceTextField.getText();
reLocations = _controller.checkForRESites();
Double tm;
int length;
if (!this.checkRESites()) {
try {
tm = Double.parseDouble(tmTextField.getText());
} catch (NumberFormatException e) {
statusLabel.setText("Warning: invalid target melting temperature");
return;
}
try {
length = Integer.parseInt(lengthTextField.getText());
} catch (NumberFormatException e) {
statusLabel.setText("Warning: invalid target primer length");
return;
}
String insert1 = (String) insertComboBox1.getSelectedItem();
String insert2 = (String) insertComboBox2.getSelectedItem();
String spacer1 = spacerTextField1.getText().toUpperCase();
String spacer2 = spacerTextField2.getText().toUpperCase();
_controller.generatePrimers(seq, tm, length, insert1, insert2, spacer1, spacer2);
statusLabel.setText("Primers calculated");
} else {
statusLabel.setText("Restriction sites found");
return;
}
// if (reLocations == null) {
// try {
// tm = Double.parseDouble(tmTextField.getText());
// } catch (NumberFormatException e) {
// statusLabel.setText("Warning: invalid target melting temperature");
// return;
// }
// try {
// length = Integer.parseInt(lengthTextField.getText());
// } catch (NumberFormatException e) {
// statusLabel.setText("Warning: invalid target primer length");
// return;
// }
// String insert1 = (String) insertComboBox1.getSelectedItem();
// String insert2 = (String) insertComboBox2.getSelectedItem();
// String spacer1 = spacerTextField1.getText().toUpperCase();
// String spacer2 = spacerTextField2.getText().toUpperCase();
// _controller.generatePrimers(seq, tm, length, insert1, insert2, spacer1, spacer2);
// } else {
// Highlighter h = sequenceTextField.getHighlighter();
// DefaultHighlightPainter painter = new javax.swing.text.DefaultHighlighter.DefaultHighlightPainter(Color.RED);
// java.awt.Graphics g = navigatorPanel.getGraphics().create();
// g.setColor(Color.RED);
// h.removeAllHighlights();
// for (Integer i : reLocations.keySet()) {
// try {
// h.addHighlight(i, reLocations.get(i), painter);
// Double placement = new Double(i / sequenceTextField.getText().length());
// placement = Math.floor(placement * navigatorPanel.getWidth());
// g.fillRect(placement.intValue(), 0, 3, navigatorPanel.getHeight());
// } catch (BadLocationException ex) {
// Exceptions.printStackTrace(ex);
// }
// }
// g.dispose();
// }
}//GEN-LAST:event_generateButtonActionPerformed
private boolean checkRESites() {
// reLocations = _controller.checkForRESites();
if (reLocations != null) {
Highlighter h = sequenceTextField.getHighlighter();
DefaultHighlightPainter painter = new javax.swing.text.DefaultHighlighter.DefaultHighlightPainter(Color.RED);
java.awt.Graphics g = navigatorPanel.getGraphics().create();
g.setColor(Color.RED);
h.removeAllHighlights();
for (Integer i : reLocations.keySet()) {
try {
h.addHighlight(i, reLocations.get(i), painter);
Double placement = new Double(i / sequenceTextField.getText().length());
placement = Math.floor(placement * navigatorPanel.getWidth());
g.fillRect(placement.intValue(), 0, 3, navigatorPanel.getHeight());
} catch (BadLocationException ex) {
Exceptions.printStackTrace(ex);
}
}
g.dispose();
return true;
} else {
return false;
}
}
/**
* Retrieves the text in sequence text field
* @return
*/
public String getText() {
return sequenceTextField.getText();
}
public JTextField getSequenceTextField() {
return sequenceTextField;
}
/**
* returns value in Tm text field
* @return
*/
public Double getTm() {
Double.parseDouble(tmTextField.getText());
return null;
}
private void sequenceTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sequenceTextFieldActionPerformed
}//GEN-LAST:event_sequenceTextFieldActionPerformed
private void navigatorPanelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_navigatorPanelMouseClicked
Double width = new Double(navigatorPanel.getWidth());
Double position = new Double(evt.getX());
int sequenceLength = sequenceTextField.getText().length();
Double newPosition = position / width * sequenceLength;
positionLabel.setText("Position: " + newPosition.intValue());
if (newPosition < sequenceLength) {
sequenceTextField.setCaretPosition(newPosition.intValue());
}
if (sequenceTextField.getText().length() > 0) {
java.awt.Graphics g = navigatorPanel.getGraphics().create();
g.clearRect(0, 0, navigatorPanel.getWidth(), navigatorPanel.getWidth());
g.setColor(Color.GREEN);
Double placement = sequenceTextField.getCaretPosition() / (sequenceTextField.getText().length() + 0.0);
placement = Math.floor(placement * navigatorPanel.getWidth());
g.fillRect(placement.intValue(), 0, 3, navigatorPanel.getHeight());
g.dispose();
// if (reLocations != null) {
// g.setColor(Color.red);
// for (Integer i : reLocations.keySet()) {
// placement = new Double(i / sequenceTextField.getText().length());
// placement = Math.floor(placement * navigatorPanel.getWidth());
// g.fillRect(placement.intValue(), 0, 3, navigatorPanel.getHeight());
//
// }
// }
//
// g.dispose();
this.checkRESites();
positionLabel.setText("Position: " + sequenceTextField.getCaretPosition());
}
}//GEN-LAST:event_navigatorPanelMouseClicked
private void tmTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tmTextFieldActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_tmTextFieldActionPerformed
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
_controller.close();
}//GEN-LAST:event_cancelButtonActionPerformed
private void lengthTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lengthTextFieldActionPerformed
}//GEN-LAST:event_lengthTextFieldActionPerformed
private void navigatorPanelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_navigatorPanelMouseEntered
}//GEN-LAST:event_navigatorPanelMouseEntered
private void navigatorPanelMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_navigatorPanelMouseMoved
}//GEN-LAST:event_navigatorPanelMouseMoved
private void sequenceTextFieldMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_sequenceTextFieldMouseClicked
if (sequenceTextField.getText().length() > 0) {
java.awt.Graphics g = navigatorPanel.getGraphics().create();
g.clearRect(0, 0, navigatorPanel.getWidth(), navigatorPanel.getWidth());
g.setColor(Color.GREEN);
Double placement = sequenceTextField.getCaretPosition() / (sequenceTextField.getText().length() + 0.0);
placement = Math.floor(placement * navigatorPanel.getWidth());
g.fillRect(placement.intValue(), 0, 3, navigatorPanel.getHeight());
checkRESites();
// if (reLocations != null) {
// g.setColor(Color.red);
// for (Integer i : reLocations.keySet()) {
// placement = new Double(i / sequenceTextField.getText().length());
// placement = Math.floor(placement * navigatorPanel.getWidth());
// g.fillRect(placement.intValue(), 0, 3, navigatorPanel.getHeight());
//
// }
// }
g.dispose();
}
positionLabel.setText("Position: "+sequenceTextField.getCaretPosition()); }//GEN-LAST:event_sequenceTextFieldMouseClicked
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
_controller.close();
}//GEN-LAST:event_jMenuItem1ActionPerformed
private void switchViewMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_switchViewMenuItemActionPerformed
_controller.switchViews();
}//GEN-LAST:event_switchViewMenuItemActionPerformed
private void reCheckButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_reCheckButtonActionPerformed
String seq = sequenceTextField.getText();
reLocations = _controller.checkForRESites();
if (reLocations == null) {
statusLabel.setText("No restriction sites found");
return;
} else {
// Highlighter h = sequenceTextField.getHighlighter();
// DefaultHighlightPainter painter = new javax.swing.text.DefaultHighlighter.DefaultHighlightPainter(Color.RED);
// java.awt.Graphics g = navigatorPanel.getGraphics().create();
// g.clearRect(0, 0, navigatorPanel.getWidth(), navigatorPanel.getHeight());
// g.setColor(Color.RED);
// h.removeAllHighlights();
// for (Integer i : reLocations.keySet()) {
// try {
// h.addHighlight(i, reLocations.get(i), painter);
// Double placement = new Double(i / sequenceTextField.getText().length());
// placement = Math.floor(placement * navigatorPanel.getWidth());
// g.fillRect(placement.intValue(), 0, 3, navigatorPanel.getHeight());
// } catch (BadLocationException ex) {
// Exceptions.printStackTrace(ex);
// }
// }
checkRESites();
statusLabel.setText("Restriction sites found");
// g.dispose();
} }//GEN-LAST:event_reCheckButtonActionPerformed
private void sequenceTextFieldKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_sequenceTextFieldKeyPressed
positionLabel.setText("Position: " + sequenceTextField.getCaretPosition());
if (sequenceTextField.getText().length() > 0) {
java.awt.Graphics g = navigatorPanel.getGraphics().create();
g.clearRect(0, 0, navigatorPanel.getWidth(), navigatorPanel.getWidth());
g.setColor(Color.GREEN);
Double placement = sequenceTextField.getCaretPosition() / (sequenceTextField.getText().length() + 0.0);
placement = Math.floor(placement * navigatorPanel.getWidth());
g.fillRect(placement.intValue(), 0, 3, navigatorPanel.getHeight());
checkRESites();
g.dispose();
}
_controller.validateKeyPressed(evt);
}//GEN-LAST:event_sequenceTextFieldKeyPressed
private void spacerTextField1MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_spacerTextField1MousePressed
}//GEN-LAST:event_spacerTextField1MousePressed
private void spacerTextField2KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_spacerTextField2KeyPressed
_controller.validateKeyPressed(evt);
}//GEN-LAST:event_spacerTextField2KeyPressed
private void spacerTextField1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_spacerTextField1KeyPressed
_controller.validateKeyPressed(evt);
}//GEN-LAST:event_spacerTextField1KeyPressed
private void spacerTextField1KeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_spacerTextField1KeyTyped
_controller.validateKeyTyped(evt);
}//GEN-LAST:event_spacerTextField1KeyTyped
private void spacerTextField2KeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_spacerTextField2KeyTyped
_controller.validateKeyTyped(evt);
}//GEN-LAST:event_spacerTextField2KeyTyped
private void sequenceTextFieldKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_sequenceTextFieldKeyTyped
positionLabel.setText("Position: " + sequenceTextField.getCaretPosition());
_controller.validateKeyTyped(evt);
}//GEN-LAST:event_sequenceTextFieldKeyTyped
private void tmTextFieldKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tmTextFieldKeyTyped
_controller.validateNumTyped(evt);
}//GEN-LAST:event_tmTextFieldKeyTyped
private void lengthTextFieldKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_lengthTextFieldKeyTyped
_controller.validateNumTyped(evt);
}//GEN-LAST:event_lengthTextFieldKeyTyped
private void loadSequenceMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadSequenceMenuItemActionPerformed
_controller.loadSequence();
}//GEN-LAST:event_loadSequenceMenuItemActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new DesignFrame().setVisible(true);
}
});
}
private HashMap<Integer, Integer> reLocations;
private PrimerDesignController _controller;
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel backgroundPanel;
private javax.swing.JButton cancelButton;
private javax.swing.JLabel endLabel;
private javax.swing.JButton generateButton;
private javax.swing.JComboBox insertComboBox1;
private javax.swing.JComboBox insertComboBox2;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JTextField lengthTextField;
private javax.swing.JMenuItem loadSequenceMenuItem;
private javax.swing.JPanel navigatorPanel;
private javax.swing.JLabel positionLabel;
private javax.swing.JButton reCheckButton;
private javax.swing.JTextField sequenceTextField;
private javax.swing.JTextField spacerTextField1;
private javax.swing.JTextField spacerTextField2;
private javax.swing.JLabel startLabel;
private javax.swing.JLabel statusLabel;
private javax.swing.JMenuItem switchViewMenuItem;
private javax.swing.JTextField tmTextField;
// End of variables declaration//GEN-END:variables
}