diff --git a/src/main/java/jaist/css/covis/cls/Anchor.java b/src/main/java/jaist/css/covis/cls/Anchor.java index eb0579d..12f9138 100644 --- a/src/main/java/jaist/css/covis/cls/Anchor.java +++ b/src/main/java/jaist/css/covis/cls/Anchor.java @@ -1,9 +1,5 @@ package jaist.css.covis.cls; -import jaist.css.covis.CoVisBuffer; -import jaist.css.covis.PPPath; -import jaist.css.covis.ToolTipProvider; - import java.awt.BasicStroke; import java.awt.Color; @@ -13,11 +9,16 @@ import org.piccolo2d.util.PBounds; import org.piccolo2d.util.PDimension; +import jaist.css.covis.CoVisBuffer; +import jaist.css.covis.PPPath; +import jaist.css.covis.ToolTipProvider; + class AnchorTab extends PPPath implements Move, ToolTipProvider { private static final long serialVersionUID = 3651392444867276102L; Anchor anchor; PNode tooltip; - public AnchorTab(Anchor a){ + + public AnchorTab(Anchor a) { anchor = a; setPathToEllipse(-20, -20, 20, 20); setPaint(Color.orange); @@ -25,13 +26,15 @@ setStroke(new BasicStroke(1)); setAnchorEnabled(false); } - public void move(PDimension d){ - translate(d.getWidth(), d.getHeight()); //履歴に関係ない動作 + + public void move(PDimension d) { + translate(d.getWidth(), d.getHeight()); // 履歴に関係ない動作 } - // public String referenceVarNames(){ - // return anchor.srcVariable.getVarName(); - // } - public PNode getToolTipNode(){ + + // public String referenceVarNames(){ + // return anchor.srcVariable.getVarName(); + // } + public PNode getToolTipNode() { tooltip = null; if (tooltip == null) { PText pt = new PText(anchor.srcVariable.getVarName()); @@ -40,12 +43,13 @@ } return tooltip; } - public void setAnchorEnabled(boolean active){ - if (active){ + + public void setAnchorEnabled(boolean active) { + if (active) { addAttribute("moveTarget", this); addAttribute("tooltip", this); } else { - if (anchor.srcVariable.object != null){ + if (anchor.srcVariable.object != null) { addAttribute("moveTarget", anchor.srcVariable.object); addAttribute("tooltip", anchor.srcVariable.object); } else { @@ -58,7 +62,7 @@ public class Anchor extends PPPath implements Runnable, DragNotice { private static final long serialVersionUID = -8491055463977967303L; - // Variable var; + // Variable var; public Covis_Object destObject; public Covis_Object lastDestObject; AnchorTab anchortab; @@ -72,37 +76,39 @@ long toFront_ts; int aryIndex = -1; - // public PNode src; // Variable or Covis_Array + // public PNode src; // Variable or Covis_Array public Variable srcVariable; // Variable or Covis_Array - public boolean lastDetach = false; //最後にアタッチされていたオブジェクト(はずして,すぐに同じおぶじぇくとにつけるのは禁止) - public Anchor(Class t, Variable _src, int aI){ - this(t,_src); + public boolean lastDetach = false; // 最後にアタッチされていたオブジェクト(はずして,すぐに同じおぶじぇくとにつけるのは禁止) + + public Anchor(Class t, Variable _src, int aI) { + this(t, _src); aryIndex = aI; } - public Anchor(Class t, Variable _src){ + + public Anchor(Class t, Variable _src) { type = t; srcVariable = _src; aryIndex = -1; setPathToEllipse(-20, -20, 20, 20); - // setPaint(Color.orange); - // setStrokePaint(Color.orange.darker()); - // setStroke(new BasicStroke(1)); + // setPaint(Color.orange); + // setStrokePaint(Color.orange.darker()); + // setStroke(new BasicStroke(1)); setPaint(null); setStrokePaint(null); - // co.setScale(0.3f); - // addChild(cv_class); - // layout(0); + // co.setScale(0.3f); + // addChild(cv_class); + // layout(0); - // addAttribute("moveTargetY", this); - addAttribute("info", "Anchor "+this.toString()); - // addAttribute("selectable", this); - // addAttribute("moveTarget", this); - // addAttribute("dragLayout", this); + // addAttribute("moveTargetY", this); + addAttribute("info", "Anchor " + this.toString()); + // addAttribute("selectable", this); + // addAttribute("moveTarget", this); + // addAttribute("dragLayout", this); anchortab = new AnchorTab(this); - link = new RefLink(this,anchortab,this); + link = new RefLink(this, anchortab, this); addChild(link); anchortab.addAttribute("moveLink", link); addAttribute("moveLink", link); @@ -114,16 +120,18 @@ rewindThread = new Thread(this); rewindThread.start(); } - public void start_RewindThread(){ - if (rewindThread == null){ + + public void start_RewindThread() { + if (rewindThread == null) { rewindThread = new Thread(this); rewindThread.start(); - // System.out.println("Start thread"); + // System.out.println("Start thread"); } } + // インカミングリンクが入ったら,trueになる>アンカータブが動くようになる. - public void setAnchorEnabled(boolean active){ - if (active){ + public void setAnchorEnabled(boolean active) { + if (active) { anchortab.addAttribute("moveTarget", this.anchortab); anchortab.addAttribute("tooltip", this.anchortab); } else { @@ -132,23 +140,19 @@ } } - public void run() { int count = 0; - while(count < 10){ + while (count < 10) { if (!isOperating) { PDimension d = link.diff(); anchortab.translate(d.getWidth(), d.getHeight()); link.update(); repaint(); - double size = d.getHeight()*d.getWidth(); - if (size < 0.00000001) count++; - // preSize = size; - // count++; + double minmove = Math.min(d.getHeight(), d.getWidth()); + if (minmove < 0.1) count++; } - // System.out.print("."); try { - Thread.sleep(100); + Thread.sleep((destObject == null) ? 80 : 10); } catch (InterruptedException e) { e.printStackTrace(); } @@ -170,18 +174,20 @@ toFront(System.currentTimeMillis()); PBounds pb = anchortab.getGlobalBounds(); var collection = buffer.objField.getAllNodes(); - for(var co: collection){ - if (!(co instanceof Covis_Object)) continue; - PNode pco = (PNode)co; + for (var co : collection) { + if (!(co instanceof Covis_Object)) + continue; + PNode pco = (PNode) co; PBounds cob = pco.getGlobalBounds(); - if (cob.contains(pb) || pb.intersects(cob)){ + if (cob.contains(pb) || pb.intersects(cob)) { Covis_Object candidate = (Covis_Object) co; // type が candidate のスーパークラス(type hoge = candidateができる)ならtrue - // System.out.println("type "+type.toString()); - // System.out.println("can "+candidate.type.toString()); + // System.out.println("type "+type.toString()); + // System.out.println("can "+candidate.type.toString()); // if (candidate instanceof type) - if (type.isAssignableFrom(candidate.type)){ - // if (candidate.getClsName().equals(var.cv_class.getClsName())){ //TODO:本当はサブクラスチェック + if (type.isAssignableFrom(candidate.type)) { + // if (candidate.getClsName().equals(var.cv_class.getClsName())){ + // //TODO:本当はサブクラスチェック destObject = candidate; anchortab.setPaint(Color.red); isAnyOverlap = true; @@ -191,10 +197,12 @@ } } if (!isAnyOverlap) { - if (isTypeMatch && srcVariable.isEnabled()) anchortab.setPaint(Color.orange); else { + if (isTypeMatch && srcVariable.isEnabled()) + anchortab.setPaint(Color.orange); + else { anchortab.setPaint(Color.gray); } - if (destObject != null){ + if (destObject != null) { destObject.detach(this); lastDetach = true; destObject = null; @@ -203,18 +211,19 @@ } public void endDrag(PInputEvent e, CoVisBuffer buffer) { - if (anchortab.getPaint() == Color.gray) Informer.playSound("RecEnd.wav"); + if (anchortab.getPaint() == Color.gray) + Informer.playSound("RecEnd.wav"); anchortab.setPaint(Color.orange); start_RewindThread(); if (!srcVariable.isEnabled()) { return; } - if (destObject != null){ + if (destObject != null) { destObject.attach(this); } else { if (lastDetach) { - if (lastDestObject != null){ + if (lastDestObject != null) { buffer.putHistoryUnLink("unlink", this); lastDestObject = null; } @@ -222,76 +231,83 @@ } } } - public void setVarName(String s){ + + public void setVarName(String s) { varName = getVarName(); anchortab.tooltip = null; if (destObject != null) { destObject.tooltip = null; - if (destObject instanceof Covis_Array){ - Covis_Array ca = ((Covis_Array)destObject); - for(Anchor a: ca.anchors_member){ + if (destObject instanceof Covis_Array) { + Covis_Array ca = ((Covis_Array) destObject); + for (Anchor a : ca.anchors_member) { a.anchortab.tooltip = null; - if (a.destObject != null) a.destObject.tooltip = null; + if (a.destObject != null) + a.destObject.tooltip = null; } } } } - //TODO: + // TODO: - public Class getVarClass(){ + public Class getVarClass() { return srcVariable.type; - // if (src instanceof Variable) return ((Variable)src).type; - // else if (src instanceof Covis_Array) return ((Covis_Array)src).type.getComponentType(); - // else return null; + // if (src instanceof Variable) return ((Variable)src).type; + // else if (src instanceof Covis_Array) return + // ((Covis_Array)src).type.getComponentType(); + // else return null; } - //TODO: + // TODO: - public String getVarName(){ + public String getVarName() { return srcVariable.getBaseVarName(); - // if (src instanceof Variable) return ((Variable)src).varname; - // else if (src instanceof Covis_Array) { - // // System.out.println("yes, covis_array"); - // Covis_Array ca = ((Covis_Array)src); - // if (ca.referenceVarNames() != null){ - // String[] o = ca.referenceVarNames().split("\n"); - // StringBuffer sb = new StringBuffer(); - // for(String s:o){ - // sb.append(s+"["+aryIndex+"]\n"); - // } - // return sb.toString().substring(0, sb.length()-1); - // } - // } - // System.out.println("Anchor.getVarNameがnullを返しました"); - // return null; + // if (src instanceof Variable) return ((Variable)src).varname; + // else if (src instanceof Covis_Array) { + // // System.out.println("yes, covis_array"); + // Covis_Array ca = ((Covis_Array)src); + // if (ca.referenceVarNames() != null){ + // String[] o = ca.referenceVarNames().split("\n"); + // StringBuffer sb = new StringBuffer(); + // for(String s:o){ + // sb.append(s+"["+aryIndex+"]\n"); + // } + // return sb.toString().substring(0, sb.length()-1); + // } + // } + // System.out.println("Anchor.getVarNameがnullを返しました"); + // return null; } - public Variable getSrcVariable(){ + + public Variable getSrcVariable() { return srcVariable; } public void toFront(long ts) { - if (toFront_ts == ts) return; + if (toFront_ts == ts) + return; toFront_ts = ts; PNode parent = getParent(); - if (parent != null){ - // removeFromParent(); + if (parent != null) { + // removeFromParent(); parent.addChild(this); - if (parent instanceof ToFront) ((ToFront)parent).toFront(ts); - if (parent.getAttribute("toFront")!=null){ - ((ToFront)parent.getAttribute("toFront")).toFront(ts); + if (parent instanceof ToFront) + ((ToFront) parent).toFront(ts); + if (parent.getAttribute("toFront") != null) { + ((ToFront) parent.getAttribute("toFront")).toFront(ts); } } } - //TODO: - public String getClsName(){ + + // TODO: + public String getClsName() { return srcVariable.getTypeName(); - // if (src instanceof Covis_Array){ - // return ((Covis_Array)src).elementObj.getClsName(); - // } else if (src instanceof Covis_Object){ - // return ((Covis_Object)src).getClsName(); - // } else if (src instanceof Variable){ - // return ((Variable)src).getTypeName(); - // } - // return "error_in_Anchor_getClsName()"; + // if (src instanceof Covis_Array){ + // return ((Covis_Array)src).elementObj.getClsName(); + // } else if (src instanceof Covis_Object){ + // return ((Covis_Object)src).getClsName(); + // } else if (src instanceof Variable){ + // return ((Variable)src).getTypeName(); + // } + // return "error_in_Anchor_getClsName()"; } } diff --git a/src/main/java/jaist/css/covis/cls/Covis_Object.java b/src/main/java/jaist/css/covis/cls/Covis_Object.java index 569ca38..04080d5 100644 --- a/src/main/java/jaist/css/covis/cls/Covis_Object.java +++ b/src/main/java/jaist/css/covis/cls/Covis_Object.java @@ -1,10 +1,5 @@ package jaist.css.covis.cls; -import java.lang.Double; -import jaist.css.covis.CoVisBuffer; -import jaist.css.covis.ToolTipProvider; -import jaist.css.covis.hist.CVHist_New; - import java.awt.BasicStroke; import java.awt.Color; import java.awt.geom.Point2D; @@ -23,6 +18,10 @@ import org.piccolo2d.nodes.PText; import org.piccolo2d.util.PDimension; +import jaist.css.covis.CoVisBuffer; +import jaist.css.covis.ToolTipProvider; +import jaist.css.covis.hist.CVHist_New; + public class Covis_Object extends Covis_Type implements ToolTipProvider, ToFront, Move { public static BasicStroke basicStroke = new BasicStroke(3f,BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 90.0f); public static BasicStroke dottedStroke = new BasicStroke(3f,BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER, 90.0f, new float[]{5,10},0); @@ -249,8 +248,9 @@ TreeMap map = new TreeMap(); for(Anchor p: anchors_incoming) { double y = p.getGlobalTranslation().getY(); - while(map.get(y)!=null) y+=0.01; - map.put((int)y, p); + int iy = Integer.valueOf((int)Math.floor(y)); + // while(map.get(y)!=null) y+=0.01; + map.put(iy, p); } int yy = 0; for(Anchor a: map.values()){ diff --git a/src/main/java/jaist/css/covis/cls/RefLink.java b/src/main/java/jaist/css/covis/cls/RefLink.java index c527950..aa2eb3e 100644 --- a/src/main/java/jaist/css/covis/cls/RefLink.java +++ b/src/main/java/jaist/css/covis/cls/RefLink.java @@ -1,8 +1,5 @@ package jaist.css.covis.cls; -import jaist.css.covis.PPPath; -import jaist.css.covis.fm.FlowMenu_TMRG; - import java.awt.Color; import java.awt.geom.Line2D; import java.awt.geom.Point2D; @@ -11,6 +8,9 @@ import org.piccolo2d.event.PInputEvent; import org.piccolo2d.util.PDimension; +import jaist.css.covis.PPPath; +import jaist.css.covis.fm.FlowMenu_TMRG; + /** * アンカータブと変数などとをつなぐ「線」 * @author miuramo @@ -52,7 +52,7 @@ dx-=10; dy-=10 + dest.attachPointOffset(anchor); return new PDimension(-dx,-dy); } else { - return new PDimension(-dx*3/5,-dy*3/5); + return new PDimension(-dx*2/5,-dy*2/5); // 接続が切れた(nullになった) } }