
jive.CommandPanel Maven / Gradle / Ivy
package jive;
import fr.esrf.TangoApi.DeviceProxy;
import fr.esrf.TangoApi.CommandInfo;
import fr.esrf.TangoApi.DeviceData;
import fr.esrf.Tango.DevFailed;
import fr.esrf.Tango.DevVarLongStringArray;
import fr.esrf.Tango.DevVarDoubleStringArray;
import fr.esrf.Tango.DevState;
import fr.esrf.tangoatk.widget.util.ATKConstant;
import fr.esrf.tangoatk.widget.util.ErrorPane;
import fr.esrf.tangoatk.widget.util.ATKGraphicsUtils;
import fr.esrf.tangoatk.widget.util.chart.JLChart;
import fr.esrf.tangoatk.widget.util.chart.JLDataView;
import fr.esrf.tangoatk.widget.util.chart.JLAxis;
import fr.esrf.TangoDs.TangoConst;
import javax.swing.*;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.awt.event.*;
import java.io.IOException;
/**
* The command panel.
*/
class CommandPanel extends JPanel implements ActionListener,ListSelectionListener,TangoConst,MouseListener,ClipboardOwner,DragGestureListener,DragSourceListener {
private CommandInfo[] cmdList;
private ConsolePanel console;
private DeviceProxy device;
private CommonPanel common;
private JList commandList;
private JScrollPane commandView;
private JComboBox arginCombo;
private JLabel arginLabel;
private JLabel descrLabel;
private JLabel arginTypeLabel;
private JTextField arginTypeText;
private JLabel argoutTypeLabel;
private JTextField argoutTypeText;
private JButton argDescrBtn;
private JButton executeBtn;
private JButton plotBtn;
private JFrame chartDlg = null;
private JLChart chart;
private JLDataView plotData;
private JFrame argDescriptionDlg = null;
private JScrollPane arginDescrView;
private JScrollPane argoutDescrView;
private JTextArea arginDescrText;
private JTextArea argoutDescrText;
private JPopupMenu copyMenu;
private JMenuItem copyCommandMenuItem;
private JMenuItem copyDevCommandMenuItem;
/**
* Construct the device panel
* @param ds DeviceProxy
*/
CommandPanel(DeviceProxy ds,ConsolePanel console,CommonPanel common) throws DevFailed {
setLayout(null);
this.console = console;
this.common = common;
this.device = ds;
cmdList = getCommandList();
DefaultListModel ml = new DefaultListModel();
for (int i = 0; i < cmdList.length; i++)
ml.add(i, cmdList[i].cmd_name);
commandList = new JList(ml);
commandList.addListSelectionListener(this);
commandList.addMouseListener(this);
DragSource dragSource = DragSource.getDefaultDragSource();
dragSource.createDefaultDragGestureRecognizer(commandList,
DnDConstants.ACTION_MOVE,
this);
commandView = new JScrollPane(commandList);
add(commandView);
arginLabel = new JLabel("Argin value");
arginLabel.setFont(ATKConstant.labelFont);
add(arginLabel);
descrLabel = new JLabel();
descrLabel.setFont(ATKConstant.labelFont);
descrLabel.setHorizontalAlignment(JLabel.RIGHT);
add(descrLabel);
arginCombo = new JComboBox();
arginCombo.setEditable(true);
arginCombo.setFont(ATKConstant.labelFont);
add(arginCombo);
arginTypeLabel = new JLabel("Argin Type");
arginTypeLabel.setFont(ATKConstant.labelFont);
add(arginTypeLabel);
arginTypeText = new JTextField();
arginTypeText.setMargin(JiveUtils.noMargin);
arginTypeText.setEditable(false);
add(arginTypeText);
argDescrBtn = new JButton("Show description");
argDescrBtn.setFont(ATKConstant.labelFont);
argDescrBtn.addActionListener(this);
add(argDescrBtn);
argoutTypeLabel = new JLabel("Argout Type");
argoutTypeLabel.setFont(ATKConstant.labelFont);
add(argoutTypeLabel);
argoutTypeText = new JTextField();
argoutTypeText.setMargin(JiveUtils.noMargin);
argoutTypeText.setEditable(false);
add(argoutTypeText);
argDescrBtn = new JButton("Show description");
argDescrBtn.setFont(ATKConstant.labelFont);
argDescrBtn.addActionListener(this);
add(argDescrBtn);
executeBtn = new JButton("Execute");
executeBtn.setFont(ATKConstant.labelFont);
add(executeBtn);
executeBtn.addActionListener(this);
plotBtn = new JButton("Plot");
plotBtn.setFont(ATKConstant.labelFont);
add(plotBtn);
plotBtn.addActionListener(this);
addComponentListener(new ComponentListener() {
public void componentHidden(ComponentEvent e) {}
public void componentMoved(ComponentEvent e) {}
public void componentResized(ComponentEvent e) {
placeComponents(getSize());
}
public void componentShown(ComponentEvent e) {
placeComponents(getSize());
}
});
// Default
commandList.setSelectedIndex(0);
// Popup menu
copyMenu = new JPopupMenu();
copyCommandMenuItem = new JMenuItem("Copy command");
copyCommandMenuItem.addActionListener(this);
copyMenu.add(copyCommandMenuItem);
copyDevCommandMenuItem = new JMenuItem("Copy device->command");
copyDevCommandMenuItem.addActionListener(this);
copyMenu.add(copyDevCommandMenuItem);
}
// -----------------------------------------------------
public void valueChanged(ListSelectionEvent e) {
int idx = commandList.getSelectedIndex();
if(!e.getValueIsAdjusting()) {
arginCombo.setEnabled(cmdList[idx].in_type!=Tango_DEV_VOID);
descrLabel.setText(getExample(cmdList[idx].in_type));
arginTypeText.setText(Tango_CmdArgTypeName[cmdList[idx].in_type]);
argoutTypeText.setText(Tango_CmdArgTypeName[cmdList[idx].out_type]);
if( argDescriptionDlg!=null ) {
arginDescrText.setText("Argin description:\n"+cmdList[idx].in_type_desc);
arginDescrText.setCaretPosition(0);
argoutDescrText.setText("Argout description:\n"+cmdList[idx].out_type_desc);
argoutDescrText.setCaretPosition(0);
arginDescrView.revalidate();
argoutDescrView.revalidate();
}
plotBtn.setEnabled(isPlotable(cmdList[idx].out_type));
}
}
// -----------------------------------------------------
public void mouseClicked(MouseEvent e) {
Object src = e.getSource();
if(src==commandList) {
if(e.getButton() == MouseEvent.BUTTON1 && e.getClickCount()==2) {
if(JOptionPane.showConfirmDialog(this,"Do you want to execute "
+ cmdList[commandList.getSelectedIndex()].cmd_name + "?","Confirmation",
JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION)
executeCommand();
}
if(e.getButton() == MouseEvent.BUTTON3) {
copyMenu.show(commandList, e.getX() , e.getY());
}
}
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
// -----------------------------------------------------
public void dragGestureRecognized(DragGestureEvent dragGestureEvent) {
dragGestureEvent.startDrag(DragSource.DefaultMoveDrop,new TransferableString(getCopyString(false)),this);
}
public void dragDropEnd(DragSourceDropEvent dragSourceDropEvent) {
}
public void dragEnter(DragSourceDragEvent dragSourceDragEvent) {
DragSourceContext context = dragSourceDragEvent.getDragSourceContext();
context.setCursor(DragSource.DefaultMoveDrop);
}
public void dragExit(DragSourceEvent dragSourceEvent) {
}
public void dragOver(DragSourceDragEvent dragSourceDragEvent) {
}
public void dropActionChanged(DragSourceDragEvent dragSourceDragEvent) {
}
// -----------------------------------------------------
public void actionPerformed(ActionEvent e) {
Object src = e.getSource();
if(src == executeBtn) {
executeCommand();
} else if(src == plotBtn) {
plotCommand();
} else if(src == argDescrBtn) {
showDescription();
} else if(src==copyCommandMenuItem) {
copyCommandToClipboard(true);
} else if(src==copyDevCommandMenuItem) {
copyCommandToClipboard(false);
}
}
public void lostOwnership(java.awt.datatransfer.Clipboard clipboard, Transferable contents) {
}
public Dimension getPreferredSize() {
return getMinimunSize();
}
public Dimension getMinimunSize() {
return new Dimension(470,210);
}
// -----------------------------------------------------
// Private stuff
// -----------------------------------------------------
private String getCopyString(boolean copyCmdOnly) {
String copyStr = "";
CommandInfo ci = cmdList[commandList.getSelectedIndex()];
if( copyCmdOnly ) {
copyStr = ci.cmd_name;
} else {
copyStr = device.get_name() + "->" + ci.cmd_name;
}
if( arginCombo.isEnabled() ) {
String arginStr = (String)arginCombo.getEditor().getItem();
if(arginStr!=null && arginStr.length()>0) {
addArgin(arginStr);
copyStr += "(" + arginStr + ")";
}
}
return copyStr;
}
private void copyCommandToClipboard(boolean copyCmdOnly) {
StringSelection stringSelection = new StringSelection(getCopyString(copyCmdOnly));
java.awt.datatransfer.Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents( stringSelection, this );
}
private CommandInfo[] getCommandList() throws DevFailed {
int i,j;
boolean end;
CommandInfo tmp;
CommandInfo[] lst = device.command_list_query();
//Sort the list
end = false;
j=lst.length-1;
while(!end) {
end = true;
for(i=0;i0) {
end = false;
tmp = lst[i];
lst[i] = lst[i+1];
lst[i+1] = tmp;
}
}
j--;
}
return lst;
}
private boolean isPlotable(int outType) {
switch(outType) {
case Tango_DEVVAR_CHARARRAY:
case Tango_DEVVAR_USHORTARRAY:
case Tango_DEVVAR_SHORTARRAY:
case Tango_DEVVAR_ULONGARRAY:
case Tango_DEVVAR_LONGARRAY:
case Tango_DEVVAR_FLOATARRAY:
case Tango_DEVVAR_DOUBLEARRAY:
return true;
}
return false;
}
private void placeComponents(Dimension dim) {
arginLabel.setBounds(10,0,80,20);
descrLabel.setBounds(90,0,dim.width-100,20);
arginCombo.setBounds(10,20,dim.width-20,25);
commandView.setBounds(10,50,190,dim.height-60);
commandView.revalidate();
int dim2 = (dim.width - 220) / 2;
arginTypeLabel.setBounds(205,50,dim2,20);
arginTypeText.setBounds(205,70,dim2,25);
argoutTypeLabel.setBounds(210+dim2,50,dim2,20);
argoutTypeText.setBounds(210+dim2,70,dim2,25);
int btnWidth = 200;
int org = (dim.width - 220 - btnWidth)/2;
argDescrBtn.setBounds(205+org,dim.height-105,btnWidth,25);
executeBtn.setBounds(205+org,dim.height-70,btnWidth,25);
plotBtn.setBounds(205+org,dim.height-35,btnWidth,25);
}
private void addArgin(String text) {
// Add the input string if not already done
boolean found = false;
int i = 0;
while(icommon.getAnswerLimitMax()) {
retStr.append("Array cannot be fully displayed. (You may change the AnswerLimitMax)\n");
return common.getAnswerLimitMax();
} else {
return length;
}
}
private int getLimitMin(StringBuffer retStr,int length) {
if(length<=common.getAnswerLimitMin()) {
retStr.append("Array cannot be displayed. (You may change the AnswerLimitMin)\n");
return length;
} else {
return common.getAnswerLimitMin();
}
}
private int getLimitMaxForPlot(int length) {
if(length>common.getAnswerLimitMax()) {
return common.getAnswerLimitMax();
} else {
return length;
}
}
private int getLimitMinForPlot(int length) {
if(length<=common.getAnswerLimitMin()) {
return length;
} else {
return common.getAnswerLimitMin();
}
}
private void insertData(String argin,DeviceData send,int outType) throws NumberFormatException {
if(outType==Tango_DEV_VOID) return;
ArgParser arg = new ArgParser(argin);
switch (outType) {
case Tango_DEV_BOOLEAN:
send.insert(arg.parse_boolean());
break;
case Tango_DEV_USHORT:
send.insert_us(arg.parse_ushort());
break;
case Tango_DEV_SHORT:
send.insert(arg.parse_short());
break;
case Tango_DEV_ULONG:
send.insert_ul(arg.parse_ulong());
break;
case Tango_DEV_LONG:
send.insert(arg.parse_long());
break;
case Tango_DEV_LONG64:
send.insert(arg.parse_long64());
break;
case Tango_DEV_ULONG64:
send.insert_u64(arg.parse_long64());
break;
case Tango_DEV_FLOAT:
send.insert(arg.parse_float());
break;
case Tango_DEV_DOUBLE:
send.insert(arg.parse_double());
break;
case Tango_DEV_STRING:
send.insert(arg.parse_string());
break;
case Tango_DEVVAR_CHARARRAY:
send.insert(arg.parse_char_array());
break;
case Tango_DEVVAR_USHORTARRAY:
send.insert_us(arg.parse_ushort_array());
break;
case Tango_DEVVAR_SHORTARRAY:
send.insert(arg.parse_short_array());
break;
case Tango_DEVVAR_ULONGARRAY:
send.insert_ul(arg.parse_ulong_array());
break;
case Tango_DEVVAR_LONGARRAY:
send.insert(arg.parse_long_array());
break;
case Tango_DEVVAR_LONG64ARRAY:
send.insert(arg.parse_long64_array());
break;
case Tango_DEVVAR_ULONG64ARRAY:
send.insert_u64(arg.parse_long64_array());
break;
case Tango_DEVVAR_FLOATARRAY:
send.insert(arg.parse_float_array());
break;
case Tango_DEVVAR_DOUBLEARRAY:
send.insert(arg.parse_double_array());
break;
case Tango_DEVVAR_STRINGARRAY:
send.insert(arg.parse_string_array());
break;
case Tango_DEVVAR_LONGSTRINGARRAY:
send.insert(new DevVarLongStringArray(arg.parse_long_array(),arg.parse_string_array()));
break;
case Tango_DEVVAR_DOUBLESTRINGARRAY:
send.insert(new DevVarDoubleStringArray(arg.parse_double_array(),arg.parse_string_array()));
break;
case Tango_DEV_STATE:
send.insert(DevState.from_int(arg.parse_ushort()));
break;
default:
throw new NumberFormatException("Command type not supported code=" + outType);
}
}
private String extractData(DeviceData data,int outType) {
StringBuffer ret_string = new StringBuffer();
switch (outType) {
case Tango_DEV_VOID:
break;
case Tango_DEV_BOOLEAN:
ret_string.append(Boolean.toString(data.extractBoolean()));
ret_string.append("\n");
break;
case Tango_DEV_USHORT:
ret_string.append(Integer.toString(data.extractUShort()));
ret_string.append("\n");
break;
case Tango_DEV_SHORT:
ret_string.append(Short.toString(data.extractShort()));
ret_string.append("\n");
break;
case Tango_DEV_ULONG:
ret_string.append(Long.toString(data.extractULong()));
ret_string.append("\n");
break;
case Tango_DEV_ULONG64:
ret_string.append(Long.toString(data.extractULong64()));
ret_string.append("\n");
break;
case Tango_DEV_LONG:
ret_string.append(Integer.toString(data.extractLong()));
ret_string.append("\n");
break;
case Tango_DEV_LONG64:
ret_string.append(Long.toString(data.extractLong64()));
ret_string.append("\n");
break;
case Tango_DEV_FLOAT:
ret_string.append(Float.toString(data.extractFloat()));
ret_string.append("\n");
break;
case Tango_DEV_DOUBLE:
ret_string.append(Double.toString(data.extractDouble()));
ret_string.append("\n");
break;
case Tango_CONST_DEV_STRING:
case Tango_DEV_STRING:
ret_string.append(data.extractString());
ret_string.append("\n");
break;
case Tango_DEVVAR_CHARARRAY:
{
byte[] dummy = data.extractByteArray();
int start = getLimitMin(ret_string,dummy.length);
int end = getLimitMax(ret_string,dummy.length);
for (int i = start; i < end; i++) {
ret_string.append("[" + i + "]\t " + Integer.toString(dummy[i]));
if (dummy[i] >= 32)
ret_string.append(" '" + (new Character((char) dummy[i]).toString()) + "'");
else
ret_string.append(" '.'");
ret_string.append("\n");
}
}
break;
case Tango_DEVVAR_USHORTARRAY:
{
int[] dummy = data.extractUShortArray();
int start = getLimitMin(ret_string,dummy.length);
int end = getLimitMax(ret_string,dummy.length);
for (int i = start; i < end; i++)
ret_string.append("[" + i + "]\t " + Integer.toString(dummy[i]) + "\n");
}
break;
case Tango_DEVVAR_SHORTARRAY:
{
short[] dummy = data.extractShortArray();
int start = getLimitMin(ret_string,dummy.length);
int end = getLimitMax(ret_string,dummy.length);
for (int i = start; i < end; i++)
ret_string.append("[" + i + "]\t " + Short.toString(dummy[i]) + "\n");
}
break;
case Tango_DEVVAR_ULONGARRAY:
{
long[] dummy = data.extractULongArray();
int start = getLimitMin(ret_string,dummy.length);
int end = getLimitMax(ret_string,dummy.length);
for (int i = start; i < end; i++)
ret_string.append("[" + i + "]\t " + Long.toString(dummy[i]) + "\n");
}
break;
case Tango_DEVVAR_ULONG64ARRAY:
{
long[] dummy = data.extractULong64Array();
int start = getLimitMin(ret_string,dummy.length);
int end = getLimitMax(ret_string,dummy.length);
for (int i = start; i < end; i++)
ret_string.append("[" + i + "]\t " + Long.toString(dummy[i]) + "\n");
}
break;
case Tango_DEVVAR_LONGARRAY:
{
int[] dummy = data.extractLongArray();
int start = getLimitMin(ret_string,dummy.length);
int end = getLimitMax(ret_string,dummy.length);
for (int i = start; i < end; i++)
ret_string.append("[" + i + "]\t " + Integer.toString(dummy[i]) + "\n");
}
break;
case Tango_DEVVAR_LONG64ARRAY:
{
long[] dummy = data.extractULong64Array();
int start = getLimitMin(ret_string,dummy.length);
int end = getLimitMax(ret_string,dummy.length);
for (int i = start; i < end; i++)
ret_string.append("[" + i + "]\t " + Long.toString(dummy[i]) + "\n");
}
break;
case Tango_DEVVAR_FLOATARRAY:
{
float[] dummy = data.extractFloatArray();
int start = getLimitMin(ret_string,dummy.length);
int end = getLimitMax(ret_string,dummy.length);
for (int i = start; i < end; i++)
ret_string.append("[" + i + "]\t " + Float.toString(dummy[i]) + "\n");
}
break;
case Tango_DEVVAR_DOUBLEARRAY:
{
double[] dummy = data.extractDoubleArray();
int start = getLimitMin(ret_string,dummy.length);
int end = getLimitMax(ret_string,dummy.length);
for (int i = start; i < end; i++)
ret_string.append("[" + i + "]\t" + Double.toString(dummy[i]) + "\n");
}
break;
case Tango_DEVVAR_STRINGARRAY:
{
String[] dummy = data.extractStringArray();
int start = getLimitMin(ret_string,dummy.length);
int end = getLimitMax(ret_string,dummy.length);
for (int i = start; i < end; i++)
ret_string.append("[" + i + "]\t " + dummy[i] + "\n");
}
break;
case Tango_DEVVAR_LONGSTRINGARRAY:
{
DevVarLongStringArray dummy = data.extractLongStringArray();
int start = getLimitMin(ret_string,dummy.lvalue.length);
int end = getLimitMax(ret_string,dummy.lvalue.length);
ret_string.append("lvalue:\n");
for (int i = start; i < end; i++)
ret_string.append("[" + i + "]\t " + Integer.toString(dummy.lvalue[i]) + "\n");
start = getLimitMin(ret_string,dummy.svalue.length);
end = getLimitMax(ret_string,dummy.svalue.length);
ret_string.append("svalue:\n");
for (int i = start; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy