/* * * !!!!! * NOTE: PLEASE ONLY EDIT THIS USING THE NETBEANS IDE 6.0.1 OR HIGHER!!!! * !!!!! * * ... an .xml file is associated with this class. Cheers. * * GenericExtruderTabPanel.java * * Created on 27 March 2008, 18:22 */ package org.reprap.gui.botConsole; import org.reprap.Preferences; import javax.swing.JOptionPane; import javax.swing.*; import org.reprap.comms.snap.SNAPAddress; import org.reprap.comms.snap.SNAPCommunicator; import org.reprap.devices.GenericExtruder; import java.awt.Color; /** * * @author en0es */ public class GenericExtruderTabPanel extends javax.swing.JPanel { private int extruderID; private Thread pollThread = null; private boolean pollThreadExiting = false; private GenericExtruder extruder; /** Creates new form GenericExtruderTabPanel */ public GenericExtruderTabPanel() { UIManager.put("ProgressBar.background", Color.WHITE); UIManager.put("ProgressBar.foreground", Color.BLUE); initComponents(); pollThread = new Thread() { public void run() { Thread.currentThread().setName("GUI Poll"); while(!pollThreadExiting) { try { Thread.sleep(500); refreshTemperature(); } catch (InterruptedException ex) { // This is normal when shutting down, so ignore } } } }; pollThread.start(); } private void deactivatePanel() { coolingCheck.setEnabled(false); currentTempLabel.setEnabled(false); extrudeButton.setEnabled(false); feedstockQtyLabel.setEnabled(false); heatButton.setEnabled(false); homeAllButton.setEnabled(false); jLabel1.setEnabled(false); jLabel11.setEnabled(false); jLabel12.setEnabled(false); jLabel4.setEnabled(false); jLabel5.setEnabled(false); jLabel6.setEnabled(false); jLabel7.setEnabled(false); jPanel2.setEnabled(false); jPanel3.setEnabled(false); jPanel4.setEnabled(false); materialLabel.setEnabled(false); motorReverseCheck.setEnabled(false); motorSpeedField.setEnabled(false); moveToSwapButton.setEnabled(false); nozzleWipeButton.setEnabled(false); targetTempField.setEnabled(false); tempColor.setEnabled(false); tempProgress.setEnabled(false); valveToggleButton.setEnabled(false); } private String prefix; public void initialiseExtruders(int id) throws Exception { extruderID = id; prefix = "Extruder" + id + "_"; extruder = new GenericExtruder(org.reprap.Main.getCommunicator(), new SNAPAddress(Preferences.loadGlobalInt(prefix + "Address")), Preferences.getGlobalPreferences(), extruderID); if(!extruder.isAvailable()) { deactivatePanel(); } } /** 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. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jLabel1 = new javax.swing.JLabel(); materialLabel = new javax.swing.JLabel(); feedstockQtyLabel = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jPanel2 = new javax.swing.JPanel(); targetTempField = new javax.swing.JTextField(); jLabel7 = new javax.swing.JLabel(); currentTempLabel = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); tempProgress = new javax.swing.JProgressBar(); tempColor = new javax.swing.JPanel(); heatButton = new javax.swing.JToggleButton(); coolingCheck = new javax.swing.JCheckBox(); jPanel3 = new javax.swing.JPanel(); motorSpeedField = new javax.swing.JTextField(); jLabel12 = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); extrudeButton = new javax.swing.JToggleButton(); valveToggleButton = new javax.swing.JToggleButton(); motorReverseCheck = new javax.swing.JCheckBox(); jPanel4 = new javax.swing.JPanel(); nozzleWipeButton = new javax.swing.JToggleButton(); homeAllButton = new javax.swing.JToggleButton(); moveToSwapButton = new javax.swing.JToggleButton(); jLabel1.setFont(new java.awt.Font("Tahoma", 0, 12)); jLabel1.setText("Material:"); materialLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); materialLabel.setText("materialType"); feedstockQtyLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); feedstockQtyLabel.setText("00000"); jLabel4.setFont(new java.awt.Font("Tahoma", 0, 12)); jLabel4.setText("Feedstock remaining:"); jLabel5.setFont(new java.awt.Font("Tahoma", 0, 12)); jLabel5.setText("ml"); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Temperature (degrees Celcius)")); targetTempField.setColumns(3); targetTempField.setFont(targetTempField.getFont().deriveFont(targetTempField.getFont().getSize()+1f)); targetTempField.setText("000"); jLabel7.setFont(new java.awt.Font("Tahoma", 0, 12)); jLabel7.setText("Target temperature:"); currentTempLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); currentTempLabel.setText("000"); jLabel6.setFont(new java.awt.Font("Tahoma", 0, 12)); jLabel6.setText("Current temperature:"); tempProgress.setOrientation(1); tempColor.setBackground(new java.awt.Color(255, 255, 255)); javax.swing.GroupLayout tempColorLayout = new javax.swing.GroupLayout(tempColor); tempColor.setLayout(tempColorLayout); tempColorLayout.setHorizontalGroup( tempColorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 52, Short.MAX_VALUE) ); tempColorLayout.setVerticalGroup( tempColorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 48, Short.MAX_VALUE) ); heatButton.setText("Heat is off"); heatButton.setFocusCycleRoot(true); heatButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { heatButtonActionPerformed(evt); } }); coolingCheck.setFont(coolingCheck.getFont().deriveFont(coolingCheck.getFont().getSize()+1f)); coolingCheck.setText("Cooling"); coolingCheck.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { coolingCheckActionPerformed(evt); } }); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(coolingCheck) .addGroup(jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel6) .addGap(18, 18, 18) .addComponent(currentTempLabel)) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel7) .addGap(18, 18, 18) .addComponent(targetTempField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 171, Short.MAX_VALUE) .addComponent(tempProgress, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(tempColor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(heatButton, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(heatButton, javax.swing.GroupLayout.DEFAULT_SIZE, 48, Short.MAX_VALUE) .addComponent(tempProgress, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 48, Short.MAX_VALUE) .addComponent(tempColor, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6) .addComponent(currentTempLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel7) .addComponent(targetTempField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(coolingCheck)) ); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Extrude")); motorSpeedField.setColumns(3); motorSpeedField.setFont(motorSpeedField.getFont().deriveFont(motorSpeedField.getFont().getSize()+1f)); motorSpeedField.setText("000"); jLabel12.setFont(new java.awt.Font("Tahoma", 0, 12)); jLabel12.setText("Rpm"); jLabel11.setFont(new java.awt.Font("Tahoma", 0, 12)); jLabel11.setText("Motor speed:"); extrudeButton.setText("Extrude"); extrudeButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { extrudeButtonActionPerformed(evt); } }); valveToggleButton.setSelected(true); valveToggleButton.setText("Valve is Open"); valveToggleButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); valveToggleButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { valveToggleButtonActionPerformed(evt); } }); motorReverseCheck.setFont(motorReverseCheck.getFont().deriveFont(motorReverseCheck.getFont().getSize()+1f)); motorReverseCheck.setText("Reverse"); motorReverseCheck.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { motorReverseCheckActionPerformed(evt); } }); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel11) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(motorSpeedField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel12) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 100, Short.MAX_VALUE) .addComponent(valveToggleButton, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(extrudeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(motorReverseCheck) .addGap(13, 13, 13)) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel11) .addComponent(motorSpeedField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel12) .addComponent(extrudeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(motorReverseCheck) .addComponent(valveToggleButton, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)) ); jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Maintenance")); nozzleWipeButton.setText("Nozzle wipe"); nozzleWipeButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { nozzleWipeButtonActionPerformed(evt); } }); homeAllButton.setText("Home all"); moveToSwapButton.setText("Move to swap point"); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup() .addContainerGap(241, Short.MAX_VALUE) .addComponent(homeAllButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(moveToSwapButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(nozzleWipeButton) .addContainerGap()) ); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(nozzleWipeButton) .addComponent(moveToSwapButton) .addComponent(homeAllButton)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(materialLabel)) .addGroup(layout.createSequentialGroup() .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(feedstockQtyLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel5))) .addGap(202, 202, 202)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(materialLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4) .addComponent(jLabel5) .addComponent(feedstockQtyLabel)) .addGap(18, 18, 18) .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(12, Short.MAX_VALUE)) ); }// </editor-fold>//GEN-END:initComponents private void coolingCheckActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_coolingCheckActionPerformed try { extruder.setCooler(coolingCheck.isSelected()); } catch (Exception ex) { JOptionPane.showMessageDialog(null, "Exception setting cooler: " + ex); ex.printStackTrace(); } }//GEN-LAST:event_coolingCheckActionPerformed private void motorReverseCheckActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_motorReverseCheckActionPerformed // TODO add your handling code here: }//GEN-LAST:event_motorReverseCheckActionPerformed private boolean unpushed = true; private void heatButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_heatButtonActionPerformed if (unpushed) { try { extruder.setTemperature(Integer.parseInt(targetTempField.getText())); } catch (Exception ex) { JOptionPane.showMessageDialog(null, "Exception setting temperature: " + ex); ex.printStackTrace(); } heatButton.setText("Heat is ON"); unpushed = false; } else { try { extruder.setTemperature(0); } catch (Exception ex) { JOptionPane.showMessageDialog(null, "Exception setting temperature: " + ex); ex.printStackTrace(); } heatButton.setText("Heat is off"); unpushed = true; } }//GEN-LAST:event_heatButtonActionPerformed private boolean extruding = false; private void extrudeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_extrudeButtonActionPerformed if (extruding) { extruding = false; extrudeButton.setText("Extrude"); } else { extruding = true; extrudeButton.setText("Stop"); System.out.println("Extruding at speed: " + motorSpeedField.getText()); } setExtruderSpeed(); }//GEN-LAST:event_extrudeButtonActionPerformed private void nozzleWipeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nozzleWipeButtonActionPerformed // Reprap.finishedLayer(1); // Reprap.betweenLayers(layerNumber); }//GEN-LAST:event_nozzleWipeButtonActionPerformed private void valveToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_valveToggleButtonActionPerformed if (valveToggleButton.isSelected()) { try { extruder.setValve(true); valveToggleButton.setText("Valve is open"); } catch (Exception ex) {} } else { try { extruder.setValve(false); valveToggleButton.setText("Valve is shut"); } catch (Exception ex) {} } }//GEN-LAST:event_valveToggleButtonActionPerformed private void setExtruderSpeed() { try { extruder.setExtrusion(extruding?Integer.parseInt(motorSpeedField.getText()):0, motorReverseCheck.isSelected()); } catch (Exception ex) { JOptionPane.showMessageDialog(null, "Extruder exception: " + ex); ex.printStackTrace(); } } public void setPrefs() throws Exception { setMaterialLabel(Preferences.loadGlobalString(prefix + "MaterialType(name)")); setMotorSpeedField(Preferences.loadGlobalInt(prefix + "ExtrusionSpeed(0..255)")); setTargetTempField(Preferences.loadGlobalInt(prefix + "ExtrusionTemp(C)")); } private void setMaterialLabel(String materialType) { materialLabel.setText(materialType); } private void setMotorSpeedField(int speed) { motorSpeedField.setText(""+speed); } private void setTargetTempField(int temp) { targetTempField.setText(""+temp); } private int currentTemp; private final int BURNING_TEMP = 70; private double colorFactor = 0; private Color c; private void refreshTemperature() { currentTemp = (int)Math.round(extruder.getTemperature()); currentTempLabel.setText("" + currentTemp); tempProgress.setMinimum(0); tempProgress.setMaximum(Integer.parseInt(targetTempField.getText())); tempProgress.setValue(currentTemp); colorFactor = currentTemp/(BURNING_TEMP*1.0); if (colorFactor > 1) colorFactor = 1; if (colorFactor < 0) colorFactor = 0; int red = (int)(colorFactor * 255.0); int blue = 255-(int)(colorFactor * 255.0); c = new Color(red, 0, blue); tempColor.setBackground(c); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JCheckBox coolingCheck; private javax.swing.JLabel currentTempLabel; private javax.swing.JToggleButton extrudeButton; private javax.swing.JLabel feedstockQtyLabel; private javax.swing.JToggleButton heatButton; private javax.swing.JToggleButton homeAllButton; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JLabel materialLabel; private javax.swing.JCheckBox motorReverseCheck; private javax.swing.JTextField motorSpeedField; private javax.swing.JToggleButton moveToSwapButton; private javax.swing.JToggleButton nozzleWipeButton; private javax.swing.JTextField targetTempField; private javax.swing.JPanel tempColor; private javax.swing.JProgressBar tempProgress; private javax.swing.JToggleButton valveToggleButton; // End of variables declaration//GEN-END:variables }