/** * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT * All rights reserved. Use is subject to license terms. See LICENSE.TXT */ package org.diirt.datasource.sample.graphene; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.image.BufferedImage; import java.util.logging.Level; import java.util.logging.Logger; import org.diirt.graphene.InterpolationScheme; import org.diirt.graphene.LineGraph2DRendererUpdate; import org.diirt.datasource.PVReader; import org.diirt.datasource.PVManager; import org.diirt.datasource.PVReaderListener; import org.diirt.vtype.ValueUtil; import org.diirt.datasource.PVReaderEvent; import org.diirt.datasource.graphene.Graph2DResult; import org.diirt.datasource.graphene.LineGraph2DExpression; import static org.diirt.datasource.graphene.ExpressionLanguage.*; import static org.diirt.datasource.formula.ExpressionLanguage.*; import org.diirt.datasource.sample.SetupUtil; import static org.diirt.util.concurrent.Executors.swingEDT; import static org.diirt.util.time.TimeDuration.*; /** * * @author carcassi */ public class LineGraphSample extends javax.swing.JFrame { /** * Creates new form MockWaterfallPlot */ public LineGraphSample() { initComponents(); plotView.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { if (plot != null) { plot.update(new LineGraph2DRendererUpdate().imageHeight(plotView.getHeight()).imageWidth(plotView.getWidth())); } } }); } private PVReader<Graph2DResult> pv; private LineGraph2DExpression plot; /** * 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() { jLabel1 = new javax.swing.JLabel(); dataFormulaField = new javax.swing.JTextField(); lastError = new javax.swing.JTextField(); plotView = new org.diirt.datasource.sample.ImagePanel(); jLabel2 = new javax.swing.JLabel(); xColumnField = new javax.swing.JTextField(); jLabel3 = new javax.swing.JLabel(); yColumnField = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); tooltipColumnField = new javax.swing.JTextField(); jSeparator1 = new javax.swing.JSeparator(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jLabel1.setText("Data Formula:"); dataFormulaField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { dataFormulaFieldActionPerformed(evt); } }); lastError.setEditable(false); javax.swing.GroupLayout plotViewLayout = new javax.swing.GroupLayout(plotView); plotView.setLayout(plotViewLayout); plotViewLayout.setHorizontalGroup( plotViewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 497, Short.MAX_VALUE) ); plotViewLayout.setVerticalGroup( plotViewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 197, Short.MAX_VALUE) ); jLabel2.setText("X Column:"); xColumnField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { xColumnFieldActionPerformed(evt); } }); jLabel3.setText("Y Column:"); yColumnField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { yColumnFieldActionPerformed(evt); } }); jLabel4.setText("Tooltip Column:"); tooltipColumnField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { tooltipColumnFieldActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().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(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(dataFormulaField) .addGap(12, 12, 12)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(plotView, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(lastError)) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(xColumnField) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(yColumnField) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(tooltipColumnField) .addContainerGap()))) .addComponent(jSeparator1) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(dataFormulaField, 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.BASELINE) .addComponent(jLabel2) .addComponent(xColumnField, 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.BASELINE) .addComponent(jLabel3) .addComponent(yColumnField, 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.BASELINE) .addComponent(jLabel4) .addComponent(tooltipColumnField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(plotView, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lastError, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void dataFormulaFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dataFormulaFieldActionPerformed if (pv != null) { pv.close(); plotView.setImage(null); plot = null; } if (dataFormulaField.getText() == null || dataFormulaField.getText().trim().isEmpty()) { return; } if (plot == null) { plot = lineGraphOf(formula(dataFormulaField.getText()), formulaArg(xColumnField.getText()), formulaArg(yColumnField.getText()), formulaArg(tooltipColumnField.getText())); } plot.update(new LineGraph2DRendererUpdate().imageHeight(plotView.getHeight()).imageWidth(plotView.getWidth()).interpolation(InterpolationScheme.LINEAR)); pv = PVManager.read(plot) .notifyOn(swingEDT()) .readListener(new PVReaderListener<Graph2DResult>() { @Override public void pvChanged(PVReaderEvent<Graph2DResult> event) { setLastError(pv.lastException()); if (pv.getValue() != null) { BufferedImage image = ValueUtil.toImage(pv.getValue().getImage()); plotView.setImage(image); } } }) .maxRate(ofHertz(50)); }//GEN-LAST:event_dataFormulaFieldActionPerformed private void yColumnFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_yColumnFieldActionPerformed dataFormulaFieldActionPerformed(evt); }//GEN-LAST:event_yColumnFieldActionPerformed private void tooltipColumnFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tooltipColumnFieldActionPerformed dataFormulaFieldActionPerformed(evt); }//GEN-LAST:event_tooltipColumnFieldActionPerformed private void xColumnFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_xColumnFieldActionPerformed dataFormulaFieldActionPerformed(evt); }//GEN-LAST:event_xColumnFieldActionPerformed private void setLastError(Exception ex) { if (ex != null) { lastError.setText(ex.getMessage()); ex.printStackTrace(); Logger.getLogger(LineGraphSample.class.getName()).log(Level.WARNING, "Error", ex); } else { lastError.setText(""); } } final BufferedImage finalBuffer = new BufferedImage(100, 100, BufferedImage.TYPE_3BYTE_BGR); /** * @param args the command line arguments */ public static void main(String args[]) { SetupUtil.defaultCASetupForSwing(); java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new LineGraphSample().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTextField dataFormulaField; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JSeparator jSeparator1; private javax.swing.JTextField lastError; private org.diirt.datasource.sample.ImagePanel plotView; private javax.swing.JTextField tooltipColumnField; private javax.swing.JTextField xColumnField; private javax.swing.JTextField yColumnField; // End of variables declaration//GEN-END:variables }