Newer
Older
AnchorGarden_M / src / main / java / jaist / css / covis / mi / MethodInvocationDialog.java
@motoki miura motoki miura on 21 Jun 2022 6 KB ppath error
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;
	}
}