package jaist.css.covis.mi; import jaist.css.covis.JLabelW; import jaist.css.covis.JLabelWL; import jaist.css.covis.cls.Covis_Object; import jaist.css.covis.cls.Covis_String; import jaist.css.covis.cls.Variable; import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.lang.reflect.InvocationTargetException; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import org.piccolo2d.activities.PActivity; public class MethodInvocationDialog extends JDialog implements KeyListener { private static final long serialVersionUID = 1852035735398130391L; JFrame parent; JTextField jtfa, jtfb; JButton ok; WrapMethod wm; Variable var; public MethodInvocationDialog(JFrame p, String title, WrapMethod _wm, String mes1, Variable v) { super(p, title, true); parent = p; wm = _wm; var = v; // final JComboBox[] jcb = new JComboBox[wm.paramClses.length]; final InputField[] jcb = new InputField[wm.paramClses.length]; for(int i=0;i<wm.paramClses.length;i++){ System.out.println(wm.paramClses[i].toString()); if (wm.paramClses[i].toString().equals("int")){ jcb[i] = new InputField_int(i+1); } else if (wm.paramClses[i].toString().equals("class java.lang.String")){ jcb[i] = new InputField_String(""); } else { jcb[i] = new InputField_Reference(wm.candidates.get(wm.paramClses[i])); } ((Component)jcb[i]).addKeyListener(this); } getContentPane().setLayout(new BorderLayout()); getContentPane().add(new JLabelW(mes1), BorderLayout.NORTH); JPanel inner = new JPanel(); // inner.setLayout(new GridLayout(2,wm.paramClses.length*2+1)); // inner.add(new JLabel()); // for(int i=0;i<wm.paramClses.length;i++){ // inner.add(new JLabelW(wm.paramClses[i].toString().replaceAll("jaist\\.css\\.covis\\.cls\\.Covis\\_", "").replaceAll("class", ""))); // inner.add(new JLabel()); // } inner.add(new JLabelW(Variable.getShortestName(var.getVarNamesAry())+"."+wm.method.getName().replace("covis_", "")+"(")); for(int i=0;i<wm.paramClses.length;i++){ inner.add((Component) jcb[i]); if (i < wm.paramClses.length-1) inner.add(new JLabelW(",")); else inner.add(new JLabelWL(")")); } getContentPane().add(inner, BorderLayout.CENTER); ok = new JButton("ok"); getContentPane().add(ok, BorderLayout.SOUTH); pack(); setLocation(p.getLocation().x + (p.getWidth()-this.getWidth())/2, p.getLocation().y +(p.getHeight()-this.getHeight())/2); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Object[] args = new Object[wm.paramClses.length]; for(int i=0;i<wm.paramClses.length;i++){ args[i] = jcb[i].getSelectedItemObject(); if (args[i]==null){ args[i] = Integer.parseInt(jcb[i].getSelectedItemString()); } // System.out.println(i+" "+args[i]); } //メソッドコールを文字列に StringBuffer sb = new StringBuffer(); sb.append(Variable.getShortestName(var.getVarNamesAry())+"."+wm.method.getName().replace("covis_", "")+"("); for(int i=0;i<wm.paramClses.length;i++){ sb.append(jcb[i].getSelectedItemString()+","); } invokeMethod(args, sb.toString().substring(0, sb.length()-1)+");"); setVisible(false); } }); // jtfb.addKeyListener(new KeyAdapter() { // public void keyPressed(KeyEvent e) { // if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { // jtfb = null; // dispose(); // } // } // }); } public void invokeMethod(Object[] args, String methodcall) { Object retValObject = null; try { // if (args != null) for(int i=0;i<args.length;i++) System.out.println(args[i]); retValObject = wm.method.invoke(wm.variable.anchor.destObject, args); } catch (IllegalArgumentException e1) { e1.printStackTrace(); } catch (IllegalAccessException e1) { e1.printStackTrace(); } catch (InvocationTargetException e1) { e1.printStackTrace(); } if (retValObject instanceof Covis_Object){ Covis_Object coob = (Covis_Object)retValObject; if (coob.anchors_incoming.size()<1){ wm.obj.buffer.objField.addObject(coob); } if (coob instanceof Covis_String){ wm.obj.buffer.putHistoryMethodNew("new", coob, methodcall+"//> "+coob.toString()); } else { wm.obj.buffer.putHistoryMethodNew("new", coob, methodcall); }/* } else { if (coob instanceof Covis_BTree){ wm.obj.buffer.putHistoryMethodNew("new", coob, methodcall); } else { wm.obj.buffer.putHistoryMethod("method", coob, methodcall+"//> "+coob.toString(),true); } }*/ highlightReturnObject(coob); } else { if (retValObject != null){ wm.obj.buffer.putHistoryMethod("method", retValObject, methodcall+"//> "+retValObject.toString(), true); } else { // System.out.println(wm.method.getReturnType().toString()); if (wm.method.getReturnType().toString().equals("void"))//元々voidだから期待してない wm.obj.buffer.putHistoryMethod("method", retValObject, methodcall, true); else wm.obj.buffer.putHistoryMethod("method", retValObject, methodcall+"//> null", true); } } } private void highlightReturnObject(Covis_Object coob) { // PActivity z1 = coob.animateToZoom(2.0f,300); coob.setScale(2.0f); PActivity z2 = coob.animateToZoom(1.0f,300); PActivity p1 = coob.animateToTransparency(0f, 300); PActivity p2 = coob.animateToTransparency(1f, 300); PActivity p11 = coob.animateToTransparency(0f, 300); PActivity p12 = coob.animateToTransparency(1f, 300); PActivity p21 = coob.animateToTransparency(0f, 300); PActivity p22 = coob.animateToTransparency(1f, 300); PActivity p31 = coob.animateToTransparency(0f, 300); PActivity p32 = coob.animateToTransparency(1f, 300); p1.setStartTime(System.currentTimeMillis()); p2.startAfter(p1); p11.startAfter(p2); p12.startAfter(p11); p21.startAfter(p12); p22.startAfter(p21); p31.startAfter(p22); p32.startAfter(p31); z2.startAfter(p32); } @Override public void keyPressed(KeyEvent arg0) { if (arg0.getKeyCode() == KeyEvent.VK_ENTER){ ok.doClick(); } } @Override public void keyReleased(KeyEvent arg0) { } @Override public void keyTyped(KeyEvent arg0) { } public static void showDialog(JFrame parent, String title, WrapMethod _wm, String mes1, Variable v) { MethodInvocationDialog d = new MethodInvocationDialog(parent, title, _wm, mes1, v); d.setVisible(true); if (d.jtfa != null && d.jtfb != null){ // frac.a.setValue(d.jtfa.getText()); // frac.b.setValue(d.jtfb.getText()); } else return; } }